datatomcp

Query your CSVs and Google Sheets from any AI agent: filter, group and total rows with exact results. Hosted, OAuth sign-in, read-only, EU-hosted.

Hosted MCP Server

npx add-mcp 'https://app.datatomcp.com/mcp'

Installs into Claude Code, Codex, Cursor and more

Documentation

datatomcp

Turn a CSV or Google Sheet into a remote MCP server your AI agents can query.

Website · Start free · Guides · 40-second demo


datatomcp is a hosted MCP server for your tabular data. Upload a CSV, paste a CSV link, or pick a Google Sheet. Your agent (Claude, ChatGPT, Cursor and others) can then filter, group and total the rows. The numbers are computed by a database, not estimated by the model.

  • Hosted. Nothing to install or run. One URL works in every client that supports remote MCP servers.
  • OAuth sign-in. No API key to paste into your agent. You can revoke access at any time.
  • Exact results. Counts, sums and averages come from DuckDB. Every result says which version of the dataset it came from.
  • Private Google Sheets. You pick the sheet in Google's file picker, and datatomcp can read that file only. Pro syncs it every hour.
  • Import report. Bad lines, numbers stored as text and mixed date formats are reported before any agent sees the data.
  • Read-only. Agents can query your data, but they can't change it or run raw SQL.
  • Hosted in the EU. Your data is never sent to AI providers or used for training.

This repository holds the public documentation and client configuration. The service itself runs at app.datatomcp.com.

Server

URLhttps://app.datatomcp.com/mcp
TransportStreamable HTTP
AuthOAuth 2.1 (dynamic client registration and client ID metadata documents)
Registry namecom.datatomcp/datatomcp

Quick start

  1. Sign up at app.datatomcp.com (free, no card).
  2. Add a dataset: upload a CSV, paste a link, or choose a Google Sheet.
  3. Add the server to your client (below), sign in when asked, and ask a question about your data.

Tools

ToolWhat it does
list_datasetsYour datasets, with row counts and freshness
describe_datasetColumns, types, example values, data warnings and today's date
query_rowsFilter, sort, select columns and paginate (up to 1,000 rows per call)
aggregateGroup by columns; count, distinct count, sum, average, min and max
distinct_valuesThe real values in a column, so filters match exactly

Filters support eq, neq, gt, gte, lt, lte, in, not_in, contains, starts_with, between, is_null and not_null.

Client setup

Claude (Claude.ai and Claude Desktop)

Settings → Connectors → Add custom connector. Paste https://app.datatomcp.com/mcp, name it datatomcp, connect, and allow access.

Claude Code

claude mcp add --transport http datatomcp https://app.datatomcp.com/mcp

Then run /mcp, choose datatomcp and sign in.

ChatGPT

Settings → Apps & Connectors → Advanced, and turn on developer mode. Create a connector with the URL above and OAuth authentication, then sign in.

Cursor

Settings → MCP → Add new server. Choose type HTTP and use the URL above. Cursor asks you to log in the first time.

VS Code

.vscode/mcp.json:

{
  "servers": {
    "datatomcp": { "type": "http", "url": "https://app.datatomcp.com/mcp" }
  }
}

Windsurf

~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "datatomcp": { "serverUrl": "https://app.datatomcp.com/mcp" }
  }
}

Cline

Open the MCP Servers panel → Remote Servers, name it datatomcp, and use the URL above. Or add it to cline_mcp_settings.json:

{
  "mcpServers": {
    "datatomcp": { "type": "streamableHttp", "url": "https://app.datatomcp.com/mcp" }
  }
}

Antigravity

Customizations → MCP servers → View raw config (mcp_config.json):

{
  "mcpServers": {
    "datatomcp": { "serverUrl": "https://app.datatomcp.com/mcp" }
  }
}

Click Refresh, then Authenticate.

OpenCode

opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "datatomcp": { "type": "remote", "url": "https://app.datatomcp.com/mcp" }
  }
}

Codex

codex mcp add datatomcp --url https://app.datatomcp.com/mcp
codex mcp login datatomcp

Gemini CLI

gemini mcp add --transport http datatomcp https://app.datatomcp.com/mcp

Then run /mcp auth datatomcp.

Clients with local (stdio) servers only

Use mcp-remote as a bridge. It handles the sign-in:

{
  "mcpServers": {
    "datatomcp": { "command": "npx", "args": ["-y", "mcp-remote", "https://app.datatomcp.com/mcp"] }
  }
}

Example

How many orders came from France in September, and what was the revenue?

The agent calls describe_dataset to learn the columns, then one aggregate call:

{
  "dataset_id": "ds_orders",
  "where": [
    { "column": "country", "op": "eq", "value": "France" },
    { "column": "order_date", "op": "between", "value": ["2026-09-01", "2026-09-30"] }
  ],
  "metrics": [
    { "fn": "count", "as": "orders" },
    { "fn": "sum", "column": "total", "as": "revenue" }
  ]
}

On our 50,000-row test sheet, it answers with 277 orders and €50,279.50 in revenue. The tool result is 32 bytes, not the whole sheet.

REST API

The same datasets are also available over REST with an API key, for apps and automations such as n8n or Make. See CSV to REST API.

Plans

FreePro ($12 or €12 a month)
Datasets325
Rows per dataset100,0002,000,000
Queries per day1,00050,000
Google Sheets syncOn demandHourly

Guides

Support

Questions, bugs or a file that doesn't import the way you expect: hello@datatomcp.com, or open an issue in this repository.

License

The documentation and configuration in this repository are MIT licensed. The datatomcp service is proprietary.