@@ -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