Tabellum

MCP bridge to the Tabellum database client: schema, reads, SQL drafts; writes approved in the app.

Documentation

Tabellum — MCP setup

Let your AI assistant work with your databases through Tabellum, a desktop database client for PostgreSQL, MySQL/MariaDB, SQL Server and BigQuery. The MCP server is hosted by the running app on your machine; this package is a small stdio shim that forwards to it. Queries the assistant writes appear live in the editor, and nothing that changes data runs without your click in the app.

  • Server: tabellum
  • Transport: stdio (local process)
  • Package: @dudko.dev/tabellum-mcp — Node.js 24+
  • Auth: a per-install token the app generates; the shim reads it for you from ~/.tabellum/mcp.json.

What you can do

With the Tabellum app open, the assistant can:

ToolWhat it does
list_connectionsConnection names, drivers, read-only flags.
describe_schemaObject names per schema.
describe_objectColumns, indexes, constraints, DDL.
list_usersDatabase users and roles.
sample_rowsUp to N rows — only where the connection allows sharing rows.
run_readExecute a statement the engine classifies as a read.
propose_writeSubmit a write/DDL for your approval in the app (10-minute timeout).
explainEXPLAIN in the connection's dialect.
draft_to_editorStream SQL live into an editor tab.
open_editor_tabOpen a tab bound to a connection.

Install in Claude Code (plugin)

/plugin marketplace add dudko-dev/tabellum-mcp-setup
/plugin install tabellum@tabellum
/reload-plugins

Start the Tabellum app first (macOS, Windows or Linux). The shim reads the app's local port and token from ~/.tabellum/mcp.json, written while the app runs; with the app closed every call answers "Tabellum is not running".

Prefer not to use the marketplace? Add the server directly:

claude mcp add tabellum -- npx -y @dudko.dev/tabellum-mcp

Connect from other clients

Claude Desktop

claude_desktop_config.json (Settings → Developer → Edit Config):

{
  "mcpServers": {
    "tabellum": {
      "command": "npx",
      "args": [
        "-y",
        "@dudko.dev/tabellum-mcp"
      ]
    }
  }
}

Cursor

~/.cursor/mcp.json or .cursor/mcp.json:

{
  "mcpServers": {
    "tabellum": {
      "command": "npx",
      "args": [
        "-y",
        "@dudko.dev/tabellum-mcp"
      ]
    }
  }
}

VS Code (GitHub Copilot / MCP) and other clients

{
  "servers": {
    "tabellum": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@dudko.dev/tabellum-mcp"
      ]
    }
  }
}

Safety

  • The engine classifies, you approve. Every statement is classified by the app's parser; anything that is not a read goes through propose_write and waits for your click. A label claimed by the model never overrides it.
  • Loopback only. The app listens on 127.0.0.1 with a per-install bearer token (Settings → Agents shows it and can regenerate it).
  • Row data is opt-in per connection. sample_rows returns rows only where you enabled sharing for that connection.

Troubleshooting

  • "Tabellum is not running" — open the app, then retry.
  • Unauthorized after regenerating the token — restart the MCP server in your client so the shim re-reads ~/.tabellum/mcp.json.
  • A write seems stuck — it is waiting for approval in the app; after 10 minutes it returns declined: timeout.

Support