Connects Claude to Grist's spreadsheet database through 11 tools covering the full API surface. You get workspace and document discovery, SQL queries with JOINs, record CRUD operations with upsert support, schema management for tables and columns, and webhook configuration. The workflow is straightforward: find your workspace, locate or create a document, inspect the table structure, then query or manipulate data. Ships with both stdio transport for local Claude Desktop use and a Cloudflare Workers deployment option for HTTP access. Includes a help tool that surfaces detailed examples and error documentation for each operation, which matters since the base tool descriptions stay minimal.
MCP server for Grist. 11 tools for documents, records, SQL, and pages.
claude mcp add grist --env GRIST_API_KEY=your_api_key --env GRIST_BASE_URL=https://docs.getgrist.com -- npx -y grist-mcp-server
grist-mcp-server.mcpb from ReleasesAdd to your .mcp.json file:
{
"mcpServers": {
"grist": {
"command": "npx",
"args": ["-y", "grist-mcp-server"],
"env": {
"GRIST_API_KEY": "your_api_key",
"GRIST_BASE_URL": "https://docs.getgrist.com"
}
}
}
}
git clone https://github.com/gwhthompson/grist-mcp-server.git
cd grist-mcp-server
npm install && npm run build
Add to your MCP config:
{
"mcpServers": {
"grist": {
"command": "node",
"args": ["/path/to/grist-mcp-server/dist/index.js"],
"env": {
"GRIST_API_KEY": "your_api_key",
"GRIST_BASE_URL": "https://docs.getgrist.com"
}
}
}
}
Deploy as a remote MCP server using Cloudflare Workers for HTTP-based access.
Local development:
npm run worker:dev
Deploy to Cloudflare:
npm run worker:deploy
Configuration:
The Workers deployment uses header-based authentication:
X-Grist-API-Key: Your Grist API key (required)X-Grist-Base-URL: Grist instance URL (optional, defaults to https://docs.getgrist.com)Endpoint: https://your-worker.workers.dev/mcp
Example request:
curl -X POST https://your-worker.workers.dev/mcp \
-H "Content-Type: application/json" \
-H "X-Grist-API-Key: your_api_key" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
Notes:
wrangler secret put GRIST_API_KEY| Tool | Purpose |
|---|---|
grist_get_workspaces | List and filter workspaces |
grist_get_documents | Find documents by ID, name, or workspace |
grist_get_tables | Get table structure and schema |
grist_query_sql | Run SQL queries with JOINs and aggregations |
grist_get_records | Fetch records with filters |
grist_manage_records | All record CRUD operations (add/update/delete/upsert) |
grist_manage_schema | Schema operations: tables, columns, summaries |
grist_manage_pages | Page layout and management |
grist_create_document | Create new Grist documents or copy existing ones |
grist_manage_webhooks | Create and manage webhooks for real-time event notifications |
grist_help | Discover tools and get detailed documentation with JSON schemas |
1. grist_get_workspaces → find workspace
2. grist_create_document → create document
3. grist_manage_schema → create tables with columns
1. grist_get_documents → find document
2. grist_get_tables → check structure
3. grist_manage_records → upsert data (adds new, updates existing)
1. grist_get_tables → understand schema
2. grist_query_sql → run SQL with JOINs and aggregations
Server won't start: Check GRIST_API_KEY is set in config.
Authentication fails: Verify API key at https://docs.getgrist.com/settings/keys.
Empty document list: Check GRIST_BASE_URL matches your Grist instance.
Connection errors (self-hosted): Verify URL includes https:// and server is reachable.
npm test # Docker required - container lifecycle is automatic
Tool descriptions are concise. Use grist_help for details:
grist_help({tools: ["grist_manage_records"], only: ["examples"]})grist_help({tools: ["grist_query_sql"], only: ["errors"]})See CHANGELOG.md for version history.
GRIST_API_KEY*secretYour Grist API key
GRIST_BASE_URLdefault: https://docs.getgrist.comBase URL for Grist instance (default: https://docs.getgrist.com)