# Grist — MCP server on mcp.ai > Connect your Grist account and use 30 tools for productivity straight from your AI agent. Connect with your own API key. Grist is a relational spreadsheet platform that combines the flexibility of a spreadsheet with the robustness of a database, allowing users to create custom applications tailored to their data needs. By: mcp.ai · official Page: https://mcp.ai/grist ## Connect (MCP protocol) Remote MCP endpoint (HTTP, streamable): https://api.mcp.ai/p_grist?ms=1787291340000 Add it as a custom/remote MCP connector, then authenticate when prompted. ## REST API (no MCP client required) Every tool is also a REST endpoint, authed with a workspace API key. Discover: GET https://api.mcp.ai/api/grist/_endpoints # public; lists every endpoint Call: POST https://api.mcp.ai/api/grist/ Authorization: Bearer sk_live_… # create one at https://mcp.ai/settings/api-keys Content-Type: application/json Body: { …args } → { "ok": true, "tool": "", "result": { … } } ## Developer docs How to use (MCP or REST), markdown: https://mcp.ai/grist/skill.md Postman collection (v2.1): https://mcp.ai/grist/postman.json ## Tools - grist_add_records(docId: string, noparse?: boolean, records: object[], tableId: string) — Add one or more records to a Grist table. First use GRIST_LIST_WORKSPACES to get docId, GRIST_LIST_TABLES to get tableId, and GRIST_LIST_COLUMNS to get column IDs for the fields mapping. - grist_create_document(name: string, isPinned?: boolean, workspaceId: integer) — Creates a new Grist document in a specified workspace. Use this tool when you need to add a new spreadsheet document to a workspace. Requires a valid workspace ID (obtainable via GRIST_LIST_WORKSPACES - grist_create_scim_user(name: object, emails: object[], locale?: string, photos?: object[], schemas?: string[], userName: string, displayName?: string, preferredLanguage?: string) — Tool to create a new SCIM user. Use when provisioning new user accounts via SCIM. Run after gathering all required user details. - grist_create_table(docId: string, tables: object[]) — Tool to create tables in a document. Use after confirming the document ID. Creates one or more tables with specified columns in the given document. - grist_create_webhook(docId: string, webhooks: object[]) — Tool to create a new webhook for a specified document. Use when you need to register webhook endpoints for document events in Grist. Run after confirming document ID. - grist_delete_attachment(doc_id: string, expired_only?: boolean) — Remove unused attachments from a Grist document to free up storage space. IMPORTANT: This action removes ALL attachments that are not currently referenced by any cell in the document. It does NOT dele - grist_delete_column(col_id: string, doc_id: string, table_id: string) — Tool to delete a column from a Grist document table. Use after confirming document, table, and column IDs. - grist_delete_records(doc_id: string, row_ids: integer[], table_id: string) — Tool to delete records from a specified Grist table. Use when you need to remove specific rows by their IDs. Use after confirming the row IDs exist. - grist_delete_scim_user(user_id: integer) — Delete a user from the Grist organization by their numeric user ID. Use GRIST_GET_USERS first to find the user's ID. Falls back to org access API if SCIM is not enabled. Note: Cannot delete your own a - grist_delete_webhook(doc_id: string, webhook_id: string) — Permanently removes a webhook from a Grist document. Use this tool when you need to stop receiving notifications for document changes. First use GRIST_LIST_WEBHOOKS to find the webhook_id you want to - grist_download_all_attachments_archive(doc_id: string, format?: string) — Download all attachments from a Grist document as a single archive file (.zip or .tar). Use this to bulk-download attachments. Ensure the document has attachments before calling (check with GRIST_LIST - grist_download_attachment(docId: string, attachmentId: integer) — Download a file attachment from a Grist document. Returns the file content as a downloadable file. Use GRIST_LIST_ATTACHMENTS first to get valid attachment IDs. - grist_fetch_document_metadata(doc_id: string) — Tool to fetch metadata for a specified Grist document. Use after obtaining the document ID. - grist_fetch_table_metadata(doc_id: string, header?: string, table_id: string) — Tool to retrieve metadata for a specified table in a Grist document. Use when you need to inspect table schema details before data operations. - grist_get_org_access(org_id?: integer|string) — Retrieves the list of users who have access to a Grist organization along with their access roles (owners, editors, viewers). Use this to find user IDs, emails, or check access permissions within an o - grist_get_users(count?: integer, filter?: string, startIndex?: integer) — Tool to retrieve a list of users via SCIM v2. Use when you need to page through and filter enterprise users in Grist. - grist_list_attachments(sort?: string, docId: string, limit?: integer, X-Sort?: string, filter?: string, X-Limit?: integer) — Tool to list all attachments in a Grist document. Use after confirming the document ID to retrieve attachment metadata. - grist_list_columns(doc_id: string, hidden?: boolean, table_id: string) — Tool to list all columns in a specified Grist table. Use after selecting the document and table to inspect column metadata. - grist_list_organizations() — Tool to list all organizations accessible to the authenticated user. Use when you need to select a Grist organization for subsequent operations. - grist_list_records(sort?: string, docId: string, limit?: integer, filter?: string, hidden?: boolean, tableId: string) — Tool to retrieve records from a specified table within a Grist document. Use when you need to fetch rows by applying optional filters, sorting, limits, or hidden columns. Example: list records where p - grist_list_tables(docId: string) — Tool to list all tables within a specified document. Use after obtaining the document ID to retrieve its tables. - grist_list_webhooks(doc_id: string) — List all webhooks configured for a Grist document. Returns webhook configuration details (URL, event types, table binding) and delivery status information. Use this to inspect, audit, or manage webhoo - grist_list_workspaces() — Tool to list all workspaces and documents accessible to the authenticated user on the current site. Use when you need to select a workspace or document for subsequent operations. - grist_run_sql_query(sql: string, args?: integer|string[], docId: string, timeout?: integer) — Tool to execute a read-only SQL SELECT query on a Grist document. Use after confirming the document ID and preparing a valid SQL SELECT statement. - grist_update_column_metadata(docId: string, columns: object[], tableId: string) — Updates metadata (label, type, description, formula, etc.) for one or more columns in a Grist table. Use List Columns first to get valid column IDs. Warning: changing 'label' may rename the column ID - grist_update_document_metadata(name?: string, doc_id: string, isPinned?: boolean) — Tool to update metadata for a specified Grist document. Use when you need to rename or pin/unpin a document after obtaining its ID. - grist_update_records(docId: string, noparse?: boolean, records: object[], tableId: string) — Update existing records in a Grist table by their row IDs. Use this tool to modify field values for one or more records in a specified document and table. First use GRIST_LIST_RECORDS to obtain the re - grist_update_table_metadata(docId: string, fields: object, tableId: string) — Update metadata properties for a table in a Grist document. Currently the main updatable property is 'onDemand' which controls lazy loading of table data. Use List Tables to find valid table IDs first - grist_update_webhook(url?: string, memo?: string, name?: string, doc_id: string, enabled?: boolean, tableId?: string, eventTypes?: string[], webhook_id: string, isReadyColumn?: string) — Update an existing webhook configuration for a Grist document. Use to modify webhook settings such as URL, event types, enabled status, or target table. Requires valid document ID (from GRIST_LIST_WOR - grist_upload_attachment(docId: string, files: object[]) — Upload one or more file attachments to a Grist document. Returns attachment IDs that can be used to link files to records in Attachments-type columns. First use GRIST_LIST_WORKSPACES to get a valid do ## Example prompts - "What can I do in Grist?" - "Show me a summary of my Grist account" ## Links Docs: https://mcp.ai/docs/mcps/grist Website: https://mcp.ai/mcps/grist