mcpField
M
mcp-coda

mcp-coda

本地服务
github.com/vish288生产力21 周前更新

关于 mcp-coda

mcp-coda 是连接 Coda API 的 MCP 服务,供 AI 助手读取和编辑文档、页面、表格及行。它还支持公式、权限、文件夹、发布、自动化和分析,并可锁定为只读模式。

主要功能

  1. 01管理文档和页面
  2. 02查询及写入表格与行
  3. 03运行公式并管理控件
  4. 04管理权限、文件夹和发布
  5. 05触发自动化并查看分析
  6. 06可配置只读模式

适用场景

  1. 01通过 AI 助手维护 Coda 文档
  2. 02查询或批量更新表格行
  3. 03检查文档权限与使用分析
  4. 04限制连接仅执行读取操作

MCP 相关

该项目是 Coda 的 MCP 服务,向兼容客户端提供 54 个工具、12 个资源和 5 个提示词。支持 stdio 与 streamable HTTP 传输,并可配置为只读。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"vish288-mcp-coda": {
"command": "uvx",
"args": [
"mcp-coda"
],
"env": {
"CODA_API_TOKEN": "<CODA_API_TOKEN>",
"CODA_READ_ONLY": "<CODA_READ_ONLY>",
"MCP_READ_ONLY": "<MCP_READ_ONLY>",
"CODA_HTTP_BEARER_TOKEN": "<CODA_HTTP_BEARER_TOKEN>"
}
}
}
}
启动命令uvx mcp-coda
需要配置的环境变量
CODA_API_TOKEN密钥Coda API token (also accepts CODA_TOKEN or CODA_PAT)
CODA_READ_ONLYAlias for MCP_READ_ONLY. Any value other than false/0/no/off/empty locks the server read-only; --read-only can only raise the lock
MCP_READ_ONLYLocks the server read-only: write tools and write-workflow prompts are not listed and nothing lifts the lock at runtime. Shared name across the mcp-* servers; set it in the deployer's env
CODA_HTTP_BEARER_TOKEN密钥Bearer token (min 16 chars) required to bind an HTTP transport to a non-loopback host; clients send it as 'Authorization: Bearer <token>'

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimcp-coda0.12.3

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

mcp-coda

PyPI version PyPI downloads Python License: MIT CI MCP Registry

安装: uvx mcp-coda | PyPI | MCP Registry | 更新日志

uvx mcp-coda                          # with writes
MCP_READ_ONLY=true uvx mcp-coda       # locked read-only: write tools are not listed

mcp-coda 是一个用于 Coda 的 Model Context Protocol (MCP) 服务。它让 AI 助手通过 Coda API 读取和写入 Coda 文档、页面、表格和行。它还可以运行公式、管理权限和文件夹、发布文档并触发自动化。该服务提供 54 个工具、12 个资源和 5 个提示词。它支持 MCP 2026-07-28 规范(通常称为 MCP 2.0),并与 2025-11-25 客户端保持兼容。它适用于 Claude Desktop、Claude Code、Cursor、Windsurf、VS Code Copilot 以及任何兼容 MCP 的客户端。支持两种运行模式:允许写入,或锁定为只读(MCP_READ_ONLY=true),此时不会向模型提供 20 个写入工具。

mcp-coda 使用 FastMCP、httpx 和 Pydantic。

一键安装

在 Cursor 中安装

在 VS Code 中安装 在 VS Code Insiders 中安装

提示: 对于其他 AI 助手(Claude Code、Windsurf、IntelliJ、Gemini CLI),请访问 Coda MCP 安装入口。

手动配置指南(点击展开)

前置条件:请先安装 uv(所有 uvx 安装流程都需要)。安装 uv。

Claude Code
# with writes
claude mcp add coda -e CODA_API_TOKEN=your-token-here -- uvx mcp-coda
# locked read-only
claude mcp add coda -e MCP_READ_ONLY=true -e CODA_API_TOKEN=your-token-here -- uvx mcp-coda
Windsurf 和 IntelliJ

Windsurf: 添加到 ~/.codeium/windsurf/mcp_config.json IntelliJ: 添加到 Settings | Tools | MCP Servers

注意: 实际的服务配置位于 mcpServers 对象内的 coda 项下。 删除 MCP_READ_ONLY 即可允许写入。

{
  "mcpServers": {
    "coda": {
      "command": "uvx",
      "args": ["mcp-coda"],
      "env": {
        "CODA_API_TOKEN": "your-token-here",
        "MCP_READ_ONLY": "true"
      }
    }
  }
}
Gemini CLI
# with writes
gemini mcp add -s user -e CODA_API_TOKEN=your-token-here coda uvx mcp-coda
# locked read-only
gemini mcp add -s user -e MCP_READ_ONLY=true -e CODA_API_TOKEN=your-token-here coda uvx mcp-coda
VS Code

添加到 .vscode/mcp.json:

{
  "servers": {
    "coda": {
      "type": "stdio",
      "command": "uvx",
      "args": ["mcp-coda"],
      "env": { "CODA_API_TOKEN": "your-token-here", "MCP_READ_ONLY": "true" }
    }
  }
}
Codex
# with writes
codex mcp add coda --env CODA_API_TOKEN=your-token-here -- uvx mcp-coda
# locked read-only
codex mcp add coda --env MCP_READ_ONLY=true --env CODA_API_TOKEN=your-token-here -- uvx mcp-coda
pip / uv
uv pip install mcp-coda

删除 MCP_READ_ONLY 即可允许写入。对于共享或托管的服务,请将其设置在部署者的环境中,而不是客户端配置中。

## 配置
变量必需默认值描述
CODA_API_TOKEN是-Coda API 令牌(在此获取)
MCP_READ_ONLY否falsemcp-* 服务之间共用的名称。任何不为 false/0/no/off/空值的值都会将服务锁定为只读:不会列出 20 个写入工具和写入工作流提示词,且运行时无法解除锁定
CODA_READ_ONLY否falseMCP_READ_ONLY 的服务专用别名;设置其中任意一个都会将服务锁定为只读。--read-only 只能加强锁定
CODA_BASE_URL否https://coda.io/apis/v1API 基础 URL
CODA_TIMEOUT否30请求超时时间,单位为秒
CODA_HTTP_BEARER_TOKEN否-将 HTTP 传输绑定到非环回主机时必需。客户端发送 Authorization: Bearer <token>。至少 16 个字符
支持的令牌类型

服务按以下顺序检查这些环境变量——以第一个匹配项为准:

  1. CODA_API_TOKEN
  2. CODA_TOKEN
  3. CODA_PAT

在 coda.io/account#apiSettings 生成令牌。令牌可访问其所有者能够访问的全部文档。令牌没有范围限制。文档级访问权限由 Coda 的共享设置控制。

兼容性

客户端支持安装方式
Claude Desktop是claude_desktop_config.json
Claude Code是claude mcp add
Cursor是一键深层链接或 .cursor/mcp.json
VS Code Copilot是一键深层链接或 .vscode/mcp.json
Windsurf是~/.codeium/windsurf/mcp_config.json
任意 MCP 客户端是stdio 或 HTTP 传输

协议支持

mcp-coda 实现了 Model Context Protocol 2026-07-28 规范,通常称为 MCP 2.0。它也继续兼容 2025-11-25 客户端。固定使用 2026-07-28 的 FastMCP 客户端和旧版客户端都能列出所有工具,并通过 stdio 调用 Coda API。配套的代码 PR 添加了一项回归测试,用固定使用 2026-07-28 的内存客户端检查 tools/list。

  • 规范版本:MCP 2026-07-28(MCP 2.0),向后兼容 2025-11-25。
  • 基于:FastMCP 4.x 和 MCP Python SDK 2.x。
  • 传输方式:stdio(默认)和 streamable-http(远程连接推荐)。sse(HTTP+SSE)仍可使用,但 2026-07-28 规范已弃用该方式,因此服务会打印警告。
  • 功能:工具、资源和提示词。服务不使用 Roots、Sampling、Logging、elicitation 或资源订阅,因此 2026-07-28 的弃用事项不会影响它。
错误结果

预期的失败情况——404、401、速率限制,或因触发只读保护而被拦截的写入操作——会作为带有 isError: true 的工具结果返回,而不是要求调用方检查是否存在 error 键的值。(在锁定的只读模式下,写入工具会被隐藏,因此调用其中一个会返回 Unknown tool 错误;下方的错误封装是保护机制本身的响应,仅当客户端仍然调用写入工具时才会返回。)结果正文是文本内容:一个包含 error、可操作的 hint,以及视情况而定的 status_code、body 和 retry_after 的 JSON 对象。结果不包含 structuredContent——TypeScript MCP SDK 会根据工具的输出架构验证 structuredContent,即使 isError 为 true 也是如此,因此将错误载荷放在那里会导致严格客户端拒绝整个结果。意外异常(工具中的 Bug)也会以 isError: true 返回,文本格式为 TypeName: message,并且服务端会记录异常及其回溯信息。

成功的结果会在格式化文本旁的 structuredContent 中携带 Coda JSON 对象,且工具不声明 outputSchema:载荷会以无类型方式传递上游字段,因此严格客户端不会验证任何内容,并会直接收到该对象,而不是收到双重编码的 {"result": "<json>"} 封装。可通过每个工具上的 @mcp.tool(output_schema=…) 选择启用类型化架构。

工具(54)

类别数量工具
账户3whoami、resolve browser link、mutation status
文档5列表、获取、创建、更新、删除
页面9列表、获取、创建、更新、删除、获取内容、删除内容、导出、导出状态
表格4列出表格、获取表格、列出列、获取列
行7列表、获取、插入/插入或更新、更新、删除、批量删除、按下按钮
权限6共享元数据、列表、添加、删除、搜索主体、ACL 设置
文件夹5列表、获取、创建、更新、删除
其他8公式(列表、获取)、控件(列表、获取)、发布(列出类别、发布、取消发布)、触发自动化
分析7文档分析、文档摘要、页面分析、Pack 分析、Pack 摘要、公式分析、分析数据更新时间
完整工具参考(点击展开)
账户
工具描述
coda_whoami获取当前用户信息
coda_resolve_browser_link将浏览器 URL 转换为 API ID
coda_get_mutation_status检查异步写入状态
文档
工具描述
coda_list_docs列出可访问的文档
coda_get_doc获取文档元数据
coda_create_doc创建新文档
coda_update_doc更新文档标题/图标
coda_delete_doc删除文档
页面
工具描述
coda_list_pages列出文档中的页面
coda_get_page获取页面元数据
coda_create_page创建页面
coda_update_page更新页面名称/内容
coda_delete_page删除页面
coda_get_page_content读取页面内容
coda_delete_page_content清空页面内容
coda_export_page将页面导出为 HTML 或 Markdown
coda_get_export_status轮询由 coda_export_page 发起的导出任务
表格
工具描述
coda_list_tables列出表格和视图
coda_get_table获取表格元数据
coda_list_columns列出表格中的列
coda_get_column获取列元数据
行
工具描述
coda_list_rows列出并筛选行
coda_get_row获取单行
coda_insert_rows插入或插入/更新行
coda_update_row更新一行
coda_delete_row删除一行
coda_delete_rows根据筛选条件批量删除行
coda_push_button按下按钮列的值
### 公式 | 工具 | 描述 | |------|-------------| | `coda_list_formulas` | 列出命名公式 | | `coda_get_formula` | 获取公式值 |
控件
工具描述
coda_list_controls列出控件
coda_get_control获取控件值
权限
工具描述
coda_get_sharing_metadata获取共享配置
coda_list_permissions列出 ACL 条目
coda_add_permission授予访问权限
coda_delete_permission撤销访问权限
coda_search_principals搜索用户/群组
coda_get_acl_settings获取 ACL 设置
发布
工具描述
coda_list_categories列出发布类别
coda_publish_doc发布文档
coda_unpublish_doc取消发布文档
文件夹
工具描述
coda_list_folders列出文件夹
coda_get_folder获取文件夹详情
coda_create_folder创建文件夹
coda_update_folder重命名文件夹
coda_delete_folder删除文件夹
自动化
工具描述
coda_trigger_automation触发自动化规则
分析
工具描述
coda_list_doc_analytics文档使用指标
coda_get_doc_analytics_summary汇总文档指标
coda_list_page_analytics页面使用指标
coda_list_pack_analyticsPack 使用指标
coda_get_pack_analytics_summary汇总 Pack 指标
coda_list_pack_formula_analytics公式级指标
coda_get_analytics_updated分析数据更新时间戳

资源(12)

该服务提供 MCP 资源,用于提供环境上下文,且不会消耗工具调用。

数据资源(实时 API)
URI名称描述
coda://docsCoda 文档当前 API 令牌可访问的文档列表
coda://docs/{doc_id}/schemaCoda 文档架构文档的表和列定义
规则(静态知识)
URI名称描述
resource://rules/coda-doc-structureCoda 文档结构文档/页面层级、页面类型、命名,以及何时拆分文档与文件夹
resource://rules/coda-table-designCoda 表格设计列类型、关系、显示列、行数限制,以及表格与视图的区别
resource://rules/coda-permissionsCoda 权限模型文档级与页面级锁定、ACL、域共享、主体类型
resource://rules/coda-automationsCoda 自动化模式Webhook、按钮触发器、速率限制、载荷设计、幂等性
resource://rules/coda-api-patternsCoda API 最佳实践速率限制、分页、异步变更、错误处理、重试
指南(操作方法)
URI名称描述
resource://guides/row-operations行操作指南插入与更新插入、批量操作、键列、单元格格式、删除策略
resource://guides/page-content页面内容指南HTML 与 Markdown、插入模式、导出工作流
resource://guides/formula-controls公式与控件指南命名公式、控件类型、读取值
resource://guides/publishing-analytics发布与分析指南发布类别、图库设置、分析日期筛选
resource://guides/folder-organization文件夹整理指南文件夹 CRUD、文档与文件夹的关系、层级、批量整理

提示词(5)

该服务器提供 MCP 提示词——可供客户端调用的可复用任务模板。

提示词参数描述
analyze_doc_structuredoc_id分析文档的页面层级、表格布局和组织结构
design_table_schemadescription根据自然语言描述设计表格架构
migrate_spreadsheetdoc_id、source_format指导将 CSV/Excel/Sheets 数据迁移到 Coda
setup_automationdoc_id、trigger_type设置 webhook/按钮/定时自动化,并处理错误
audit_permissionsdoc_id审查共享和权限,并建议收紧权限

使用示例

文档和页面
"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")
表格和行
"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"}]})
公式和控件
"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")
权限和共享
"Share a doc with a teammate"
→ coda_add_permission(doc_id="d1", access="write", principal_email="[email protected]")

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

安全注意事项

  • 令牌范围:Coda API 令牌可以访问令牌所有者有权访问的所有文档。生产部署时请使用专用服务账户,以限制暴露范围。
  • 只读模式:在你控制的启动配置中设置 MCP_READ_ONLY=true(或 CODA_READ_ONLY=true),服务器启动后便会锁定:不会列出 20 个写入工具和写入工作流提示词,调用它们会返回“Unknown tool”,且保护机制会拒绝任何仍到达服务器的写入操作。运行时无法解除锁定——其他来源提供的 false、.env 文件或工具参数都不行;除 false/0/no/off/空值以外的任何值都会锁定,而 --read-only 只能启用锁定。锁定强度取决于启动配置:请在用户无法编辑的位置设置该选项(例如受管理的 MCP 配置,如 Claude Code managed-mcp.json、容器、k8s 或 systemd 环境变量,或托管的 HTTP 部署)。自行启动服务器的用户可以控制其环境。Coda 令牌没有权限范围,因此此锁定是唯一的只读控制措施。
  • MCP 工具注释:每个工具都声明 readOnlyHint、destructiveHint 和 idempotentHint,供客户端侧权限提示使用。
  • 不存储凭据:服务器不会持久化令牌。它会在启动时从环境变量读取凭据。
  • HTTP 传输身份验证:Host/Origin 保护不等同于身份验证。将 HTTP 传输绑定到非回环主机时,必须设置 CODA_HTTP_BEARER_TOKEN(至少 16 个字符);客户端发送 Authorization: Bearer <token>,其他任何内容都会得到 401 响应。未设置时,服务器会拒绝在非回环主机上启动。

升级到 0.9.0

两项默认值已更改。对于依赖旧行为的调用方,这两项更改都会造成破坏性影响:

  • coda_publish_doc 默认不再将文档列入公共图库。 discoverable 现在默认为 False——仅发布文档会使其可通过 URL 访问;传入 discoverable=True 可将其列入 Coda 图库。mode 现在仅限 view、play 或 edit。
  • 现在,在非回环主机上使用 HTTP 传输必须提供承载令牌。 如果未设置 CODA_HTTP_BEARER_TOKEN(至少 16 个字符),uvx mcp-coda --transport streamable-http --host 0.0.0.0(或任何非回环主机)将报错退出;客户端随后发送 Authorization: Bearer <token>。绑定到 127.0.0.1 的行为不变。

速率限制和权限

速率限制

Coda 会对每个令牌实施速率限制(具体限制因套餐而异)。当 Coda 对请求进行速率限制时,工具会返回一个 429 错误,并附带 retry_after 秒数。当 Retry-After 小于或等于 5 秒时,客户端会对 429 重试一次(仅限 GET 请求,并加入随机抖动;也适用于 502/503/504);否则会直接返回 retry_after,不进行重试——等待相应秒数后再重试。写入操作绝不会重试。大多数分页端点默认每页返回 50 条结果(coda_list_docs 为 25 条,coda_list_columns 为 100 条)。使用 limit 调整数量。

异步变更

Coda 会异步处理写入操作(插入、更新、删除行)。工具会返回一个 requestId。使用 coda_get_mutation_status 检查该 ID,以确认操作已完成。

所需权限
操作最低 Coda 文档角色
列出文档、读取页面、表格、行、公式、控件Viewer
读取权限、分析数据Viewer(分析数据需文档所有者)
创建/更新页面、插入/更新/删除行Editor
创建/删除文档、管理文件夹Editor(或文档所有者)
添加/移除权限、发布/取消发布Doc Owner
触发自动化Editor
访问控制
层级机制
服务级别CODA_READ_ONLY=true / MCP_READ_ONLY=true 会隐藏所有写入工具(需要由部署方控制启动)
MCP 注释readOnlyHint、destructiveHint、idempotentHint,供客户端提示使用
Coda 令牌文档级访问权限由 Coda 的共享设置强制执行

CLI 和传输选项

# 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

# Binding to a non-loopback host requires a bearer token
CODA_HTTP_BEARER_TOKEN=$(openssl rand -hex 32) \
  uvx mcp-coda --transport streamable-http --host 0.0.0.0 --port 9000
# Clients authenticate with the token:
#   curl -H "Authorization: Bearer $CODA_HTTP_BEARER_TOKEN" http://host:9000/mcp

# Config comes from env vars
CODA_API_TOKEN=your-token uvx mcp-coda --read-only

--coda-token 仍可使用,但已弃用并从 --help 中隐藏:它会使令牌暴露在 ps 和 shell 历史记录中。请使用 CODA_API_TOKEN。

服务器会通过 python-dotenv 自动从工作目录加载 .env 文件。

Docker

此映像采用精简的非 root python:3.13-slim 构建。映像默认锁定为只读(MCP_READ_ONLY=true);传入 -e MCP_READ_ONLY=false 即可允许写入。

docker build -t mcp-coda .

# stdio (default), locked read-only
docker run -i --rm -e CODA_API_TOKEN=your-token mcp-coda

# HTTP transport on a non-loopback host requires a bearer token (min 16 chars);
# clients then send Authorization: Bearer <token>
BEARER=$(openssl rand -hex 32)
docker run --rm -p 9000:9000 \
  -e CODA_API_TOKEN=your-token \
  -e CODA_HTTP_BEARER_TOKEN="$BEARER" \
  mcp-coda --transport streamable-http --host 0.0.0.0 --port 9000

常见问题

mcp-coda 是否支持 MCP 2.0(2026-07-28 规范)?

支持。mcp-coda 实现了 MCP 2026-07-28 规范,通常称为 MCP 2.0。它也兼容 2025-11-25 客户端。

mcp-coda 支持哪些传输方式?

服务器支持 stdio(默认)和 streamable-http。它也支持 sse,但 2026-07-28 规范已弃用该方式。远程连接建议使用 streamable-http。

我能否以只读模式运行 mcp-coda,防止助手进行任何更改?

可以。使用 MCP_READ_ONLY=true(或 CODA_READ_ONLY=true)启动。此时,20 个写入工具和写入工作流提示词都不会列出,因此模型看不到它们;调用其中任何工具都会返回“Unknown tool”,且进程运行期间无法重新启用写入功能。请在由你控制的启动配置中设置该变量,例如受管理的 MCP 配置、容器或 systemd 环境变量,或者托管部署;因为自行启动服务器的用户可以不设置该变量。Coda 令牌没有作用域,因此此锁定是唯一的只读控制方式。

mcp-coda 需要哪些令牌作用域?

Coda 令牌没有作用域。令牌可以访问其所有者能够访问的每个文档。文档级访问权限由 Coda 的共享设置控制。请使用专用服务账号来限制暴露范围。

mcp-coda 是否适用于可自托管的 Coda?

Coda 是托管服务,因此没有可自托管的部署方式。仅在需要指定代理或非默认 API 基础地址时,才设置 CODA_BASE_URL。

哪些客户端适用于 mcp-coda?

mcp-coda 适用于 Claude Desktop、Claude Code、Cursor、Windsurf、VS Code Copilot,以及任何通过 stdio 或 HTTP 兼容 MCP 的客户端。

它提供多少个工具、资源和提示词?

mcp-coda 提供 54 个工具、12 个资源和 5 个提示词,涵盖文档、页面、表格、行、公式、控件、权限、文件夹、发布、自动化和分析数据。

相关 MCP 服务

  • mcp-gitlab — GitLab 集成(83 个工具、7 个资源、6 个提示词)
  • mcp-atlassian-extended — Jira + Confluence 集成(22 个工具、15 个资源、5 个提示词)
  • mcp-argocd — Argo CD 集成(37 个工具、7 个资源、7 个提示词)

开发

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 .

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。