Skip to main content
Glama
mcp-baserow-schema

mcp-baserow-schema

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

method

GET | POST | PATCH | DELETE | PUT

HTTP method

path

string

API path starting with /api/

body

object, optional

JSON body for POST/PATCH/PUT

query

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 update

Auth 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:

  1. POST /api/user/token-auth/ → temporary 2FA token (~60 s)

  2. POST /api/two-factor-auth/verify/ (with TOTP code) → JWT access_token + refresh_token

  3. POST /api/user/token-refresh/ → new access_token, silently (no 2FA needed)

Token lifecycle:

  • access_token: ~10 minutes (expiry read from the JWT exp claim, 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 build

Configure

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_SECRET

Hermes 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_SECRET

Claude 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 tools
auth_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

    A3.9/5.0

    Scored across 16 tools

    Disambiguation5/5

    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.

    Naming Consistency5/5

    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.

    Tool Count4/5

    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.

    Completeness4/5

    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

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables 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 npm
      1
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables 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 npm
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Provides 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 npm
      1
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables natural language interaction with Baserow databases, supporting workspace, database, table, and row operations with authentication and batch capabilities.
      MIT