MCP Hub
Back to servers

mcp-coda

MCP server for Coda.io — docs, pages, tables, rows, formulas, and automations.

Registry
Updated
Feb 27, 2026

Quick Install

uvx mcp-coda

mcp-coda

PyPI version PyPI downloads Python License: MIT CI MCP Registry

mcp-coda is a Model Context Protocol (MCP) server for the Coda API54 tools, 12 resources, and 5 prompts covering docs, pages, tables, rows, formulas, controls, permissions, folders, publishing, automations, and analytics. Works with Claude Desktop, Claude Code, Cursor, Windsurf, VS Code Copilot, and any MCP-compatible client.

Built with FastMCP, httpx, and Pydantic.

1-Click Installation

Install in Cursor

Install in VS Code Install in VS Code Insiders

Tip: For other AI assistants (Claude Code, Windsurf, IntelliJ), visit the Coda MCP Installation Gateway.

Manual Setup Guides (Click to expand)

Prerequisite: Install uv first (required for all uvx install flows). Install uv.

Claude Code

claude mcp add coda -- uvx mcp-coda

Windsurf & IntelliJ

Windsurf: Add to ~/.codeium/windsurf/mcp_config.json IntelliJ: Add to Settings | Tools | MCP Servers

Note: The actual server config starts at coda inside the mcpServers object.

{
  "mcpServers": {
    "coda": {
      "command": "uvx",
      "args": ["mcp-coda"],
      "env": {
        "CODA_API_TOKEN": "your-token-here"
      }
    }
  }
}

pip / uv

uv pip install mcp-coda

Configuration

VariableRequiredDefaultDescription
CODA_API_TOKENYes-Coda API token (get one here)
CODA_READ_ONLYNofalseSet to true to disable write operations
CODA_BASE_URLNohttps://coda.io/apis/v1API base URL
CODA_TIMEOUTNo30Request timeout in seconds
CODA_SSL_VERIFYNotrueSet to false to skip SSL verification

Supported Token Types

The server checks these environment variables in order — first match wins:

  1. CODA_API_TOKEN
  2. CODA_TOKEN
  3. CODA_PAT

Tokens are generated at coda.io/account#apiSettings. Tokens grant access to all docs accessible by the token owner. There are no scope restrictions — access is controlled at the doc level via Coda's sharing settings.

Compatibility

ClientSupportedInstall Method
Claude DesktopYesclaude_desktop_config.json
Claude CodeYesclaude mcp add
CursorYesOne-click deeplink or .cursor/mcp.json
VS Code CopilotYesOne-click deeplink or .vscode/mcp.json
WindsurfYes~/.codeium/windsurf/mcp_config.json
Any MCP clientYesstdio or HTTP transport

Tools (54)

CategoryCountTools
Account4whoami, resolve browser link, mutation status, rate limit budget
Docs5list, get, create, update, delete
Pages8list, get, create, update, delete, get content, delete content, export
Tables4list tables, get table, list columns, get column
Rows7list, get, insert/upsert, update, delete, bulk delete, push button
Formulas2list, get
Controls2list, get
Permissions6sharing metadata, list, add, delete, search principals, ACL settings
Publishing3list categories, publish, unpublish
Folders5list, get, create, update, delete
Automations1trigger automation
Analytics7doc analytics, doc summary, page analytics, pack analytics, pack summary, formula analytics, analytics updated
Full tool reference (click to expand)

Account

ToolDescription
coda_whoamiGet current user info
coda_resolve_browser_linkConvert browser URL to API IDs
coda_get_mutation_statusCheck async write status
coda_rate_limit_budgetGet remaining rate limit budget

Docs

ToolDescription
coda_list_docsList accessible docs
coda_get_docGet doc metadata
coda_create_docCreate a new doc
coda_update_docUpdate doc title/icon
coda_delete_docDelete a doc

Pages

ToolDescription
coda_list_pagesList pages in a doc
coda_get_pageGet page metadata
coda_create_pageCreate a page
coda_update_pageUpdate page name/content
coda_delete_pageDelete a page
coda_get_page_contentRead page content
coda_delete_page_contentClear page content
coda_export_pageExport page as HTML or markdown

Tables

ToolDescription
coda_list_tablesList tables and views
coda_get_tableGet table metadata
coda_list_columnsList columns in a table
coda_get_columnGet column metadata

Rows

ToolDescription
coda_list_rowsList and filter rows
coda_get_rowGet a single row
coda_insert_rowsInsert or upsert rows
coda_update_rowUpdate a row
coda_delete_rowDelete a row
coda_delete_rowsBulk delete rows by filter
coda_push_buttonPush a button column value

Formulas

ToolDescription
coda_list_formulasList named formulas
coda_get_formulaGet formula value

Controls

ToolDescription
coda_list_controlsList controls
coda_get_controlGet control value

Permissions

ToolDescription
coda_get_sharing_metadataGet sharing config
coda_list_permissionsList ACL entries
coda_add_permissionGrant access
coda_delete_permissionRevoke access
coda_search_principalsSearch users/groups
coda_get_acl_settingsGet ACL settings

Publishing

ToolDescription
coda_list_categoriesList publishing categories
coda_publish_docPublish a doc
coda_unpublish_docUnpublish a doc

Folders

ToolDescription
coda_list_foldersList folders
coda_get_folderGet folder details
coda_create_folderCreate a folder
coda_update_folderRename a folder
coda_delete_folderDelete a folder

Automations

ToolDescription
coda_trigger_automationTrigger an automation rule

Analytics

ToolDescription
coda_list_doc_analyticsDoc usage metrics
coda_get_doc_analytics_summaryAggregated doc metrics
coda_list_page_analyticsPage usage metrics
coda_list_pack_analyticsPack usage metrics
coda_get_pack_analytics_summaryAggregated pack metrics
coda_list_pack_formula_analyticsFormula-level metrics
coda_get_analytics_updatedAnalytics freshness timestamp

Resources (12)

The server exposes MCP resources that provide ambient context without consuming tool calls.

Data Resources (live API)

URINameDescription
coda://docsCoda DocsList of docs accessible to the current API token
coda://docs/{doc_id}/schemaCoda Doc SchemaTable and column definitions for a doc

Rules (static knowledge)

URINameDescription
resource://rules/coda-doc-structureCoda Doc StructureDoc/page hierarchy, page types, naming, when to split docs vs folders
resource://rules/coda-table-designCoda Table DesignColumn types, relations, display columns, row limits, table vs view
resource://rules/coda-permissionsCoda Permission ModelDoc-level vs page-level locking, ACL, domain sharing, principal types
resource://rules/coda-automationsCoda Automation PatternsWebhooks, button triggers, rate limits, payload design, idempotency
resource://rules/coda-api-patternsCoda API Best PracticesRate limits, pagination, async mutations, error handling, retry

Guides (how-to)

URINameDescription
resource://guides/row-operationsRow Operations GuideInsert vs upsert, bulk ops, key columns, cell formats, delete strategies
resource://guides/page-contentPage Content GuideHTML vs markdown, insert modes, export workflows
resource://guides/formula-controlsFormulas & Controls GuideNamed formulas, control types, reading values
resource://guides/publishing-analyticsPublishing & Analytics GuidePublishing categories, gallery settings, analytics date filtering
resource://guides/folder-organizationFolder Organization GuideFolder CRUD, doc-folder relationships, hierarchy, bulk organization

Prompts (5)

The server provides MCP prompts — reusable task templates that clients can invoke.

PromptParametersDescription
analyze_doc_structuredoc_idAnalyze a doc's page hierarchy, table layout, and organization
design_table_schemadescriptionDesign a table schema from a natural language description
migrate_spreadsheetdoc_id, source_formatGuide for migrating CSV/Excel/Sheets data into Coda
setup_automationdoc_id, trigger_typeSet up a webhook/button/time automation with error handling
audit_permissionsdoc_idAudit sharing and permissions, suggest tightening

Usage Examples

Docs & Pages

"List all my Coda docs"
→ coda_list_docs(is_owner=True)

"Get the content of page 'Sprint Planning' in doc d1"
→ coda_list_pages(doc_id="d1") → find page ID
→ coda_get_page_content(doc_id="d1", page_id_or_name="canvas-abc")

"Create a new doc from a template"
→ coda_create_doc(title="Q1 Planning", source_doc="template-doc-id")

Tables & Rows

"List all tables in doc d1"
→ coda_list_tables(doc_id="d1")

"Find rows where Status is 'Done'"
→ coda_list_rows(doc_id="d1", table_id_or_name="Tasks", query="Done")

"Insert a new row into the Tasks table"
→ coda_insert_rows(doc_id="d1", table_id_or_name="Tasks", rows=[{"cells": [{"column": "Name", "value": "New task"}]}])

"Update a row's status"
→ coda_update_row(doc_id="d1", table_id_or_name="Tasks", row_id_or_name="i-abc", row={"cells": [{"column": "Status", "value": "In Progress"}]})

Formulas & Controls

"Get the value of the TotalBudget formula"
→ coda_get_formula(doc_id="d1", formula_id_or_name="TotalBudget")

"Check the current value of the DateFilter control"
→ coda_get_control(doc_id="d1", control_id_or_name="DateFilter")

Permissions & Sharing

"Share a doc with a teammate"
→ coda_add_permission(doc_id="d1", access="write", principal={"type": "email", "email": "alice@example.com"})

"List who has access to a doc"
→ coda_list_permissions(doc_id="d1")

Security Considerations

  • Token scope: Coda API tokens grant access to all docs the token owner can access. Use a dedicated service account for production deployments to limit exposure.
  • Read-only mode: Set CODA_READ_ONLY=true to disable all write operations (create, update, delete). Read-only mode is enforced server-side before any API call.
  • MCP tool annotations: Each tool declares readOnlyHint, destructiveHint, and idempotentHint for client-side permission prompts.
  • SSL verification: CODA_SSL_VERIFY=true by default. Only disable for development against local proxies.
  • No credential storage: The server does not persist tokens. Credentials are read from environment variables at startup.

Rate Limits & Permissions

Rate Limits

Coda enforces per-token rate limits (varies by plan). When rate-limited, tools return a 429 error with retry_after seconds. Use coda_rate_limit_budget to check remaining budget before batch operations. Paginated endpoints default to 25 results per page; use limit to adjust.

Async Mutations

Write operations (insert, update, delete rows) are processed asynchronously. Tools return a requestId that can be checked with coda_get_mutation_status to confirm completion.

Required Permissions

OperationMinimum Coda Doc Role
List docs, read pages, tables, rows, formulas, controlsViewer
Read permissions, analyticsViewer (doc owner for analytics)
Create/update pages, insert/update/delete rowsEditor
Create/delete docs, manage foldersEditor (or doc owner)
Add/remove permissions, publish/unpublishDoc Owner
Trigger automationsEditor

Access Control

LayerMechanism
Server-levelCODA_READ_ONLY=true blocks all write tools
MCP annotationsreadOnlyHint, destructiveHint, idempotentHint for client-side prompts
Coda tokenDoc-level access enforced by Coda's sharing settings

CLI & Transport Options

# Default: stdio transport (for MCP clients)
uvx mcp-coda

# HTTP transport (SSE or streamable-http)
uvx mcp-coda --transport sse --host 127.0.0.1 --port 8000
uvx mcp-coda --transport streamable-http --port 9000

# CLI overrides for config
uvx mcp-coda --coda-token your-token --read-only

The server loads .env files from the working directory automatically via python-dotenv.

Development

git clone https://github.com/vish288/mcp-coda.git
cd mcp-coda
uv sync --all-extras

uv run pytest --cov
uv run ruff check .
uv run ruff format --check .

License

MIT

Reviews

No reviews yet

Sign in to write a review