WiseGrid MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@WiseGrid MCP add a new customer to the Customers sheet"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
Variable | Required | Purpose |
| yes | Create one in WiseGrid under Settings |
| no | Override 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.
Related MCP server: MCP Google Sheets Server
Tools
Tool | What it does |
| The key's identity, scopes and rate limit — call this first when debugging |
| Sheets the key can see, cursor-paginated |
| Sheet + columns + first page of rows, in one call |
| Column IDs, which cell dictionaries are keyed by |
| Rows, cursor-paginated; each carries the |
| Bulk insert, partial success, max 2000 |
| Update one row's changed cells, version-checked |
| Bulk update, version-checked per row, max 2000 |
| Delete a row and its subtree — requires |
| Reports 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-mcpAbout
Built by WiseGrid. Full REST API reference at wisegrid.co/docs/api.
MIT licensed.
Available Tools
12 toolsadd_rowsA
Add rows to a sheet. Each item is a dict of cells keyed by column ID (as a string), e.g. {"101": "Acme Corp", "102": "2026-09-01"}.
Partial success: the response reports per-row results plus succeededCount and failedCount, so some rows can land while others fail validation. Maximum 2000 rows per call.
Inputs: rows (required), sheet_id (required). Returns: object
delete_rowA
Delete a row AND ALL OF ITS CHILD ROWS. Destructive and not undoable through this API.
Requires confirm=True. Read the row and its children first so you know what the subtree contains — a parent row can carry descendants that are not obvious from the row itself.
Inputs: row_id (required), sheet_id (required), confirm. Returns: object
get_reportA
Get a report's definition (its source sheets, columns and filters).
Inputs: report_id (required). Returns: object
get_sheetA
Get a sheet with its columns and first page of rows — one call for a usable snapshot. Use this before writing, to learn the column IDs.
Inputs: sheet_id (required), row_limit. Returns: object
list_columnsA
List a sheet's columns. Cell dictionaries are keyed by these column IDs as strings, so you need them before any write.
Inputs: sheet_id (required). Returns: object
list_reportsB
List reports the API key can see.
Inputs: limit, cursor. Returns: object
list_rowsA
List a sheet's rows, cursor-paginated by row id. Max limit 500.
Each row carries a version — keep it if you intend to update the row.
Inputs: sheet_id (required), limit, cursor. Returns: object
list_sheetsA
List sheets the API key can see. Cursor-paginated; pass the returned nextCursor to get the next page. Max limit 500.
Inputs: limit, cursor. Returns: object
run_reportA
Run a report and return its rows, cursor-paginated. Max limit 500.
Inputs: report_id (required), limit, cursor. Returns: object
update_rowA
Update one row's cells. cells carries ONLY the changed cells.
version is the row's current version and is checked before the write
(optimistic concurrency). If the row changed since you read it you get
version_conflict rather than a silent overwrite — read the row again and
decide whether your change still applies.
Inputs: cells (required), row_id (required), version (required), sheet_id (required). Returns: object
update_rowsA
Update many rows. Each item needs 'id', 'version' and 'cells'.
NOTE: unlike update_row, bulk cells OVERWRITES the row's cells rather than
merging them. Send the full cell set you want the row to end up with.
Partial success per row, version-checked individually. Max 2000.
Inputs: rows (required), sheet_id (required). Returns: object
whoamiA
Who the current API key belongs to, its scopes, and its rate limit.
Call this first if anything is failing — it distinguishes a bad key from a scope problem.
Inputs: no named parameters. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 12 tools
Tools are clearly separated by resource and action: whoami for identity, list/get for sheets and reports, list for columns/rows, and add/update/delete for row mutations. Slight overlap exists between get_sheet (which includes rows) and list_rows, and between update_row and update_rows, but descriptions explicitly clarify the differences, minimizing misselection risk.
Names follow a consistent verb_noun pattern with list_* for collections, get_* for single entities, and action verbs (add, update, delete, run) for mutations. The special-case whoami is a standard idiom and doesn't break the overall convention.
12 tools cover the server's scope—authentication, sheet/column/row reads, row writes, and report execution—without bloat. This falls well within the ideal 3-15 range and each tool has a clear purpose.
Row lifecycle is fully covered (list, add, update single/bulk, delete), and reports can be listed, inspected, and executed. However, sheets and reports cannot be created or deleted, and there's no single-row fetch or bulk delete, leaving minor gaps for advanced workflows.
Maintenance
Related MCP Connectors
Read and write Google Sheets rows via SheetDB APIs; per-API agent permissions, approved deletes.
Query, browse, and automate OmegaAI workspaces from any MCP client. Streamable HTTP with OAuth 2.0.
Build and run AI workflows, agents, data tables and 1000+ API integrations from any MCP client.
The world's public data, one API. License-cleared public data sources for agents, via MCP and REST.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server for Google Sheets - read, write, and query spreadsheet data.606 npm2MIT
- AlicenseNot gradedqualityDmaintenanceProvides full programmatic access to Google Sheets, enabling CRUD operations, permission management, formatting, and spreadsheet discovery through a standardized MCP interface.540 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables reading, writing, appending, and creating Google Sheets spreadsheets through MCP tools, with support for exploring spreadsheet structure and creating new sheets.152 npmMIT
- FlicenseNot gradedqualityDmaintenanceMCP server for Google Sheets that exposes tools to read cell ranges, update values, and apply advanced batch updates (borders, colors, data validation, conditional formatting) via HTTP.6 npm-