| 246 | return server_name |
| 247 | |
| 248 | async def connect(self, timeout: int = CONNECTION_TIMEOUT): |
| 249 | assert self.mcp_config, 'MCP config is required' |
| 250 | envs = Env.load_env() |
| 251 | mcp_config = self.mcp_config['mcpServers'] |
| 252 | for name, server in mcp_config.items(): |
| 253 | try: |
| 254 | env_dict = server.pop('env', {}) |
| 255 | env_dict = { |
| 256 | key: value if value else envs.get(key, '') |
| 257 | for key, value in env_dict.items() |
| 258 | } |
| 259 | if 'exclude' in server: |
| 260 | self.exclude_functions[name] = server.pop('exclude') |
| 261 | if 'include' in server: |
| 262 | self.include_functions[name] = server.pop('include') |
| 263 | assert (not self.include_functions.get(name)) or ( |
| 264 | not self.exclude_functions.get(name) |
| 265 | ), 'Set either `include` or `exclude` in tools config.' |
| 266 | timeout = server.pop('timeout', timeout) |
| 267 | await self.connect_to_server( |
| 268 | server_name=name, env=env_dict, timeout=timeout, **server) |
| 269 | except Exception as e: |
| 270 | new_eg = enhance_error(e, f'Connect `{name}` failed, details:') |
| 271 | raise new_eg from e |
| 272 | |
| 273 | async def add_mcp_config(self, mcp_config: Dict[str, Dict[str, Any]]): |
| 274 | if mcp_config is None: |