Odel
wisegrid mcp

wisegrid mcp

Local
@ryankramerPythonMITUpdated 1w ago

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

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

{
  "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

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.