feat(lzwcai-agile-db): 更新AgileDB技能至v0.4.2版本并扩展工具集

- 将技能版本从0.2.0升级至0.4.2
- 工具数量从33个扩展至57个,新增数据源管理、AI训练、库表关联配置等功能
- 新增MQTT字段关联同步模块(8个工具)和库表关联配置(3个工具)
- 添加重要的契约提示和安全确认原则,包括target默认值、alter_table操作限制等
- 修正工具参数说明,如execute_sql的executableSql改为sql,参数结构优化
- 增强安全机制,明确危险操作的用户确认流程和目标资源选择规则
- 更新README.md中的工具数量统计和功能描述
This commit is contained in:
2026-06-17 14:40:43 +08:00
parent 557361632c
commit ba5cd4bbe1
115 changed files with 7587 additions and 575 deletions

View File

@@ -1,137 +1,129 @@
2026-03-28 12:30:33 - root - INFO - [logger_config.py:117] - 日志系统初始化完成 - 日志目录: E:\yh-ai\project\lzwcai-szyg\lzwcai-mcp-server-package\lzwcai_workflow_to_mcp\lzwcai_workflow_to_mcp\logs
2026-03-28 12:30:33 - mcp.server.lowlevel.server - DEBUG - [server.py:162] - Initializing server 'workflow_mcp_server'
2026-03-28 12:30:33 - mcp.server.lowlevel.server - DEBUG - [server.py:439] - Registering handler for ListToolsRequest
2026-03-28 12:30:33 - mcp.server.lowlevel.server - DEBUG - [server.py:519] - Registering handler for CallToolRequest
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.main - INFO - [main.py:334] - ==================================================
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.main - INFO - [main.py:335] - Workflow MCP Server 启动
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.main - INFO - [main.py:336] - ==================================================
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.main - INFO - [main.py:341] - 命令行参数: {'mode': 'api', 'json_path': None, 'workflow_id': None}
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.main - INFO - [main.py:344] - 使用模式: api
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.main - DEBUG - [main.py:103] - ApiLoader 初始化工作流ID: 2037527155235225601
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.main - INFO - [main.py:111] - 开始从 API 加载工作流配置工作流ID: 2037527155235225601
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:115] - [客户端初始化] base_url=http://192.168.2.236:8088
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:116] - [客户端初始化] token=wf_bd39a583670c42ceab48b3353bf2ba43
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:117] - [客户端初始化] execute_timeout=600.0s
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:148] - [API请求] GET http://192.168.2.236:8088/system/workflowManage/getByWorkflowId/2037527155235225601
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.utils.api_client - DEBUG - [api_client.py:149] - [API请求] Headers: {'X-API-Key': 'wf_bd39a583670c42ceab48b3353bf2ba43'}
2026-03-28 12:30:34 - httpcore.connection - DEBUG - [_trace.py:47] - connect_tcp.started host='192.168.2.236' port=8088 local_address=None timeout=30.0 socket_options=None
2026-03-28 12:30:34 - httpcore.connection - DEBUG - [_trace.py:47] - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x0000016702CF9970>
2026-03-28 12:30:34 - httpcore.http11 - DEBUG - [_trace.py:47] - send_request_headers.started request=<Request [b'GET']>
2026-03-28 12:30:34 - httpcore.http11 - DEBUG - [_trace.py:47] - send_request_headers.complete
2026-03-28 12:30:34 - httpcore.http11 - DEBUG - [_trace.py:47] - send_request_body.started request=<Request [b'GET']>
2026-03-28 12:30:34 - httpcore.http11 - DEBUG - [_trace.py:47] - send_request_body.complete
2026-03-28 12:30:34 - httpcore.http11 - DEBUG - [_trace.py:47] - receive_response_headers.started request=<Request [b'GET']>
2026-03-28 12:30:34 - httpcore.http11 - DEBUG - [_trace.py:47] - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'', [(b'Vary', b'Origin'), (b'Vary', b'Access-Control-Request-Method'), (b'Vary', b'Access-Control-Request-Headers'), (b'X-Content-Type-Options', b'nosniff'), (b'X-XSS-Protection', b'1; mode=block'), (b'X-Frame-Options', b'SAMEORIGIN'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Date', b'Sat, 28 Mar 2026 04:30:30 GMT'), (b'Keep-Alive', b'timeout=60'), (b'Connection', b'keep-alive')])
2026-03-28 12:30:34 - httpx - INFO - [_client.py:1025] - HTTP Request: GET http://192.168.2.236:8088/system/workflowManage/getByWorkflowId/2037527155235225601 "HTTP/1.1 200 "
2026-03-28 12:30:34 - httpcore.http11 - DEBUG - [_trace.py:47] - receive_response_body.started request=<Request [b'GET']>
2026-03-28 12:30:34 - httpcore.http11 - DEBUG - [_trace.py:47] - receive_response_body.complete
2026-03-28 12:30:34 - httpcore.http11 - DEBUG - [_trace.py:47] - response_closed.started
2026-03-28 12:30:34 - httpcore.http11 - DEBUG - [_trace.py:47] - response_closed.complete
2026-03-28 12:30:34 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:156] - [API响应] HTTP 200
2026-03-28 12:30:34 - lzwcai_workflow_to_mcp.utils.api_client - DEBUG - [api_client.py:157] - [API响应] Headers: {'vary': 'Origin, Access-Control-Request-Method, Access-Control-Request-Headers', 'x-content-type-options': 'nosniff', 'x-xss-protection': '1; mode=block', 'x-frame-options': 'SAMEORIGIN', 'content-type': 'application/json', 'transfer-encoding': 'chunked', 'date': 'Sat, 28 Mar 2026 04:30:30 GMT', 'keep-alive': 'timeout=60', 'connection': 'keep-alive'}
2026-03-28 12:30:34 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:162] - [API响应] 获取工作流配置成功: workflow_id=2037527155235225601
2026-03-28 12:30:34 - lzwcai_workflow_to_mcp.utils.api_client - DEBUG - [api_client.py:163] - [API响应] Body: {
2026-06-17 10:01:21 - root - INFO - [logger_config.py:117] - 日志系统初始化完成 - 日志目录: E:\yh-ai\project\lzwcai-szyg\lzwcai-mcp-server-package\lzwcai_workflow_to_mcp\lzwcai_workflow_to_mcp\logs
2026-06-17 10:01:21 - mcp.server.lowlevel.server - DEBUG - [server.py:162] - Initializing server 'workflow_mcp_server'
2026-06-17 10:01:21 - mcp.server.lowlevel.server - DEBUG - [server.py:439] - Registering handler for ListToolsRequest
2026-06-17 10:01:21 - mcp.server.lowlevel.server - DEBUG - [server.py:519] - Registering handler for CallToolRequest
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - INFO - [main.py:341] - ==================================================
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - INFO - [main.py:342] - Workflow MCP Server 启动
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - INFO - [main.py:343] - ==================================================
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - INFO - [main.py:348] - 命令行参数: {'mode': 'api', 'json_path': None, 'workflow_id': None}
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - INFO - [main.py:351] - 使用模式: api
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - DEBUG - [main.py:103] - ApiLoader 初始化工作流ID: 2059567220704460801
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - INFO - [main.py:111] - 开始从 API 加载工作流配置工作流ID: 2059567220704460801
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:115] - [客户端初始化] base_url=http://192.168.2.236:8088
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:116] - [客户端初始化] token=wf_3782054fa0d345df973dedf0775d98e7
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:117] - [客户端初始化] execute_timeout=600.0s
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:148] - [API请求] GET http://192.168.2.236:8088/system/workflowManage/getByWorkflowId/2059567220704460801
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.utils.api_client - DEBUG - [api_client.py:149] - [API请求] Headers: {'X-API-Key': 'wf_3782054fa0d345df973dedf0775d98e7'}
2026-06-17 10:01:21 - httpcore.connection - DEBUG - [_trace.py:47] - connect_tcp.started host='192.168.2.236' port=8088 local_address=None timeout=30.0 socket_options=None
2026-06-17 10:01:21 - httpcore.connection - DEBUG - [_trace.py:47] - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x0000018C0704C380>
2026-06-17 10:01:21 - httpcore.http11 - DEBUG - [_trace.py:47] - send_request_headers.started request=<Request [b'GET']>
2026-06-17 10:01:21 - httpcore.http11 - DEBUG - [_trace.py:47] - send_request_headers.complete
2026-06-17 10:01:21 - httpcore.http11 - DEBUG - [_trace.py:47] - send_request_body.started request=<Request [b'GET']>
2026-06-17 10:01:21 - httpcore.http11 - DEBUG - [_trace.py:47] - send_request_body.complete
2026-06-17 10:01:21 - httpcore.http11 - DEBUG - [_trace.py:47] - receive_response_headers.started request=<Request [b'GET']>
2026-06-17 10:01:21 - httpcore.http11 - DEBUG - [_trace.py:47] - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'', [(b'Vary', b'Origin'), (b'Vary', b'Access-Control-Request-Method'), (b'Vary', b'Access-Control-Request-Headers'), (b'X-Content-Type-Options', b'nosniff'), (b'X-XSS-Protection', b'1; mode=block'), (b'X-Frame-Options', b'SAMEORIGIN'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Date', b'Wed, 17 Jun 2026 02:01:19 GMT'), (b'Keep-Alive', b'timeout=60'), (b'Connection', b'keep-alive')])
2026-06-17 10:01:21 - httpx - INFO - [_client.py:1025] - HTTP Request: GET http://192.168.2.236:8088/system/workflowManage/getByWorkflowId/2059567220704460801 "HTTP/1.1 200 "
2026-06-17 10:01:21 - httpcore.http11 - DEBUG - [_trace.py:47] - receive_response_body.started request=<Request [b'GET']>
2026-06-17 10:01:21 - httpcore.http11 - DEBUG - [_trace.py:47] - receive_response_body.complete
2026-06-17 10:01:21 - httpcore.http11 - DEBUG - [_trace.py:47] - response_closed.started
2026-06-17 10:01:21 - httpcore.http11 - DEBUG - [_trace.py:47] - response_closed.complete
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:156] - [API响应] HTTP 200
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.utils.api_client - DEBUG - [api_client.py:157] - [API响应] Headers: {'vary': 'Origin, Access-Control-Request-Method, Access-Control-Request-Headers', 'x-content-type-options': 'nosniff', 'x-xss-protection': '1; mode=block', 'x-frame-options': 'SAMEORIGIN', 'content-type': 'application/json', 'transfer-encoding': 'chunked', 'date': 'Wed, 17 Jun 2026 02:01:19 GMT', 'keep-alive': 'timeout=60', 'connection': 'keep-alive'}
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:162] - [API响应] 获取工作流配置成功: workflow_id=2059567220704460801
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.utils.api_client - DEBUG - [api_client.py:163] - [API响应] Body: {
"msg": "查询成功",
"code": 200,
"data": [
{
"id": "2037535460665982977",
"id": "2059567233220263937",
"createBy": "duchangyuan",
"createTime": "2026-03-27 22:21:24",
"updateBy": "admin",
"updateTime": "2026-03-28 12:21:49",
"serviceId": "2037535460632428546",
"uniqueName": "银行流水状态检测",
"name": "yinxingliushuizhuangtaijiance_7c4d9a63",
"description": "用于检测流水导入状态,检查是否全部导入完成",
"createTime": "2026-05-27 17:27:48",
"updateBy": "yy8z9",
"updateTime": "2026-06-17 00:08:32",
"serviceId": "2059567233190903810",
"uniqueName": "文件导入(支持压缩包)",
"name": "wenjiandaoruzhichiyasuobao_cdde86e3",
"description": "dd",
"visualizable": 0,
"toolPrompt": null,
"toolType": "api",
"datasourceId": null,
"sqlTemplate": null,
"sqlParams": "[]",
"sqlParams": "[{\"type\":\"string\",\"name\":\"file\",\"displayName\":\"原文件路径\",\"maxLength\":3000,\"required\":false,\"defaultValue\":\"\"},{\"type\":\"string\",\"name\":\"txt_file\",\"displayName\":\"解析后txt文件路径\",\"required\":true,\"defaultValue\":\"\"}]",
"resultType": null,
"sourceType": null,
"trainingTaskId": null,
"tableMetadataIds": null,
"executionCount": 0,
"visualizationConfigs": null,
"inputJsonSchema": "{\"type\":\"object\",\"properties\":{\"workflow_extraContext\":{\"description\":\"工作流额外的上下文参数(如环境变量等),可以是任何类型,非必填\"}},\"required\":[]}",
"inputJsonSchema": "{\"type\":\"object\",\"properties\":{\"file\":{\"description\":\"原文件路径\",\"type\":\"string\",\"maxLength\":3000},\"txt_file\":{\"description\":\"解析后txt文件路径\",\"type\":\"string\"},\"workflow_extraContext\":{\"description\":\"工作流额外的上下文参数(如环境变量等),可以是任何类型,非必填\"}},\"required\":[\"txt_file\"]}",
"outputJsonSchema": "{\"type\":\"object\",\"properties\":{\"text\":{\"type\":\"string\"}},\"additionalProperties\":false}",
"lastExecutionTime": null
}
]
}
2026-03-28 12:30:34 - lzwcai_workflow_to_mcp.main - DEBUG - [main.py:116] - API 响应原始数据: {
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - DEBUG - [main.py:116] - API 响应原始数据: {
"msg": "查询成功",
"code": 200,
"data": [
{
"id": "2037535460665982977",
"id": "2059567233220263937",
"createBy": "duchangyuan",
"createTime": "2026-03-27 22:21:24",
"updateBy": "admin",
"updateTime": "2026-03-28 12:21:49",
"serviceId": "2037535460632428546",
"uniqueName": "银行流水状态检测",
"name": "yinxingliushuizhuangtaijiance_7c4d9a63",
"description": "用于检测流水导入状态,检查是否全部导入完成",
"createTime": "2026-05-27 17:27:48",
"updateBy": "yy8z9",
"updateTime": "2026-06-17 00:08:32",
"serviceId": "2059567233190903810",
"uniqueName": "文件导入(支持压缩包)",
"name": "wenjiandaoruzhichiyasuobao_cdde86e3",
"description": "dd",
"visualizable": 0,
"toolPrompt": null,
"toolType": "api",
"datasourceId": null,
"sqlTemplate": null,
"sqlParams": "[]",
"sqlParams": "[{\"type\":\"string\",\"name\":\"file\",\"displayName\":\"原文件路径\",\"maxLength\":3000,\"required\":false,\"defaultValue\":\"\"},{\"type\":\"string\",\"name\":\"txt_file\",\"displayName\":\"解析后txt文件路径\",\"required\":true,\"defaultValue\":\"\"}]",
"resultType": null,
"sourceType": null,
"trainingTaskId": null,
"tableMetadataIds": null,
"executionCount": 0,
"visualizationConfigs": null,
"inputJsonSchema": "{\"type\":\"object\",\"properties\":{\"workflow_extraContext\":{\"description\":\"工作流额外的上下文参数(如环境变量等),可以是任何类型,非必填\"}},\"required\":[]}",
"inputJsonSchema": "{\"type\":\"object\",\"properties\":{\"file\":{\"description\":\"原文件路径\",\"type\":\"string\",\"maxLength\":3000},\"txt_file\":{\"description\":\"解析后txt文件路径\",\"type\":\"string\"},\"workflow_extraContext\":{\"description\":\"工作流额外的上下文参数(如环境变量等),可以是任何类型,非必填\"}},\"required\":[\"txt_file\"]}",
"outputJsonSchema": "{\"type\":\"object\",\"properties\":{\"text\":{\"type\":\"string\"}},\"additionalProperties\":false}",
"lastExecutionTime": null
}
]
}
2026-03-28 12:30:34 - lzwcai_workflow_to_mcp.main - DEBUG - [main.py:124] - API 响应 data 字段: [
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - DEBUG - [main.py:124] - API 响应 data 字段: [
{
"id": "2037535460665982977",
"id": "2059567233220263937",
"createBy": "duchangyuan",
"createTime": "2026-03-27 22:21:24",
"updateBy": "admin",
"updateTime": "2026-03-28 12:21:49",
"serviceId": "2037535460632428546",
"uniqueName": "银行流水状态检测",
"name": "yinxingliushuizhuangtaijiance_7c4d9a63",
"description": "用于检测流水导入状态,检查是否全部导入完成",
"createTime": "2026-05-27 17:27:48",
"updateBy": "yy8z9",
"updateTime": "2026-06-17 00:08:32",
"serviceId": "2059567233190903810",
"uniqueName": "文件导入(支持压缩包)",
"name": "wenjiandaoruzhichiyasuobao_cdde86e3",
"description": "dd",
"visualizable": 0,
"toolPrompt": null,
"toolType": "api",
"datasourceId": null,
"sqlTemplate": null,
"sqlParams": "[]",
"sqlParams": "[{\"type\":\"string\",\"name\":\"file\",\"displayName\":\"原文件路径\",\"maxLength\":3000,\"required\":false,\"defaultValue\":\"\"},{\"type\":\"string\",\"name\":\"txt_file\",\"displayName\":\"解析后txt文件路径\",\"required\":true,\"defaultValue\":\"\"}]",
"resultType": null,
"sourceType": null,
"trainingTaskId": null,
"tableMetadataIds": null,
"executionCount": 0,
"visualizationConfigs": null,
"inputJsonSchema": "{\"type\":\"object\",\"properties\":{\"workflow_extraContext\":{\"description\":\"工作流额外的上下文参数(如环境变量等),可以是任何类型,非必填\"}},\"required\":[]}",
"inputJsonSchema": "{\"type\":\"object\",\"properties\":{\"file\":{\"description\":\"原文件路径\",\"type\":\"string\",\"maxLength\":3000},\"txt_file\":{\"description\":\"解析后txt文件路径\",\"type\":\"string\"},\"workflow_extraContext\":{\"description\":\"工作流额外的上下文参数(如环境变量等),可以是任何类型,非必填\"}},\"required\":[\"txt_file\"]}",
"outputJsonSchema": "{\"type\":\"object\",\"properties\":{\"text\":{\"type\":\"string\"}},\"additionalProperties\":false}",
"lastExecutionTime": null
}
]
2026-03-28 12:30:34 - lzwcai_workflow_to_mcp.main - INFO - [main.py:135] - 从 API 加载工作流配置成功工作流ID: 2037527155235225601, 配置数量: 1
2026-03-28 12:30:34 - lzwcai_workflow_to_mcp.main - INFO - [main.py:165] - 已加载 1 个工具配置
2026-03-28 12:30:34 - lzwcai_workflow_to_mcp.main - INFO - [main.py:352] - 开始运行 MCP Server (stdio 模式)
2026-03-28 12:30:34 - asyncio - DEBUG - [proactor_events.py:634] - Using proactor: IocpProactor
2026-03-28 12:30:34 - mcp.server.lowlevel.server - DEBUG - [server.py:675] - Received message: root=InitializedNotification(method='notifications/initialized', params=None, jsonrpc='2.0')
2026-03-28 12:30:40 - mcp.server.lowlevel.server - DEBUG - [server.py:675] - Received message: <mcp.shared.session.RequestResponder object at 0x0000016702D378C0>
2026-03-28 12:30:40 - mcp.server.lowlevel.server - INFO - [server.py:720] - Processing request of type ListToolsRequest
2026-03-28 12:30:40 - mcp.server.lowlevel.server - DEBUG - [server.py:723] - Dispatching request of type ListToolsRequest
2026-03-28 12:30:40 - lzwcai_workflow_to_mcp.main - INFO - [main.py:171] - 收到 ListTools 请求,当前配置数量: 1
2026-03-28 12:30:40 - lzwcai_workflow_to_mcp.main - DEBUG - [main.py:178] - 处理工具配置: name=yinxingliushuizhuangtaijiance_7c4d9a63, description=用于检测流水导入状态,检查是否全部导入完成...
2026-03-28 12:30:40 - lzwcai_workflow_to_mcp.main - DEBUG - [main.py:185] - 从 sqlParams 转换的 inputSchema: {"type": "object", "properties": {}, "required": []}
2026-03-28 12:30:40 - lzwcai_workflow_to_mcp.main - INFO - [main.py:237] - ListTools 响应: 返回 1 个工具
2026-03-28 12:30:40 - mcp.server.lowlevel.server - DEBUG - [server.py:790] - Response sent
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - INFO - [main.py:135] - 从 API 加载工作流配置成功工作流ID: 2059567220704460801, 配置数量: 1
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - INFO - [main.py:165] - 已加载 1 个工具配置
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - INFO - [main.py:359] - 开始运行 MCP Server (stdio 模式)
2026-06-17 10:01:21 - asyncio - DEBUG - [proactor_events.py:634] - Using proactor: IocpProactor
2026-06-17 10:01:21 - mcp.server.lowlevel.server - DEBUG - [server.py:675] - Received message: root=InitializedNotification(method='notifications/initialized', params=None, jsonrpc='2.0')

View File

@@ -1,137 +1,129 @@
2026-03-28 12:30:33 - root - INFO - [logger_config.py:117] - 日志系统初始化完成 - 日志目录: E:\yh-ai\project\lzwcai-szyg\lzwcai-mcp-server-package\lzwcai_workflow_to_mcp\lzwcai_workflow_to_mcp\logs
2026-03-28 12:30:33 - mcp.server.lowlevel.server - DEBUG - [server.py:162] - Initializing server 'workflow_mcp_server'
2026-03-28 12:30:33 - mcp.server.lowlevel.server - DEBUG - [server.py:439] - Registering handler for ListToolsRequest
2026-03-28 12:30:33 - mcp.server.lowlevel.server - DEBUG - [server.py:519] - Registering handler for CallToolRequest
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.main - INFO - [main.py:334] - ==================================================
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.main - INFO - [main.py:335] - Workflow MCP Server 启动
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.main - INFO - [main.py:336] - ==================================================
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.main - INFO - [main.py:341] - 命令行参数: {'mode': 'api', 'json_path': None, 'workflow_id': None}
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.main - INFO - [main.py:344] - 使用模式: api
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.main - DEBUG - [main.py:103] - ApiLoader 初始化工作流ID: 2037527155235225601
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.main - INFO - [main.py:111] - 开始从 API 加载工作流配置工作流ID: 2037527155235225601
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:115] - [客户端初始化] base_url=http://192.168.2.236:8088
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:116] - [客户端初始化] token=wf_bd39a583670c42ceab48b3353bf2ba43
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:117] - [客户端初始化] execute_timeout=600.0s
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:148] - [API请求] GET http://192.168.2.236:8088/system/workflowManage/getByWorkflowId/2037527155235225601
2026-03-28 12:30:33 - lzwcai_workflow_to_mcp.utils.api_client - DEBUG - [api_client.py:149] - [API请求] Headers: {'X-API-Key': 'wf_bd39a583670c42ceab48b3353bf2ba43'}
2026-03-28 12:30:34 - httpcore.connection - DEBUG - [_trace.py:47] - connect_tcp.started host='192.168.2.236' port=8088 local_address=None timeout=30.0 socket_options=None
2026-03-28 12:30:34 - httpcore.connection - DEBUG - [_trace.py:47] - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x0000016702CF9970>
2026-03-28 12:30:34 - httpcore.http11 - DEBUG - [_trace.py:47] - send_request_headers.started request=<Request [b'GET']>
2026-03-28 12:30:34 - httpcore.http11 - DEBUG - [_trace.py:47] - send_request_headers.complete
2026-03-28 12:30:34 - httpcore.http11 - DEBUG - [_trace.py:47] - send_request_body.started request=<Request [b'GET']>
2026-03-28 12:30:34 - httpcore.http11 - DEBUG - [_trace.py:47] - send_request_body.complete
2026-03-28 12:30:34 - httpcore.http11 - DEBUG - [_trace.py:47] - receive_response_headers.started request=<Request [b'GET']>
2026-03-28 12:30:34 - httpcore.http11 - DEBUG - [_trace.py:47] - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'', [(b'Vary', b'Origin'), (b'Vary', b'Access-Control-Request-Method'), (b'Vary', b'Access-Control-Request-Headers'), (b'X-Content-Type-Options', b'nosniff'), (b'X-XSS-Protection', b'1; mode=block'), (b'X-Frame-Options', b'SAMEORIGIN'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Date', b'Sat, 28 Mar 2026 04:30:30 GMT'), (b'Keep-Alive', b'timeout=60'), (b'Connection', b'keep-alive')])
2026-03-28 12:30:34 - httpx - INFO - [_client.py:1025] - HTTP Request: GET http://192.168.2.236:8088/system/workflowManage/getByWorkflowId/2037527155235225601 "HTTP/1.1 200 "
2026-03-28 12:30:34 - httpcore.http11 - DEBUG - [_trace.py:47] - receive_response_body.started request=<Request [b'GET']>
2026-03-28 12:30:34 - httpcore.http11 - DEBUG - [_trace.py:47] - receive_response_body.complete
2026-03-28 12:30:34 - httpcore.http11 - DEBUG - [_trace.py:47] - response_closed.started
2026-03-28 12:30:34 - httpcore.http11 - DEBUG - [_trace.py:47] - response_closed.complete
2026-03-28 12:30:34 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:156] - [API响应] HTTP 200
2026-03-28 12:30:34 - lzwcai_workflow_to_mcp.utils.api_client - DEBUG - [api_client.py:157] - [API响应] Headers: {'vary': 'Origin, Access-Control-Request-Method, Access-Control-Request-Headers', 'x-content-type-options': 'nosniff', 'x-xss-protection': '1; mode=block', 'x-frame-options': 'SAMEORIGIN', 'content-type': 'application/json', 'transfer-encoding': 'chunked', 'date': 'Sat, 28 Mar 2026 04:30:30 GMT', 'keep-alive': 'timeout=60', 'connection': 'keep-alive'}
2026-03-28 12:30:34 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:162] - [API响应] 获取工作流配置成功: workflow_id=2037527155235225601
2026-03-28 12:30:34 - lzwcai_workflow_to_mcp.utils.api_client - DEBUG - [api_client.py:163] - [API响应] Body: {
2026-06-17 10:01:21 - root - INFO - [logger_config.py:117] - 日志系统初始化完成 - 日志目录: E:\yh-ai\project\lzwcai-szyg\lzwcai-mcp-server-package\lzwcai_workflow_to_mcp\lzwcai_workflow_to_mcp\logs
2026-06-17 10:01:21 - mcp.server.lowlevel.server - DEBUG - [server.py:162] - Initializing server 'workflow_mcp_server'
2026-06-17 10:01:21 - mcp.server.lowlevel.server - DEBUG - [server.py:439] - Registering handler for ListToolsRequest
2026-06-17 10:01:21 - mcp.server.lowlevel.server - DEBUG - [server.py:519] - Registering handler for CallToolRequest
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - INFO - [main.py:341] - ==================================================
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - INFO - [main.py:342] - Workflow MCP Server 启动
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - INFO - [main.py:343] - ==================================================
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - INFO - [main.py:348] - 命令行参数: {'mode': 'api', 'json_path': None, 'workflow_id': None}
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - INFO - [main.py:351] - 使用模式: api
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - DEBUG - [main.py:103] - ApiLoader 初始化工作流ID: 2059567220704460801
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - INFO - [main.py:111] - 开始从 API 加载工作流配置工作流ID: 2059567220704460801
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:115] - [客户端初始化] base_url=http://192.168.2.236:8088
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:116] - [客户端初始化] token=wf_3782054fa0d345df973dedf0775d98e7
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:117] - [客户端初始化] execute_timeout=600.0s
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:148] - [API请求] GET http://192.168.2.236:8088/system/workflowManage/getByWorkflowId/2059567220704460801
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.utils.api_client - DEBUG - [api_client.py:149] - [API请求] Headers: {'X-API-Key': 'wf_3782054fa0d345df973dedf0775d98e7'}
2026-06-17 10:01:21 - httpcore.connection - DEBUG - [_trace.py:47] - connect_tcp.started host='192.168.2.236' port=8088 local_address=None timeout=30.0 socket_options=None
2026-06-17 10:01:21 - httpcore.connection - DEBUG - [_trace.py:47] - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x0000018C0704C380>
2026-06-17 10:01:21 - httpcore.http11 - DEBUG - [_trace.py:47] - send_request_headers.started request=<Request [b'GET']>
2026-06-17 10:01:21 - httpcore.http11 - DEBUG - [_trace.py:47] - send_request_headers.complete
2026-06-17 10:01:21 - httpcore.http11 - DEBUG - [_trace.py:47] - send_request_body.started request=<Request [b'GET']>
2026-06-17 10:01:21 - httpcore.http11 - DEBUG - [_trace.py:47] - send_request_body.complete
2026-06-17 10:01:21 - httpcore.http11 - DEBUG - [_trace.py:47] - receive_response_headers.started request=<Request [b'GET']>
2026-06-17 10:01:21 - httpcore.http11 - DEBUG - [_trace.py:47] - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'', [(b'Vary', b'Origin'), (b'Vary', b'Access-Control-Request-Method'), (b'Vary', b'Access-Control-Request-Headers'), (b'X-Content-Type-Options', b'nosniff'), (b'X-XSS-Protection', b'1; mode=block'), (b'X-Frame-Options', b'SAMEORIGIN'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Date', b'Wed, 17 Jun 2026 02:01:19 GMT'), (b'Keep-Alive', b'timeout=60'), (b'Connection', b'keep-alive')])
2026-06-17 10:01:21 - httpx - INFO - [_client.py:1025] - HTTP Request: GET http://192.168.2.236:8088/system/workflowManage/getByWorkflowId/2059567220704460801 "HTTP/1.1 200 "
2026-06-17 10:01:21 - httpcore.http11 - DEBUG - [_trace.py:47] - receive_response_body.started request=<Request [b'GET']>
2026-06-17 10:01:21 - httpcore.http11 - DEBUG - [_trace.py:47] - receive_response_body.complete
2026-06-17 10:01:21 - httpcore.http11 - DEBUG - [_trace.py:47] - response_closed.started
2026-06-17 10:01:21 - httpcore.http11 - DEBUG - [_trace.py:47] - response_closed.complete
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:156] - [API响应] HTTP 200
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.utils.api_client - DEBUG - [api_client.py:157] - [API响应] Headers: {'vary': 'Origin, Access-Control-Request-Method, Access-Control-Request-Headers', 'x-content-type-options': 'nosniff', 'x-xss-protection': '1; mode=block', 'x-frame-options': 'SAMEORIGIN', 'content-type': 'application/json', 'transfer-encoding': 'chunked', 'date': 'Wed, 17 Jun 2026 02:01:19 GMT', 'keep-alive': 'timeout=60', 'connection': 'keep-alive'}
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.utils.api_client - INFO - [api_client.py:162] - [API响应] 获取工作流配置成功: workflow_id=2059567220704460801
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.utils.api_client - DEBUG - [api_client.py:163] - [API响应] Body: {
"msg": "查询成功",
"code": 200,
"data": [
{
"id": "2037535460665982977",
"id": "2059567233220263937",
"createBy": "duchangyuan",
"createTime": "2026-03-27 22:21:24",
"updateBy": "admin",
"updateTime": "2026-03-28 12:21:49",
"serviceId": "2037535460632428546",
"uniqueName": "银行流水状态检测",
"name": "yinxingliushuizhuangtaijiance_7c4d9a63",
"description": "用于检测流水导入状态,检查是否全部导入完成",
"createTime": "2026-05-27 17:27:48",
"updateBy": "yy8z9",
"updateTime": "2026-06-17 00:08:32",
"serviceId": "2059567233190903810",
"uniqueName": "文件导入(支持压缩包)",
"name": "wenjiandaoruzhichiyasuobao_cdde86e3",
"description": "dd",
"visualizable": 0,
"toolPrompt": null,
"toolType": "api",
"datasourceId": null,
"sqlTemplate": null,
"sqlParams": "[]",
"sqlParams": "[{\"type\":\"string\",\"name\":\"file\",\"displayName\":\"原文件路径\",\"maxLength\":3000,\"required\":false,\"defaultValue\":\"\"},{\"type\":\"string\",\"name\":\"txt_file\",\"displayName\":\"解析后txt文件路径\",\"required\":true,\"defaultValue\":\"\"}]",
"resultType": null,
"sourceType": null,
"trainingTaskId": null,
"tableMetadataIds": null,
"executionCount": 0,
"visualizationConfigs": null,
"inputJsonSchema": "{\"type\":\"object\",\"properties\":{\"workflow_extraContext\":{\"description\":\"工作流额外的上下文参数(如环境变量等),可以是任何类型,非必填\"}},\"required\":[]}",
"inputJsonSchema": "{\"type\":\"object\",\"properties\":{\"file\":{\"description\":\"原文件路径\",\"type\":\"string\",\"maxLength\":3000},\"txt_file\":{\"description\":\"解析后txt文件路径\",\"type\":\"string\"},\"workflow_extraContext\":{\"description\":\"工作流额外的上下文参数(如环境变量等),可以是任何类型,非必填\"}},\"required\":[\"txt_file\"]}",
"outputJsonSchema": "{\"type\":\"object\",\"properties\":{\"text\":{\"type\":\"string\"}},\"additionalProperties\":false}",
"lastExecutionTime": null
}
]
}
2026-03-28 12:30:34 - lzwcai_workflow_to_mcp.main - DEBUG - [main.py:116] - API 响应原始数据: {
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - DEBUG - [main.py:116] - API 响应原始数据: {
"msg": "查询成功",
"code": 200,
"data": [
{
"id": "2037535460665982977",
"id": "2059567233220263937",
"createBy": "duchangyuan",
"createTime": "2026-03-27 22:21:24",
"updateBy": "admin",
"updateTime": "2026-03-28 12:21:49",
"serviceId": "2037535460632428546",
"uniqueName": "银行流水状态检测",
"name": "yinxingliushuizhuangtaijiance_7c4d9a63",
"description": "用于检测流水导入状态,检查是否全部导入完成",
"createTime": "2026-05-27 17:27:48",
"updateBy": "yy8z9",
"updateTime": "2026-06-17 00:08:32",
"serviceId": "2059567233190903810",
"uniqueName": "文件导入(支持压缩包)",
"name": "wenjiandaoruzhichiyasuobao_cdde86e3",
"description": "dd",
"visualizable": 0,
"toolPrompt": null,
"toolType": "api",
"datasourceId": null,
"sqlTemplate": null,
"sqlParams": "[]",
"sqlParams": "[{\"type\":\"string\",\"name\":\"file\",\"displayName\":\"原文件路径\",\"maxLength\":3000,\"required\":false,\"defaultValue\":\"\"},{\"type\":\"string\",\"name\":\"txt_file\",\"displayName\":\"解析后txt文件路径\",\"required\":true,\"defaultValue\":\"\"}]",
"resultType": null,
"sourceType": null,
"trainingTaskId": null,
"tableMetadataIds": null,
"executionCount": 0,
"visualizationConfigs": null,
"inputJsonSchema": "{\"type\":\"object\",\"properties\":{\"workflow_extraContext\":{\"description\":\"工作流额外的上下文参数(如环境变量等),可以是任何类型,非必填\"}},\"required\":[]}",
"inputJsonSchema": "{\"type\":\"object\",\"properties\":{\"file\":{\"description\":\"原文件路径\",\"type\":\"string\",\"maxLength\":3000},\"txt_file\":{\"description\":\"解析后txt文件路径\",\"type\":\"string\"},\"workflow_extraContext\":{\"description\":\"工作流额外的上下文参数(如环境变量等),可以是任何类型,非必填\"}},\"required\":[\"txt_file\"]}",
"outputJsonSchema": "{\"type\":\"object\",\"properties\":{\"text\":{\"type\":\"string\"}},\"additionalProperties\":false}",
"lastExecutionTime": null
}
]
}
2026-03-28 12:30:34 - lzwcai_workflow_to_mcp.main - DEBUG - [main.py:124] - API 响应 data 字段: [
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - DEBUG - [main.py:124] - API 响应 data 字段: [
{
"id": "2037535460665982977",
"id": "2059567233220263937",
"createBy": "duchangyuan",
"createTime": "2026-03-27 22:21:24",
"updateBy": "admin",
"updateTime": "2026-03-28 12:21:49",
"serviceId": "2037535460632428546",
"uniqueName": "银行流水状态检测",
"name": "yinxingliushuizhuangtaijiance_7c4d9a63",
"description": "用于检测流水导入状态,检查是否全部导入完成",
"createTime": "2026-05-27 17:27:48",
"updateBy": "yy8z9",
"updateTime": "2026-06-17 00:08:32",
"serviceId": "2059567233190903810",
"uniqueName": "文件导入(支持压缩包)",
"name": "wenjiandaoruzhichiyasuobao_cdde86e3",
"description": "dd",
"visualizable": 0,
"toolPrompt": null,
"toolType": "api",
"datasourceId": null,
"sqlTemplate": null,
"sqlParams": "[]",
"sqlParams": "[{\"type\":\"string\",\"name\":\"file\",\"displayName\":\"原文件路径\",\"maxLength\":3000,\"required\":false,\"defaultValue\":\"\"},{\"type\":\"string\",\"name\":\"txt_file\",\"displayName\":\"解析后txt文件路径\",\"required\":true,\"defaultValue\":\"\"}]",
"resultType": null,
"sourceType": null,
"trainingTaskId": null,
"tableMetadataIds": null,
"executionCount": 0,
"visualizationConfigs": null,
"inputJsonSchema": "{\"type\":\"object\",\"properties\":{\"workflow_extraContext\":{\"description\":\"工作流额外的上下文参数(如环境变量等),可以是任何类型,非必填\"}},\"required\":[]}",
"inputJsonSchema": "{\"type\":\"object\",\"properties\":{\"file\":{\"description\":\"原文件路径\",\"type\":\"string\",\"maxLength\":3000},\"txt_file\":{\"description\":\"解析后txt文件路径\",\"type\":\"string\"},\"workflow_extraContext\":{\"description\":\"工作流额外的上下文参数(如环境变量等),可以是任何类型,非必填\"}},\"required\":[\"txt_file\"]}",
"outputJsonSchema": "{\"type\":\"object\",\"properties\":{\"text\":{\"type\":\"string\"}},\"additionalProperties\":false}",
"lastExecutionTime": null
}
]
2026-03-28 12:30:34 - lzwcai_workflow_to_mcp.main - INFO - [main.py:135] - 从 API 加载工作流配置成功工作流ID: 2037527155235225601, 配置数量: 1
2026-03-28 12:30:34 - lzwcai_workflow_to_mcp.main - INFO - [main.py:165] - 已加载 1 个工具配置
2026-03-28 12:30:34 - lzwcai_workflow_to_mcp.main - INFO - [main.py:352] - 开始运行 MCP Server (stdio 模式)
2026-03-28 12:30:34 - asyncio - DEBUG - [proactor_events.py:634] - Using proactor: IocpProactor
2026-03-28 12:30:34 - mcp.server.lowlevel.server - DEBUG - [server.py:675] - Received message: root=InitializedNotification(method='notifications/initialized', params=None, jsonrpc='2.0')
2026-03-28 12:30:40 - mcp.server.lowlevel.server - DEBUG - [server.py:675] - Received message: <mcp.shared.session.RequestResponder object at 0x0000016702D378C0>
2026-03-28 12:30:40 - mcp.server.lowlevel.server - INFO - [server.py:720] - Processing request of type ListToolsRequest
2026-03-28 12:30:40 - mcp.server.lowlevel.server - DEBUG - [server.py:723] - Dispatching request of type ListToolsRequest
2026-03-28 12:30:40 - lzwcai_workflow_to_mcp.main - INFO - [main.py:171] - 收到 ListTools 请求,当前配置数量: 1
2026-03-28 12:30:40 - lzwcai_workflow_to_mcp.main - DEBUG - [main.py:178] - 处理工具配置: name=yinxingliushuizhuangtaijiance_7c4d9a63, description=用于检测流水导入状态,检查是否全部导入完成...
2026-03-28 12:30:40 - lzwcai_workflow_to_mcp.main - DEBUG - [main.py:185] - 从 sqlParams 转换的 inputSchema: {"type": "object", "properties": {}, "required": []}
2026-03-28 12:30:40 - lzwcai_workflow_to_mcp.main - INFO - [main.py:237] - ListTools 响应: 返回 1 个工具
2026-03-28 12:30:40 - mcp.server.lowlevel.server - DEBUG - [server.py:790] - Response sent
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - INFO - [main.py:135] - 从 API 加载工作流配置成功工作流ID: 2059567220704460801, 配置数量: 1
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - INFO - [main.py:165] - 已加载 1 个工具配置
2026-06-17 10:01:21 - lzwcai_workflow_to_mcp.main - INFO - [main.py:359] - 开始运行 MCP Server (stdio 模式)
2026-06-17 10:01:21 - asyncio - DEBUG - [proactor_events.py:634] - Using proactor: IocpProactor
2026-06-17 10:01:21 - mcp.server.lowlevel.server - DEBUG - [server.py:675] - Received message: root=InitializedNotification(method='notifications/initialized', params=None, jsonrpc='2.0')

View File

@@ -288,10 +288,17 @@ async def handle_call_tool(
try:
# 调用工作流执行API
result = execute_workflow(request_data)
# 注意:execute_workflow 内部是同步阻塞调用(同步 httpx.Client +
# poll_workflow_result 的 time.sleep 轮询)。直接在 async handler 里调用,
# 会在工作流执行的整个时长内(最长 600s霸占单线程 asyncio 的 event loop
# 导致 MCP SDK 为其他请求 start_soon 出来的 tasklist_tools / ping /
# 其他 call_tool全部拿不到 CPU 时间片而饿死——表现为高并发下其他会话
# 的 preflight/list_tools 超时ConnectionError: ... TimeoutError
# 放到线程池执行后event loop 立即解放,可继续并发处理其他请求。
result = await anyio.to_thread.run_sync(execute_workflow, request_data)
logger.info(f"工作流执行成功: {workflow_id}")
logger.debug(f"工作流执行结果: {json.dumps(result, ensure_ascii=False, indent=2)}")
# 提取 final_output 最后一个节点的值
result = extract_final_output(result)
except Exception as e:

View File

@@ -7,8 +7,8 @@ import os
if __name__ == "__main__":
# 设置环境变量
os.environ["workflowId"] = "2037527155235225601"
os.environ["workflowExecuteKey"] = "wf_bd39a583670c42ceab48b3353bf2ba43"
os.environ["workflowId"] = "2059567220704460801"
os.environ["workflowExecuteKey"] = "wf_3782054fa0d345df973dedf0775d98e7"
os.environ["backendBaseUrl"] = "http://192.168.2.236:8088"
# Import and run the actual MCP server

View File

@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
[project]
name = "lzwcai-workflow-to-mcp"
version = "0.1.9"
version = "0.1.10"
description = "MCP server for executing business SQL queries with dynamic tool generation"
readme = "README.md"
requires-python = ">=3.10"