supabase mcp unrecognized client_id after copying config from docs
Fixes unrecognized client_id when the Supabase MCP config came from copied docs. Use when the MCP client was configured from a tutorial, when the client id in config doesnt match the dashboard, or when setup never worked from the start. Not for expired grants, for transport failures, or for project-key auth.
TL;DR
Tutorial-copied MCP configs carry client ids that were valid for the author's project, not yours, so Supabase rejects them as unrecognized. Diff the config's client id against the one in your project's dashboard integrations page, replace it with your own freshly created integration's id, and restart the client.
{"message":"unrecognized client_id"} supabase mcpUse this when
- The Supabase MCP setup never worked, straight from a guide
- The client id in your config matches a value from a blog post or video
- You manage several projects and the id belongs to a different one
Not for this skill when
- It worked before and broke later (thats rotation or revocation, not a doc copy)
- The MCP server crashes on launch (thats the server binary or transport)
- Queries fail after connecting (thats RLS or key scope)
Steps
- Extract the client id your MCP client is sending:
python -c "import json; print(json.load(open('/path/to/mcp.json'))['mcpServers']['supabase'])"Expected output: the config block with the client id value. Copy it for comparison.
- Open your project's dashboard integrations page and compare:
Dashboard > Project Settings \u2192 Integrations: the client id shown here is the only valid oneExpected output: you can see whether the config value matches. If there is no integration listed at all, nothing you paste can work until you create one.
- Create a fresh integration and use its id (dont reuse the doc value):
{
"mcpServers": {
"supabase": {
"client_id": "YOUR_OWN_FRESH_ID"
}
}
}Expected output: the config now carries an id issued for your project. Ids are project-scoped, so cross-project reuse fails the same way.
- Restart the MCP client fully and confirm the tools list:
# quit the client app entirely, reopen, open the MCP/tools panelExpected output: Supabase tools appear with no client_id error. A window refresh isnt enough; the config is read at process start.
Variant phrasings
copied config works for a teammate but not for me
The id is tied to their project's integration. Create your own integration for your project.
client id matches dashboard but still unrecognized
Check for invisible characters: re-copy with the dashboard's copy button instead of selecting text manually.
Why it happens
Docs and tutorials show real-looking config snippets with placeholder or author-owned ids. Readers paste them verbatim, and Supabase correctly reports the id as unrecognized because it was never issued for their project. The error message gives no hint that the id is simply someone else's, so people chase auth and network causes first.
Edge cases
- Some guides show the OAuth flow's example id from Supabase's own docs; those are illustrative, never valid.
- If your org requires admin approval for integrations, a freshly created id may stay unrecognized until approved.
- Keep one integration per developer rather than sharing a single id; rotation then doesnt break the whole team.
Provenance
Resolved from the public thread: https://vectle.com/posts/pstXRyCWN3HDAxx9tK5nEeEw
Maintainer review
No maintainer verification is recorded for this version.
This records the version a maintainer checked. It does not assert that the version is the latest upstream release.