@@ -33,6 +33,11 @@ def resolve_service_name(sandbox: Any, logical_name: str) -> str:
3333 (comma-separated) contains logical_name. Fallback: return logical_name.
3434 """
3535 mcp_config = getattr (sandbox , "mcp_config" , None ) or getattr (sandbox , "_mcp_config" , None )
36+ return resolve_service_name_from_config (mcp_config , logical_name )
37+
38+
39+ def resolve_service_name_from_config (mcp_config : Any , logical_name : str ) -> str :
40+ """Resolve a logical service name against an MCP config dict."""
3641 if not mcp_config :
3742 return logical_name
3843 servers = mcp_config .get ("mcpServers" ) or {}
@@ -48,9 +53,41 @@ def resolve_service_name(sandbox: Any, logical_name: str) -> str:
4853 names = [n .strip () for n in mcp_servers_header .split ("," ) if n .strip ()]
4954 if logical_name in names :
5055 return key
56+ server_suffix_alias = f"{ logical_name } -server"
57+ if server_suffix_alias in servers :
58+ return server_suffix_alias
59+ for key in servers :
60+ if str (key ).strip ().lower ().endswith (f"-{ server_suffix_alias } " ):
61+ return key
5162 return logical_name
5263
5364
65+ def service_matches_logical_name (
66+ mcp_config : Any ,
67+ server_name : str ,
68+ logical_name : str ,
69+ ) -> bool :
70+ """Return whether a concrete server name should be treated as a logical service."""
71+ if not server_name :
72+ return False
73+ normalized_server_name = str (server_name ).strip ()
74+ if normalized_server_name == logical_name :
75+ return True
76+
77+ servers = (mcp_config or {}).get ("mcpServers" ) or {}
78+ server_config = servers .get (normalized_server_name , {})
79+ headers = server_config .get ("headers" ) or {}
80+ mcp_servers_header = (headers .get ("MCP_SERVERS" ) or "" ).strip ()
81+ if mcp_servers_header :
82+ names = [n .strip () for n in mcp_servers_header .split ("," ) if n .strip ()]
83+ if logical_name in names :
84+ return True
85+
86+ server_suffix_alias = f"{ logical_name } -server"
87+ normalized_lower = normalized_server_name .lower ()
88+ return normalized_lower == server_suffix_alias or normalized_lower .endswith (f"-{ server_suffix_alias } " )
89+
90+
5491def _parse_action_results (results : List [Any ]) -> Dict [str , Any ]:
5592 """Parse List[ActionResult] from call_tool into normalized dict."""
5693 if not results :
0 commit comments