Metadata-Version: 2.4
Name: wisegrid-mcp
Version: 0.1.0
Summary: WiseGrid MCP server — read and write sheets, rows, columns and reports from any AI agent.
Project-URL: Homepage, https://wisegrid.co
Project-URL: Documentation, https://wisegrid.co/docs/api
Project-URL: Repository, https://github.com/RyanKramer/wisegrid-mcp
Author-email: WiseGrid <hello@wisegrid.co>
License-Expression: MIT
License-File: LICENSE
Keywords: agent,ai,mcp,project-management,spreadsheet,wisegrid
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Topic :: Office/Business
Requires-Python: >=3.10
Requires-Dist: fastmcp>=2.0.0
Requires-Dist: httpx>=0.27.0
Description-Content-Type: text/markdown

<!-- mcp-name: io.github.RyanKramer/wisegrid-mcp -->

# WiseGrid MCP

Read and write [WiseGrid](https://wisegrid.co) 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`.

| Variable | Required | Purpose |
|---|---|---|
| `WISEGRID_API_KEY` | yes | Create one in WiseGrid under Settings |
| `WISEGRID_BASE_URL` | 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.

## Tools

| Tool | What it does |
|---|---|
| `whoami` | The key's identity, scopes and rate limit — call this first when debugging |
| `list_sheets` | Sheets the key can see, cursor-paginated |
| `get_sheet` | Sheet + columns + first page of rows, in one call |
| `list_columns` | Column IDs, which cell dictionaries are keyed by |
| `list_rows` | Rows, cursor-paginated; each carries the `version` you need to update it |
| `add_rows` | Bulk insert, partial success, max 2000 |
| `update_row` | Update one row's changed cells, version-checked |
| `update_rows` | Bulk update, version-checked per row, max 2000 |
| `delete_row` | Delete a row and its subtree — requires `confirm=True` |
| `list_reports` / `get_report` / `run_report` | 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

```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](https://wisegrid.co). Full REST API reference at
[wisegrid.co/docs/api](https://wisegrid.co/docs/api).

MIT licensed.
