[BUG] Plugin-bundled MCP server ignores `oauth.clientId`, and Desktop offers no field to supply one

Status Open
Maintainer reply None cached
Activity 0 comments · opened Aug 4, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

An HTTP MCP server bundled in a plugin's .mcp.json with an oauth.clientId does not
have that client ID applied. Connecting fails with *"does not support automatic client
registration. Edit the connector and add an OAuth client ID"* — but the Install/Connect
UI exposes no editable OAuth client ID or secret field for a plugin-provided connector,
so the instruction in the error cannot be followed.

The same server, same URL and same client ID works when registered at user scope with
claude mcp add --client-id.

No editable OAuth client ID / secret field is presented after clicking Install. Clicking
Connect fails with (shown in Spanish in our locale):

salesforce no admite el registro automático de clientes. Edita el conector y añade un ID de cliente OAuth. Si el problema persiste, comparte esta referencia con el soporte: «ofid_4ea56caf7df01d2a»

In English: *"salesforce does not support automatic client registration. Edit the
connector and add an OAuth client ID. If the problem persists, share this reference with
support: ofid_4ea56caf7df01d2a"*

The error asks the user to add a client ID that (a) is already present in the plugin's
.mcp.json, and (b) there is no UI affordance to enter for a plugin-provided connector.

Why this looks like a bug rather than intended behaviour

The documentation states the opposite of the observed behaviour, and documents the
oauth object as valid configuration:

  • "Plugin MCP servers work identically to user-configured servers."

https://code.claude.com/docs/en/mcp#plugin-provided-mcp-servers

  • The claude mcp add-json example documents the exact shape used above:

{"type":"http","url":"...","oauth":{"clientId":"...","callbackPort":8080}}
https://code.claude.com/docs/en/mcp#use-pre-configured-oauth-credentials

  • The plugins reference lists no OAuth-related restriction on bundled MCP servers.

Restrictions that are documented for plugins (hooks, mcpServers and
permissionMode being ignored for plugin subagents) do not cover this case.

What Should Happen?

The bundled clientId and callbackPort are used for the OAuth flow, exactly as they
are for a server added with:

claude mcp add --transport http --scope user \
  --client-id <same id> --callback-port 38000 \
  salesforce https://api.salesforce.com/platform/mcp/v1/platform/sobject-reads

...which succeeds against the same endpoint.

Error Messages/Logs

Steps to Reproduce

  1. Create a minimal marketplace with one plugin that bundles an HTTP MCP server

whose provider does NOT support Dynamic Client Registration (Salesforce
Hosted MCP below), declaring a pre-registered client ID:

repro-marketplace/.claude-plugin/marketplace.json
{
"name": "repro",
"owner": { "name": "repro" },
"plugins": [
{ "name": "repro", "source": "./plugins/repro", "description": "repro" }
]
}

repro-marketplace/plugins/repro/.claude-plugin/plugin.json
{ "name": "repro", "description": "repro" }

repro-marketplace/plugins/repro/.mcp.json
{
"mcpServers": {
"salesforce": {
"type": "http",
"url": "https://api.salesforce.com/platform/mcp/v1/platform/sobject-reads",
"oauth": {
"clientId": "<consumer key of a Salesforce External Client App>",
"callbackPort": 38000
}
}
}
}

The client ID is the public consumer key of an External C
registered callback is http://localhost:38000/callback.

  1. Add the marketplace and install the plugin:

claude plugin marketplace add ./repro-marketplace
claude plugin install repro@repro

  1. Restart Claude.
  1. Open the connector and click Install. No editable OAuth c

secret field is offered at any point.

  1. Click Add, then Connect.

=> Fails with "salesforce does not support automatic clie
Edit the connector and add an OAuth client ID."
(shown in Spanish in our locale; support reference ofid_4ea56caf7df01d2a)

There is no way to act on that instruction: the client ID is already present
in the plugin's .mcp.json, and the UI exposes no field to enter one.

  1. Control: remove the plugin and register the SAME url and

user scope instead —

claude mcp add --transport http --scope user \
--client-id <same client id> --callback-port 38000 \ salesforce https://api.salesforce.com/platform/mcp/v1/p
Then /mcp -> salesforce -> Authenticate. The OAuth flow c
tools work. Only the bundling path fails.
Step 6 is the one that makes this triageable rather than "works for me" — same URL, same client ID, one path succeeds and the other doesn't, so it isolates the failure to plugin-bundled config handling.

Any DCR-less provider reproduces it; Salesforce is just what needs our org to try it.

Claude Model

None

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

Claude 1.24012.11 (09114b) 2026-08-03T15:24:21.000Z

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

iTerm2

Additional Information

_No response_

View original on GitHub ↗