@@ -165,35 +165,55 @@ def _encrypt_credentials(
165165 return EncryptedCredentials (** encrypted )
166166
167167
168+ def _server_connection_name (name : str ) -> str :
169+ """Derive the connection name for a server from its slug or name.
170+
171+ Connection names use dashes instead of slashes.
172+ E.g. "dedalus-labs/gmail-mcp" -> "dedalus-labs-gmail-mcp".
173+
174+ Args:
175+ name: Server slug, URL, or name string.
176+
177+ Returns:
178+ Connection name with slashes replaced by dashes.
179+
180+ """
181+ return name .replace ("/" , "-" )
182+
183+
168184def _embed_credentials (
169185 servers : List [MCPServerItem ],
170186 encrypted : EncryptedCredentials ,
171187) -> List [MCPServerSpec ]:
172188 """Embed encrypted credentials into each server spec.
173189
174- Converts slug strings to full specs and adds credentials to all servers .
190+ Each server receives only its own credentials, matched by connection name .
175191
176192 Args:
177193 servers: Serialized MCP servers (slug strings or spec dicts).
178194 encrypted: EncryptedCredentials instance.
179195
180196 Returns:
181- List of MCPServerSpec dicts with credentials embedded.
197+ List of MCPServerSpec dicts with per-server credentials embedded.
182198
183199 """
184- creds_dict = encrypted .to_dict ()
200+ all_creds = encrypted .to_dict ()
185201 result : List [MCPServerSpec ] = []
186202
187203 for server in servers :
188204 if isinstance (server , str ):
205+ name = server
206+ conn_name = _server_connection_name (name )
207+ server_creds = {k : v for k , v in all_creds .items () if k == conn_name } or None
189208 if server .startswith (("http://" , "https://" )):
190- result .append ({"url" : server , "name" : server , "credentials" : creds_dict })
209+ result .append ({"url" : server , "name" : name , "credentials" : server_creds })
191210 else :
192- result .append ({"slug" : server , "name" : server , "credentials" : creds_dict })
211+ result .append ({"slug" : server , "name" : name , "credentials" : server_creds })
193212 elif isinstance (server , dict ):
194- # Existing spec -> add name (if missing) and credentials
195213 name = server .get ("name" ) or server .get ("slug" ) or server .get ("url" ) or ""
196- spec : MCPServerSpec = {** server , "name" : name , "credentials" : creds_dict }
214+ conn_name = _server_connection_name (name )
215+ server_creds = {k : v for k , v in all_creds .items () if k == conn_name } or None
216+ spec : MCPServerSpec = {** server , "name" : name , "credentials" : server_creds }
197217 result .append (spec )
198218
199219 return result
0 commit comments