coda-mcp
MCP server for Coda.io API that enables AI assistants to read and write Coda documents, tables, and rows.
README
coda-mcp
MCP (Model Context Protocol) server for Coda.io API. Enables AI assistants to read and write Coda documents, tables, and rows.
Features
- Full CRUD operations on Coda tables
- Document and page content retrieval
- Formula and control access
- Async export workflow for canvas pages
- Rate limit handling
Quick Start
1. Install
cargo install coda-mcp
2. Get API Token
Get your token from coda.io/account → API settings.
3. Configure Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or ~/.config/claude/claude_desktop_config.json (Linux):
{
"mcpServers": {
"coda": {
"command": "/Users/YOUR_USERNAME/.cargo/bin/coda-mcp",
"env": {
"CODA_API_TOKEN": "your_token_here"
}
}
}
}
4. Restart Claude Desktop
The Coda tools will now be available.
Installation
From crates.io (Recommended)
cargo install coda-mcp
From Source
git clone https://github.com/nkpar/coda-mcp.git
cd coda-mcp
cargo build --release
Binary will be at ./target/release/coda-mcp
Pre-built Binaries
Check the Releases page.
Docker
No Rust toolchain required. Multi-arch image (amd64 + arm64), ~3MB.
docker pull ghcr.io/nkpar/coda-mcp:latest
Claude Code (CLI):
claude mcp add coda -e CODA_API_TOKEN=your_token_here -- docker run --rm -i -e CODA_API_TOKEN ghcr.io/nkpar/coda-mcp:latest
Claude Desktop config:
{
"mcpServers": {
"coda": {
"command": "docker",
"args": ["run", "--rm", "-i", "-e", "CODA_API_TOKEN", "ghcr.io/nkpar/coda-mcp:latest"],
"env": {
"CODA_API_TOKEN": "your_token_here"
}
}
}
}
One-Click Install Script
For Claude Desktop with automatic configuration:
git clone https://github.com/nkpar/coda-mcp.git
cd coda-mcp
./scripts/install.sh
Configuration
1. Get API Token
Get your Coda API token from coda.io/account → API settings.
Important: For write operations (create_doc, delete_doc, add_row, update_row, delete_row), ensure your token has write permissions enabled. Read-only tokens will return 403 Forbidden for these operations.
2. Configure MCP Client
Claude Desktop (~/.config/claude/claude_desktop_config.json):
{
"mcpServers": {
"coda": {
"command": "/path/to/coda-mcp",
"env": {
"CODA_API_TOKEN": "your_token_here"
}
}
}
}
Claude Code (CLI):
# Binary
claude mcp add coda -e CODA_API_TOKEN=your_token_here -- $HOME/.cargo/bin/coda-mcp
# Or via Docker (no Rust required)
claude mcp add coda -e CODA_API_TOKEN=your_token_here -- docker run --rm -i -e CODA_API_TOKEN ghcr.io/nkpar/coda-mcp:latest
Or via .mcp.json in project root:
{
"mcpServers": {
"coda": {
"command": "/path/to/coda-mcp",
"env": {
"CODA_API_TOKEN": "your_token_here"
}
}
}
}
Environment Variables
| Variable | Required | Description |
|---|---|---|
CODA_API_TOKEN |
Yes | Your Coda API token |
CODA_BASE_URL |
No | API base URL (default: https://coda.io/apis/v1) |
RUST_LOG |
No | Log level: error, warn, info, debug, trace |
Tools
| Tool | Description |
|---|---|
list_docs |
List available documents |
get_doc |
Get document details |
search_docs |
Search documents by name |
create_doc |
Create a new document (optional: folder, template, timezone) |
delete_doc |
Delete a document (permanent) |
list_pages |
List pages in a document |
get_page |
Get page content (HTML) |
list_tables |
List tables in a document |
get_table |
Get table details |
list_columns |
List columns in a table |
get_rows |
Get rows with optional filtering |
get_row |
Get a specific row |
add_row |
Add a new row |
update_row |
Update an existing row |
delete_row |
Delete a row |
list_formulas |
List named formulas |
get_formula |
Get formula value |
list_controls |
List controls (buttons, sliders) |
Usage Examples
# List all documents
list_docs
# Create a new document
create_doc title="My New Doc"
# Create from template in specific folder
create_doc title="Project Plan" folder_id="fl-abc" source_doc="template-xyz"
# Delete a document (permanent!)
delete_doc doc_id="AbCdEfGh"
# Get rows from a table
get_rows doc_id="AbCdEfGh" table_id="grid-xyz" limit=50
# Filter rows
get_rows doc_id="AbCdEfGh" table_id="grid-xyz" query="Status:Active"
# Add a row
add_row doc_id="AbCdEfGh" table_id="grid-xyz" cells={"Name": "John", "Email": "john@example.com"}
# Get page content
get_page doc_id="AbCdEfGh" page_id="canvas-xyz"
Rate Limits
Coda API has rate limits:
- Reading: 100 requests per 6 seconds
- Writing: 10 requests per 6 seconds
Write operations return HTTP 202 (queued). Changes may take a few seconds to appear.
Security
- API tokens are redacted from all log output
- Download URLs validated against trusted hosts only (coda.io, codahosted.io, storage.googleapis.com)
- Request limits capped at 1000 to prevent resource exhaustion
- Install script uses silent input for tokens and sets restrictive file permissions (600)
Development
# Build
cargo build --release
# Run unit & integration tests
cargo test
# Run E2E tests (requires write-enabled API token)
export $(cat .env | xargs) && cargo test --test e2e_tests -- --ignored
# Run with debug logging
RUST_LOG=debug cargo run
# Format & lint
cargo fmt && cargo clippy
See DEVELOPER.md for API details and CONTRIBUTING.md for contribution guidelines.
License
MIT License. See LICENSE for details.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。