MCP server: One MCP server.

WiseGrid

@ryankramerMCP server · External

Read and write WiseGrid sheets, rows, columns and reports from any AI agent.

Spreadsheetsv0.1.0MITPython
Freeno charge per call

Runs on your machine from its package; the steps are below.

What it does

  1. Reads
  2. Writes
  3. High impact

At most: moves money, runs code or commands, deletes data, or sends messages for you.

What it costs

Free

Odel charges nothing per call. The publisher may charge for its own service.

Runs locally over stdio

This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).

PyPIwisegrid-mcpv0.1.0

Run

uvx wisegrid-mcp

MCP client config

{
  "mcpServers": {
    "wisegrid": {
      "command": "uvx",
      "args": [
        "wisegrid-mcp"
      ]
    }
  }
}
README2 min read

WiseGrid MCP

Read and write WiseGrid sheets from Claude, Cursor, or any MCP client. List sheets, page through rows, add and update records, and run reports — from inside a conversation.

Unlike the other servers in this family, these tools operate on your real data, so an API key is required.

Install

json
{
  "mcpServers": {
    "wisegrid": {
      "command": "uvx",
      "args": ["wisegrid-mcp"],
      "env": {
        "WISEGRID_API_KEY": "wg_live_xxx"
      }
    }
  }
}

Or pip install wisegrid-mcp.

VariableRequiredPurpose
WISEGRID_API_KEYyesCreate one in WiseGrid under Settings
WISEGRID_BASE_URLnoOverride for self-hosted instances

The key's scopes decide what these tools can reach. Grant read-only scopes if you only want the agent to look.

Tools

ToolWhat it does
whoamiThe key's identity, scopes and rate limit — call this first when debugging
list_sheetsSheets the key can see, cursor-paginated
get_sheetSheet + columns + first page of rows, in one call
list_columnsColumn IDs, which cell dictionaries are keyed by
list_rowsRows, cursor-paginated; each carries the version you need to update it
add_rowsBulk insert, partial success, max 2000
update_rowUpdate one row's changed cells, version-checked
update_rowsBulk update, version-checked per row, max 2000
delete_rowDelete a row and its subtree — requires confirm=True
list_reports / get_report / run_reportReports and their rows

Things that will bite you otherwise

Cells are keyed by column ID, not column name. {"101": "Acme Corp"}, not {"Client": "Acme Corp"}. Call get_sheet or list_columns first.

Updates are version-checked. Every row carries a version; you pass the one you read, and if the row changed in the meantime you get version_conflict instead of a silent overwrite. That is a normal outcome to handle — re-read the row, decide whether your change still applies, then retry. Blindly bumping the version to force the write is how concurrent edits disappear.

update_row merges, update_rows overwrites. The single-row tool takes only the cells you changed. The bulk tool replaces the row's cell set, so send the full set you want the row to end up with.

delete_row takes the children too. It removes the row and its entire subtree, it is not undoable through the API, and it requires confirm=True for exactly that reason. Read the rows first.

Writes are idempotent. Each carries an Idempotency-Key, so a retry after a timeout cannot double-apply. Rate limits are honoured via Retry-After.

Development

bash
git clone https://github.com/RyanKramer/wisegrid-mcp
cd wisegrid-mcp
pip install -e .
WISEGRID_API_KEY=wg_live_xxx wisegrid-mcp

About

Built by WiseGrid. Full REST API reference at wisegrid.co/docs/api.

MIT licensed.

Similar modules

Browse Spreadsheets