rows.page

page.rowsv1.0.0Updated Oct 9, 2026

Push CSV, JSON, JSONL or Parquet from your agent and get a link a human can explore.

VerifiedStreamable HTTPWeb executableFiles & StorageData & Analytics

Overview

AI-generated overview

Lets an assistant push tabular data to rows.page and return a shareable link a person can filter, chart, query with SQL, and diff.

What it does
The server exposes tools for pushing CSV, TSV, JSON, JSONL, row arrays, or a remote URL, returning a link to an explorable dataset page. It can pin saved findings (filters, sorts, column selections, or SQL) to a dataset, fetch dataset metadata, versions, findings, columns, and the first rows, list datasets in an account, delete owned datasets, and report plan limits. Each push is an immutable version, and re-pushes report rows added, removed, and changed plus a diff link.
When to use it
Useful when an assistant produces a table, query result, or export that a human should inspect interactively rather than read as raw text. It fits sharing analysis results, eval runs, or nightly data extracts as links, and tracking what changed between successive pushes.
Requirements
Remote streamable HTTP endpoint; nothing to install. Some clients need Node.js for the npx mcp-remote bridge. Anonymous pushes work without signup; an optional API key enables account datasets, list_datasets, and stable re-pushes, sent as an Authorization Bearer header or an apiKey query parameter. Network access to rows.page is required.
Before you install
Pushing data sends it to a third-party service. Anonymous datasets are deleted 7 days after creation unless kept, and anonymous pushes are rate-limited per IP. An API key grants access to account datasets and should be treated as a secret. delete_dataset makes a dataset URL stop working immediately, and pinned findings or re-pushes can overwrite the visible state of a dataset.

Installation

In SourceWeft

  1. Open rows.page in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "rows": {
      "type": "http",
      "url": "https://rows.page/mcp"
    }
  }
}

README

rows.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

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

Claude Desktop (claude_desktop_config.json, needs Node.js)

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

Cursor (.cursor/mcp.json)

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

VS Code (.vscode/mcp.json)

json
{  "servers": {    "rows": {      "type": "http",      "url": "https://rows.page/mcp"    }  }}

Windsurf (mcp_config.json)

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

Codex CLI (~/.codex/config.toml)

toml
[mcp_servers.rows]url = "https://rows.page/mcp"

Gemini CLI (~/.gemini/settings.json)

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.

sh
claude mcp add --transport http rows https://rows.page/mcp --header "Authorization: Bearer rpk_..."

Tools

ToolWhat it does
pushPush 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_findingPin a saved view (title, note, q filter, sort, cols or SQL) to a dataset. The page opens on its findings.
get_datasetMeta, versions, findings, columns and the first 20 rows.
list_datasetsYour datasets, newest first. Needs an API key.
delete_datasetDelete a dataset you own. Its URL stops working immediately.
get_limitsYour 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

Made by Bitgate. MIT licensed.

Source: README.md at commit 2c6e963

Tools

0
Tool metadata has not been indexed yet.

Version history

1
  1. v1.0.0LatestOct 9, 2026