chore: add mcp_tool_ids parameter to support multiple MCP Tool IDs
parent
f20235d662
commit
9a4f1eda99
|
|
@ -34,6 +34,7 @@ class ChatNodeSerializer(serializers.Serializer):
|
||||||
mcp_enable = serializers.BooleanField(required=False, label=_("Whether to enable MCP"))
|
mcp_enable = serializers.BooleanField(required=False, label=_("Whether to enable MCP"))
|
||||||
mcp_servers = serializers.JSONField(required=False, label=_("MCP Server"))
|
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_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"))
|
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"))
|
tool_enable = serializers.BooleanField(required=False, default=False, label=_("Whether to enable tools"))
|
||||||
|
|
@ -57,7 +58,7 @@ class IChatNode(INode):
|
||||||
model_setting=None,
|
model_setting=None,
|
||||||
mcp_enable=False,
|
mcp_enable=False,
|
||||||
mcp_servers=None,
|
mcp_servers=None,
|
||||||
mcp_tool_id=None,
|
mcp_tool_ids=None,
|
||||||
mcp_source=None,
|
mcp_source=None,
|
||||||
tool_enable=False,
|
tool_enable=False,
|
||||||
tool_ids=None,
|
tool_ids=None,
|
||||||
|
|
|
||||||
|
|
@ -219,6 +219,7 @@ class BaseChatNode(IChatNode):
|
||||||
mcp_enable=False,
|
mcp_enable=False,
|
||||||
mcp_servers=None,
|
mcp_servers=None,
|
||||||
mcp_tool_id=None,
|
mcp_tool_id=None,
|
||||||
|
mcp_tool_ids=None,
|
||||||
mcp_source=None,
|
mcp_source=None,
|
||||||
tool_enable=False,
|
tool_enable=False,
|
||||||
tool_ids=None,
|
tool_ids=None,
|
||||||
|
|
@ -247,7 +248,7 @@ class BaseChatNode(IChatNode):
|
||||||
|
|
||||||
# 处理 MCP 请求
|
# 处理 MCP 请求
|
||||||
mcp_result = self._handle_mcp_request(
|
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
|
history_message, question
|
||||||
)
|
)
|
||||||
if mcp_result:
|
if mcp_result:
|
||||||
|
|
@ -264,7 +265,7 @@ class BaseChatNode(IChatNode):
|
||||||
'history_message': history_message, 'question': question.content}, {},
|
'history_message': history_message, 'question': question.content}, {},
|
||||||
_write_context=write_context)
|
_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):
|
chat_model, message_list, history_message, question):
|
||||||
if not mcp_enable and not tool_enable:
|
if not mcp_enable and not tool_enable:
|
||||||
return None
|
return None
|
||||||
|
|
@ -275,12 +276,18 @@ class BaseChatNode(IChatNode):
|
||||||
if mcp_source is None:
|
if mcp_source is None:
|
||||||
mcp_source = 'custom'
|
mcp_source = 'custom'
|
||||||
if mcp_enable:
|
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:
|
if mcp_source == 'custom' and mcp_servers is not None and '"stdio"' not in mcp_servers:
|
||||||
mcp_servers_config = json.loads(mcp_servers)
|
mcp_servers_config = json.loads(mcp_servers)
|
||||||
elif mcp_tool_id:
|
elif mcp_tool_ids:
|
||||||
mcp_tool = QuerySet(Tool).filter(id=mcp_tool_id).first()
|
mcp_tools = QuerySet(Tool).filter(id__in=mcp_tool_ids).values()
|
||||||
if mcp_tool and mcp_tool.is_active:
|
for mcp_tool in mcp_tools:
|
||||||
mcp_servers_config = json.loads(mcp_tool.code)
|
if mcp_tool and mcp_tool['is_active']:
|
||||||
|
mcp_servers_config = {**mcp_servers_config, **json.loads(mcp_tool['code'])}
|
||||||
|
|
||||||
if tool_enable:
|
if tool_enable:
|
||||||
if tool_ids and len(tool_ids) > 0: # 如果有工具ID,则将其转换为MCP
|
if tool_ids and len(tool_ids) > 0: # 如果有工具ID,则将其转换为MCP
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue