AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
MCP verified MIT Self-run

Mcp Coda

mcp-vish288-mcp-coda · by vish288

MCP server for Coda API — 54 tools, 12 resources, 5 prompts. Docs, pages, tables, rows, formulas, permissions, automation, analytics.

No reviews yet
0 installs
35 views
0.0% view→install

Install

$ agentstack add mcp-vish288-mcp-coda

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets Used
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/mcp-vish288-mcp-coda)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
2mo ago

Declared compatibility

Claude CodeClaude DesktopCursorWindsurf

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Mcp Coda? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

mcp-coda

[](https://pypi.org/project/mcp-coda/) [](https://pypi.org/project/mcp-coda/) [](https://pypi.org/project/mcp-coda/) [](https://opensource.org/licenses/MIT) [](https://github.com/vish288/mcp-coda/actions/workflows/tests.yml) [](https://registry.modelcontextprotocol.io)

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

[](https://vish288.github.io/mcp-install?server=mcp-coda&install=cursor)

[](https://vish288.github.io/mcp-install?server=mcp-coda&install=vscode) [](https://vish288.github.io/mcp-install?server=mcp-coda&install=vscode-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

Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.