Skip to main content

MCP server for Coda API — docs, pages, tables, rows, formulas, permissions, and more

Project description

mcp-coda

PyPI version PyPI downloads Python License: MIT CI MCP Registry

Install: uvx mcp-coda | PyPI | MCP Registry | Changelog

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, Gemini CLI), 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"
      }
    }
  }
}

Gemini CLI

gemini mcp add -e CODA_API_TOKEN=your-token-here coda uvx mcp-coda

pip / uv

uv pip install mcp-coda

Configuration

Variable Required Default Description
CODA_API_TOKEN Yes - Coda API token (get one here)
CODA_READ_ONLY No false Set to true to disable write operations
CODA_BASE_URL No https://coda.io/apis/v1 API base URL
CODA_TIMEOUT No 30 Request timeout in seconds
CODA_SSL_VERIFY No true Set 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

Client Supported Install Method
Claude Desktop Yes claude_desktop_config.json
Claude Code Yes claude mcp add
Cursor Yes One-click deeplink or .cursor/mcp.json
VS Code Copilot Yes One-click deeplink or .vscode/mcp.json
Windsurf Yes ~/.codeium/windsurf/mcp_config.json
Any MCP client Yes stdio or HTTP transport

Tools (54)

Category Count Tools
Account 4 whoami, resolve browser link, mutation status, rate limit budget
Docs 5 list, get, create, update, delete
Pages 8 list, get, create, update, delete, get content, delete content, export
Tables 4 list tables, get table, list columns, get column
Rows 7 list, get, insert/upsert, update, delete, bulk delete, push button
Formulas 2 list, get
Controls 2 list, get
Permissions 6 sharing metadata, list, add, delete, search principals, ACL settings
Publishing 3 list categories, publish, unpublish
Folders 5 list, get, create, update, delete
Automations 1 trigger automation
Analytics 7 doc analytics, doc summary, page analytics, pack analytics, pack summary, formula analytics, analytics updated
Full tool reference (click to expand)

Account

Tool Description
coda_whoami Get current user info
coda_resolve_browser_link Convert browser URL to API IDs
coda_get_mutation_status Check async write status
coda_rate_limit_budget Get remaining rate limit budget

Docs

Tool Description
coda_list_docs List accessible docs
coda_get_doc Get doc metadata
coda_create_doc Create a new doc
coda_update_doc Update doc title/icon
coda_delete_doc Delete a doc

Pages

Tool Description
coda_list_pages List pages in a doc
coda_get_page Get page metadata
coda_create_page Create a page
coda_update_page Update page name/content
coda_delete_page Delete a page
coda_get_page_content Read page content
coda_delete_page_content Clear page content
coda_export_page Export page as HTML or markdown

Tables

Tool Description
coda_list_tables List tables and views
coda_get_table Get table metadata
coda_list_columns List columns in a table
coda_get_column Get column metadata

Rows

Tool Description
coda_list_rows List and filter rows
coda_get_row Get a single row
coda_insert_rows Insert or upsert rows
coda_update_row Update a row
coda_delete_row Delete a row
coda_delete_rows Bulk delete rows by filter
coda_push_button Push a button column value

Formulas

Tool Description
coda_list_formulas List named formulas
coda_get_formula Get formula value

Controls

Tool Description
coda_list_controls List controls
coda_get_control Get control value

Permissions

Tool Description
coda_get_sharing_metadata Get sharing config
coda_list_permissions List ACL entries
coda_add_permission Grant access
coda_delete_permission Revoke access
coda_search_principals Search users/groups
coda_get_acl_settings Get ACL settings

Publishing

Tool Description
coda_list_categories List publishing categories
coda_publish_doc Publish a doc
coda_unpublish_doc Unpublish a doc

Folders

Tool Description
coda_list_folders List folders
coda_get_folder Get folder details
coda_create_folder Create a folder
coda_update_folder Rename a folder
coda_delete_folder Delete a folder

Automations

Tool Description
coda_trigger_automation Trigger an automation rule

Analytics

Tool Description
coda_list_doc_analytics Doc usage metrics
coda_get_doc_analytics_summary Aggregated doc metrics
coda_list_page_analytics Page usage metrics
coda_list_pack_analytics Pack usage metrics
coda_get_pack_analytics_summary Aggregated pack metrics
coda_list_pack_formula_analytics Formula-level metrics
coda_get_analytics_updated Analytics freshness timestamp

Resources (12)

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

Data Resources (live API)

URI Name Description
coda://docs Coda Docs List of docs accessible to the current API token
coda://docs/{doc_id}/schema Coda Doc Schema Table and column definitions for a doc

Rules (static knowledge)

URI Name Description
resource://rules/coda-doc-structure Coda Doc Structure Doc/page hierarchy, page types, naming, when to split docs vs folders
resource://rules/coda-table-design Coda Table Design Column types, relations, display columns, row limits, table vs view
resource://rules/coda-permissions Coda Permission Model Doc-level vs page-level locking, ACL, domain sharing, principal types
resource://rules/coda-automations Coda Automation Patterns Webhooks, button triggers, rate limits, payload design, idempotency
resource://rules/coda-api-patterns Coda API Best Practices Rate limits, pagination, async mutations, error handling, retry

Guides (how-to)

URI Name Description
resource://guides/row-operations Row Operations Guide Insert vs upsert, bulk ops, key columns, cell formats, delete strategies
resource://guides/page-content Page Content Guide HTML vs markdown, insert modes, export workflows
resource://guides/formula-controls Formulas & Controls Guide Named formulas, control types, reading values
resource://guides/publishing-analytics Publishing & Analytics Guide Publishing categories, gallery settings, analytics date filtering
resource://guides/folder-organization Folder Organization Guide Folder CRUD, doc-folder relationships, hierarchy, bulk organization

Prompts (5)

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

Prompt Parameters Description
analyze_doc_structure doc_id Analyze a doc's page hierarchy, table layout, and organization
design_table_schema description Design a table schema from a natural language description
migrate_spreadsheet doc_id, source_format Guide for migrating CSV/Excel/Sheets data into Coda
setup_automation doc_id, trigger_type Set up a webhook/button/time automation with error handling
audit_permissions doc_id Audit 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

Operation Minimum Coda Doc Role
List docs, read pages, tables, rows, formulas, controls Viewer
Read permissions, analytics Viewer (doc owner for analytics)
Create/update pages, insert/update/delete rows Editor
Create/delete docs, manage folders Editor (or doc owner)
Add/remove permissions, publish/unpublish Doc Owner
Trigger automations Editor

Access Control

Layer Mechanism
Server-level CODA_READ_ONLY=true blocks all write tools
MCP annotations readOnlyHint, destructiveHint, idempotentHint for client-side prompts
Coda token Doc-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.

Related MCP Servers

  • mcp-gitlab — GitLab integration (76 tools, 6 resources, 5 prompts)
  • mcp-atlassian-extended — Jira + Confluence integration (23 tools, 15 resources, 5 prompts)

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_coda-0.4.11.tar.gz (183.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_coda-0.4.11-py3-none-any.whl (65.3 kB view details)

Uploaded Python 3

File details

Details for the file mcp_coda-0.4.11.tar.gz.

File metadata

  • Download URL: mcp_coda-0.4.11.tar.gz
  • Upload date:
  • Size: 183.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mcp_coda-0.4.11.tar.gz
Algorithm Hash digest
SHA256 595255b5b6d562e191eb2c7a54784b0cac9e13bc4f110040ddf1138a7b12208f
MD5 7cf9beefafb7f9baf5cab35ec9ded1f2
BLAKE2b-256 61f6fbac711f3372ab09d7c4ac614db5840dcd6f4a303f721fd043f4838308a4

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_coda-0.4.11.tar.gz:

Publisher: publish.yml on vish288/mcp-coda

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mcp_coda-0.4.11-py3-none-any.whl.

File metadata

  • Download URL: mcp_coda-0.4.11-py3-none-any.whl
  • Upload date:
  • Size: 65.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mcp_coda-0.4.11-py3-none-any.whl
Algorithm Hash digest
SHA256 2883201102bb4108e55c909ee6c5aab8332fca0ca7d198710b121fc4d6e76fbc
MD5 6b3740c3b8f884be2ce650803772ed77
BLAKE2b-256 e33f9dd3ec952cb067c03b22a19783fdd96543c67d44cf8ebfa7b857446d0998

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcp_coda-0.4.11-py3-none-any.whl:

Publisher: publish.yml on vish288/mcp-coda

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page