Connector URL is read-only: mis-registered MCP connector cannot be fixed
Summary
A custom MCP connector was created with an incorrect URL. It cannot be fixed, because the connector URL is read-only in the claude.ai Connectors UI — there is no edit affordance. Creating a replacement custom connector pointed at the correct, spec-compliant endpoint also fails.
The net effect: a healthy MCP server is completely unreachable from Claude, with no workaround available through the UI.
Environment
- Claude Code (CLI) + claude.ai Connectors
- MCP server: self-hosted Metabase v0.62.3.2, behind Cloudflare + nginx/1.30.2
- Hostname redacted below as
metabase.example.com - Date: 2026-08-07
What happened
The connector was registered against https://metabase.example.com/admin/metabot/mcp. That is a front-end admin page route, not the MCP API route — an easy mistake, since it is the URL shown in the browser when configuring the feature in Metabase.
A JSON-RPC initialize against it returns:
HTTP/2 200
content-length: 0
HTTP 200 with an empty body, and intermittently 502 origin_bad_gateway from Cloudflare ("origin web server returned an invalid or incomplete response"), consistent with an empty upstream reply. It can never complete an MCP handshake.
The correct endpoint is https://metabase.example.com/api/metabase-mcp.
The correct endpoint is fully spec-compliant
POST /api/metabase-mcp returns a proper challenge:
HTTP/2 401
www-authenticate: Bearer realm="mcp"
resource_metadata="https://metabase.example.com/.well-known/oauth-protected-resource/api/metabase-mcp"
{"jsonrpc":"2.0","id":null,"error":{"code":-32603,"message":"Authentication required"}}
- Protected-resource metadata →
200,bearer_methods_supported: ["header"] - Authorization-server metadata →
200, PKCES256,authorization_code+refresh_token,registration_endpointadvertised - Dynamic client registration works →
POST /oauth/registerreturns201with aclient_id, acceptinghttps://claude.ai/api/mcp/auth_callbackas a redirect URI withtoken_endpoint_auth_method: none
Every server-side prerequisite for an MCP OAuth connector is present and functioning.
Bugs
1. A connector's URL cannot be edited or corrected.
The connector detail page (Settings → Connectors → connector) renders the URL as read-only text with a copy button and a single Connect action. When the URL is wrong, the page shows only:
⚠ Connection issue Couldn't connect to the server. Check that the URL points to a valid MCP server.
The message asks the user to check the URL while providing no way to change it. A connector created with a bad URL appears to be unrecoverable through the UI.
2. Creating a new custom connector with the correct URL also fails.
Attempted as a workaround; it did not connect. I do not have the error text from this attempt, so I can't say whether the failure is at authorization, at the callback, or in validation before the handshake. Flagging it as-is rather than speculating.
3. A broken connector blocks the local-server workaround.
Adding the server locally works:
claude mcp add --transport http --scope user metabase https://metabase.example.com/api/metabase-mcp
claude mcp list then reports it as reachable (! Needs authentication). But every /mcp invocation retries the broken claude.ai connector first and surfaces its 502, so the OAuth flow for the local entry is never reached in practice.
Requests
- Make the connector URL editable, or provide a clear delete path for a mis-registered connector.
- Investigate why a fresh custom connector fails against a spec-compliant endpoint (DCR + PKCE + protected-resource metadata all verified working).
- Improve the failure message: distinguish "this URL is not an MCP endpoint" (200/empty body, no
WWW-Authenticate) from "authentication failed". The current wording points at the URL but offers no way to act on it.
Note for other users hitting this
If you configured a Metabase MCP connector from the admin page URL (/admin/metabot/mcp), that is not the MCP endpoint. Use /api/metabase-mcp.