datatomcp

Give your AI agents data they can query.

Upload a CSV or connect a Google Sheet. Agents get an MCP server, apps get a REST API, and both answer from the same engine with exact numbers.

Early access · 100,000 rows free per dataset · Hosted in the EU

Datasetsorders50,000 rows · synced 12 min ago
Agent prompt

How many orders were placed in France last month, and what was their total value?

tool call · aggregate · dataset orders200 OK
"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" }
]
ordersrevenue
27750,279.50

rows scanned 50,000 · version 14 · refreshed 12 min ago

Agent

277 orders came from France in September 2026, worth €50,279.50 in total.

Synthetic demo dataset. Results are the engine's actual output.

Agents shouldn't read your spreadsheets. They should query them. datatomcp turns a CSV or a Google Sheet into a dataset any agent can filter, group and total, through MCP or a REST API. Every answer says which version of the data it came from.

Query it. Don't paste it.

Pasting a spreadsheet into a chat sends every row and still leaves the model to count. With datatomcp the agent sends a query and gets back only the answer, computed by a database.

Messy files get imported, with a report.

Real exports have broken rows, prices stored as text, and three date formats in one column. One bad line shouldn't block the other 490. You see exactly what was found before anything goes live, and nothing changes unless you say so.

mixed_types.csv2,000 imported3 warnings
  • Number stored as text

    amount looks numeric but contains values like "$2145".

  • Mixed date formats

    signup_date uses 3 formats (677 · 662 · 661 rows). Day/month order may be ambiguous.

  • Inconsistent values

    currency has "EUR" and "eur". Filters are exact, so agents could miss rows.

malformed.csv490 imported8 skipped

Lines 98, 132, 195, 263, 292 and 3 more couldn't be parsed. The rest of the file was imported.

Real reports from two synthetic test files.

One engine, two doors.

Agents connect through MCP with one URL and a sign-in. Apps and automations use REST with an API key. Same queries, same limits, same results.

FIG 1 · How a query travels
  • CSV uploadExports from any tool
  • Google SheetsPrivate, picked by you
  • CSV linkRe-fetched on refresh
datatomcp engine
  1. 01Parse and type every column
  2. 02Report bad rows and suspect values
  3. 03Store a versioned, columnar copy
  4. 04Run validated, bounded queries
  • MCPAI agentsOne URL, OAuth sign-in
  • RESTApps and automationsAPI key, JSON over HTTPS
MCPfor AI agents
https://app.datatomcp.com/mcp
list_datasets
Every dataset the connected account can read, with row counts and freshness.
describe_dataset
Columns, types, example values, data warnings, and today's date.
query_rows
Filter, sort, select columns, paginate. Up to 1,000 rows per call.
aggregate
Group by any columns. Count, distinct count, sum, average, min, max.
distinct_values
The real values in a column, so filters match "France", not "FR".
RESTfor apps and automations
Authorization: Bearer dtm_…
GET/v1/datasets
List datasets
GET/v1/datasets/:id
Schema, warnings, freshness
POST/v1/datasets/:id/query
Rows or aggregates
GET/v1/datasets/:id/values/:column
Distinct values
POST/v1/datasets/:id/refresh
Re-sync from the source

Every response says which dataset version it came from, when it was last refreshed, how many rows matched, and whether the result was cut off.

Your sheet changes. The agent keeps up.

Connect a Google Sheet once. Refresh it on demand, or let Pro sync it every hour. Each refresh creates a new version, so a bad edit can be rolled back.

  1. 09:12

    Someone adds 40 rows to Q4 pipeline in Google Sheets

  2. 10:00

    Hourly sync imports version 27: 1,284 rows, no issues

  3. 10:03

    Every connected agent now queries version 27

Simple pricing.

Planned prices for launch. Start free; upgrade when your data or your agents outgrow it.

Free

€0

  • 3 datasets
  • 100,000 rows per dataset
  • 1,000 queries per day
  • Refresh on demand
  • MCP server and REST API

Pro

€12/month

  • 25 datasets
  • 2,000,000 rows per dataset
  • 50,000 queries per day
  • Automatic hourly sync
  • MCP server and REST API

Your data stays yours.

Hosted in the EU
Datasets, backups and accounts are stored in the European Union.
No AI processing
We never send your data to AI providers or use it for training.
Private by default
Every request needs a sign-in or an API key. There are no public links.
Deleted on request
Delete a dataset and its stored files are removed.

Questions

Which agents can use it?

Any client that supports remote MCP servers, including Claude, ChatGPT connectors, Cursor and Claude Code. Agents without MCP support, n8n workflows and your own apps use the REST API with an API key. Both return the same results.

Why not paste the CSV into the chat?

That works once, for a small file. It breaks when the file is large, changes every week, or several agents need it. Here the agent asks for the rows and totals it needs, and every agent reads the same, current version.

Can it read private Google Sheets?

Yes. You choose specific sheets in Google's own file picker, and datatomcp gets access to those files only, not the rest of your Drive.

What happens with messy CSVs?

Rows that can't be parsed are listed with their line numbers and the rest of the file is imported. Columns that look numeric or date-like but aren't consistent are flagged, and nothing is converted until you confirm it.

Is my data sent to an AI provider?

No. Your data is stored in the EU and never used for training. The agent you connect receives only the query results it asks for.

Can agents run SQL?

No, on purpose. They get a small set of validated query tools with limits, so a confused agent can't run something slow or unexpected.

Connect your first dataset.

We're opening access in small groups. One email when it's your turn.