coda-mcp

coda-mcp

MCP server for Coda.io API that enables AI assistants to read and write Coda documents, tables, and rows.

Category
Visit Server

README

coda-mcp

MCP Registry Crates.io CI codecov License: MIT MSRV

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.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
E2B

E2B

Using MCP to run code via e2b.

Official
Featured