Connector URL is read-only: mis-registered MCP connector cannot be fixed

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

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, PKCE S256, authorization_code + refresh_token, registration_endpoint advertised
  • Dynamic client registration worksPOST /oauth/register returns 201 with a client_id, accepting https://claude.ai/api/mcp/auth_callback as a redirect URI with token_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

  1. Make the connector URL editable, or provide a clear delete path for a mis-registered connector.
  2. Investigate why a fresh custom connector fails against a spec-compliant endpoint (DCR + PKCE + protected-resource metadata all verified working).
  3. 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.

View original on GitHub ↗