Skip to content

Commit 04ece4d

Browse files
suluyanasuluyan
andauthored
refine mcp connect&call error (#704)
Co-authored-by: suluyan <suluyan.sly@alibaba-inc.com>
1 parent eb6b8ff commit 04ece4d

1 file changed

Lines changed: 21 additions & 11 deletions

File tree

ms_agent/tools/mcp_client.py

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,12 @@ async def call_tool(self, server_name: str, tool_name: str,
6666
if response.isError:
6767
sep = '\n\n'
6868
if all(isinstance(item, str) for item in response.content):
69-
return f'execute error: {sep.join(response.content)}'
69+
return f'execute tool call error: [{server_name}]{tool_name}, {sep.join(response.content)}'
7070
else:
7171
item_list = []
7272
for item in response.content:
7373
item_list.append(item.text)
74-
return f'execute error: {sep.join(item_list)}'
74+
return f'execute tool call error: [{server_name}]{tool_name}, {sep.join(item_list)}'
7575
for content in response.content:
7676
if content.type == 'text':
7777
texts.append(content.text)
@@ -205,16 +205,26 @@ async def connect(self):
205205
assert self.mcp_config, 'MCP config is required'
206206
envs = Env.load_env()
207207
mcp_config = self.mcp_config['mcpServers']
208+
error = dict()
208209
for name, server in mcp_config.items():
209-
env_dict = server.pop('env', {})
210-
env_dict = {
211-
key: value if value else envs.get(key, '')
212-
for key, value in env_dict.items()
213-
}
214-
if 'exclude' in server:
215-
self._exclude_functions[name] = server.pop('exclude')
216-
await self.connect_to_server(
217-
server_name=name, env=env_dict, **server)
210+
try:
211+
env_dict = server.pop('env', {})
212+
env_dict = {
213+
key: value if value else envs.get(key, '')
214+
for key, value in env_dict.items()
215+
}
216+
if 'exclude' in server:
217+
self._exclude_functions[name] = server.pop('exclude')
218+
await self.connect_to_server(
219+
server_name=name, env=env_dict, **server)
220+
except BaseException as exc:
221+
error[name] = str(exc)
222+
if error:
223+
error_messages = '; '.join(f'`{srv}`: {msg}'
224+
for srv, msg in error.items())
225+
raise ConnectionError(
226+
f'MCP connections failed for: {error_messages}. Please check mcp configurations and retry.'
227+
)
218228

219229
async def cleanup(self):
220230
"""Clean up resources"""

0 commit comments

Comments
 (0)