Skip to content

Commit 1815c1f

Browse files
committed
chore: add mcp_tool_ids parameter to support multiple MCP Tool IDs
1 parent 33b6e0c commit 1815c1f

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

apps/application/flow/step_node/ai_chat_step_node/i_chat_node.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class ChatNodeSerializer(serializers.Serializer):
3434
mcp_enable = serializers.BooleanField(required=False, label=_("Whether to enable MCP"))
3535
mcp_servers = serializers.JSONField(required=False, label=_("MCP Server"))
3636
mcp_tool_id = serializers.CharField(required=False, allow_blank=True, allow_null=True, label=_("MCP Tool ID"))
37+
mcp_tool_ids = serializers.ListField(child=serializers.UUIDField(), required=False, allow_empty=True, label=_("MCP Tool IDs"), )
3738
mcp_source = serializers.CharField(required=False, allow_blank=True, allow_null=True, label=_("MCP Source"))
3839

3940
tool_enable = serializers.BooleanField(required=False, default=False, label=_("Whether to enable tools"))
@@ -57,7 +58,7 @@ def execute(self, model_id, system, prompt, dialogue_number, history_chat_record
5758
model_setting=None,
5859
mcp_enable=False,
5960
mcp_servers=None,
60-
mcp_tool_id=None,
61+
mcp_tool_ids=None,
6162
mcp_source=None,
6263
tool_enable=False,
6364
tool_ids=None,

apps/application/flow/step_node/ai_chat_step_node/impl/base_chat_node.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ def execute(self, model_id, system, prompt, dialogue_number, history_chat_record
219219
mcp_enable=False,
220220
mcp_servers=None,
221221
mcp_tool_id=None,
222+
mcp_tool_ids=None,
222223
mcp_source=None,
223224
tool_enable=False,
224225
tool_ids=None,
@@ -247,7 +248,7 @@ def execute(self, model_id, system, prompt, dialogue_number, history_chat_record
247248

248249
# 处理 MCP 请求
249250
mcp_result = self._handle_mcp_request(
250-
mcp_enable, tool_enable, mcp_source, mcp_servers, mcp_tool_id, tool_ids, chat_model, message_list,
251+
mcp_enable, tool_enable, mcp_source, mcp_servers, mcp_tool_id, mcp_tool_ids, tool_ids, chat_model, message_list,
251252
history_message, question
252253
)
253254
if mcp_result:
@@ -264,7 +265,7 @@ def execute(self, model_id, system, prompt, dialogue_number, history_chat_record
264265
'history_message': history_message, 'question': question.content}, {},
265266
_write_context=write_context)
266267

267-
def _handle_mcp_request(self, mcp_enable, tool_enable, mcp_source, mcp_servers, mcp_tool_id, tool_ids,
268+
def _handle_mcp_request(self, mcp_enable, tool_enable, mcp_source, mcp_servers, mcp_tool_id, mcp_tool_ids, tool_ids,
268269
chat_model, message_list, history_message, question):
269270
if not mcp_enable and not tool_enable:
270271
return None
@@ -275,12 +276,18 @@ def _handle_mcp_request(self, mcp_enable, tool_enable, mcp_source, mcp_servers,
275276
if mcp_source is None:
276277
mcp_source = 'custom'
277278
if mcp_enable:
279+
# 兼容老数据
280+
if not mcp_tool_ids:
281+
mcp_tool_ids = []
282+
if mcp_tool_id:
283+
mcp_tool_ids = list(set(mcp_tool_ids + [mcp_tool_id]))
278284
if mcp_source == 'custom' and mcp_servers is not None and '"stdio"' not in mcp_servers:
279285
mcp_servers_config = json.loads(mcp_servers)
280-
elif mcp_tool_id:
281-
mcp_tool = QuerySet(Tool).filter(id=mcp_tool_id).first()
282-
if mcp_tool and mcp_tool.is_active:
283-
mcp_servers_config = json.loads(mcp_tool.code)
286+
elif mcp_tool_ids:
287+
mcp_tools = QuerySet(Tool).filter(id__in=mcp_tool_ids).values()
288+
for mcp_tool in mcp_tools:
289+
if mcp_tool and mcp_tool['is_active']:
290+
mcp_servers_config = {**mcp_servers_config, **json.loads(mcp_tool['code'])}
284291

285292
if tool_enable:
286293
if tool_ids and len(tool_ids) > 0: # 如果有工具ID,则将其转换为MCP

0 commit comments

Comments
 (0)