io.github.vish288/mcp-coda

平台与服务

by vish288

用于 Coda API 的 MCP 服务器,支持文档、页面、表格、行、公式、权限与自动化操作。

什么是 io.github.vish288/mcp-coda

用于 Coda API 的 MCP 服务器,支持文档、页面、表格、行、公式、权限与自动化操作。

README

mcp-coda

PyPI version PyPI downloads Python License: MIT CI MCP Registry

<!-- mcp-name: io.github.vish288/mcp-coda -->

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.

<details> <summary><b>Manual Setup Guides (Click to expand)</b></summary> <br/>

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

Claude Code

bash
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.

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

Gemini CLI

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

pip / uv

bash
uv pip install mcp-coda
</details>

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
<details> <summary>Full tool reference (click to expand)</summary>

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
</details>

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

code
"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

code
"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

code
"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

code
"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

bash
# 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

bash
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

常见问题

io.github.vish288/mcp-coda 是什么?

用于 Coda API 的 MCP 服务器,支持文档、页面、表格、行、公式、权限与自动化操作。

相关 Skills

MCP构建

by anthropics

Universal
热门

聚焦高质量 MCP Server 开发,覆盖协议研究、工具设计、错误处理与传输选型,适合用 FastMCP 或 MCP SDK 对接外部 API、封装服务能力。

想让 LLM 稳定调用外部 API,就用 MCP构建:从 Python 到 Node 都有成熟指引,帮你更快做出高质量 MCP 服务器。

平台与服务
未扫描114.1k

Slack动图

by anthropics

Universal
热门

面向Slack的动图制作Skill,内置emoji/消息GIF的尺寸、帧率和色彩约束、校验与优化流程,适合把创意或上传图片快速做成可直接发送的Slack动画。

帮你快速做出适配 Slack 的动图,内置约束规则和校验工具,少踩上传与播放坑,做表情包和演示都更省心。

平台与服务
未扫描114.1k

MCP服务构建器

by alirezarezvani

Universal
热门

从 OpenAPI 一键生成 Python/TypeScript MCP server 脚手架,并校验 tool schema、命名规范与版本兼容性,适合把现有 REST API 快速发布成可生产演进的 MCP 服务。

帮你快速搭建 MCP 服务与后端 API,脚手架完善、扩展顺手,尤其适合想高效验证服务能力的开发者。

平台与服务
未扫描10.2k

相关 MCP Server

Slack 消息

编辑精选

by Anthropic

热门

Slack 是让 AI 助手直接读写你的 Slack 频道和消息的 MCP 服务器。

这个服务器解决了团队协作中需要 AI 实时获取 Slack 信息的痛点,特别适合开发团队让 Claude 帮忙汇总频道讨论或发送通知。不过,它目前只是参考实现,文档有限,不建议在生产环境直接使用——更适合开发者学习 MCP 如何集成第三方服务。

平台与服务
83.4k

by netdata

热门

io.github.netdata/mcp-server 是让 AI 助手实时监控服务器指标和日志的 MCP 服务器。

这个工具解决了运维人员需要手动检查系统状态的痛点,最适合 DevOps 团队让 Claude 自动分析性能数据。不过,它依赖 NetData 的现有部署,如果你没用过这个监控平台,得先花时间配置。

平台与服务
78.4k

by d4vinci

热门

Scrapling MCP Server 是专为现代网页设计的智能爬虫工具,支持绕过 Cloudflare 等反爬机制。

这个工具解决了爬取动态网页和反爬网站时的头疼问题,特别适合需要批量采集电商价格或新闻数据的开发者。不过,它依赖外部浏览器引擎,资源消耗较大,不适合轻量级任务。

平台与服务
35.4k

评论