feat(workflow): support MCP tool type with operation-to-tool_name mapping
This commit is contained in:
@@ -11,6 +11,7 @@ from app.core.workflow.nodes.tool.config import ToolNodeConfig
|
|||||||
from app.core.workflow.variable.base_variable import VariableType
|
from app.core.workflow.variable.base_variable import VariableType
|
||||||
from app.db import get_db_read
|
from app.db import get_db_read
|
||||||
from app.services.tool_service import ToolService
|
from app.services.tool_service import ToolService
|
||||||
|
from app.models.tool_model import ToolType
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -76,6 +77,18 @@ class ToolNode(BaseNode):
|
|||||||
# 执行工具
|
# 执行工具
|
||||||
with get_db_read() as db:
|
with get_db_read() as db:
|
||||||
tool_service = ToolService(db)
|
tool_service = ToolService(db)
|
||||||
|
|
||||||
|
# MCP 工具:将 operation 映射为 tool_name,其余参数包装进 arguments
|
||||||
|
tool_instance = tool_service.get_tool_instance(self.typed_config.tool_id, tenant_id)
|
||||||
|
if tool_instance and tool_instance.tool_type == ToolType.MCP:
|
||||||
|
operation = rendered_parameters.pop("operation", None)
|
||||||
|
if operation:
|
||||||
|
old_params = rendered_parameters
|
||||||
|
rendered_parameters = {
|
||||||
|
"tool_name": operation,
|
||||||
|
"arguments": old_params
|
||||||
|
}
|
||||||
|
|
||||||
result = await tool_service.execute_tool(
|
result = await tool_service.execute_tool(
|
||||||
tool_id=self.typed_config.tool_id,
|
tool_id=self.typed_config.tool_id,
|
||||||
parameters=rendered_parameters,
|
parameters=rendered_parameters,
|
||||||
|
|||||||
Reference in New Issue
Block a user