Full-featured MCP server for the Coda.io API — docs, pages, tables, rows, formulas, controls, automations, permissions & analytics.
Strong foundation with 34 well-named tools covering a comprehensive Coda API surface. All tools have descriptions (avg 85 chars) and input schemas with typed parameters. Tool names follow verb_noun convention (coda_list_docs, coda_create_doc, coda_delete_row). Annotations present (readOnlyHint, destructiveHint). Key gaps: parameter descriptions are minimal (avg 45 chars, below 72-char baseline); output schemas not documented; error handling lacks recovery guidance; no pagination/limit guidance in descriptions despite tools accepting limit params; destructive operations lack confirmation patterns.
Add a permission (share) to a doc.
⚠️ Delete all rows matching a query.
Create a new Coda doc (optionally by copying an existing one).
Create a new page in a Coda doc.
⚠️ PERMANENTLY delete a column from a table.
⚠️ PERMANENTLY delete a Coda doc. This cannot be undone.
⚠️ PERMANENTLY delete a page from a Coda doc.
Output schemas not documented. Tools return JSON but LLMs cannot infer field structure, types, or which fields enable chaining (e.g., does coda_list_docs return doc_id or id?). Agents cannot plan downstream calls without explicit response schemas.
Destructive operations (delete_doc, delete_page, delete_rows, clear_rows, delete_permission) lack confirmation or dry-run patterns. Agents can permanently destroy data without a safety gate. No recovery guidance in error messages.
Parameter descriptions are minimal (avg 45 chars vs 72-char baseline). 'Optional Coda query string to filter rows' lacks format/syntax guidance. LLMs cannot construct valid Coda query syntax without examples or constraints. Descriptions should state: 'Coda query syntax: [ColumnName] = value, [Status] != Done, etc.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
⚠️ Remove a permission (share) from a doc.
⚠️ Delete multiple rows by ID.
Get analytics for a doc (views, editors, etc.).
Export a page's content as Markdown or PDF.
Fetch rows from a table with optional filtering, sorting, and pagination.
Get metadata for a specific column.
Get a control by ID.
Get metadata for a specific Coda doc.
Get a named formula by ID.
Get metadata for a specific page.
Get a single row by ID.
Get metadata for a specific table.
Insert multiple new rows in bulk (up to 100 per call).
List all columns in a table.
List all controls in a doc.
List accessible Coda docs.
List all named formulas in a doc.
List all pages (and sub-pages) in a Coda doc.
List all permissions (shares) on a doc.
List all tables in a Coda doc.
Push a button control on a row.
Resolve a formula expression in the context of a row.
Get analytics for a row (views, editors, etc.).
Trigger an automation rule in a doc.
Update a page's name, subtitle, or visibility.
Update a single row by ID.
Upsert (insert or update) multiple rows in bulk (up to 100 per call).
Pagination guidance missing. coda_fetch_rows and coda_list_docs accept limit=0 for 'all', but no guidance on when to paginate or how to handle large result sets. Description should state: 'Default 100. Set limit=0 to fetch all (may be slow for large tables; consider pagination).'
Error handling lacks recovery guidance. Code catches httpx exceptions and raises RuntimeError, but LLMs receive no actionable next steps. E.g., 'CODA_API_TOKEN not set' should suggest 'Set CODA_API_TOKEN environment variable.' 429 retries silently, LLM sees no feedback.