@@ -167,6 +167,10 @@ async def client_streams(
167167 def id (self ) -> str | None :
168168 return self ._id
169169
170+ @id .setter
171+ def id (self , value : str | None ):
172+ self ._id = value
173+
170174 @property
171175 def label (self ) -> str :
172176 if self .id :
@@ -414,6 +418,9 @@ def _get_content(
414418 else :
415419 assert_never (resource )
416420
421+ def __eq__ (self , value : object , / ) -> bool :
422+ return isinstance (value , MCPServer ) and self .id == value .id and self .tool_prefix == value .tool_prefix
423+
417424
418425class MCPServerStdio (MCPServer ):
419426 """Runs an MCP server in a subprocess and communicates with it over stdin/stdout.
@@ -568,10 +575,10 @@ def __repr__(self) -> str:
568575 return f'{ self .__class__ .__name__ } ({ ", " .join (repr_args )} )'
569576
570577 def __eq__ (self , value : object , / ) -> bool :
571- if not isinstance (value , MCPServerStdio ):
572- return False # pragma: no cover
573578 return (
574- self .command == value .command
579+ super ().__eq__ (value )
580+ and isinstance (value , MCPServerStdio )
581+ and self .command == value .command
575582 and self .args == value .args
576583 and self .env == value .env
577584 and self .cwd == value .cwd
@@ -809,9 +816,7 @@ def _transport_client(self):
809816 return sse_client # pragma: no cover
810817
811818 def __eq__ (self , value : object , / ) -> bool :
812- if not isinstance (value , MCPServerSSE ):
813- return False # pragma: no cover
814- return self .url == value .url
819+ return super ().__eq__ (value ) and isinstance (value , MCPServerSSE ) and self .url == value .url
815820
816821
817822@deprecated ('The `MCPServerHTTP` class is deprecated, use `MCPServerSSE` instead.' )
@@ -885,9 +890,7 @@ def _transport_client(self):
885890 return streamablehttp_client # pragma: no cover
886891
887892 def __eq__ (self , value : object , / ) -> bool :
888- if not isinstance (value , MCPServerStreamableHTTP ):
889- return False # pragma: no cover
890- return self .url == value .url
893+ return super ().__eq__ (value ) and isinstance (value , MCPServerStreamableHTTP ) and self .url == value .url
891894
892895
893896ToolResult = (
@@ -964,4 +967,11 @@ def load_mcp_servers(config_path: str | Path) -> list[MCPServerStdio | MCPServer
964967 raise FileNotFoundError (f'Config file { config_path } not found' )
965968
966969 config = MCPServerConfig .model_validate_json (config_path .read_bytes ())
967- return list (config .mcp_servers .values ())
970+
971+ servers : list [MCPServerStdio | MCPServerStreamableHTTP | MCPServerSSE ] = []
972+ for name , server in config .mcp_servers .items ():
973+ server .id = name
974+ server .tool_prefix = name
975+ servers .append (server )
976+
977+ return servers
0 commit comments