MCP server for data

An MCP server for data: let AI agents publish tables you can open

The rows.page MCP server gives AI agents 6 tools to publish tables of up to 16 MB inline or 100 MB from a public URL, free with no signup, at https://rows.page/mcp. You get a link where you can filter, run SQL and compare versions.

.csv.json.parquet
Drop a file here
Stays in your browserUp to 1.5 GB

No file handy? Open CO2 emissions by country and year (50k rows, 14 MB).

What does the rows.page MCP server do?

Model Context Protocol (MCP) is an open standard that lets AI assistants call external tools. The rows.page server runs at https://rows.page/mcp over Streamable HTTP (JSON-RPC over POST) and is listed in the official MCP registry as page.rows/rows.

When your agent calls push with CSV, TSV, JSON or JSONL text, or with a public file URL, rows.page returns a https://rows.page/<id> link. The link opens the data in a browser table where you can filter, sort, run DuckDB SQL against the data table and check each column's histogram and distinct count. With pin_finding, the agent saves the view it found (a filter, sort, column list or SQL query) on the dataset, so you open straight to it.

Which tools does the rows.page MCP server have?

The server has six tools. Most work without an account, while the ones that change a dataset need its owner token or the account that owns it.

MCP tools on https://rows.page/mcp
ToolWhat it doesNeeds an API key
pushPublishes CSV, TSV, JSON or JSONL sent inline (up to 16 MB), or a CSV, TSV, JSON, JSONL or Parquet file from a public url, and returns the linkNo
pin_findingSaves a view (filter, sort, columns or SQL) on a dataset you ownNo, but needs the rpt_ owner token or the owning account
get_datasetReturns a dataset's details, its last 20 versions and 20 preview rowsNo, except for private datasets
list_datasetsLists the datasets on your accountYes, an rpk_ key
delete_datasetDeletes a dataset you ownNo, but needs the rpt_ owner token or the owning account
get_limitsReturns your plan and its limits, or the limits without an accountNo

The reply to a new push includes an rpt_ owner token. Your agent needs it later to pin findings, push new versions or delete the dataset.

How to add the MCP server to Claude Code, Claude Desktop and Cursor

For Claude Code, run:

bash
claude mcp add --transport http rows https://rows.page/mcp

Claude Desktop connects through the mcp-remote bridge. Add it to claude_desktop_config.json and restart the app:

json
{"mcpServers": {"rows": {"command": "npx", "args": ["mcp-remote", "https://rows.page/mcp"]}}}

For Cursor, add the server URL to mcp.json:

json
{"mcpServers": {"rows": {"url": "https://rows.page/mcp"}}}

This works without an account, and pushed links then expire after 7 days. To push into your account instead, sign in with Google on rows.page (the $0 Free plan works) and create an rpk_ API key, up to 20 per account. Send it as Authorization: Bearer rpk_... or add ?apiKey=rpk_... to the server URL.

How an agent publishes a table, pins a finding and pushes updates

  1. The agent runs a query or a script, then calls push with the result as CSV or JSONL, or with a public url for files over 16 MB.
  2. It gets back the link, an owner link and the rpt_ token, then calls pin_finding with that token and a query such as SELECT * FROM data WHERE price > 20 ORDER BY __rid. It can also pass up to 20 findings with the push itself.
  3. You open the link on the pinned view and can export it to CSV, JSON, JSONL, Parquet or Markdown (Markdown keeps the first 1,000 rows).
  4. On the next run, the agent calls push with dataset and token, or with the same key name and an API key, to add v2 to the same link.
  5. If the data has not changed, the reply says unchanged: true and no new version is added.

When the previous version is 64 MB or less, the dataset page shows a banner like "+N new, N gone, N changed vs vN". Rows are matched on the id_column the agent passes with push, or on a column you pick in the banner.

MCP rate limits, size limits and plans

  • 60 requests per minute per IP address. Above that, the server answers HTTP 429.
  • Pushes have their own limit of 10 per minute without an API key.
  • Inline data: the whole request is capped at 16 MB, and a bigger one gets HTTP 413.
  • url pushes: up to 100 MB, fetched by rows.page, and the remote server must respond within 30 seconds.
  • Without an account: 50 pushes and 1 GB per IP address per UTC day, up to 20 versions per link, and links expire after 7 days.
  • Free ($0): 10 hosted datasets that don't expire, last 3 versions visible.
  • Pro ($12 per month): 100 datasets, 90 days of versions, private datasets.
  • Max ($39 per month): 1,000 datasets, 1 year of versions, private datasets.

MCP pushes stay at 100 MB on every plan. Pro and Max upload bigger files, up to 500 MB and 2 GB, through multipart uploads at POST /api/v1/uploads.

Can the rows.page MCP server read local files?

No. The server runs on rows.page, so it only sees what your agent sends. An agent on your machine, like Claude Code or Cursor, reads the file with its own file tools and sends up to 16 MB inline. For bigger files up to 100 MB, run curl -T data.csv https://rows.page in a terminal.

If you only want an agent to query local files without publishing a link, a local filesystem or SQLite MCP server fits better, though you lose the browser table and the link to send a teammate.

Convert other formats before pushing. rows.page reads CSV, TSV, JSON, JSONL and Parquet, and does not read Excel, XML, YAML, PDF, SQLite, Avro, ORC, fixed-width text or zip files.

rows.page limits and prices

WhatLimit or price
Open a file in your browserFiles up to 1.5 GB, $0, no account, nothing uploaded
Share a link without an account$0, files up to 100 MB, link deleted 7 days after creation
Free account$0, 10 datasets kept, last 3 versions
Pro$12/month, 100 datasets, files up to 500 MB, private links
Max$39/month, 1,000 datasets, files up to 2 GB, private links

Questions

Do I need an account or API key to use the rows.page MCP server?

No. Without an account, your agent can push, read public datasets and check limits, and it can pin findings or delete a dataset with the owner token from the push. Those datasets expire after 7 days. You need an rpk_ API key for list_datasets and to push straight into your account.

Why does the MCP push tool stop at 16 MB?

Inline data travels inside the JSON-RPC request, and rows.page caps that request at 16 MB (16,777,216 bytes), with HTTP 413 above it. For files up to 100 MB, pass a public url to push or run curl -T data.csv https://rows.page. Pro and Max upload up to 500 MB and 2 GB through multipart uploads at POST /api/v1/uploads.

Can the MCP server push Excel .xlsx files?

No. rows.page does not read .xlsx or .xls files, and a pushed Excel file gets "This looks like an Excel or zip file. Export it as CSV and push again." Have your agent convert the sheet to CSV, JSON, JSONL or Parquet first.

How do version diffs work when an agent pushes an update?

When the previous version is 64 MB or less, the dataset page compares the two and shows "+N new, N gone, N changed vs vN". Rows are matched on the id_column passed with the push, or on a column picked in the banner. Without a unique key column, changes show as new and gone.

Can other tools read the data after an agent publishes it?

Yes. A public dataset serves its raw file at https://rows.page/<id>/raw.<ext>, or https://rows.page/<id>/v<n>/raw.<ext> for a fixed version, with access-control-allow-origin: *. GET https://rows.page/api/v1/datasets/<id> returns a JSON preview of up to 200 rows (256 KB).