mcp-baserow-schema
This server provides full Baserow REST API access with automatic 2FA authentication, plus curated tools for managing databases, tables, fields, and rows.
Generic API client (
baserow_api): call any Baserow endpoint via method/path/body/query, with automatic JWT/TOTP auth and non-blocking OpenAPI validation.Database management: list databases in a workspace, create/list/delete tables.
Schema management: list, create, update, and delete fields/columns with support for many Baserow field types.
Row operations: list rows with pagination/search/sorting, create, update, and delete single rows.
Batch operations: batch create, update, and delete rows (up to 200 per call).
Authentication status (
auth_status): check authentication state, token expiry, and user info.
Provides schema management (tables, fields) and data operations (row CRUD, batch operations) for Baserow, with automatic TOTP-based 2FA authentication.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-baserow-schema Add a number field 'budget' to the projects table"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-baserow-schema
MCP server for Baserow: a generic Baserow API client with 2FA authentication (TOTP) and OpenAPI validation.
One tool, the entire Baserow REST API. Schema changes (tables, fields, views, filters), row CRUD, workspace admin — anything documented in the OpenAPI spec is callable, with JWT auth handled automatically.
Why
Baserow's official MCP handles curated data CRUD but not the full API surface (schema changes, views, filters, admin endpoints). In 2026, plain password auth without 2FA is not acceptable. This MCP solves both:
Full API access: any endpoint from the bundled Baserow OpenAPI spec via one generic tool
2FA support: automatic TOTP-based authentication — no manual token management
OpenAPI guard: requests are validated against the spec; mistyped paths get a hint instead of a mystery 404
Designed for agents: AI agents can modify table structure without human intervention
Related MCP server: Enhanced Airtable MCP Server
Tools (2)
baserow_api
Generic HTTP client for any Baserow API endpoint.
Parameter | Type | Description |
|
| HTTP method |
| string | API path starting with |
| object, optional | JSON body for POST/PATCH/PUT |
| object, optional | Query params as string key-value pairs |
Examples:
GET /api/database/tables/database/123/ → list tables in database 123
POST /api/database/views/table/456/ {name, type} → create view
POST /api/database/views/789/filters/ {field, type, value} → create filter
DELETE /api/database/tables/456/ → delete table
PATCH /api/database/rows/table/456/11/ {status} ?user_field_names=true → update row
POST /api/database/rows/table/456/batch/ {items:[...]} → batch updateAuth is handled automatically: just provide method, path, and optional body/query. If the OpenAPI spec doesn't recognize the path/method, the response is prefixed with a warning (⚠️ OpenAPI spec: ...) including similar paths — the request still executes (validation is non-blocking).
auth_status
Returns the current authentication state: authenticated, token expiry, and remaining lifetime of access/refresh tokens. Useful for debugging the auth lifecycle.
OpenAPI Validation
The server bundles the official Baserow OpenAPI spec (v2.2.2, 275 paths, openapi.json at the repo root). Before each request:
Path + method found → request proceeds silently.
Path exists, method wrong → warning lists the available methods for that path.
Path unknown → warning plus up to 5 similar paths from the spec.
The spec is loaded lazily from dist/../openapi.json; if missing, validation is skipped gracefully and requests proceed unvalidated.
Authentication
Supports Baserow's two-step 2FA flow:
POST /api/user/token-auth/→ temporary 2FA token (~60 s)POST /api/two-factor-auth/verify/(with TOTP code) → JWT access_token + refresh_tokenPOST /api/user/token-refresh/→ new access_token, silently (no 2FA needed)
Token lifecycle:
access_token: ~10 minutes (expiry read from the JWT
expclaim, refreshed 2 min before expiry)refresh_token: ~7 days (full 2FA re-login 5 min before expiry)
temp_token: ~60 seconds (only for the 2FA verify step)
Credentials are passed via environment variables — never hardcoded.
Setup
Prerequisites
Node.js ≥ 20
Baserow account with 2FA enabled
Baserow TOTP secret (base32)
Install
git clone git@github.com:aficiomaquinas/mcp-baserow-schema.git
cd mcp-baserow-schema
npm install
npm run buildConfigure
Set environment variables (or use a .env file — see .env.example):
BASEROW_API_URL=https://your-baserow-instance.com
BASEROW_USERNAME=you@example.com
BASEROW_PASSWORD=your_password
BASEROW_TOTP_SECRET=YOUR_BASE32_TOTP_SECRETHermes Agent
Add to ~/.hermes/profiles/<profile>/config.yaml:
mcp_servers:
baserow-mcp:
command: node
args:
- /path/to/mcp-baserow-schema/dist/index.js
enabled: true
env:
BASEROW_API_URL: https://baserow.example.com
BASEROW_USERNAME: you@example.com
BASEROW_PASSWORD: your_password
BASEROW_TOTP_SECRET: YOUR_BASE32_TOTP_SECRETClaude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"baserow-schema": {
"command": "node",
"args": ["/path/to/mcp-baserow-schema/dist/index.js"],
"env": {
"BASEROW_API_URL": "https://baserow.example.com",
"BASEROW_USERNAME": "you@example.com",
"BASEROW_PASSWORD": "your_password",
"BASEROW_TOTP_SECRET": "YOUR_BASE32_TOTP_SECRET"
}
}
}
}Field Types
Since baserow_api is a pass-through client, every Baserow field type is supported — the JSON body just needs to match the API contract for the endpoint. Reference list of field types:
text, long_text, url, email, number, rating, boolean, date, last_modified, last_modified_by, created_on, created_by, duration, link_row, file, single_select, multiple_select, phone_number, formula, count, rollup, lookup, multiple_collaborators, uuid, autonumber, password, ai
Endpoint details: consult the bundled openapi.json or the Baserow API docs.
Usage with Official Baserow MCP
Since v2, this MCP covers data operations too (rows, batches, search, sort), so the official Baserow MCP is optional:
mcp-baserow-schema → everything: schema, data, views, filters, admin
Official Baserow MCP → curated row-CRUD UX, if you prefer it for data work
Running both side by side is fine; they don't conflict.
Releasing
Maintainers: see docs/RELEASING.md. Releases are fully automated (release-it + GitHub Actions with OIDC trusted publishing) — never bump versions, tags, or server.json manually.
License
MIT
Available Tools
16 toolsauth_statusA
Check the current authentication state including email, user ID, and token expiry.
Inputs: no named parameters.
batch_create_rowsA
Create multiple rows in a table at once (up to 200). Each item is a key-value object with field names.
Inputs: items (required), table_id (required).
batch_delete_rowsA
Delete multiple rows at once (up to 200) by providing an array of row IDs.
Inputs: items (required), table_id (required).
batch_update_rowsA
Update multiple rows at once (up to 200). Each item must include an 'id' field with the row ID, plus any fields to update.
Inputs: items (required), table_id (required).
create_fieldA
Create a new field (column) in a table. The 'type' parameter must be one of: text, long_text, url, email, number, rating, boolean, date, last_modified, last_modified_by, created_on, created_by, duration, link_row, file, single_select, multiple_select, phone_number, formula, count, rollup, lookup, multiple_collaborators, uuid, autonumber, password, ai.
Inputs: name (required), type (required), table_id (required), field_options.
create_rowB
Create a new row in a table. Provide field values as a JSON object with field names as keys. Uses human-readable field names.
Inputs: data (required), table_id (required).
create_tableB
Create a new table in a database. Optionally provide initial data rows.
Inputs: name (required), database_id (required), data, first_row_header.
delete_fieldA
Delete a field (column) from a table. This will remove all data in that field.
Inputs: field_id (required).
delete_rowA
Delete a single row from a table by row ID.
Inputs: row_id (required), table_id (required).
delete_tableA
Delete a table by ID. This action is irreversible and will delete all fields and rows.
Inputs: table_id (required).
list_databasesA
List all databases (applications) in a workspace. Returns database id, name, and type. Use workspace_id=1 for the default workspace.
Inputs: workspace_id (required).
list_fieldsA
List all fields (columns) in a table with their types and options.
Inputs: table_id (required).
list_rowsA
List rows from a table with pagination, search, and sorting. Returns field values using human-readable field names by default.
Inputs: table_id (required), page, size, search, +1 more.
list_tablesA
List all tables in a database. Returns table id, name, order, and other metadata.
Inputs: database_id (required).
update_fieldB
Update an existing field's name, type, or type-specific options.
Inputs: field_id (required), name, type, field_options.
update_rowB
Update an existing row in a table. Provide the row ID and the field values to update.
Inputs: data (required), row_id (required), table_id (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 16 tools
Each tool targets a distinct resource (databases, tables, fields, rows, auth) with clear verb prefixes like list, create, update, delete. Batch operations are clearly variants of row operations, and auth_status is uniquely separated.
All tool names follow a consistent lowercase snake_case pattern with a verb_noun structure (e.g., list_databases, create_field, delete_row). The only outlier, auth_status, remains consistent in style and clearly indicates a status check.
With 16 tools, the set is slightly above the typical 3-15 range but each tool serves a clear purpose, covering databases, tables, fields, rows, and authentication. The batch operations add some redundancy but are justified for efficiency.
Rows and fields have full CRUD coverage, and tables have create/delete/list but no update operation (e.g., rename table). Databases are only listed, not managed, which is reasonable for a schema-focused server but leaves minor gaps.
Maintenance
Related MCP Connectors
Your Supabase account in natural language: run SQL, apply migrations, manage tables, storage, edge f
Shared tables and Markdown docs for teams and AI-built apps, with scoped access and audited changes.
Shared 2FA for teams: let AI agents get TOTP codes for the accounts your Authn8 token can see.
Hosted Airtable MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with PostgreSQL and Supabase databases through natural language. Supports secure database operations including queries, migrations, and schema management with user-provided credentials.26 npm1MIT
- AlicenseNot gradedqualityDmaintenanceEnables comprehensive interaction with Airtable bases including record management with automatic type conversion for all field types. It supports batch operations, schema discovery, and secure authentication using Personal Access Tokens.21 npmMIT
- AlicenseNot gradedqualityDmaintenanceProvides full MCP integration with a self-hosted NocoDB instance, enabling LLMs to create, update, and delete bases, tables, fields, views, and records via 25 MCP tools.70 npm1MIT
- AlicenseNot gradedqualityCmaintenanceEnables natural language interaction with Baserow databases, supporting workspace, database, table, and row operations with authentication and batch capabilities.MIT