Skip to main content

An MCP server that turns a folder of CSV / Parquet / JSON files into one SQL-queryable source for your AI agent.

Project description

tablebridge

Turn a folder of CSV / Parquet / JSON files into one SQL-queryable source for your AI agent.

CI PyPI Python MCP License: MIT

Small businesses don't have a data warehouse — they have a folder full of exports: customers.csv, last month's orders.xlsx, a regions.json someone emailed over. tablebridge is an MCP server that points DuckDB at that folder, exposes each file as a SQL table, and lets your agent run read-only SQL — including JOINs across files — to answer questions over all of them at once. Scattered spreadsheets become one queryable source of truth.

It's read-only and sandboxed: files are loaded into an in-memory database, the data directory is the only thing it can see, and queries are validated so an agent can't write, escape to other paths, or call raw file functions.


Why you'd want this

  • 🔗 One source over many files. JOIN orders.csv to customers.csv to regions.json in a single query — no ETL, no database to stand up.
  • 🦆 DuckDB-powered. Fast analytical SQL over CSV, TSV, Parquet, JSON/NDJSON.
  • 🔒 Safe by design. Files are materialized into memory; queries are validated read-only; raw file-access functions and out-of-sandbox paths are rejected.
  • 🤖 Agent-friendly. list_sourcesdescribequery is a natural flow the agent can follow on its own.
  • 🪶 Two dependencies (mcp, duckdb), fully typed and tested.

Install

uvx tablebridge          # run directly
# or
pip install tablebridge  # then run: tablebridge

Claude Code

TABLEBRIDGE_DATA_DIR=/path/to/your/data claude mcp add tablebridge -- uvx tablebridge

Claude Desktop / Cursor

{
  "mcpServers": {
    "tablebridge": {
      "command": "uvx",
      "args": ["tablebridge"],
      "env": { "TABLEBRIDGE_DATA_DIR": "/path/to/your/data" }
    }
  }
}

Run with Docker

A Dockerfile is included. The server speaks MCP over stdio. Mount the folder you want to query at /data (read-only is fine) and run interactively (-i):

docker build -t tablebridge .
docker run --rm -i -v /path/to/your/data:/data:ro tablebridge

Tools

Tool Description
list_sources List the tables (one per data file) with column counts — start here
describe A table's columns and types
preview First N rows of a table
query Run read-only SQL (DuckDB dialect) across the tables, JOINs included
refresh Re-scan the data directory for added/changed files
server_info Effective config (data dir, row cap, supported formats)

Example

With a folder containing customers.csv, orders.csv, and regions.json:

You: Who are my top 3 customers by total spend, and what region are they in?

Agent: (calls list_sources, then query)

SELECT c.name, r.region, SUM(o.total) AS spend
FROM customers c
JOIN orders o   ON o.customer_id = c.id
JOIN regions r  ON r.customer_id = c.id
GROUP BY c.name, r.region
ORDER BY spend DESC
LIMIT 3;

Configuration

Variable Default Description
TABLEBRIDGE_DATA_DIR . Directory of files to expose (the sandbox boundary)
TABLEBRIDGE_MAX_ROWS 1000 Max rows returned per query/preview
TABLEBRIDGE_RECURSIVE 1 Scan subdirectories too

Supported formats: .csv, .tsv, .parquet, .json, .ndjson.

Security model

  1. Sandboxed to TABLEBRIDGE_DATA_DIR — only files under it are loaded.
  2. Materialized into an in-memory DuckDB, then external filesystem access is disabled — queries can't reach other paths.
  3. Validated SQL — a single read-only statement only; writes and raw file-reader functions are rejected.

Development

git clone https://github.com/Michael-WhiteCapData/tablebridge-mcp
cd tablebridge-mcp
uv pip install -e ".[dev]"
ruff check .
pytest          # uses real DuckDB over temp files

See CONTRIBUTING.md.

License

MIT © Michael Tierney

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tablebridge-0.1.1.tar.gz (72.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tablebridge-0.1.1-py3-none-any.whl (9.9 kB view details)

Uploaded Python 3

File details

Details for the file tablebridge-0.1.1.tar.gz.

File metadata

  • Download URL: tablebridge-0.1.1.tar.gz
  • Upload date:
  • Size: 72.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for tablebridge-0.1.1.tar.gz
Algorithm Hash digest
SHA256 beae22bbe8a36603b8c23cb263ea20b1b833050d281578b95b18ea2bdc38e33e
MD5 01ea022cfcc8ca92fd8369efc99b6b91
BLAKE2b-256 c23b1eb7b9f00f25854b0535e47ed22d0a2a57b1e8c6745b40d55df4adff102e

See more details on using hashes here.

File details

Details for the file tablebridge-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: tablebridge-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 9.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for tablebridge-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 63fb13aaa43af3ece7b4b5fae7d0c3a41e617e32c1b191f9bf1310615d088984
MD5 69e2bc6c3c3ba9cf0abd00555cf3f5e6
BLAKE2b-256 00b670420651c1c19938ef9f016730a2b92c9eb83bda56f9d71a0bb82cbcbb7b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page