Connector · Data and infrastructure

Ask a Supabase project a question in Slack, on Supabase's MCP server.

Chickpea gives a channel a named AI teammate that holds its own Supabase connection. It signs in with OAuth and calls Supabase's MCP server, so there is no client to configure and no key to paste. The connection is pinned to one project, read-only unless you say otherwise, and Supabase asks you to use a development project rather than production.

What people ask it.

The teammate is @oncall, in #eng. Pick a scenario to watch it play.

# eng
31
Today
D
Dana
@oncall what tables are in the staging project, and how many rows in each?
👀 1
oncallAPP
Six tables in public, on the staging project. Row counts are as of now, and nothing here changed.
TableRowsSizeLast migration
orders48,21062 MBSep 15
order_items151,884188 MBSep 15
customers12,0479 MBAug 28
refunds1,9052 MBSep 15
webhook_events92,663140 MBSep 09
sessions6,4184 MBAug 12
oncall·Claude Sonnet 5·Configure
BIS
Aa
  • Tables, rows, and migrations Read only

    @oncall what tables are in the staging project, and how many rows in each@oncall which migrations landed this week, and what did they change

    Supabase's database tools list tables, extensions, and migrations, so this is one round trip and no SQL from you. Reads never need confirmation, and a long answer comes back as a table in the thread.

  • Run a query Read only

    @oncall how many orders went to failed since Monday, by error code@oncall find the customers with more than one refund this month

    Say what you want to know and the teammate writes the SQL. On a read-only connection Supabase runs every query as a read-only Postgres user, so a query that tried to change something would fail at the database rather than at the prompt.

  • Logs and advisors Read only

    @oncall what is in the API logs for the last hour, worst first@oncall what do the security and performance advisors flag on staging

    Supabase's debugging tools run read-only queries against project logs and return its security and performance advisors. Useful when a deploy went out and nobody wants to open the dashboard to find out what it did.

  • Edge functions and schema changes Asks first

    @oncall which edge functions are deployed, and when did each last change@oncall add a nullable retry_count integer to orders and apply it as a migration

    Listing or reading an edge function is a read. Deploying one, or applying a migration, changes the project, so the teammate shows what it would do and waits for a yes. It also needs your message to name that action, because a thread on its own cannot authorize one.

  • On a schedule Applies at once

    @oncall every weekday at 9am Pacific, post the advisors for staging here@oncall every Monday at 8am Eastern, post the row counts for orders and refunds

    A schedule saves on the spot. It needs an explicit time zone, runs under the Supabase connection of the person who asked, and fails with a named reason rather than running if that connection is disconnected. Supabase asks that unattended work like this run read-only.

Connect it

Five steps, from Admin or from Slack.

You sign in through a page Chickpea serves, never in Slack. The link the teammate posts is good for one action, for one teammate, for 24 hours.

  1. Pick the project. Chickpea's catalog says to use a development or test project rather than production data, and Supabase says to connect to a production project only when the task needs production evidence. Have that project's reference ready.
  2. In Chickpea Admin, open the teammate, then Connections, find Supabase, and choose Connect. Or ask in Slack, @oncall connect Supabase, and follow the link it posts.
  3. Choose who uses it. Team is one shared Supabase account that everyone who can use the teammate acts through. Personal means each member signs in as themselves.
  4. Give the project reference, then choose read-only or read and write. Read-only is the recommended default: Supabase runs every query as a read-only Postgres user. Choose Continue to sign in, and Supabase asks you to approve the organization and the projects it may reach.
  5. Chickpea connects to mcp.supabase.com/mcp and records the tools the server answered with. Ask something. @oncall what tables are in the project is a good first question, because it reads and cannot change anything.

A connection belongs to one teammate. Giving a second teammate Supabase means a second sign-in with its own consent and its own project reference, so a support teammate never inherits the project the on-call teammate can reach.

There is no built-in Chickpea skill for Supabase, and none is needed. The tools arrive from Supabase's MCP server: Chickpea connects before it saves anything, records what the server answered with, and exposes only those tools. Supabase groups them by feature, and the ones a channel uses are database (tables, extensions, migrations, SQL), debugging (logs and the security and performance advisors), edge functions, development, and docs search. Account management is switched off whenever the connection is pinned to one project. Supabase documents the server and its feature groups.

# eng
31
Today
D
Dana
@oncall connect our staging Supabase
👀 1
oncallAPP
Open this link, give it the project reference, and choose read-only or read and write. You sign in to Supabase there, not here, and only people in #eng can use the connection through me.
Sign in to Supabase
oncall·Claude Sonnet 5·Configure
oncallAPP
Supabase is connected as a team account, pinned to the staging project, with read and write. Read-only was the other choice, and Supabase recommends it for anything that runs unattended. The server answered with tools for the database, the logs and advisors, edge functions, and the docs.
oncall@oncall
Answers questions about the staging Supabase project.
has access to Supabase
1
BIS
Aa

Questions people ask

Is there an MCP for Supabase?

Yes. Supabase runs a hosted MCP server at mcp.supabase.com/mcp, and the local CLI serves one at localhost:54321/mcp. Sign-in uses dynamic client registration against your Supabase organization, so there is no token to create. Chickpea connects to that same hosted server, which is how a teammate in Slack uses it with no client installed.

Is the Supabase MCP read only?

Not by default on Supabase's side. Read-only is a setting, and Supabase describes it as executing all queries as a read-only Postgres user. In Chickpea it is a question you answer when you connect, and read-only is the recommended default. Supabase also asks that unattended routines run read-only, which covers anything on a schedule.

Is it safe to point this at production?

The product's own catalog says no: the Supabase preset is intended for a development or test project, not production data, with read-only as the recommended default. Supabase puts it as connecting to a production project only when the task needs production evidence, and suggests a development branch for testing. The risk it names is prompt injection, where untrusted content inside your data tries to steer the model. A read-only connection on a development project takes most of that off the table.

Does it use Supabase's MCP server or the API?

The MCP server. Supabase is a vendor MCP lane: the deployment connects to mcp.supabase.com/mcp over streamable HTTP and signs in with OAuth. There is no database password, service role key, or connection string anywhere in this connector, and the connection cannot reach any other address.

Can it run a migration or delete data?

That depends on how you connected it. On a read-only connection it cannot, because Supabase runs the queries as a read-only Postgres user. On a read and write connection the database tools can apply a migration and edge function tools can deploy. Two things sit in front of that. A schema change is consequential, so the teammate shows what it would do and waits for a yes. Underneath, during a Slack turn Chickpea refuses any MCP tool whose name does not start with an unambiguous read verb unless your message names that action, and thread history, retrieved content, and memory cannot authorize one.

How do I set up the Supabase MCP?

For a coding client, follow Supabase's own docs, since each client keeps its own config file. For Slack there is nothing to configure. Open the teammate in Chickpea Admin, choose Supabase, give the project reference, pick read-only or read and write, and sign in. Or ask "@oncall connect Supabase" in the channel and follow the link it posts.

Can I use this from Claude Code or Cursor instead?

Yes, and Supabase documents both. Those put the server in one person's editor, scoped to that person's developer permissions. A teammate puts it in a channel, with a stored connection, saved instructions, schedules, and every query visible in the thread where someone asked for it. Teams often run both, and the editor one usually points at a different project.

What does it see in the project, and what stays hidden?

What the connection was given. The project reference pins it to one project and switches off the account management tools, so it cannot wander into your other projects. Supabase leaves storage tools off unless they are turned on, and the binding in Chickpea is a ceiling: it can later be narrowed to fewer tools but never widened, and reauthorizing the Supabase account with more access does not widen the teammate.

Do I still need a Supabase Slack integration?

What Supabase's own pages offer for Slack is an Edge Function example that answers a Slack mention, and a Sign in with Slack auth provider. Teams that want more than that usually build the Edge Function or wire the two together through an automation tool. A Chickpea teammate is a different thing again: it holds the Supabase connection itself and answers in the channel, through Supabase's MCP server, with nothing to host.

Does everyone act as the same Supabase user?

That is your choice when you connect. A team account is one shared sign-in that everyone with access to the teammate acts through. A personal account belongs to one member inside one teammate, so your sign-in is used only for your requests. Either way the OAuth token lives on your deployment, outside the teammate record. It never enters the model's context, the tool arguments the model writes, or Slack. Disconnect the account and the stored secret is removed, and any schedule that depended on it stops.

Try it

Give a channel a Supabase teammate.

One deploy into your own Cloudflare account, connect Slack, sign in to Supabase, ask. Apache 2.0, no seats, no metering.

Star on GitHub4

Or run it on Node. The setup guide covers both.