@@ -167,6 +167,10 @@ async def client_streams(
167
167
def id (self ) -> str | None :
168
168
return self ._id
169
169
170
+ @id .setter
171
+ def id (self , value : str | None ):
172
+ self ._id = value
173
+
170
174
@property
171
175
def label (self ) -> str :
172
176
if self .id :
@@ -414,6 +418,9 @@ def _get_content(
414
418
else :
415
419
assert_never (resource )
416
420
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
+
417
424
418
425
class MCPServerStdio (MCPServer ):
419
426
"""Runs an MCP server in a subprocess and communicates with it over stdin/stdout.
@@ -568,10 +575,10 @@ def __repr__(self) -> str:
568
575
return f'{ self .__class__ .__name__ } ({ ", " .join (repr_args )} )'
569
576
570
577
def __eq__ (self , value : object , / ) -> bool :
571
- if not isinstance (value , MCPServerStdio ):
572
- return False # pragma: no cover
573
578
return (
574
- self .command == value .command
579
+ super ().__eq__ (value )
580
+ and isinstance (value , MCPServerStdio )
581
+ and self .command == value .command
575
582
and self .args == value .args
576
583
and self .env == value .env
577
584
and self .cwd == value .cwd
@@ -809,9 +816,7 @@ def _transport_client(self):
809
816
return sse_client # pragma: no cover
810
817
811
818
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
815
820
816
821
817
822
@deprecated ('The `MCPServerHTTP` class is deprecated, use `MCPServerSSE` instead.' )
@@ -885,9 +890,7 @@ def _transport_client(self):
885
890
return streamablehttp_client # pragma: no cover
886
891
887
892
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
891
894
892
895
893
896
ToolResult = (
@@ -964,4 +967,11 @@ def load_mcp_servers(config_path: str | Path) -> list[MCPServerStdio | MCPServer
964
967
raise FileNotFoundError (f'Config file { config_path } not found' )
965
968
966
969
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