chore: add mcp_tool_ids parameter to support multiple MCP Tool IDs

This commit is contained in:
CaptainB 2025-09-05 10:37:57 +08:00
parent 33b6e0ca96
commit 1815c1fa69
2 changed files with 15 additions and 7 deletions

View File

@ -34,6 +34,7 @@ class ChatNodeSerializer(serializers.Serializer):
mcp_enable = serializers.BooleanField(required=False, label=_("Whether to enable MCP"))
mcp_servers = serializers.JSONField(required=False, label=_("MCP Server"))
mcp_tool_id = serializers.CharField(required=False, allow_blank=True, allow_null=True, label=_("MCP Tool ID"))
mcp_tool_ids = serializers.ListField(child=serializers.UUIDField(), required=False, allow_empty=True, label=_("MCP Tool IDs"), )
mcp_source = serializers.CharField(required=False, allow_blank=True, allow_null=True, label=_("MCP Source"))
tool_enable = serializers.BooleanField(required=False, default=False, label=_("Whether to enable tools"))
@ -57,7 +58,7 @@ class IChatNode(INode):
model_setting=None,
mcp_enable=False,
mcp_servers=None,
mcp_tool_id=None,
mcp_tool_ids=None,
mcp_source=None,
tool_enable=False,
tool_ids=None,

View File

@ -219,6 +219,7 @@ class BaseChatNode(IChatNode):
mcp_enable=False,
mcp_servers=None,
mcp_tool_id=None,
mcp_tool_ids=None,
mcp_source=None,
tool_enable=False,
tool_ids=None,
@ -247,7 +248,7 @@ class BaseChatNode(IChatNode):
# 处理 MCP 请求
mcp_result = self._handle_mcp_request(
mcp_enable, tool_enable, mcp_source, mcp_servers, mcp_tool_id, tool_ids, chat_model, message_list,
mcp_enable, tool_enable, mcp_source, mcp_servers, mcp_tool_id, mcp_tool_ids, tool_ids, chat_model, message_list,
history_message, question
)
if mcp_result:
@ -264,7 +265,7 @@ class BaseChatNode(IChatNode):
'history_message': history_message, 'question': question.content}, {},
_write_context=write_context)
def _handle_mcp_request(self, mcp_enable, tool_enable, mcp_source, mcp_servers, mcp_tool_id, tool_ids,
def _handle_mcp_request(self, mcp_enable, tool_enable, mcp_source, mcp_servers, mcp_tool_id, mcp_tool_ids, tool_ids,
chat_model, message_list, history_message, question):
if not mcp_enable and not tool_enable:
return None
@ -275,12 +276,18 @@ class BaseChatNode(IChatNode):
if mcp_source is None:
mcp_source = 'custom'
if mcp_enable:
# 兼容老数据
if not mcp_tool_ids:
mcp_tool_ids = []
if mcp_tool_id:
mcp_tool_ids = list(set(mcp_tool_ids + [mcp_tool_id]))
if mcp_source == 'custom' and mcp_servers is not None and '"stdio"' not in mcp_servers:
mcp_servers_config = json.loads(mcp_servers)
elif mcp_tool_id:
mcp_tool = QuerySet(Tool).filter(id=mcp_tool_id).first()
if mcp_tool and mcp_tool.is_active:
mcp_servers_config = json.loads(mcp_tool.code)
elif mcp_tool_ids:
mcp_tools = QuerySet(Tool).filter(id__in=mcp_tool_ids).values()
for mcp_tool in mcp_tools:
if mcp_tool and mcp_tool['is_active']:
mcp_servers_config = {**mcp_servers_config, **json.loads(mcp_tool['code'])}
if tool_enable:
if tool_ids and len(tool_ids) > 0: # 如果有工具ID则将其转换为MCP