Repository navigation
Follow up Zoo Code upstream updates: MCP oauth now validated per transport (clientId required) #3629
Copy link
Copy link
Closed
Labels
consideringenhancementNew feature or requestNew feature or requestmaintainer-scrapRough notes for AI implementation. Not for human eyes.Rough notes for AI implementation. Not for human eyes.
Description
Summary
Zoo Code's MCP schema now validates oauth for each transport (Zoo-Code-Org/Zoo-Code#2129, merged 2026-10-24 after v3.92.0, so it ships in the next release). rulesync's Roo/Zoo MCP adapter copies the canonical Claude-style oauth object into .roo/mcp.json unchanged. After the next Zoo Code release, an oauth block on a stdio or sse server, or one without clientId, makes the whole project .roo/mcp.json fail validation. Zoo then shows an error and loads none of the project MCP servers. Claude's callbackPort is also silently dropped.
Recent Releases
- v3.88.0 (2026-10-10): adds the
alwaysDenyUnapprovedCommandsauto-deny option. It lives in extension state, not in azoo-code.*VS Code setting, so rulesync cannot write it and there is no gap. - v3.90.0 (2026-10-17) and v3.92.0 (2026-10-24): providers, tool-loop detection, skills discovered through symlinked directories, MCP marketplace entries. No config-surface change.
mainafter v3.92.0: #2129 (8383de48) adds static OAuth client settings for Streamable HTTP MCP servers (#2096).
Gaps
- mcp:
oauthis now validated for each transport. InMcpHub.tsafter Claude Code permissions: supportpermissions.defaultModeandpermissions.additionalDirectories(and notesandbox.*) #2129:- stdio and sse servers declare
oauth: z.undefined(), so anyoauthvalue is rejected. - streamable-http servers accept
oauth: { clientId, scope?, redirectUri?, resource? }.clientIdis required and cannot be empty.redirectUrimust be an HTTP loopback URL with an explicit port and a/callbackpath.resourceis"auto",falseor a URL. Unknown keys are stripped. - Whole-file failure:
McpSettingsSchema.safeParseruns on the whole project file. On failure, Zoo falls back to the raw config only for global settings, not for project ones. So one bad server disables every server in.roo/mcp.json.
- stdio and sse servers declare
- rulesync side (
project; therooandzoocodetargets shareRooMcpinsrc/features/mcp/roo-mcp.ts):oauthpasses through verbatim. A dry run (generate --targets zoocode,roo --features mcp) shows two problems:- An
httpserver withoauth: { "clientId": "abc", "callbackPort": 8080 }becomes"type": "streamable-http"with the sameoauthobject. Zoo dropscallbackPort, so the fixed callback port the user set is lost. - An
sseserver withoauth: { "clientId": "abc" }is written as-is. The next Zoo Code release will reject it, and with it the whole project MCP config.
- An
- Canonical
oauthwithoutclientId: the canonicaloauthfollows Claude Code, whereclientIdis optional (for example, onlycallbackPortorauthServerMetadataUrlis set). Such a block also fails Zoo'sclientIdcheck.
Proposed Follow-up
- In the Roo/Zoo MCP conversion:
- Drop
oauthfrom stdio and sse servers, with a warning. - For streamable-http, map Claude's
callbackPorttoredirectUri: "http://127.0.0.1:<port>/callback"and passclientIdandscopethrough. DropauthServerMetadataUrl(and any other key Zoo does not know) with a warning. Drop the whole block, with a warning, whenclientIdis missing. - Optionally let a tool-scoped
zoocode.mcpServersblock carry Zoo-onlyresource("auto"/false/ URL).
- Drop
- Apply the same rules to the
rootarget, since Zoo Code reads the same.roo/mcp.json. At minimum, the warning should say why the key was dropped. - On import, map
redirectUriback tocallbackPortwhen it is a loopback/callbackURL.
References
- Add static OAuth client settings for MCP servers Zoo-Code-Org/Zoo-Code#2129 — static OAuth client settings for MCP servers (merged 2026-10-24)
- Zoo-Code-Org/Zoo-Code@8383de48 — merge commit (after the v3.92.0 tag)
- [ENHANCEMENT] Support pre-registered OAuth clients for remote MCP servers Zoo-Code-Org/Zoo-Code#2096 — upstream request
- https://github.com/Zoo-Code-Org/Zoo-Code/blob/main/src/services/mcp/McpHub.ts —
ServerConfigSchema/McpSettingsSchema - https://github.com/Zoo-Code-Org/Zoo-Code/releases/tag/v3.92.0 — latest release
- https://docs.anthropic.com/en/docs/claude-code/mcp — Claude Code
oauthfields (the canonical shape)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
consideringenhancementNew feature or requestNew feature or requestmaintainer-scrapRough notes for AI implementation. Not for human eyes.Rough notes for AI implementation. Not for human eyes.
Activity