Skip to content

Commit c1a214b

Browse files
committed
feat: add variable handling for tool parameters in base_chat_node and base_mcp_node
--story=1019430 --user=刘瑞斌 GitHub#3113 【MCP调用】MCP配置支持传入变量 https://www.tapd.cn/62980211/s/1775665
1 parent b9ac3b9 commit c1a214b

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,11 +220,13 @@ def _handle_mcp_request(self, mcp_enable, tool_enable, mcp_source, mcp_servers,
220220
mcp_tool_ids = list(set(mcp_tool_ids + [mcp_tool_id]))
221221
if mcp_source == 'custom' and mcp_servers is not None and '"stdio"' not in mcp_servers:
222222
mcp_servers_config = json.loads(mcp_servers)
223+
mcp_servers_config = self.handle_variables(mcp_servers_config)
223224
elif mcp_tool_ids:
224225
mcp_tools = QuerySet(Tool).filter(id__in=mcp_tool_ids).values()
225226
for mcp_tool in mcp_tools:
226227
if mcp_tool and mcp_tool['is_active']:
227228
mcp_servers_config = {**mcp_servers_config, **json.loads(mcp_tool['code'])}
229+
mcp_servers_config = self.handle_variables(mcp_servers_config)
228230

229231
if tool_enable:
230232
if tool_ids and len(tool_ids) > 0: # 如果有工具ID,则将其转换为MCP
@@ -253,6 +255,22 @@ def _handle_mcp_request(self, mcp_enable, tool_enable, mcp_source, mcp_servers,
253255

254256
return None
255257

258+
def handle_variables(self, tool_params):
259+
# 处理参数中的变量
260+
for k, v in tool_params.items():
261+
if type(v) == str:
262+
tool_params[k] = self.workflow_manage.generate_prompt(tool_params[k])
263+
if type(v) == dict:
264+
self.handle_variables(v)
265+
if (type(v) == list) and (type(v[0]) == str):
266+
tool_params[k] = self.get_reference_content(v)
267+
return tool_params
268+
269+
def get_reference_content(self, fields: List[str]):
270+
return str(self.workflow_manage.get_reference_field(
271+
fields[0],
272+
fields[1:]))
273+
256274
@staticmethod
257275
def get_history_message(history_chat_record, dialogue_number, dialogue_type, runtime_node_id):
258276
start_index = len(history_chat_record) - dialogue_number

apps/application/flow/step_node/mcp_node/impl/base_mcp_node.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@ def execute(self, mcp_servers, mcp_server, mcp_tool, mcp_tool_id, mcp_source, to
2727
if not tool.is_active:
2828
raise ValueError(f"Tool with ID {mcp_tool_id} is inactive.")
2929
servers = json.loads(tool.code)
30+
servers = self.handle_variables(servers) # 处理servers中的变量
3031
params = json.loads(json.dumps(tool_params))
3132
params = self.handle_variables(params)
3233
else:
3334
servers = json.loads(mcp_servers)
35+
servers = self.handle_variables(servers) # 处理servers中的变量
3436
params = json.loads(json.dumps(tool_params))
3537
params = self.handle_variables(params)
3638

0 commit comments

Comments
 (0)