mcp-coda
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CODA_TIMEOUT | No | Request timeout in seconds | 30 |
| CODA_BASE_URL | No | API base URL | https://coda.io/apis/v1 |
| CODA_API_TOKEN | Yes | Coda API token (required; also accepts CODA_TOKEN or CODA_PAT as fallback) | |
| CODA_READ_ONLY | No | Set to 'true' to disable write operations | false |
| CODA_SSL_VERIFY | No | Set to 'false' to skip SSL verification | true |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| coda_whoamiA | Get information about the current API token owner. Returns the user's name, email, and token scopes. Use this to verify that the API token is valid and has the expected permissions. If this returns an error, the token is invalid or expired. |
| coda_resolve_browser_linkA | Resolve a Coda browser URL to API resource IDs. Converts a browser URL (e.g. from the address bar or a shared link) into API-compatible IDs for the doc, page, table, row, or column it points to. Use this as the first step when a user provides a Coda URL instead of IDs. Returns a type field indicating the resource kind and corresponding IDs. |
| coda_get_mutation_statusA | Check the status of an asynchronous mutation (write operation). Coda write operations return 202 with a requestId. Use this tool to poll whether the mutation has completed, is still processing, or failed. Returns a completed boolean and any error details. Poll every 2 seconds, up to 30 seconds maximum. |
| coda_rate_limit_budgetA | Check the current rate limit budget for reads and writes. Returns how many read and write API calls remain in the current sliding window (6 seconds). Coda allows 100 reads/6s and 10 writes/6s. Use this before batch operations to avoid hitting 429 errors. The budget is tracked locally — it resets if the server restarts. |
| coda_list_docsA | List Coda docs accessible to the current API token. Returns doc metadata including name, owner, folder, and timestamps. Does NOT return page content or table data — use coda_list_pages or coda_list_tables for those. Rate-limited to 4 calls per 6 seconds. Use the query parameter to search by doc name. Pass cursor to paginate through results. |
| coda_get_docA | Get metadata for a single Coda doc by ID. Returns name, owner email, folder, created/updated timestamps, and doc size. Does NOT return page content or table data — use coda_list_pages or coda_list_tables for those. The doc_id can be obtained from coda_list_docs or coda_resolve_browser_link. |
| coda_create_docA | Create a new Coda doc. Creates a blank doc or a copy of an existing doc. Returns the new doc's ID, name, and browser URL. The doc is created in the specified folder, or the user's root if no folder is given. Use source_doc to clone an existing doc as a template. |
| coda_update_docA | Update metadata for an existing Coda doc. Updates the doc's title and/or icon. Does NOT update page content — use coda_update_page for that. Returns the updated doc metadata. This is an idempotent operation — calling with the same values produces the same result. |
| coda_delete_docA | Permanently delete a Coda doc. This is irreversible — the doc and all its pages, tables, and data will be permanently removed. Verify the doc name with coda_get_doc before calling this. Returns a confirmation status. |
| coda_list_pagesA | List all pages in a Coda doc. Returns page metadata including name, ID, parent page, and icon. Pages are returned in their tree order. Does NOT return page content — use coda_get_page_content for that. Use the returned page IDs (not names) for all subsequent page operations. |
| coda_get_pageA | Get metadata for a single page in a Coda doc. Returns the page's name, ID, parent, subtitle, icon, and image. Does NOT return the page's text content — use coda_get_page_content for that. Page names can change; always use page IDs for reliable access. |
| coda_create_pageA | Create a new page in a Coda doc. Creates a page with optional initial content. Returns the new page's ID and metadata. The page is created at the top level unless parent_page_id is specified. Content can be HTML or markdown — specify the format via content_format. Pack formulas cannot be inserted via the API. |
| coda_update_pageA | Update a page's name, subtitle, or content in a Coda doc. Updates page metadata and/or content. When updating content, 'replace' mode overwrites the entire page while 'append' adds to the end. There is no partial inline edit — draft full content locally first. Content format must match what you send (HTML or markdown). Returns the updated page metadata. |
| coda_delete_pageA | Permanently delete a page from a Coda doc. This is irreversible — the page and all its content will be removed. Child pages are reparented to the deleted page's parent. Verify the page name with coda_get_page before calling this. |
| coda_get_page_contentA | Get the text content of a page in a Coda doc. Returns the page's content in the specified format (HTML or markdown). Markdown output may be lossy for complex Coda content (embedded objects, pack formulas). Use this for reading page text — use coda_get_page for metadata only. |
| coda_delete_page_contentA | Delete all content from a page, leaving it blank. Removes the page's text content but does NOT delete the page itself. The page remains in the doc with its name and metadata intact. This is irreversible. Use coda_delete_page to remove the page entirely. |
| coda_export_pageA | Export a page's content, initiating an async export if needed. Starts an export job and returns the export status. For small pages, the content may be returned immediately. For large pages, poll the returned export ID until complete. Prefer coda_get_page_content for quick reads — use this only when you need a full export with embedded images resolved. |
| coda_list_tablesA | List all tables and views in a Coda doc. Returns table metadata including name, ID, type (table or view), row count, and parent page. Does NOT return row data — use coda_list_rows for that. Use coda_list_columns to get the column schema of a specific table. |
| coda_get_tableA | Get metadata for a single table or view in a Coda doc. Returns the table's name, ID, type, row count, parent page, and sort/filter info. Does NOT return row data or column definitions — use coda_list_rows and coda_list_columns for those. |
| coda_list_columnsA | List all columns in a Coda table. Returns column metadata including name, ID, type (text, number, date, etc.), and configuration. Column IDs are internal identifiers — use column names when working with row data. This is the table schema — call this before inserting or updating rows to know the available columns and their types. |
| coda_get_columnA | Get metadata for a single column in a Coda table. Returns the column's name, ID, type, format, and configuration details. Use this to check a specific column's type before writing data to it. For the full column schema, use coda_list_columns instead. |
| coda_list_rowsA | List rows in a Coda table with optional filtering and sorting. Returns row data with column values. By default uses column names (not IDs) for readability. Use the query parameter to filter rows by column values. For a specific row by ID, use coda_get_row instead. Results are paginated — pass cursor to get the next page. |
| coda_get_rowA | Get a single row from a Coda table by ID or display column value. Returns all column values for the specified row. Use this when you have a specific row ID or know the display column value. For querying multiple rows with filters, use coda_list_rows instead. |
| coda_insert_rowsA | Insert one or more rows into a Coda table, with optional upsert. Inserts up to 500 rows per call. Use column names (not IDs) in the cells. With key_columns, matching rows are updated (upsert) instead of inserted — this is the only way to bulk-update rows. Returns a requestId for async mutation tracking via coda_get_mutation_status. The operation is async (202). |
| coda_update_rowA | Update a single row in a Coda table. Updates specific column values for one row. Only the specified columns are changed — other columns are left unchanged. Use column names (not IDs). For bulk updates, use coda_insert_rows with key_columns (upsert) instead. Returns a requestId for async mutation tracking. |
| coda_delete_rowA | Delete a single row from a Coda table. Permanently removes the row. This is irreversible. Verify the row with coda_get_row before deleting. For bulk deletion, use coda_delete_rows with a list of row IDs instead. |
| coda_delete_rowsA | Delete multiple rows from a Coda table in a single call. Permanently removes all specified rows. This is irreversible. List the rows first with coda_list_rows to get their IDs. Returns a requestId for async mutation tracking. Prefer this over calling coda_delete_row in a loop for better performance and rate limit efficiency. |
| coda_push_buttonA | Push a button in a Coda table row. Triggers the button's configured action (e.g. run automation, modify row). The button must be in a Button-type column. The effect depends on the button's configuration in the Coda doc. Returns a requestId for async mutation tracking. |
| coda_list_formulasA | List all named formulas in a Coda doc. Returns formula metadata including name, ID, and value. Named formulas are doc-level computed values (not column formulas). Use coda_get_formula to get a specific formula's current value. |
| coda_get_formulaA | Get the current value of a named formula in a Coda doc. Returns the formula's name, ID, type, current value, and whether it has an error. The value is computed by Coda and reflects the latest state. Use coda_list_formulas to discover available formulas in a doc. |
| coda_list_controlsA | List all controls (sliders, select lists, date pickers, etc.) in a Coda doc. Returns control metadata including name, ID, type, and current value. Controls are interactive UI elements on pages. Use coda_get_control to read a specific control's current value. |
| coda_get_controlA | Get the current value of a control in a Coda doc. Returns the control's name, ID, type, and current value. Controls include sliders, select lists, date pickers, text inputs, and buttons. The value reflects the current user-facing state. Use coda_list_controls to discover available controls. |
| coda_trigger_automationA | Trigger a Coda automation rule. Fires the specified automation rule, optionally passing a JSON payload. The automation must have an API-triggerable event type. The payload schema depends on the automation's configuration. Returns a requestId for tracking. The rule_id can be found in the automation's settings in the Coda UI. |
| coda_get_sharing_metadataA | Get sharing metadata for a Coda doc. Returns whether the doc can be shared, copied, or has sharing restrictions. This is metadata about the doc's sharing configuration, not the list of who has access — use coda_list_permissions for that. |
| coda_list_permissionsA | List all permission entries (ACL) for a Coda doc. Returns who has access to the doc and their access level (read, write, etc.). Each entry includes the principal (user or group) and their permission type. Use coda_add_permission to grant access or coda_delete_permission to revoke. |
| coda_add_permissionA | Add a permission entry to a Coda doc. Grants access to a user by email or to an entire domain. Specify either principal_email or principal_domain (not both). The access level controls what the principal can do: readonly, write, comment, or none (removes implicit access). Returns the created permission entry. |
| coda_delete_permissionA | Remove a permission entry from a Coda doc. Revokes the specified permission. The principal will lose access to the doc unless they have access through another permission (e.g. domain-level). Get the permission_id from coda_list_permissions first. |
| coda_search_principalsA | Search for users and groups that can be added to a doc's permissions. Returns matching principals (users and groups) based on the query string. Use this to look up a user's email or find groups before calling coda_add_permission. Results include the principal's type, email, and name. |
| coda_get_acl_settingsA | Get the ACL settings for a Coda doc. Returns doc-level access control settings such as whether the doc allows copying, whether editors can change permissions, and the default access mode. These are administrative settings, not individual permission entries. |
| coda_list_categoriesA | List all available publishing categories in Coda. Returns the categories that can be used when publishing a doc to the Coda gallery. Each category has a name and ID. Use these category IDs with coda_publish_doc. |
| coda_publish_docA | Publish a Coda doc to make it publicly accessible. Publishes the doc with optional gallery listing and URL slug. The doc becomes accessible via a public URL. Use coda_unpublish_doc to revert. Returns the published doc's URL and settings. |
| coda_unpublish_docA | Unpublish a Coda doc, removing public access. Returns confirmation with doc_id. Reverts a previously published doc to private. The public URL will stop working. This is reversible — you can publish again with coda_publish_doc. |
| coda_list_foldersA | List all folders accessible to the current API token. Returns folder metadata including name, ID, and parent folder. Folders organize docs in the Coda workspace. Use the returned folder IDs with coda_create_doc to place new docs in specific folders. |
| coda_get_folderA | Get metadata for a single folder. Returns the folder's name, ID, parent folder, and child items. Use coda_list_folders to discover available folders first. |
| coda_create_folderA | Create a new folder in a Coda workspace. Creates a folder in the specified workspace. Returns the new folder's ID and metadata. Use the folder ID when creating docs with coda_create_doc to organize them. |
| coda_update_folderA | Update a folder's name. Renames the specified folder. Returns the updated folder metadata. This is an idempotent operation. |
| coda_delete_folderA | Delete a folder from the Coda workspace. Returns confirmation with folder_id. Permanently removes the folder. Docs inside the folder may be moved to the root level or deleted depending on Coda's behavior. Verify the folder with coda_get_folder before deleting. |
| coda_list_doc_analyticsA | List analytics data for docs (views, copies, likes, sessions). Returns usage metrics for docs over the specified date range. Includes total views, unique views, copies, and other engagement metrics. Only available to doc owners. Use coda_get_doc_analytics_summary for aggregated totals instead of per-doc breakdown. |
| coda_get_doc_analytics_summaryA | Get aggregated analytics summary across all docs. Returns total views, unique viewers, copies, and other metrics summed across all accessible docs. Use this for a high-level overview — use coda_list_doc_analytics for per-doc breakdown. |
| coda_list_page_analyticsA | List analytics data for pages within a doc. Returns per-page usage metrics (views, unique views) for the specified doc. Only available to doc owners. Useful for understanding which pages get the most traffic. |
| coda_list_pack_analyticsA | List analytics data for Coda packs. Returns usage metrics for packs including install counts, doc usage, and formula invocations. Only available to pack makers for their own packs. |
| coda_get_pack_analytics_summaryA | Get aggregated analytics summary for packs. Returns total installs, doc usage, and formula invocations summed across packs. Only available to pack makers. |
| coda_list_pack_formula_analyticsA | List analytics data for individual formulas within a pack. Returns per-formula invocation counts, error rates, and execution times. Only available to the pack maker. |
| coda_get_analytics_updatedA | Get the timestamp of when analytics data was last updated. Returns a timestamp indicating the freshness of analytics data. Analytics are not real-time — they are typically updated every few hours. Check this before relying on analytics data for time-sensitive decisions. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| analyze_doc_structure | Analyze a Coda doc's page hierarchy, tables, and organization. doc_id accepts a full Coda browser URL (e.g. https://coda.io/d/MyDoc_dABCdef123). |
| design_table_schema | Design a Coda table schema from a natural language description. |
| migrate_spreadsheet | Guide for migrating spreadsheet data into Coda tables. doc_id accepts a full Coda browser URL. |
| setup_automation | Set up an automation with proper payload design and error handling. doc_id accepts a full Coda browser URL. |
| audit_permissions | Audit sharing and permissions on a Coda doc. doc_id accepts a full Coda browser URL. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Coda Doc Structure | Doc → Pages → Subpages hierarchy, page types, naming, organization, when to split docs vs folders |
| Coda Table Design | Column types, lookup/relation patterns, display columns, calculated columns, row limits, table vs view, schema naming |
| Coda Permission Model | Doc-level vs page-level locking, sharing hierarchy, ACL settings, domain sharing, principal types |
| Coda Automation Patterns | Rule types, webhook triggers, button triggers, rate limits, payload design, idempotency |
| Coda API Best Practices | Rate limits (100 read/6s, 10 write/6s), pagination, async mutations, error handling, retry strategy |
| Row Operations Guide | Insert vs upsert, bulk ops (500 limit), key columns, cell value formats, button pushing, delete strategies |
| Page Content Guide | HTML vs markdown, content format selection, insert modes (replace/append), export workflows |
| Formulas & Controls Guide | Named formulas, formula evaluation, control types, reading control values |
| Publishing & Analytics Guide | Publishing categories, gallery settings, doc/page/pack analytics, date filtering |
| Folder Organization Guide | Folder CRUD, doc-folder relationships, folder hierarchy, bulk organization |
| Coda Docs | List of Coda docs accessible to the current API token |
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/vish288/mcp-coda'
If you have feedback or need assistance with the MCP directory API, please join our Discord server