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:
| Tool | What it does |
|---|---|
list_connections | Connection names, drivers, read-only flags. |
describe_schema | Object names per schema. |
describe_object | Columns, indexes, constraints, DDL. |
list_users | Database users and roles. |
sample_rows | Up to N rows — only where the connection allows sharing rows. |
run_read | Execute a statement the engine classifies as a read. |
propose_write | Submit a write/DDL for your approval in the app (10-minute timeout). |
explain | EXPLAIN in the connection's dialect. |
draft_to_editor | Stream SQL live into an editor tab. |
open_editor_tab | Open 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_writeand waits for your click. A label claimed by the model never overrides it. - Loopback only. The app listens on
127.0.0.1with a per-install bearer token (Settings → Agents shows it and can regenerate it). - Row data is opt-in per connection.
sample_rowsreturns 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
- Website: https://tabellum.dudko.dev
- Contact: siarhei@dudko.dev