About rows.page
A remote MCP server that lets agents publish tabular data to rows.page for human exploration. It accepts common structured formats and returns a link for filtering, charting, SQL queries, findings, and version comparisons.
Key features
- 01Push CSV, TSV, JSON, JSONL, and Parquet
- 02Explore datasets with filters, charts, and SQL
- 03Pin filtered or SQL-based findings
- 04Compare dataset versions and row changes
- 05List and delete owned datasets
Use cases
- 01Share an agent’s tabular results as an explorable link
- 02Review failed rows or other filtered findings
- 03Compare nightly exports and identify changed rows
- 04Retrieve or remove datasets in an account
MCP support
Provides tools through the remote endpoint https://rows.page/mcp using streamable HTTP. An optional API key enables account-specific pushes, dataset listing, and stable-key republishing.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://rows.page/mcpclaude mcp add --transport http page-rows-rows https://rows.page/mcp{"mcpServers":{"page-rows-rows":{"type":"http","url":"https://rows.page/mcp"}}}Open in Cursor{"servers":{"page-rows-rows":{"type":"http","url":"https://rows.page/mcp"}}}Open in VS Code{"mcpServers":{"page-rows-rows":{"type":"http","url":"https://rows.page/mcp"}}}{"mcpServers":{"page-rows-rows":{"serverUrl":"https://rows.page/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
6| Parameter | Type | Required | Description |
|---|---|---|---|
| csv | string | No | CSV text with a header row |
| key | string | No | Stable name for upserts with an API key, e.g. nightly-orders |
| run | string | No | Run id of the job that produced it |
| tsv | string | No | TSV text with a header row |
| url | string | No | http(s) URL of a CSV, TSV, JSON, JSONL or Parquet file to fetch and publish |
| json | any | No | A JSON array of objects (or an object holding one), as text or as a value |
| name | string | No | File name, e.g. orders.csv |
| rows | array | No | Rows as an array of objects |
| jsonl | string | No | One JSON object per line |
| title | string | No | Dataset title shown on the page |
| token | string | No | Dataset token (rpt_...) proving ownership of dataset |
| commit | string | No | Commit sha of the code that produced it |
| format | enum | No | Format of url when it cannot be toldcsv | tsv | json | jsonl | parquet |
| source | string | No | Where the data came from (URL or description) |
| dataset | string | No | Existing dataset id to push a new version to |
| summary | string | No | A few sentences for the human: what this is and what to look at |
| findings | array | No | |
| id_column | string | No | Column that identifies a row across versions, for changed-row diffs |
| visibility | enum | No | private needs Pro or Maxpublic | private |
Details
From the project READMErows.page MCP server
rows.page is a place for your rows. Your agent pushes CSV, TSV, JSON, JSONL or Parquet with one tool call and gets back a link a human can explore: filter, chart columns, run SQL, read pinned findings, and see what changed since the last push. Viewing is free, no signup needed. Anonymous datasets live 7 days unless someone keeps them.
The server is remote only: https://rows.page/mcp, streamable HTTP, stateless JSON-RPC. There is nothing to install. A GET on the endpoint returns the server card.
Connect
Claude Code
claude mcp add --transport http rows https://rows.page/mcp
Claude Desktop (claude_desktop_config.json, needs Node.js)
{
"mcpServers": {
"rows": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://rows.page/mcp"]
}
}
}
Cursor (.cursor/mcp.json)
{
"mcpServers": {
"rows": {
"url": "https://rows.page/mcp"
}
}
}
VS Code (.vscode/mcp.json)
{
"servers": {
"rows": {
"type": "http",
"url": "https://rows.page/mcp"
}
}
}
Windsurf (mcp_config.json)
{
"mcpServers": {
"rows": {
"serverUrl": "https://rows.page/mcp"
}
}
}
Codex CLI (~/.codex/config.toml)
[mcp_servers.rows]
url = "https://rows.page/mcp"
Gemini CLI (~/.gemini/settings.json)
{
"mcpServers": {
"rows": {
"url": "https://rows.page/mcp",
"type": "http"
}
}
}
API key (optional)
Anonymous pushes work. An API key (created at https://rows.page/account) pushes into your account, unlocks list_datasets, and lets you re-push by a stable key. Send it as Authorization: Bearer rpk_... or append ?apiKey=rpk_... to the URL.
claude mcp add --transport http rows https://rows.page/mcp --header "Authorization: Bearer rpk_..."
Tools
| Tool | What it does |
|---|---|
push | Push csv, tsv, json, jsonl, rows (array of objects) or a url. Optional title, summary, key, id_column, findings[] and provenance (source, run, commit). Pass dataset + token for a new version. Returns the link plus next steps for your human. |
pin_finding | Pin a saved view (title, note, q filter, sort, cols or SQL) to a dataset. The page opens on its findings. |
get_dataset | Meta, versions, findings, columns and the first 20 rows. |
list_datasets | Your datasets, newest first. Needs an API key. |
delete_dataset | Delete a dataset you own. Its URL stops working immediately. |
get_limits | Your plan, its caps and usage. |
Every push is an immutable version. Identical bytes return unchanged: true. Re-pushes report rows new, gone and changed (set id_column so changed rows can be matched) plus a diff URL. Finding filters use the rows.page query language (status:failed latency_ms:>2000, (country:NL OR country:BE) amount:>500) or SQL starting with SELECT.
Example prompts
Push results.csv to rows.page titled "Eval run 412", pin the failed rows as a finding with a one-line note on what they have in common, and give me the link.
Query the last 24h of orders, push them to rows.page with key nightly-orders and id_column order_id, then tell me how many rows changed since yesterday.
Fetch https://example.com/export.parquet, push it to rows.page, pin a finding for amount:>500 sorted by -amount, and hand me the owner link.
Limits
Anonymous: 100 MB per file (16 MB inline per MCP push, use url for bigger files), deleted 7 days after creation unless kept, 50 pushes and 1 GB per day per IP, 60 MCP calls per minute. Free, Pro and Max plans: https://rows.page/pricing.
Links
- Docs: https://rows.page/docs/mcp
- REST API: https://rows.page/docs/api
- OpenAPI: https://rows.page/openapi.json
- llms.txt: https://rows.page/llms.txt
- Official MCP registry name:
page.rows/rows
Made by Bitgate. MIT licensed.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.