feat(api-converter): 添加进销存采购订单API配置并实现本地缓存机制
新增api_config_9p04kww1pu.json配置文件,包含进销存采购订单相关的四个核心 API接口(查询列表、新建、详情、编辑),完善了load_api_configs函数, 增加本地文件缓存机制,支持从本地文件加载配置并在配置变更时同步保存, 优化refresh_api_configs函数以同步清理本地文件缓存。 BREAKING CHANGE: API配置方式调整,引入本地缓存机制可能影响原有部署流程
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,89 @@
|
||||
2026-01-28 09:58:33 - root - INFO - [logger_config.py:112] - 日志系统初始化完成 - 日志目录: E:\yh-ai\project\lzwcai-szyg\lzwcai-mcp-server-package\lzwcai_mcpskills_template\lzwcai_mcpskills_template\logs
|
||||
2026-01-28 09:58:33 - mcp.server.lowlevel.server - DEBUG - [server.py:154] - Initializing server 'mcpskills_template_server'
|
||||
2026-01-28 09:58:33 - mcp.server.lowlevel.server - DEBUG - [server.py:380] - Registering handler for ListToolsRequest
|
||||
2026-01-28 09:58:33 - mcp.server.lowlevel.server - DEBUG - [server.py:441] - Registering handler for CallToolRequest
|
||||
2026-01-28 09:58:33 - lzwcai_mcpskills_template.main - INFO - [main.py:304] - ==================================================
|
||||
2026-01-28 09:58:33 - lzwcai_mcpskills_template.main - INFO - [main.py:305] - MCP Skills Template Server 启动
|
||||
2026-01-28 09:58:33 - lzwcai_mcpskills_template.main - INFO - [main.py:306] - ==================================================
|
||||
2026-01-28 09:58:33 - lzwcai_mcpskills_template.main - INFO - [main.py:311] - 命令行参数: {'mode': 'local', 'json_path': None}
|
||||
2026-01-28 09:58:33 - lzwcai_mcpskills_template.main - INFO - [main.py:314] - 使用模式: local
|
||||
2026-01-28 09:58:33 - lzwcai_mcpskills_template.main - INFO - [main.py:82] - 从本地加载 7 条配置: E:\yh-ai\project\lzwcai-szyg\lzwcai-mcp-server-package\lzwcai_mcpskills_template\lzwcai_mcpskills_template\tools_config.json
|
||||
2026-01-28 09:58:33 - lzwcai_mcpskills_template.main - INFO - [main.py:136] - 已加载 7 个工具配置
|
||||
2026-01-28 09:58:33 - lzwcai_mcpskills_template.main - INFO - [main.py:321] - 开始运行 MCP Server (stdio 模式)
|
||||
2026-01-28 09:58:33 - asyncio - DEBUG - [proactor_events.py:634] - Using proactor: IocpProactor
|
||||
2026-01-28 09:58:33 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: root=InitializedNotification(method='notifications/initialized', params=None, jsonrpc='2.0')
|
||||
2026-01-28 09:58:34 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: <mcp.shared.session.RequestResponder object at 0x0000029E6B64BFE0>
|
||||
2026-01-28 09:58:34 - mcp.server.lowlevel.server - INFO - [server.py:619] - Processing request of type ListToolsRequest
|
||||
2026-01-28 09:58:34 - mcp.server.lowlevel.server - DEBUG - [server.py:621] - Dispatching request of type ListToolsRequest
|
||||
2026-01-28 09:58:34 - lzwcai_mcpskills_template.main - INFO - [main.py:142] - 收到 ListTools 请求,当前配置数量: 7
|
||||
2026-01-28 09:58:34 - lzwcai_mcpskills_template.main - INFO - [main.py:161] - ListTools 响应: 返回 7 个工具
|
||||
2026-01-28 09:58:34 - mcp.server.lowlevel.server - DEBUG - [server.py:662] - Response sent
|
||||
2026-01-28 09:58:36 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: <mcp.shared.session.RequestResponder object at 0x0000029E6B59CFE0>
|
||||
2026-01-28 09:58:36 - mcp.server.lowlevel.server - INFO - [server.py:619] - Processing request of type CallToolRequest
|
||||
2026-01-28 09:58:36 - mcp.server.lowlevel.server - DEBUG - [server.py:621] - Dispatching request of type CallToolRequest
|
||||
2026-01-28 09:58:36 - lzwcai_mcpskills_template.main - INFO - [main.py:171] - 收到 CallTool 请求: name=demo_mixed, arguments=None
|
||||
2026-01-28 09:58:36 - lzwcai_mcpskills_template.main - INFO - [main.py:187] - 工具执行成功: demo_mixed
|
||||
2026-01-28 09:58:36 - mcp.server.lowlevel.server - DEBUG - [server.py:662] - Response sent
|
||||
2026-01-28 09:58:55 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: <mcp.shared.session.RequestResponder object at 0x0000029E6B39D7C0>
|
||||
2026-01-28 09:58:55 - mcp.server.lowlevel.server - INFO - [server.py:619] - Processing request of type CallToolRequest
|
||||
2026-01-28 09:58:55 - mcp.server.lowlevel.server - DEBUG - [server.py:621] - Dispatching request of type CallToolRequest
|
||||
2026-01-28 09:58:55 - lzwcai_mcpskills_template.main - INFO - [main.py:171] - 收到 CallTool 请求: name=demo_error, arguments=None
|
||||
2026-01-28 09:58:55 - lzwcai_mcpskills_template.main - ERROR - [main.py:190] - 工具执行失败: 这是一个演示用的模拟错误!执行被中断。
|
||||
Traceback (most recent call last):
|
||||
File "E:\yh-ai\project\lzwcai-szyg\lzwcai-mcp-server-package\lzwcai_mcpskills_template\lzwcai_mcpskills_template\main.py", line 186, in handle_call_tool
|
||||
result_contents = execute_tool(name, arguments or {}, tool_config)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "E:\yh-ai\project\lzwcai-szyg\lzwcai-mcp-server-package\lzwcai_mcpskills_template\lzwcai_mcpskills_template\main.py", line 259, in execute_tool
|
||||
raise ValueError("这是一个演示用的模拟错误!执行被中断。")
|
||||
ValueError: 这是一个演示用的模拟错误!执行被中断。
|
||||
2026-01-28 09:58:55 - mcp.server.lowlevel.server - DEBUG - [server.py:662] - Response sent
|
||||
2026-01-28 09:59:01 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: <mcp.shared.session.RequestResponder object at 0x0000029E6B6164E0>
|
||||
2026-01-28 09:59:01 - mcp.server.lowlevel.server - INFO - [server.py:619] - Processing request of type CallToolRequest
|
||||
2026-01-28 09:59:01 - mcp.server.lowlevel.server - DEBUG - [server.py:621] - Dispatching request of type CallToolRequest
|
||||
2026-01-28 09:59:01 - lzwcai_mcpskills_template.main - INFO - [main.py:171] - 收到 CallTool 请求: name=demo_resource, arguments=None
|
||||
2026-01-28 09:59:01 - lzwcai_mcpskills_template.main - INFO - [main.py:187] - 工具执行成功: demo_resource
|
||||
2026-01-28 09:59:01 - mcp.server.lowlevel.server - DEBUG - [server.py:662] - Response sent
|
||||
2026-01-28 09:59:04 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: <mcp.shared.session.RequestResponder object at 0x0000029E6B64BF80>
|
||||
2026-01-28 09:59:04 - mcp.server.lowlevel.server - INFO - [server.py:619] - Processing request of type CallToolRequest
|
||||
2026-01-28 09:59:04 - mcp.server.lowlevel.server - DEBUG - [server.py:621] - Dispatching request of type CallToolRequest
|
||||
2026-01-28 09:59:04 - lzwcai_mcpskills_template.main - INFO - [main.py:171] - 收到 CallTool 请求: name=demo_image, arguments=None
|
||||
2026-01-28 09:59:04 - lzwcai_mcpskills_template.main - INFO - [main.py:187] - 工具执行成功: demo_image
|
||||
2026-01-28 09:59:04 - mcp.server.lowlevel.server - DEBUG - [server.py:662] - Response sent
|
||||
2026-01-28 09:59:09 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: <mcp.shared.session.RequestResponder object at 0x0000029E6B36DD90>
|
||||
2026-01-28 09:59:09 - mcp.server.lowlevel.server - INFO - [server.py:619] - Processing request of type CallToolRequest
|
||||
2026-01-28 09:59:09 - mcp.server.lowlevel.server - DEBUG - [server.py:621] - Dispatching request of type CallToolRequest
|
||||
2026-01-28 09:59:09 - lzwcai_mcpskills_template.main - INFO - [main.py:171] - 收到 CallTool 请求: name=demo_image, arguments=None
|
||||
2026-01-28 09:59:09 - lzwcai_mcpskills_template.main - INFO - [main.py:187] - 工具执行成功: demo_image
|
||||
2026-01-28 09:59:09 - mcp.server.lowlevel.server - DEBUG - [server.py:662] - Response sent
|
||||
2026-01-28 10:02:13 - root - INFO - [logger_config.py:112] - 日志系统初始化完成 - 日志目录: E:\yh-ai\project\lzwcai-szyg\lzwcai-mcp-server-package\lzwcai_mcpskills_template\lzwcai_mcpskills_template\logs
|
||||
2026-01-28 10:02:13 - mcp.server.lowlevel.server - DEBUG - [server.py:154] - Initializing server 'mcpskills_template_server'
|
||||
2026-01-28 10:02:13 - mcp.server.lowlevel.server - DEBUG - [server.py:380] - Registering handler for ListToolsRequest
|
||||
2026-01-28 10:02:13 - mcp.server.lowlevel.server - DEBUG - [server.py:441] - Registering handler for CallToolRequest
|
||||
2026-01-28 10:02:13 - lzwcai_mcpskills_template.main - INFO - [main.py:322] - ==================================================
|
||||
2026-01-28 10:02:13 - lzwcai_mcpskills_template.main - INFO - [main.py:323] - MCP Skills Template Server 启动
|
||||
2026-01-28 10:02:13 - lzwcai_mcpskills_template.main - INFO - [main.py:324] - ==================================================
|
||||
2026-01-28 10:02:13 - lzwcai_mcpskills_template.main - INFO - [main.py:329] - 命令行参数: {'mode': 'local', 'json_path': None}
|
||||
2026-01-28 10:02:13 - lzwcai_mcpskills_template.main - INFO - [main.py:332] - 使用模式: local
|
||||
2026-01-28 10:02:13 - lzwcai_mcpskills_template.main - INFO - [main.py:83] - 从本地加载 8 条配置: E:\yh-ai\project\lzwcai-szyg\lzwcai-mcp-server-package\lzwcai_mcpskills_template\lzwcai_mcpskills_template\tools_config.json
|
||||
2026-01-28 10:02:13 - lzwcai_mcpskills_template.main - INFO - [main.py:137] - 已加载 8 个工具配置
|
||||
2026-01-28 10:02:13 - lzwcai_mcpskills_template.main - INFO - [main.py:339] - 开始运行 MCP Server (stdio 模式)
|
||||
2026-01-28 10:02:13 - asyncio - DEBUG - [proactor_events.py:634] - Using proactor: IocpProactor
|
||||
2026-01-28 10:02:13 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: root=InitializedNotification(method='notifications/initialized', params=None, jsonrpc='2.0')
|
||||
2026-01-28 10:02:40 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: <mcp.shared.session.RequestResponder object at 0x000001407A58E3F0>
|
||||
2026-01-28 10:02:40 - mcp.server.lowlevel.server - INFO - [server.py:619] - Processing request of type ListToolsRequest
|
||||
2026-01-28 10:02:40 - mcp.server.lowlevel.server - DEBUG - [server.py:621] - Dispatching request of type ListToolsRequest
|
||||
2026-01-28 10:02:40 - lzwcai_mcpskills_template.main - INFO - [main.py:143] - 收到 ListTools 请求,当前配置数量: 8
|
||||
2026-01-28 10:02:40 - lzwcai_mcpskills_template.main - INFO - [main.py:162] - ListTools 响应: 返回 8 个工具
|
||||
2026-01-28 10:02:40 - mcp.server.lowlevel.server - DEBUG - [server.py:662] - Response sent
|
||||
2026-01-28 10:02:44 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: <mcp.shared.session.RequestResponder object at 0x000001407A66FAD0>
|
||||
2026-01-28 10:02:44 - mcp.server.lowlevel.server - INFO - [server.py:619] - Processing request of type CallToolRequest
|
||||
2026-01-28 10:02:44 - mcp.server.lowlevel.server - DEBUG - [server.py:621] - Dispatching request of type CallToolRequest
|
||||
2026-01-28 10:02:44 - lzwcai_mcpskills_template.main - INFO - [main.py:172] - 收到 CallTool 请求: name=demo_complex, arguments={"user_info": {}}
|
||||
2026-01-28 10:02:44 - lzwcai_mcpskills_template.main - INFO - [main.py:189] - 工具执行成功: demo_complex
|
||||
2026-01-28 10:02:44 - mcp.server.lowlevel.server - DEBUG - [server.py:662] - Response sent
|
||||
2026-01-28 10:02:50 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: <mcp.shared.session.RequestResponder object at 0x000001407A1DAF00>
|
||||
2026-01-28 10:02:50 - mcp.server.lowlevel.server - INFO - [server.py:619] - Processing request of type CallToolRequest
|
||||
2026-01-28 10:02:50 - mcp.server.lowlevel.server - DEBUG - [server.py:621] - Dispatching request of type CallToolRequest
|
||||
2026-01-28 10:02:50 - lzwcai_mcpskills_template.main - INFO - [main.py:172] - 收到 CallTool 请求: name=demo_mixed, arguments=None
|
||||
2026-01-28 10:02:50 - lzwcai_mcpskills_template.main - INFO - [main.py:189] - 工具执行成功: demo_mixed
|
||||
2026-01-28 10:02:50 - mcp.server.lowlevel.server - DEBUG - [server.py:662] - Response sent
|
||||
@@ -0,0 +1,89 @@
|
||||
2026-01-28 09:58:33 - root - INFO - [logger_config.py:112] - 日志系统初始化完成 - 日志目录: E:\yh-ai\project\lzwcai-szyg\lzwcai-mcp-server-package\lzwcai_mcpskills_template\lzwcai_mcpskills_template\logs
|
||||
2026-01-28 09:58:33 - mcp.server.lowlevel.server - DEBUG - [server.py:154] - Initializing server 'mcpskills_template_server'
|
||||
2026-01-28 09:58:33 - mcp.server.lowlevel.server - DEBUG - [server.py:380] - Registering handler for ListToolsRequest
|
||||
2026-01-28 09:58:33 - mcp.server.lowlevel.server - DEBUG - [server.py:441] - Registering handler for CallToolRequest
|
||||
2026-01-28 09:58:33 - lzwcai_mcpskills_template.main - INFO - [main.py:304] - ==================================================
|
||||
2026-01-28 09:58:33 - lzwcai_mcpskills_template.main - INFO - [main.py:305] - MCP Skills Template Server 启动
|
||||
2026-01-28 09:58:33 - lzwcai_mcpskills_template.main - INFO - [main.py:306] - ==================================================
|
||||
2026-01-28 09:58:33 - lzwcai_mcpskills_template.main - INFO - [main.py:311] - 命令行参数: {'mode': 'local', 'json_path': None}
|
||||
2026-01-28 09:58:33 - lzwcai_mcpskills_template.main - INFO - [main.py:314] - 使用模式: local
|
||||
2026-01-28 09:58:33 - lzwcai_mcpskills_template.main - INFO - [main.py:82] - 从本地加载 7 条配置: E:\yh-ai\project\lzwcai-szyg\lzwcai-mcp-server-package\lzwcai_mcpskills_template\lzwcai_mcpskills_template\tools_config.json
|
||||
2026-01-28 09:58:33 - lzwcai_mcpskills_template.main - INFO - [main.py:136] - 已加载 7 个工具配置
|
||||
2026-01-28 09:58:33 - lzwcai_mcpskills_template.main - INFO - [main.py:321] - 开始运行 MCP Server (stdio 模式)
|
||||
2026-01-28 09:58:33 - asyncio - DEBUG - [proactor_events.py:634] - Using proactor: IocpProactor
|
||||
2026-01-28 09:58:33 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: root=InitializedNotification(method='notifications/initialized', params=None, jsonrpc='2.0')
|
||||
2026-01-28 09:58:34 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: <mcp.shared.session.RequestResponder object at 0x0000029E6B64BFE0>
|
||||
2026-01-28 09:58:34 - mcp.server.lowlevel.server - INFO - [server.py:619] - Processing request of type ListToolsRequest
|
||||
2026-01-28 09:58:34 - mcp.server.lowlevel.server - DEBUG - [server.py:621] - Dispatching request of type ListToolsRequest
|
||||
2026-01-28 09:58:34 - lzwcai_mcpskills_template.main - INFO - [main.py:142] - 收到 ListTools 请求,当前配置数量: 7
|
||||
2026-01-28 09:58:34 - lzwcai_mcpskills_template.main - INFO - [main.py:161] - ListTools 响应: 返回 7 个工具
|
||||
2026-01-28 09:58:34 - mcp.server.lowlevel.server - DEBUG - [server.py:662] - Response sent
|
||||
2026-01-28 09:58:36 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: <mcp.shared.session.RequestResponder object at 0x0000029E6B59CFE0>
|
||||
2026-01-28 09:58:36 - mcp.server.lowlevel.server - INFO - [server.py:619] - Processing request of type CallToolRequest
|
||||
2026-01-28 09:58:36 - mcp.server.lowlevel.server - DEBUG - [server.py:621] - Dispatching request of type CallToolRequest
|
||||
2026-01-28 09:58:36 - lzwcai_mcpskills_template.main - INFO - [main.py:171] - 收到 CallTool 请求: name=demo_mixed, arguments=None
|
||||
2026-01-28 09:58:36 - lzwcai_mcpskills_template.main - INFO - [main.py:187] - 工具执行成功: demo_mixed
|
||||
2026-01-28 09:58:36 - mcp.server.lowlevel.server - DEBUG - [server.py:662] - Response sent
|
||||
2026-01-28 09:58:55 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: <mcp.shared.session.RequestResponder object at 0x0000029E6B39D7C0>
|
||||
2026-01-28 09:58:55 - mcp.server.lowlevel.server - INFO - [server.py:619] - Processing request of type CallToolRequest
|
||||
2026-01-28 09:58:55 - mcp.server.lowlevel.server - DEBUG - [server.py:621] - Dispatching request of type CallToolRequest
|
||||
2026-01-28 09:58:55 - lzwcai_mcpskills_template.main - INFO - [main.py:171] - 收到 CallTool 请求: name=demo_error, arguments=None
|
||||
2026-01-28 09:58:55 - lzwcai_mcpskills_template.main - ERROR - [main.py:190] - 工具执行失败: 这是一个演示用的模拟错误!执行被中断。
|
||||
Traceback (most recent call last):
|
||||
File "E:\yh-ai\project\lzwcai-szyg\lzwcai-mcp-server-package\lzwcai_mcpskills_template\lzwcai_mcpskills_template\main.py", line 186, in handle_call_tool
|
||||
result_contents = execute_tool(name, arguments or {}, tool_config)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "E:\yh-ai\project\lzwcai-szyg\lzwcai-mcp-server-package\lzwcai_mcpskills_template\lzwcai_mcpskills_template\main.py", line 259, in execute_tool
|
||||
raise ValueError("这是一个演示用的模拟错误!执行被中断。")
|
||||
ValueError: 这是一个演示用的模拟错误!执行被中断。
|
||||
2026-01-28 09:58:55 - mcp.server.lowlevel.server - DEBUG - [server.py:662] - Response sent
|
||||
2026-01-28 09:59:01 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: <mcp.shared.session.RequestResponder object at 0x0000029E6B6164E0>
|
||||
2026-01-28 09:59:01 - mcp.server.lowlevel.server - INFO - [server.py:619] - Processing request of type CallToolRequest
|
||||
2026-01-28 09:59:01 - mcp.server.lowlevel.server - DEBUG - [server.py:621] - Dispatching request of type CallToolRequest
|
||||
2026-01-28 09:59:01 - lzwcai_mcpskills_template.main - INFO - [main.py:171] - 收到 CallTool 请求: name=demo_resource, arguments=None
|
||||
2026-01-28 09:59:01 - lzwcai_mcpskills_template.main - INFO - [main.py:187] - 工具执行成功: demo_resource
|
||||
2026-01-28 09:59:01 - mcp.server.lowlevel.server - DEBUG - [server.py:662] - Response sent
|
||||
2026-01-28 09:59:04 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: <mcp.shared.session.RequestResponder object at 0x0000029E6B64BF80>
|
||||
2026-01-28 09:59:04 - mcp.server.lowlevel.server - INFO - [server.py:619] - Processing request of type CallToolRequest
|
||||
2026-01-28 09:59:04 - mcp.server.lowlevel.server - DEBUG - [server.py:621] - Dispatching request of type CallToolRequest
|
||||
2026-01-28 09:59:04 - lzwcai_mcpskills_template.main - INFO - [main.py:171] - 收到 CallTool 请求: name=demo_image, arguments=None
|
||||
2026-01-28 09:59:04 - lzwcai_mcpskills_template.main - INFO - [main.py:187] - 工具执行成功: demo_image
|
||||
2026-01-28 09:59:04 - mcp.server.lowlevel.server - DEBUG - [server.py:662] - Response sent
|
||||
2026-01-28 09:59:09 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: <mcp.shared.session.RequestResponder object at 0x0000029E6B36DD90>
|
||||
2026-01-28 09:59:09 - mcp.server.lowlevel.server - INFO - [server.py:619] - Processing request of type CallToolRequest
|
||||
2026-01-28 09:59:09 - mcp.server.lowlevel.server - DEBUG - [server.py:621] - Dispatching request of type CallToolRequest
|
||||
2026-01-28 09:59:09 - lzwcai_mcpskills_template.main - INFO - [main.py:171] - 收到 CallTool 请求: name=demo_image, arguments=None
|
||||
2026-01-28 09:59:09 - lzwcai_mcpskills_template.main - INFO - [main.py:187] - 工具执行成功: demo_image
|
||||
2026-01-28 09:59:09 - mcp.server.lowlevel.server - DEBUG - [server.py:662] - Response sent
|
||||
2026-01-28 10:02:13 - root - INFO - [logger_config.py:112] - 日志系统初始化完成 - 日志目录: E:\yh-ai\project\lzwcai-szyg\lzwcai-mcp-server-package\lzwcai_mcpskills_template\lzwcai_mcpskills_template\logs
|
||||
2026-01-28 10:02:13 - mcp.server.lowlevel.server - DEBUG - [server.py:154] - Initializing server 'mcpskills_template_server'
|
||||
2026-01-28 10:02:13 - mcp.server.lowlevel.server - DEBUG - [server.py:380] - Registering handler for ListToolsRequest
|
||||
2026-01-28 10:02:13 - mcp.server.lowlevel.server - DEBUG - [server.py:441] - Registering handler for CallToolRequest
|
||||
2026-01-28 10:02:13 - lzwcai_mcpskills_template.main - INFO - [main.py:322] - ==================================================
|
||||
2026-01-28 10:02:13 - lzwcai_mcpskills_template.main - INFO - [main.py:323] - MCP Skills Template Server 启动
|
||||
2026-01-28 10:02:13 - lzwcai_mcpskills_template.main - INFO - [main.py:324] - ==================================================
|
||||
2026-01-28 10:02:13 - lzwcai_mcpskills_template.main - INFO - [main.py:329] - 命令行参数: {'mode': 'local', 'json_path': None}
|
||||
2026-01-28 10:02:13 - lzwcai_mcpskills_template.main - INFO - [main.py:332] - 使用模式: local
|
||||
2026-01-28 10:02:13 - lzwcai_mcpskills_template.main - INFO - [main.py:83] - 从本地加载 8 条配置: E:\yh-ai\project\lzwcai-szyg\lzwcai-mcp-server-package\lzwcai_mcpskills_template\lzwcai_mcpskills_template\tools_config.json
|
||||
2026-01-28 10:02:13 - lzwcai_mcpskills_template.main - INFO - [main.py:137] - 已加载 8 个工具配置
|
||||
2026-01-28 10:02:13 - lzwcai_mcpskills_template.main - INFO - [main.py:339] - 开始运行 MCP Server (stdio 模式)
|
||||
2026-01-28 10:02:13 - asyncio - DEBUG - [proactor_events.py:634] - Using proactor: IocpProactor
|
||||
2026-01-28 10:02:13 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: root=InitializedNotification(method='notifications/initialized', params=None, jsonrpc='2.0')
|
||||
2026-01-28 10:02:40 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: <mcp.shared.session.RequestResponder object at 0x000001407A58E3F0>
|
||||
2026-01-28 10:02:40 - mcp.server.lowlevel.server - INFO - [server.py:619] - Processing request of type ListToolsRequest
|
||||
2026-01-28 10:02:40 - mcp.server.lowlevel.server - DEBUG - [server.py:621] - Dispatching request of type ListToolsRequest
|
||||
2026-01-28 10:02:40 - lzwcai_mcpskills_template.main - INFO - [main.py:143] - 收到 ListTools 请求,当前配置数量: 8
|
||||
2026-01-28 10:02:40 - lzwcai_mcpskills_template.main - INFO - [main.py:162] - ListTools 响应: 返回 8 个工具
|
||||
2026-01-28 10:02:40 - mcp.server.lowlevel.server - DEBUG - [server.py:662] - Response sent
|
||||
2026-01-28 10:02:44 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: <mcp.shared.session.RequestResponder object at 0x000001407A66FAD0>
|
||||
2026-01-28 10:02:44 - mcp.server.lowlevel.server - INFO - [server.py:619] - Processing request of type CallToolRequest
|
||||
2026-01-28 10:02:44 - mcp.server.lowlevel.server - DEBUG - [server.py:621] - Dispatching request of type CallToolRequest
|
||||
2026-01-28 10:02:44 - lzwcai_mcpskills_template.main - INFO - [main.py:172] - 收到 CallTool 请求: name=demo_complex, arguments={"user_info": {}}
|
||||
2026-01-28 10:02:44 - lzwcai_mcpskills_template.main - INFO - [main.py:189] - 工具执行成功: demo_complex
|
||||
2026-01-28 10:02:44 - mcp.server.lowlevel.server - DEBUG - [server.py:662] - Response sent
|
||||
2026-01-28 10:02:50 - mcp.server.lowlevel.server - DEBUG - [server.py:582] - Received message: <mcp.shared.session.RequestResponder object at 0x000001407A1DAF00>
|
||||
2026-01-28 10:02:50 - mcp.server.lowlevel.server - INFO - [server.py:619] - Processing request of type CallToolRequest
|
||||
2026-01-28 10:02:50 - mcp.server.lowlevel.server - DEBUG - [server.py:621] - Dispatching request of type CallToolRequest
|
||||
2026-01-28 10:02:50 - lzwcai_mcpskills_template.main - INFO - [main.py:172] - 收到 CallTool 请求: name=demo_mixed, arguments=None
|
||||
2026-01-28 10:02:50 - lzwcai_mcpskills_template.main - INFO - [main.py:189] - 工具执行成功: demo_mixed
|
||||
2026-01-28 10:02:50 - mcp.server.lowlevel.server - DEBUG - [server.py:662] - Response sent
|
||||
@@ -0,0 +1,8 @@
|
||||
2026-01-28 09:58:55 - lzwcai_mcpskills_template.main - ERROR - [main.py:190] - 工具执行失败: 这是一个演示用的模拟错误!执行被中断。
|
||||
Traceback (most recent call last):
|
||||
File "E:\yh-ai\project\lzwcai-szyg\lzwcai-mcp-server-package\lzwcai_mcpskills_template\lzwcai_mcpskills_template\main.py", line 186, in handle_call_tool
|
||||
result_contents = execute_tool(name, arguments or {}, tool_config)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
File "E:\yh-ai\project\lzwcai-szyg\lzwcai-mcp-server-package\lzwcai_mcpskills_template\lzwcai_mcpskills_template\main.py", line 259, in execute_tool
|
||||
raise ValueError("这是一个演示用的模拟错误!执行被中断。")
|
||||
ValueError: 这是一个演示用的模拟错误!执行被中断。
|
||||
@@ -12,6 +12,7 @@ import os
|
||||
import logging
|
||||
import argparse
|
||||
import anyio
|
||||
import asyncio
|
||||
|
||||
import mcp.types as types
|
||||
from mcp.server import NotificationOptions, Server
|
||||
@@ -182,32 +183,27 @@ async def handle_call_tool(
|
||||
raise ValueError(f"未知工具: {name}")
|
||||
|
||||
# TODO: 在这里实现你的工具逻辑
|
||||
# 示例:简单返回参数
|
||||
try:
|
||||
result = execute_tool(name, arguments or {}, tool_config)
|
||||
# execute_tool 现在是 async 的
|
||||
result_contents = await execute_tool(name, arguments or {}, tool_config)
|
||||
logger.info(f"工具执行成功: {name}")
|
||||
return result_contents
|
||||
except Exception as e:
|
||||
logger.error(f"工具执行失败: {e}", exc_info=True)
|
||||
result = {"error": str(e), "tool_name": name}
|
||||
|
||||
return [
|
||||
types.TextContent(
|
||||
type="text",
|
||||
text=json.dumps(result, ensure_ascii=False, indent=2)
|
||||
)
|
||||
]
|
||||
# 重新抛出异常,以便 MCP SDK 能够捕获并将其格式化为错误响应
|
||||
raise e
|
||||
|
||||
|
||||
def execute_tool(name: str, arguments: dict, config: dict) -> dict:
|
||||
async def execute_tool(name: str, arguments: dict, config: dict) -> list[types.TextContent | types.ImageContent | types.EmbeddedResource]:
|
||||
"""
|
||||
执行工具逻辑
|
||||
|
||||
TODO: 根据实际需求修改此函数
|
||||
执行工具逻辑并返回 MCP 内容列表 (Async)
|
||||
"""
|
||||
# 示例实现
|
||||
# 1. 示例:Hello World (返回纯文本)
|
||||
if name == "example_hello_world":
|
||||
return {"message": f"Hello, {arguments.get('name', 'World')}!"}
|
||||
msg = f"Hello, {arguments.get('name', 'World')}!"
|
||||
return [types.TextContent(type="text", text=msg)]
|
||||
|
||||
# 2. 示例:计算器 (返回 JSON 格式的文本)
|
||||
elif name == "example_calculator":
|
||||
a = float(arguments.get("a", 0))
|
||||
b = float(arguments.get("b", 0))
|
||||
@@ -224,14 +220,82 @@ def execute_tool(name: str, arguments: dict, config: dict) -> dict:
|
||||
else:
|
||||
result = "未知运算符"
|
||||
|
||||
return {"result": result, "expression": f"{a} {op} {b}"}
|
||||
output = {"result": result, "expression": f"{a} {op} {b}"}
|
||||
return [types.TextContent(type="text", text=json.dumps(output, ensure_ascii=False))]
|
||||
|
||||
# 3. 演示:纯文本
|
||||
elif name == "demo_text":
|
||||
return [types.TextContent(type="text", text="这是一个标准的纯文本输出示例。")]
|
||||
|
||||
# 4. 演示:图片输出
|
||||
elif name == "demo_image":
|
||||
# 这是一个 1x1 的红色像素点的 Base64
|
||||
red_dot_base64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="
|
||||
return [
|
||||
types.ImageContent(
|
||||
type="image",
|
||||
data=red_dot_base64,
|
||||
mimeType="image/png"
|
||||
)
|
||||
]
|
||||
|
||||
# 5. 演示:资源输出
|
||||
elif name == "demo_resource":
|
||||
# 模拟返回一个嵌入式资源
|
||||
return [
|
||||
types.EmbeddedResource(
|
||||
type="resource",
|
||||
resource=types.TextResourceContents(
|
||||
uri="file:///logs/app.log",
|
||||
text="[INFO] System started\n[WARN] Low memory",
|
||||
mimeType="text/plain"
|
||||
)
|
||||
)
|
||||
]
|
||||
|
||||
# 6. 演示:错误状态 (带 observation)
|
||||
elif name == "demo_error":
|
||||
# 尝试模拟用户要求的带 observation 的错误结构
|
||||
# 注意:标准 MCP 协议中 TextContent 可能不支持 observation 字段
|
||||
# 这里演示如何抛出异常,这是最标准的错误反馈方式
|
||||
raise ValueError("执行失败: 网络超时,请检查连接")
|
||||
|
||||
# 如果客户端支持非标准字段,可以尝试返回如下结构(需 SDK 支持):
|
||||
# return [
|
||||
# types.TextContent(type="text", text="执行失败") # 无法直接添加 observation
|
||||
# ]
|
||||
|
||||
# 7. 演示:混合输出 (文本 + 图片)
|
||||
elif name == "demo_mixed":
|
||||
red_dot_base64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="
|
||||
return [
|
||||
types.TextContent(type="text", text="下面是一张图片:"),
|
||||
types.ImageContent(
|
||||
type="image",
|
||||
data=red_dot_base64,
|
||||
mimeType="image/png"
|
||||
),
|
||||
types.TextContent(type="text", text="图片展示完毕。")
|
||||
]
|
||||
|
||||
# 8. 演示:复杂参数
|
||||
elif name == "demo_complex":
|
||||
user_info = arguments.get("user_info", {})
|
||||
tags = arguments.get("tags", [])
|
||||
|
||||
# 模拟异步处理
|
||||
await asyncio.sleep(0.1)
|
||||
|
||||
result_text = f"接收到复杂参数:\n用户: {json.dumps(user_info, ensure_ascii=False)}\n标签: {tags}"
|
||||
return [types.TextContent(type="text", text=result_text)]
|
||||
|
||||
# 默认返回参数
|
||||
return {
|
||||
default_result = {
|
||||
"tool_name": name,
|
||||
"arguments": arguments,
|
||||
"message": "工具执行成功(默认实现)"
|
||||
}
|
||||
return [types.TextContent(type="text", text=json.dumps(default_result, ensure_ascii=False, indent=2))]
|
||||
|
||||
|
||||
async def run_server():
|
||||
|
||||
@@ -61,6 +61,23 @@ def convert_param_to_schema_property(param: dict) -> tuple[str, dict, bool]:
|
||||
|
||||
elif param_type == "number":
|
||||
property_schema["type"] = "number"
|
||||
|
||||
elif param_type == "boolean":
|
||||
property_schema["type"] = "boolean"
|
||||
# Boolean default handling
|
||||
if default_value is not None and str(default_value).lower() in ("true", "false", "1", "0"):
|
||||
property_schema["default"] = str(default_value).lower() in ("true", "1")
|
||||
|
||||
elif param_type == "array":
|
||||
property_schema["type"] = "array"
|
||||
# Simple array of strings by default if no item type specified
|
||||
# For more complex arrays, we might need extended config in sqlParams
|
||||
property_schema["items"] = {"type": "string"}
|
||||
|
||||
elif param_type == "object":
|
||||
property_schema["type"] = "object"
|
||||
# Allow any object structure by default
|
||||
property_schema["additionalProperties"] = True
|
||||
|
||||
else:
|
||||
# 默认当作 string 处理
|
||||
|
||||
@@ -12,5 +12,47 @@
|
||||
"description": "示例工具 - 简单计算器",
|
||||
"toolPrompt": "执行简单的数学计算",
|
||||
"sqlParams": "[{\"type\":\"number\",\"name\":\"a\",\"displayName\":\"数字A\",\"required\":true},{\"type\":\"number\",\"name\":\"b\",\"displayName\":\"数字B\",\"required\":true},{\"type\":\"select\",\"name\":\"operation\",\"displayName\":\"运算符\",\"required\":true,\"options\":[\"+\",\"-\",\"*\",\"/\"]}]"
|
||||
},
|
||||
{
|
||||
"id": "demo_001",
|
||||
"name": "demo_text",
|
||||
"description": "演示纯文本输出",
|
||||
"toolPrompt": "返回一段简单的文本信息",
|
||||
"sqlParams": "[]"
|
||||
},
|
||||
{
|
||||
"id": "demo_002",
|
||||
"name": "demo_image",
|
||||
"description": "演示图片输出",
|
||||
"toolPrompt": "返回一张 Base64 编码的图片",
|
||||
"sqlParams": "[]"
|
||||
},
|
||||
{
|
||||
"id": "demo_003",
|
||||
"name": "demo_resource",
|
||||
"description": "演示资源输出",
|
||||
"toolPrompt": "返回一个嵌入式资源",
|
||||
"sqlParams": "[]"
|
||||
},
|
||||
{
|
||||
"id": "demo_004",
|
||||
"name": "demo_error",
|
||||
"description": "演示错误状态",
|
||||
"toolPrompt": "触发一个执行错误",
|
||||
"sqlParams": "[]"
|
||||
},
|
||||
{
|
||||
"id": "demo_005",
|
||||
"name": "demo_mixed",
|
||||
"description": "演示混合输出",
|
||||
"toolPrompt": "同时返回文本和图片",
|
||||
"sqlParams": "[]"
|
||||
},
|
||||
{
|
||||
"id": "demo_006",
|
||||
"name": "demo_complex",
|
||||
"description": "演示复杂参数输入",
|
||||
"toolPrompt": "接受对象和数组类型的参数",
|
||||
"sqlParams": "[{\"type\":\"object\",\"name\":\"user_info\",\"displayName\":\"用户信息\",\"required\":true},{\"type\":\"array\",\"name\":\"tags\",\"displayName\":\"标签列表\",\"required\":false}]"
|
||||
}
|
||||
]
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
||||
|
||||
[project]
|
||||
name = "lzwcai_mcpskills_template"
|
||||
version = "0.1.0"
|
||||
version = "0.1.1"
|
||||
description = "MCP Server 模板项目 - 用于快速创建新的 MCP 服务"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.10"
|
||||
|
||||
Reference in New Issue
Block a user