Skip to main content
Glama

Grist MCP Server

CI codecov npm License MCP

MCP server for Grist. 11 tools for documents, records, SQL, and pages.

Quick Start

claude mcp add grist --env GRIST_API_KEY=your_api_key --env GRIST_BASE_URL=https://docs.getgrist.com -- npx -y grist-mcp-server

Claude Desktop (MCPB bundle)

  1. Download grist-mcp-server.mcpb from Releases

  2. In Claude Desktop: Settings → Developer → MCP Servers → Install from MCPB

  3. Configure your Grist API key and base URL

  4. Restart Claude Desktop

Manual configuration (.mcp.json)

Add 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"
      }
    }
  }
}

Install from source

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

Cloudflare Workers (HTTP transport)

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:

  • Stateless design: Each request creates a fresh server instance

  • CORS enabled for all origins (safe because auth uses headers, not cookies)

  • Configure environment variables via wrangler secret put GRIST_API_KEY

Related MCP server: MCP Google Sheets Server

Tools

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

Examples

Create a database

1. grist_get_workspaces → find workspace
2. grist_create_document → create document
3. grist_manage_schema → create tables with columns

Import data

1. grist_get_documents → find document
2. grist_get_tables → check structure
3. grist_manage_records → upsert data (adds new, updates existing)

Query data

1. grist_get_tables → understand schema
2. grist_query_sql → run SQL with JOINs and aggregations

Troubleshooting

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.

Testing

npm test  # Docker required - container lifecycle is automatic

Documentation

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.

Available Tools

11 tools
grist_create_documentCreate DocumentA

Creates a new Grist document in a workspace. Optionally fork an existing document to copy its structure and data. Returns the new document ID and URL.

Example: {"name":"Customer CRM","workspaceId":123}

Use grist_help({tools:["grist_create_document"]}) for full schema.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
workspaceIdYes
forkFromDocIdNo
response_formatNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate non-read-only, non-destructive, non-idempotent, and open-world. The description adds that it returns ID and URL and optionally forks, but lacks details on permissions, side effects, or duplicate handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise with three sentences and an example. Every sentence adds value, and the key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description explains return values. It covers the main purpose and a key option (fork), but does not address error handling or all parameters in detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description provides an example showing required parameters (name, workspaceId) and mentions forking, partially covering forkFromDocId. However, response_format is not explained, and forkFromDocId format is vague.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates a new Grist document, optionally forks an existing one, and returns the new document ID and URL. This distinguishes it from siblings like grist_get_documents (read-only) and other tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the tool's function but does not explicitly state when to use it versus alternatives. However, the name and context imply it's the correct tool for document creation, and the fork option adds clarity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grist_get_documentsGet DocumentsC
Read-onlyIdempotent

Find documents by ID (fastest), name search, workspace filter, or browse all. Detail levels: summary (name, id, workspace, access ~50 tokens/doc) or d

Example: {"docId":"qBbArddFDSrKd2jpv3uZTj"}

Use grist_help({tools:["grist_get_documents"]}) for full schema.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdNo
name_containsNo
workspaceIdNo
detail_levelNo
response_formatNo
offsetNo
limitNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a read-only, idempotent, non-destructive operation. The description adds context about detail levels and search methods, but does not disclose pagination behavior (offset/limit) or response format, which are present in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise but incomplete; the detail levels sentence is truncated. It includes an example and a referral to another tool, which saves space but undermines self-containment.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters, no output schema, and incomplete description, the context is insufficient for reliable tool invocation. The referral to grist_help is a crutch; the description should stand alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must compensate. It mentions docId, name_contains, workspaceId, and detail_level implicitly, but fails to explain offset, limit, response_format. It defers to grist_help for full schema, leaving significant gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: finding documents by various methods (ID, name, workspace, browse all). It distinguishes from sibling tools like grist_get_records (records vs documents) and grist_get_workspaces. However, the description is truncated, missing the full detail level options.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use each search method (e.g., 'by ID (fastest)'), but does not explicitly contrast with sibling tools or state when not to use this tool. There is no guidance on prerequisites or alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grist_get_recordsGet Grist RecordsA
Read-onlyIdempotent

Fetch records with filters. No SQL needed. Use grist_query_sql for JOINs and aggregations. Filter syntax: {"Status": "Active"}, {"Priority": 1}, {"IsA

Example: {"docId":"abc123","tableId":"Contacts","filters":{"Status":"Active"}}

Use grist_help({tools:["grist_get_records"]}) for full schema.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYes
tableIdYes
filtersNo
columnsNo
response_formatNo
offsetNo
limitNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, indicating a safe read operation. The description adds filter syntax behavior and notes 'No SQL needed', but does not disclose potential large result sets or rate limits. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the main action, followed by an alternative tool mention, filter syntax, and an example. One redundant instruction to use grist_help could be omitted, but overall concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description does not explain return values. Pagination (offset/limit) and column selection are not described. The agent would lack guidance on handling large results or customizing output, making the description incomplete for full autonomy.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% (no parameter descriptions). The description only explains the 'filters' parameter via example, leaving offset, limit, columns, and response_format unexplained. Most parameters require additional context not provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches records with filters and explicitly distinguishes it from grist_query_sql for JOINs/aggregations. The verb 'Fetch' and resource 'records' are specific, and the sibling differentiation is explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance to use grist_query_sql for JOINs/aggregations, and gives an example filter syntax. However, lacks advice on pagination, column selection, or prerequisites like workspace/document IDs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grist_get_tablesGet Grist Table StructureC
Read-onlyIdempotent

Get table structure and schema. Detail levels: names (table IDs only ~20 tokens/table), columns (+ column names ~50 tokens/table), or full_schema (+ t

Example: {"docId":"abc123","detail_level":"names"}

Use grist_help({tools:["grist_get_tables"]}) for full schema.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYes
tableIdNo
detail_levelNo
response_formatNo
offsetNo
limitNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint, covering safety. The description adds detail levels and token estimates, but does not explain behavior for optional parameters (offset, limit) or response format, and truncation limits transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short but clearly truncated (ends mid-word). The inclusion of an example and inline code is helpful, but the incomplete structure and lack of full sentences reduce conciseness and professionalism.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (6 params, no output schema), the description is incomplete: it fails to explain multiple parameters, the return format, or pagination. While annotations are rich, the description does not sufficiently cover the tool's full context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It partially describes detail_level with token estimates, but does not explain docId, tableId, response_format, offset, or limit. This is insufficient for a 6-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves table structure and schema, and explains detail levels (names, columns, full_schema). However, the description appears truncated (ends with '+ t'), slightly reducing clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides token estimates and suggests using grist_help for full schema, giving some usage guidance. It does not explicitly differentiate from sibling tools like grist_manage_schema or grist_get_records, leaving the agent to infer when to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grist_get_workspacesGet WorkspacesA
Read-onlyIdempotent

List workspaces with filtering. Use browse mode ({limit: 20}) to see all, or search mode ({name_contains: "Sales"}) to filter. Detail levels: summary

Example: {"limit":20,"detail_level":"summary"}

Use grist_help({tools:["grist_get_workspaces"]}) for full schema.

ParametersJSON Schema
NameRequiredDescriptionDefault
name_containsNo
detail_levelNo
response_formatNo
offsetNo
limitNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint; the description adds context about detail levels and modes, but does not discuss rate limits, auth, or pagination beyond limit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with three sentences and an example, front-loading purpose and modes; the reference to grist_help is useful but adds minor overhead.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with 5 optional parameters and no output schema, the description should cover pagination and all filtering options; it partially covers limit and name_contains but omits offset and response_format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 5 parameters with 0% description coverage; the description adds meaning for limit and name_contains via example, and mentions detail_level, but does not cover offset, response_format, or detail_level options fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists workspaces with filtering, using verbs like 'List' and specifying browse vs search modes, distinguishing it from sibling tools like grist_get_documents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use browse mode (limit: 20) vs search mode (name_contains), and references grist_help for full schema, but does not explicitly state when not to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grist_helpGet Tool HelpA
Read-onlyIdempotent

Discover available tools and get detailed documentation with JSON schemas. Call without params to list all tools. Use tools param for full docs + sche

Example: {}

Use grist_help({tools:["grist_help"]}) for full schema.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolsNo
onlyNo
tool_nameNo
topicNo
response_formatNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description adds behavioral detail: the two modes of operation (param absence vs presence). However, it does not explain other behavioral traits like pagination or error handling, so limited added value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short (three sentences plus example), with purpose and usage front-loaded. However, the example is empty braces (missing param example), and the structure could be improved by listing param roles. Still, no extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 parameters with 0% schema coverage and no output schema, the description is incomplete. It only addresses the 'tools' param, leaving significant gaps. The agent cannot properly invoke the tool for tasks like filtering by tool_name or topic without additional documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, yet the description only explains one parameter ('tools') out of five. Parameters 'only', 'tool_name', 'topic', and 'response_format' are untouched. The description adds minimal meaning beyond the schema, leaving the agent uninformed about critical filtering options.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Discover available tools and get detailed documentation with JSON schemas.' It distinguishes itself from sibling tools (all data operations) by being a meta-help tool. The verb 'discover' and 'get' with resource 'tool documentation' is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear usage guidance: 'Call without params to list all tools. Use tools param for full docs + schemas.' Includes an example. Does not explicitly state when not to use, but the purpose is clearly differentiated from siblings, so usage context is implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grist_manage_pagesManage PagesC
Destructive

Declarative page layouts with cols/rows splits. create_page returns sectionIds; use link_widgets to connect. Actions: create_page, set_layout, link_wi

Use grist_help({tools:["grist_manage_pages"]}) for full schema.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYes
operationsYes
response_formatNo

TDQS

C2.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds some behavioral info beyond annotations (e.g., create_page returns sectionIds, use link_widgets to connect). Annotations already indicate destructive hint, but description does not elaborate on destructive behavior. Some added value but limited.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and to the point but incomplete and cut off. It could be more structured and informative while remaining concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool has 3 parameters, 2 required, no output schema. Description is truncated and does not cover return values or full usage context. Refers to grist_help for full schema, indicating incompleteness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, description must compensate heavily. It mentions operations like create_page, set_layout, link_wi, but does not describe docId or response_format. Partial meaning for operations only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description mentions 'Declarative page layouts' and lists actions like create_page, but it is incomplete and does not clearly differentiate from sibling tools. The purpose is somewhat clear but not fully articulated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. The description hints at using grist_help for full schema but does not provide context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grist_manage_recordsManage RecordsB
Destructive

CRUD for records: add, update, delete, upsert. Batched operations execute sequentially for cross-table dependencies. Use natural formats (no "L" prefi

Example: {"docId":"abc123","operations":[{"action":"add","tableId":"Contacts","records":[{"Name":"Alice","Email":"alice@example.com"}]}]}

Use grist_help({tools:["grist_manage_records"]}) for full schema.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYes
operationsYes
response_formatNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructive behavior (destructiveHint=true). The description adds that operations are sequential, but lacks details on what gets destroyed or auth requirements. Marginal added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short but cut off mid-sentence, making it incomplete. Front-loading is good, but the truncation harms clarity and professionalism.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (CRUD with batched operations), the description is insufficient. It lacks return value info, error handling, and limitations. The cut-off sentence leaves ambiguity about formats.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must compensate. It provides an example but does not explain each parameter's meaning or format. The cut-off sentence ('no L prefix') is incomplete, and 'response_format' is undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool performs CRUD operations on records (add, update, delete, upsert). It distinguishes from sibling tools like grist_get_records (read-only) and grist_manage_schema (schema management).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions 'batched operations execute sequentially for cross-table dependencies' but does not explicitly state when to use this tool versus alternatives or provide exclusion criteria. The example helps but guidelines are implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grist_manage_schemaManage SchemaC
Destructive

Batch schema operations: tables (create/rename/delete), columns (add/modify/remove), and summary tables. Ref columns need refTable. Summary tables aut

Use grist_help({tools:["grist_manage_schema"]}) for full schema.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYes
operationsYes
response_formatNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true, so the description adds little behavioral context. It mentions 'batch' but does not detail the scope of changes, potential side effects (e.g., data loss on column deletion), or any permissions/auth requirements. The description is truncated and misses opportunity to elaborate on safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loads purpose, but it is truncated (ends with 'aut') and relies on external help (grist_help) for completeness, which undermines self-containment. Every sentence earns its place but the incomplete final sentence reduces clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of batch schema operations and the lack of output schema or parameter descriptions, the description is insufficiently complete. The requirement to use grist_help for full schema highlights a gap. Important details like the structure of the 'operations' array, error handling, or transaction behavior are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 0% description coverage, and the description does not explain any parameters (docId, operations, response_format). The only parameter-related hint ('Ref columns need refTable') is vague and not linked to the schema. The description fails to add any meaning beyond the raw schema, leaving the agent to guess parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool handles batch schema operations on tables, columns, and summary tables, with specific verbs like create/rename/delete and add/modify/remove. This distinguishes it from sibling tools focused on documents, records, or pages, though it does not explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for schema modification and provides a constraint ('Ref columns need refTable'), but does not explicitly state when to use this tool versus alternatives or exclude certain contexts. The suggestion to use grist_help for full schema hints at complexity but doesn't guide the agent on conditional usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grist_manage_webhooksManage WebhooksB
Destructive

Batch webhook CRUD for real-time notifications. list and clear_queue must be solo operations.

Example: {"docId":"abc123","operations":[{"action":"create","fields":{"url":"https://api.example.com/hook","tableId":"Tasks","eventTypes":["add"]}}]}

Use grist_help({tools:["grist_manage_webhooks"]}) for full schema.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYes
operationsYes
response_formatNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds that the tool supports batch CRUD and that certain operations are solo, providing some context beyond annotations. However, it does not fully disclose behavior like what happens on failure or the effects of clear_queue.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences plus an example and a reference. It is front-loaded with the core purpose. No redundant information, though the example could be more tightly integrated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's destructive nature and lack of output schema, the description provides a basic understanding but omits details about optional parameter 'response_format', error handling, and return values. The reference to grist_help for full schema is helpful but does not fully compensate for missing context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description includes an example detailing the structure of the 'operations' array, including fields like url, tableId, and eventTypes. This partially compensates for the lack of parameter descriptions. However, 'response_format' is not explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool is for batch webhook CRUD for real-time notifications, specifying the verb 'manage' and resource 'webhooks'. It also mentions that certain operations must be solo, adding specificity, but does not explicitly differentiate from sibling tools like grist_manage_records.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a constraint that list and clear_queue must be solo operations, but lacks guidance on when to use this tool versus alternatives such as grist_query_sql or grist_manage_records. No explicit when-to-use or when-not-to-use context is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grist_query_sqlQuery Grist with SQLA
Read-onlyIdempotent

Execute SQL queries for JOINs, aggregations, and complex filters. Use grist_get_records for single-table queries without SQL. Supports parameterized q

Example: {"docId":"abc123","sql":"SELECT c.Name, o.Total FROM Customers c JOIN Orders o ON c.id = o.Customer"}

Use grist_help({tools:["grist_query_sql"]}) for full schema.

ParametersJSON Schema
NameRequiredDescriptionDefault
docIdYes
sqlYes
parametersNo
response_formatNo
offsetNo
limitNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, and open-world semantics. The description adds context about supported query types (JOINs, aggregations, complex filters) and parameterization, which complements the annotations without contradiction. No additional behavioral details are needed given the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, consisting of two clear sentences plus a relevant example. Information is front-loaded and directly addresses the tool's core functionality. The example adds value but is somewhat verbose; still, it maintains overall readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (SQL queries, 6 parameters, no output schema), the description is incomplete. It omits details about response_format, offset, limit, and how parameters work. The reference to external help via grist_help is a gap; the description should stand alone. It covers the essential distinction from siblings but fails to fully inform usage of optional parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 6 parameters with 0% description coverage. The description only implicitly mentions docId and sql via the example, and hints at parameterized queries for the 'parameters' array. It provides no explanation for response_format, offset, or limit, leaving significant ambiguity. The description does not compensate adequately for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool executes SQL queries for JOINs, aggregations, and complex filters. It explicitly distinguishes from the sibling tool grist_get_records by stating its use for single-table queries without SQL, leaving no ambiguity about when to use this tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool vs grist_get_records for single-table queries. It also mentions support for parameterized queries and references grist_help for full schema, though it does not specify any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 11 tool updatesv2.0.38
    • First observedgrist_create_document
    • First observedgrist_get_documents
    • First observedgrist_get_records
    • First observedgrist_get_tables
    • First observedgrist_get_workspaces
    • First observedgrist_help
    • First observedgrist_manage_pages
    • First observedgrist_manage_records
    • First observedgrist_manage_schema
    • First observedgrist_manage_webhooks
    • First observedgrist_query_sql

TDQS

A3.5/5.0
Disambiguation5/5

Each tool targets a distinct operation: document CRUD, record retrieval via filters or SQL, workspace listing, schema and page management, webhooks, and help. The only potential overlap is between grist_get_records and grist_query_sql, but their descriptions clearly differentiate simple filtering from complex SQL joins.

Naming Consistency5/5

All tools consistently follow the 'grist_verb_noun' pattern (e.g., grist_create_document, grist_manage_records, grist_query_sql). The naming is uniform and predictable across the set, with no mixed conventions like camelCase or random verbs.

Tool Count5/5

With 11 tools, the server is well-scoped for a Grist integration. It covers essential operations for documents, records, schema, pages, webhooks, and queries without excessive granularity or unnecessary overlap.

Completeness4/5

The tool surface covers most lifecycle operations: creating and reading documents, full CRUD for records, schema modifications, page layout, and webhook management. Notably missing are update and delete for documents, and workspace modification, but these are minor gaps for typical workflows.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/gwhthompson/grist-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server