rows.page MCP server

MCP serverFiles & storage

Lets your agent turn CSV, JSON or Parquet data into a shareable link a person can explore.

Then ask your AI: use the push tool from rows.page MCP server

Details

Available today. Use it as a step in a pipeline you build, or from your connected AI.

Add it as a step in a pipeline you build on Ahel, or connect Ahel to Claude, ChatGPT, Cursor, Claude Code or Codex and ask your AI to use it.

About this server

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

Install rows.page MCP server

The server’s own address, for the clients that take one directly. Or connect Ahel once and every client you use reads it from one address, with the account kept on Ahel rather than in each client’s config.

  • Claude Code

    claude mcp add --transport http --scope user rows-page-mcp-server 'https://rows.page/mcp'

    Run it once in your project, then open /mcp to approve any sign-in the server asks for.

  • Claude Desktop

    https://rows.page/mcp

    Add a custom connector in Settings, paste this address, and approve the sign-in.

  • Cursor

    cursor://anysphere.cursor-deeplink/mcp/install?name=rows-page-mcp-server&config=eyJ1cmwiOiJodHRwczovL3Jvd3MucGFnZS9tY3AifQ==

    Open the link and Cursor adds the server at that address.

  • ChatGPT

    https://rows.page/mcp

    In Settings, enable Developer mode, create an MCP app, and paste this address. Your plan and workspace must allow custom apps.

  • Codex

    codex mcp add rows-page-mcp-server --url 'https://rows.page/mcp'

    Run it once, then sign in with codex mcp login rows-page-mcp-server if the server asks for an account.

From the project's README

As published by bitgate/rows-page-mcp in README.md.

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

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.

Tools it offers (6)

What this server listed when Ahel dialed its public endpoint in Oct 2026, with no key and no account of yours. The names are the server’s own.

  • push
  • pin_finding
  • get_dataset
  • list_datasets
  • delete_dataset
  • get_limits

Signals

Last commit
Oct 2026
Advanced
Delivery
rows MCP server → your Ahel connector (mcp.ahel.ai) → your AI.
Item type
mcp-server
Key
page-rows-rows
Source
github.com/bitgate/rows-page-mcp
Hosted endpoint
https://rows.page/mcp