BASEROW_MCP_OAUTH_ENABLED=true on the backendClients connect with OAuth or with an endpoint key. Both are set up under My settings > MCP server.
The steps below use <server url>, the backend URL followed by /mcp:
http://localhost:8000/mcphttps://api.baserow.io/mcp<PUBLIC_BACKEND_URL>/mcpThe OAuth tab shows <server url>. Connect one of these clients:
claude mcp add --transport http baserow <server url>
Run /mcp in Claude Code to sign in.npx @modelcontextprotocol/inspector, choose the
Streamable HTTP transport and paste <server url>.The baserow-mcp README has the steps for every other client, including Claude Desktop, claude.ai, ChatGPT, Codex, Cursor, VS Code and Gemini CLI.
The client opens the Baserow consent page. Pick a workspace and tick the tools to allow. Only the read tools are ticked on a first connection, so also tick Create rows, Update rows and Delete rows for the scenarios in step 4. Approve, and the app shows under Connected apps on the OAuth tab.
Claude Desktop, claude.ai and ChatGPT connect to Baserow from the internet,
so they can’t reach localhost. Expose the backend with a tunnel, for example
cloudflared tunnel --url http://localhost:8000, set PUBLIC_BACKEND_URL to
the tunnel URL and restart the backend. Unset BASEROW_PUBLIC_URL if it is
set: it overrides PUBLIC_BACKEND_URL, and setting it to the tunnel URL would
also move the frontend there. <server url> is then
<tunnel url>/mcp.
The server only accepts tokens issued for its current PUBLIC_BACKEND_URL.
After the switch, clients set up with http://localhost:8000/mcp stop working,
so point every client at the tunnel URL. When you switch back, sign in again
from each client.
baserow/baserow-mcp packages the
server config with the baserow-basics skill, which teaches the agent how to
use the tools. Test it once on a release candidate:
/plugin marketplace add baserow/baserow-mcp
/plugin install baserow@baserow
Enter <server url> when asked (change it later with
/plugin configure baserow@baserow), then run /mcp, pick
plugin:baserow:baserow and sign in. Remove any baserow server you added
by hand first, or Claude Code hides the plugin’s server.https://api.baserow.io/mcp. To test another instance, add
the server by hand as the README describes and install only the skill:npx skills add baserow/baserow-mcp
Create an endpoint. With OAuth on, this is on the Endpoint tab; with OAuth off there are no tabs and the page lists the endpoints directly. The UI shows the SSE URL with the key pre-filled:
<backend url>/mcp/YOUR_ENDPOINT_KEY/sse
The key also works as a bearer token on <server url>. This lists the tools:
curl -X POST <server url> \
-H "Authorization: Bearer YOUR_ENDPOINT_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'
After connecting, your client should list the available Baserow tools. In Claude Desktop this appears as a hammer icon in the input bar. In MCP Inspector, tools appear in the left panel after connecting.
The following tools are currently enabled:
| Tool | Description |
|---|---|
list_databases |
List all databases in the workspace |
list_tables |
List tables, optionally filtered by database |
get_table_schema |
Get field names and types for one or more tables |
list_table_rows |
List rows with optional search and pagination |
create_rows |
Create one or more rows in a table |
update_rows |
Update existing rows by ID |
delete_rows |
Delete rows by ID |
Ask Claude: “What databases do I have in Baserow?”
Expected: Claude calls list_databases, then list_tables, and returns the
names and IDs.
Ask Claude: “What fields does the [table name] table have?”
Expected: Claude calls list_tables to find the ID, then get_table_schema,
and describes the fields.
Ask Claude: “Add a row to [table name] with Name set to ‘Test’ and Status set to ‘Active’”
Expected: Claude calls get_table_schema to learn the field names, then
create_rows with the correct payload.
Ask Claude: “Change the Status of row 1 in [table name] to ‘Done’”
Expected: Claude calls update_rows with the row ID and new field value.
Ask Claude: “Delete row 1 from [table name]”
Expected: Claude calls delete_rows and confirms deletion.
Ask Claude: “Find rows in [table name] that contain ‘test’”
Expected: Claude calls list_table_rows with a search parameter.
The following tools exist in the codebase but are not exposed to MCP clients. They are not listed on the consent page either:
create_databasecreate_table, update_table, delete_tablecreate_fields, update_fields, delete_fieldsVerify these do not appear in your client’s tool list.
The consent page only shows again for a new grant, so first disconnect the
app as in step 7. Sign in again from the client and leave only
List databases and List tables ticked. Verify the client lists only
list_databases and list_tables, and that asking it to create a row fails.
Click Disconnect next to the app under Connected apps, then click it again to confirm. Verify the next tool call from the client fails and the client asks you to sign in again.