How to connect Supabase to Hermes Agent
Connect Supabase to Hermes with ClawLink in one click — 116 tools your AI agent can call from chat via hosted OAuth. No API keys, no manual setup.


Query and manage Postgres databases. Once connected, Hermes Agent can read and act on Supabase from chat — pairing, token refresh, and tool wiring handled for you.
Most guides for giving Hermes Agent Supabase access start with registering your own OAuth app or pasting API keys into env files, then leave the token refresh and tool wiring to you. ClawLink gives Hermes a more practical Supabase setup: pair once in the browser and your always-on Hermes agent can act on Supabase for you, reading and doing real work on your behalf with no auth, token refresh, or tool wiring to build yourself.
Copy this prompt into Hermes to install the plugin and pair your account.
Set up ClawLink for Hermes and tell me when it's ready.
1. Install the plugin:
hermes plugins install ClawLink-HQ/hermes-plugin --enable
2. Start pairing. It prints an approval link, so show me the link and stop, don't wait:
hermes clawlink begin
3. I'll approve it in my browser, then reply "approved".
4. When I say approved, finish setup:
hermes clawlink finish
5. Then run `hermes clawlink test` and tell me whether ClawLink is ready.Setup
It takes three steps to connect Hermes to Supabase.
1Install and pair
Install the ClawLink plugin, then pair Hermes with a one-time browser approval:
hermes plugins install ClawLink-HQ/hermes-plugin --enable- 2
Connect Supabase
One-click OAuth in the dashboard.
- 3
Use it from chat
Ask Hermes Agent: "What can you do with Supabase?"
Install by command
The prompt above walks Hermes through this. By hand, it is four commands and a browser approval:
hermes plugins install ClawLink-HQ/hermes-plugin --enable
hermes clawlink begin # prints an approval link — open it and approve
hermes clawlink finish # after approving in the browser
hermes clawlink testThen connect Supabase in the ClawLink dashboard — a one-click OAuth approval, no API keys.
Verify the connection by asking Hermes:
Use supabase_run_read_only_query to return the last 50 rows of my orders table ordered by created_at desc, then summarize what is in them: totals by status, biggest order, and how many are older than 30 days.
Using a different agent?
The Hermes plugin is one client of ClawLink's MCP server. Claude Code, Cursor, Codex, or any agent that can run a shell command pairs with the same ClawLink account through the CLI:
npx -y @useclawlink/cli loginlogin opens the same browser approval and stores a credential locally. Once Supabase is connected in the dashboard, that agent calls the same 116 Supabase tools over MCP. Full setup for MCP clients and shell agents: connect apps to any AI agent.
Supabase MCP for Hermes
Looking for a Supabase MCP server for Hermes Agent? ClawLink connects Supabase to Hermes Agent and exposes 116 Supabase tools your agent can call over MCP, with hosted auth and nothing to run or maintain yourself. Using OpenClaw instead? The OpenClaw Supabase integration works the same way.
The search results for connecting Supabase to Hermes teach a localhost ritual: create a Supabase OAuth app with a website URL of http://localhost, paste the client secret into a .env file, run four hermes config set commands, then hermes mcp reauth supabase. Every step of that exists because the setup is asking you to run your own MCP server. ClawLink connects Supabase to Hermes Agent through Supabase's hosted OAuth instead: you approve in the browser, and 116 tools work from chat with no OAuth app, no callback URL, and no client secret. There are no anon or service_role keys in this flow at all; the connection is an OAuth grant for your Supabase account, and what that means for row-level security is covered in the FAQ before you connect anything.
What the Hermes Agent Supabase integration can do
116 Supabase tools are ready for Hermes Agent once the account is connected. The 30 below are the ones people reach for most; your agent can call all 116.
30 of 116 Supabase tools for Hermes
| Tool | What it does |
|---|---|
Beta run SQL query supabase_beta_run_sql_query | Execute a database SQL query |
Create function supabase_create_function | Create a new Edge Function |
Deploy function supabase_deploy_function | Deploy an Edge Function |
Get function supabase_get_function | Retrieve an Edge Function |
Get health supabase_get_health | Get API health status |
Get organization supabase_get_organization | Get organization information |
Get project supabase_get_project | Get a Supabase project by ref |
Get project logs supabase_get_project_logs | Get project logs |
Get table schemas supabase_get_table_schemas | Get table schemas |
Gets project s auth config supabase_gets_project_s_auth_config | Get project's auth config |
List all organizations supabase_list_all_organizations | List all organizations |
List all projects supabase_list_all_projects | List all Supabase projects |
List backups supabase_list_backups | List project database backups |
List database branches supabase_list_database_branches | List database branches |
List functions supabase_list_functions | List all Edge Functions |
List migration history supabase_list_migration_history | List migration history |
List secrets supabase_list_secrets | List all project secrets |
List tables supabase_list_tables | List database tables |
Run read only query supabase_run_read_only_query | Execute a read-only SQL query |
Select from table supabase_select_from_table | Select rows from a table |
Alpha get third party integration supabase_alpha_get_third_party_integration | Retrieves the detailed configuration for a specific third-party authentication (TPA) provider |
Alpha list third party auth integrations supabase_alpha_list_third_party_auth_integrations | Lists all configured third-party authentication provider integrations for an existing Supabase |
Beta authorize user through oauth supabase_beta_authorize_user_through_oauth | Generates a Supabase OAuth 2.0 authorization URL for user redirection |
Beta check vanity subdomain availability supabase_beta_check_vanity_subdomain_availability | Checks if a specific vanity subdomain is available for a Supabase project; this action does not |
Beta get project custom hostname config supabase_beta_get_project_custom_hostname_config | Retrieves a Supabase project's custom hostname configuration, including its status, SSL |
Beta get project network bans supabase_beta_get_project_network_bans | Retrieves the list of banned IPv4 addresses for a Supabase project using its unique project |
Beta get project network restrictions supabase_beta_get_project_network_restrictions | Retrieves the network restriction settings (IP allowlists) for a Supabase project |
Beta get project pgsodium config supabase_beta_get_project_pgsodium_config | Retrieves the PGSodium configuration, including the root encryption key, for an existing |
Beta get project ssl enforcement config supabase_beta_get_project_ssl_enforcement_config | Retrieves the SSL enforcement configuration for a specified Supabase project, indicating if SSL |
Beta get vanity subdomain config supabase_beta_get_vanity_subdomain_config | Fetches the current vanity subdomain configuration, including its status and custom domain |
Try it: find the Supabase tool you need
Browse the 30 Supabase tools
Click any tool to see exactly what Hermes can do and copy a ready-to-use prompt.
Example prompts
Use supabase_run_read_only_query to return the last 50 rows of my orders table ordered by created_at desc, then summarize what is in them: totals by status, biggest order, and how many are older than 30 days.
Run supabase_list_tables and supabase_get_table_schemas for the tables I mention, and show me the columns and types. Then draft the read-only query you would run and wait for my approval before executing it.
Insert a row into my events table with the fields I give you. If it fails with "new row violates row-level security policy", tell me which policy is missing instead of retrying.
Invoke my edge function with supabase_invoke_edge_function using the payload I paste, and report the status code and response body.
What the 116 Supabase tools cover
The set grouped, with the data access mechanics stated first because they are what the errors hinge on.
- Data: supabase_run_read_only_query and supabase_select_from_table run as the supabase_read_only_user role with read-only operations; supabase_beta_run_sql_query executes the SQL you send against the project database and is the write-capable path.
- Edge functions: create, update, deploy, and invoke functions, and read function bodies and logs.
- Projects and databases: create projects, database branches, read replicas, migrations, point-in-time restore, and project health and upgrade status.
- Auth and SSO: project auth configuration, SSO providers, third-party auth integrations, and the OAuth token exchange endpoint.
- Security and keys: read-only views of project API keys and signing keys, network bans and restrictions, and SSL enforcement config.
- Storage: list buckets, resumable upload options, and upload signing.
ClawLink vs. building it yourself
The alternative to ClawLink is usually manual OAuth app setup plus your own token handling, permission troubleshooting, and tool plumbing for Hermes Agent. That is fine if you want to build and maintain the integration yourself. Most teams just want Supabase working from chat.
| Manual | ClawLink | |
|---|---|---|
| Connection flow | Register a Supabase app, configure redirect URLs, manage consent details, and reconnect users when auth settings drift. | Users connect Supabase through the hosted browser flow and ClawLink keeps the token lifecycle out of your app code. |
| Ongoing maintenance | You own refresh logic, permission debugging, environment config, and every provider-specific edge case for Supabase. | ClawLink handles the repetitive integration plumbing so your team can focus on the workflow instead of the infrastructure. |
| Agent usability | You still need to expose the right Supabase actions to the runtime in a format your agent can reliably use. | 116 tools for Supabase are already exposed through ClawLink, so the agent can read and act from chat immediately. |
ClawLink vs. Composio
Composio also exposes Supabase to AI agents. It is developer infrastructure: Python and TypeScript SDKs, an MCP server, and a catalog past 1,000 apps, aimed at teams shipping agent products. ClawLink is built for Hermes Agent users instead. You install the plugin once, connect Supabase in the browser, and the 116 tools above work from chat. There is no SDK, no config file, and no API key handling. Choosing between them? Read the full Composio alternatives comparison.
Troubleshooting
Hermes paired but still can't use Supabase
Pairing is a two-step handshake: run hermes clawlink begin, approve the link in your browser, then run hermes clawlink finish. If you ran finish before approving, or the approval link expired, run hermes clawlink begin again to get a fresh link. Confirm the plugin was installed with --enable, then verify with hermes clawlink test.
Connection succeeds but no tools appear
Reconnect Supabase from the dashboard, then start a fresh chat if the runtime still has the old tool catalog loaded.
"Tool schema not loaded yet" error when calling Supabase tools
Supabase tool schemas load on demand the first time a tool runs and are cached after that, so this error usually clears on its own: wait a few seconds and retry the same request. If every Supabase call keeps failing with it in a fresh chat, reconnect from the dashboard, and contact support if it still persists — that pattern points to a configuration problem on our side, not something you can fix by reconnecting again.
Supabase returns 403 or "permission denied" on one action while others work
Two usual causes. The connected account may not have access to the specific workspace, inbox, store, or project in the request — check that first. If access looks right, the agent may have sent a placeholder value (like "YOUR_ID" or an example id from documentation) instead of a real one: ask it to run a list or search tool first, then retry the action with a real id from those results. Most failures at this stage are one of these two, not ClawLink bugs.
Supabase returns "new row violates row-level security policy"
This is a Postgres error, and it means the acting role has no policy permitting the insert. Two mechanics trip people up. First, an insert checks both the INSERT policy and the SELECT policy on the table, because Postgres must be able to read back what it wrote; a table with an INSERT policy but no SELECT policy fails on this exact error. Second, the acting role matters: the read tools run as supabase_read_only_user, and a write attempt through supabase_beta_run_sql_query runs as the role the connection maps to, so a policy written for authenticated users may not cover either. The fix is a policy change in the Supabase dashboard, and it is the one error in this list that no reconnect will cure, because the connection is not bypassing RLS on purpose.
Supabase API 401 invalid API key
The manual-flow answers teach key mechanics: wrong key type (anon vs service_role), malformed apikey header, or a key revoked on the dashboard. None of those exist here, because no key is stored on your side. A 401 on a connected account means the OAuth grant is stale: it was revoked in your Supabase account, the refresh failed, or the account was changed. Reconnect Supabase from the ClawLink dashboard to re-run the consent flow and replace the grant. If reads work but one specific tool 401s, check that tool's requirement instead, since some platform endpoints expect project-level access the grant may not carry.
Supabase OAuth "redirect_url not allowed" or "Required parameter: client_secret"
Both of these are errors from the manual MCP + OAuth setup, and their presence is how you can tell which world you are in. "redirect_url not allowed" is Supabase refusing a callback URL that was not registered on the OAuth app, which is exactly the localhost callback pain the search results teach. "Required parameter: client_secret" is the token exchange failing because the secret never made it into the local config, which is the known pain point behind the NousResearch hermes-agent GitHub issue titled "MCP OAuth fails with Supabase". A hosted connection cannot produce either error, because there is no OAuth app to register and no callback URL in the flow. If your agent reports them, you are running a local MCP setup and this page's flow is the alternative.
Supabase MCP tool not found
Search results blame an expired OAuth session, silent authentication failures, or missing access tokens in a local MCP configuration. There is no local MCP configuration here, so the cause is lazy schema loading: Supabase tool schemas hydrate on demand the first time a tool runs, and a call in a fresh chat can arrive before the catalog does. Retrying once resolves it. If the same name fails twice, the name is wrong rather than missing, and the error message lists the closest real tools. Reconnect from the dashboard if every Supabase call keeps failing in a fresh chat.
OAuth finished in the browser but the account is still missing
Try reconnecting Supabase and complete the consent flow in the same browser session. Partial OAuth approvals or switching accounts mid-flow can leave the connection incomplete.
FAQ
Is there a Hermes Agent Supabase integration?
Yes. ClawLink is the fastest way to connect Hermes to Supabase: link your Supabase account once in the browser and Hermes Agent can call the Supabase API through 116 ready-made tools — no custom code or token handling.
How do I connect Supabase to Hermes with ClawLink?
Install the plugin with hermes plugins install ClawLink-HQ/hermes-plugin --enable, then pair once: run hermes clawlink begin, approve the link in your browser, and run hermes clawlink finish. Connect Supabase in the dashboard and Hermes can use it from the next message — no config files or API keys to manage.
How long does it take to connect Supabase to Hermes Agent?
About two minutes. Sign in, click Connect next to Supabase in the dashboard, authenticate, and Hermes Agent can use it from the next chat message.
Why use ClawLink instead of wiring Supabase up myself?
The alternative to ClawLink is usually manual OAuth app setup plus your own token handling, permission troubleshooting, and tool plumbing for Hermes Agent. That is fine if you want to build and maintain the integration yourself. Most teams just want Supabase working from chat.
Does this use my anon key or service role key?
Neither. The anon key and service_role key are the two credentials of the manual setup: you paste one into an env file and hope it never leaks, and the service_role key in the wrong hands is the danger every safety answer warns about. This connection is an OAuth grant against your Supabase account, so no key string ever sits in a file next to your agent. The data tools use their own narrow roles: supabase_run_read_only_query and supabase_select_from_table execute as the supabase_read_only_user role with read-only operations, and supabase_beta_run_sql_query runs the SQL you send against the project database. There is nothing to leak, because there is no key.
Does row-level security still apply?
Yes, and this is the sentence the engines keep omitting: a connected account does not bypass row-level security. The read tools run as the supabase_read_only_user role, and Postgres applies RLS policies to that role exactly as it does to any other. If a query returns no rows when you expect data, or an insert fails with "new row violates row-level security policy", the missing piece is a policy for that role, not a broken connection. Supabase's default is deny-all when RLS is enabled with no matching policy, so an empty result is frequently the policy working as designed.
Is it safe to connect Supabase to an AI agent?
The standard answer is "yes if you use strict RLS and never expose the service_role key", and this connection removes the second condition by never holding the key in the first place. What you get instead is an account-level grant, which is broader than a narrow database role: the agent can administer projects, deploy edge functions, run migrations, and manage branches through the platform tools, while table data stays guarded by RLS. Treat the connection as admin-level, keep RLS strict, and treat prompt injection the same way you would for any agent that can write: the agent reading a database row is reading text written by someone, and that text can contain instructions aimed at it.
Does this work with a self-hosted Supabase instance?
No. The connection targets supabase.com hosted projects through Supabase's platform OAuth. A self-hosted Supabase instance needs its own database credentials and a network path to it, which this flow does not provide.
Hermes paired but still can't use Supabase
Pairing is a two-step handshake: run hermes clawlink begin, approve the link in your browser, then run hermes clawlink finish. If you ran finish before approving, or the approval link expired, run hermes clawlink begin again to get a fresh link. Confirm the plugin was installed with --enable, then verify with hermes clawlink test.