Our connector marketplace has 25 official third-party MCP servers behind it. When we built the one-click "Connect" button, the plan was simple: read the provider's OAuth metadata, and if it advertises dynamic client registration, register ourselves on the spot and skip asking the user for anything. We tested that assumption against all 25 in production. Ten of them failed it.
Bug 1 — a middle dot broke Calendly's registration
Symptom: the Calendly tile's "Connect" button opened a popup, then closed immediately with a generic error. No OAuth screen, no token, nothing in our logs but a failed registration call.
Cause: our client sends a client_name of Command+K · {server name} on every dynamic registration request, so a user connecting Calendly would see "Command+K · Calendly" listed in their Calendly account. Calendly's authorization server enforces a strict character allowlist on that field. The middle dot isn't on it. The registration came back rejected, and our wizard had no idea why — it just surfaced "couldn't connect."
Fix: sanitize client_name to [A-Za-z0-9 -] before it leaves our server, in one place:
opts.clientName.normalize("NFKD").replace(/[^A-Za-z0-9 -]+/g, " "), then trimmed and capped at 60 characters.- Any authorization server with a strict charset now sees a name it accepts. Calendly registers with a 201 and connects in one click.
Bug 2 — advertising registration isn't the same as accepting it
Symptom: Intercom, Asana, ClickUp, Vercel, Square, Slack, HubSpot, Salesforce, Figma and Box all publish a registration_endpoint in their OAuth discovery metadata — the field our wizard checked to decide whether a provider was "one-click." All ten failed when we actually tried it: some returned a 403, some redirected to a login page instead of JSON, one enforced a redirect-URI allowlist that a first-time client can't be on. From the outside, the failure looked identical to Bug 1 — a popup that closes with nothing to show for it.
Cause: a registration_endpoint existing in metadata is a claim, not a guarantee. Our discovery probe treated the field's presence as proof that RFC 7591 self-registration would work. It doesn't test that the provider actually accepts a registration from a client it's never seen before — several of these ten gate the endpoint to apps the provider's own team has pre-approved.
Fix: two changes. First, discovery now confirms usability with a real registration POST instead of trusting the advertised field. Second, for the ten providers where that POST fails, we reclassified the connector to a bring-your-own-OAuth-app flow: the wizard shows the callback URL to allowlist, the customer creates their own app on the provider's side, and pastes back a Client ID and Secret. It's an extra step, but it's an honest one — instead of a mysterious failure, the user sees exactly what their provider requires.
Metadata is a claim; a live POST is the proof
A third failure mode: the gate isn't OAuth at all
Freshdesk's MCP server isn't OAuth-based yet — it's an Early Access Program feature, Enterprise plans only, authenticated with a Freshdesk API key. A customer on a lower plan pasting a perfectly valid key still gets rejected, because the gate is on Freshdesk's side, not the credential. We surface that plainly in the connector's setup note rather than let someone debug a "correct" key that will never work.
What we'd tell anyone building a connector marketplace
A provider's OAuth discovery document tells you what it wants you to believe about itself. None of the ten false positives were malicious or even unusual — most enterprise identity teams gate client registration behind manual review, and RFC 7591 doesn't require them not to advertise the endpoint anyway. The only way to know which category a provider is in is to actually register a client and see what comes back, the same way we found the three protocol bugs on the client side of our gateway. Every connector in the Command+K marketplace carries the result of that test today, so the button you click either works in one click or tells you exactly what it needs from you instead.
FAQ
- Why does connecting Intercom's MCP server ask me to paste a Client ID and Secret instead of just logging in?
- Intercom's OAuth metadata advertises a registration_endpoint, which looks like dynamic client registration is supported. It isn't, in practice: the endpoint rejects a self-registered client with a 403. So the connect wizard skips DCR for Intercom and asks you to create your own Intercom app with our callback URL, then paste its Client ID and Secret. It's one extra step, not a broken integration.
- Does PostHog's MCP server support one-click connect?
- Yes. PostHog's authorization server actually accepts a self-registered client at mcp.posthog.com — we verified it with a real POST, not just by reading its metadata. Save the connector and a popup asks you to sign in with PostHog. No API key, no app to create.
- Is Freshdesk's MCP server available to every plan?
- No. Freshworks ships it as an Early Access Program feature on Enterprise plans, authenticated with your Freshdesk API key rather than OAuth. If your Freshdesk plan isn't enrolled, the connector will fail even with a correct API key — that's Freshdesk's gate, not ours.
- If an MCP server's metadata says it supports OAuth, does that mean it's one-click?
- No. A registration_endpoint field in an authorization server's metadata means the server claims to support dynamic client registration (RFC 7591). Whether a POST to that endpoint actually succeeds is a separate question — plenty of real, production MCP servers advertise the field and then reject the registration. Verify with a live call before you build a flow that assumes it works.