diff --git a/packages/opencode/src/mcp/catalog.ts b/packages/opencode/src/mcp/catalog.ts index 0cd2238edffe..1f77d1da59f7 100644 --- a/packages/opencode/src/mcp/catalog.ts +++ b/packages/opencode/src/mcp/catalog.ts @@ -100,9 +100,11 @@ export function fetch( ), Effect.map((items) => { const sanitizedClient = sanitize(clientName) + // Escape both the separator and escape marker so `server:uri` keys remain unambiguous. + const resourceClient = clientName.replaceAll("%", "%25").replaceAll(":", "%3A") return Object.fromEntries( items.map((item) => [ - key ? clientName + ":" + key(item) : sanitizedClient + ":" + sanitize(item.name), + key ? resourceClient + ":" + key(item) : sanitizedClient + ":" + sanitize(item.name), { ...item, client: clientName }, ]), )