From 6c12c32fb1c1ea9d09981c646d1c01e5c4608590 Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Wed, 24 Jun 2026 00:13:58 -0500 Subject: [PATCH] fix(mcp): prevent resource key collisions (#33596) --- packages/opencode/src/mcp/catalog.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/mcp/catalog.ts b/packages/opencode/src/mcp/catalog.ts index 0cd2238edf..1f77d1da59 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 }, ]), )