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