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
How many orders were placed in France last month, and what was their total value?
"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" }
]| orders | revenue |
|---|---|
| 277 | 50,279.50 |
277 orders came from France in September 2026, worth €50,279.50 in total.
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.
Same question, same 50,000-row orders file. The result: {"orders":277,"revenue":50279.5}
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.
- Number stored as text
amountlooks numeric but contains values like"$2145". - Mixed date formats
signup_dateuses 3 formats (677 · 662 · 661 rows). Day/month order may be ambiguous. - Inconsistent values
currencyhas"EUR"and"eur". Filters are exact, so agents could miss rows.
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.
- CSV uploadExports from any tool
- Google SheetsPrivate, picked by you
- CSV linkRe-fetched on refresh
- 01Parse and type every column
- 02Report bad rows and suspect values
- 03Store a versioned, columnar copy
- 04Run validated, bounded queries
- MCPAI agentsOne URL, OAuth sign-in
- RESTApps and automationsAPI key, JSON over HTTPS
- 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".
- 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.
- 09:12
Someone adds 40 rows to Q4 pipeline in Google Sheets
- 10:00
Hourly sync imports version 27: 1,284 rows, no issues
- 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.