Skip to main content
Glama
README.md
# Coda MCP Server

This project implements a Model Context Protocol (MCP) server that acts as a bridge to interact with the [Coda](https://coda.io/) API. It allows an MCP client (like an AI assistant) to perform actions on Coda pages, such as listing, creating, reading, updating, duplicating, and renaming.

> [!NOTE]  
> This MCP server is not developed or maintained by Coda; it's a community-built project.

## Features

The server exposes the following tools to the MCP client:

- **`coda_list_documents`**: Lists all documents available to the user.
- **`coda_list_pages`**: Lists all pages within the configured Coda document with pagination support.
- **`coda_create_page`**: Creates a new page in the document, optionally under a specified parent page (creating a subpage) and populating it with initial markdown content.
- **`coda_get_page_content`**: Retrieves the content of a specified page (by ID or name) as markdown.
- **`coda_replace_page_content`**: Replaces the content of a specified page with new markdown content.
- **`coda_append_page_content`**: Appends new markdown content to the end of a specified page.
- **`coda_duplicate_page`**: Creates a copy of an existing page with a new name.
- **`coda_rename_page`**: Renames an existing page.
- **`coda_peek_page`**: Peek into the beginning of a page and return a limited number of lines.
- **`coda_resolve_link`**: Resolve metadata given a browser link to a Coda object.
- **`coda_list_tables`**: List tables in a document.
- **`coda_list_columns`**: List columns in a table.
- **`coda_list_rows`**: List rows in a table with optional filtering and sorting.
- **`coda_get_row`**: Get a single row from a table.
- **`coda_upsert_rows`**: Insert or upsert rows into a table.
- **`coda_update_row`**: Update a single row in a table.
- **`coda_delete_row`**: Delete a single row from a table.
- **`coda_delete_rows`**: Delete multiple rows from a table.
- **`coda_push_button`**: Push a button column on a row in a table.

## Usage

Add the MCP server to Cursor/Claude Desktop/etc. like so:

```json
{
  "mcpServers": {
    "coda": {
      "command": "npx",
      "args": ["-y", "coda-mcp@latest"],
      "env": {
        "API_KEY": "..."
      }
    }
  }
}
```

Required environment variables:

- `API_KEY`: Your Coda API key. You can generate one from your Coda account settings.

This MCP server is also available with Docker, like so:

```json
{
  "mcpServers": {
    "coda": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "-e", "API_KEY", "reaperberri/coda-mcp:latest"],
      "env": {
        "API_KEY": "..."
      }
    }
  }
}
```

## Local Setup

1.  **Prerequisites:**

    - Node.js
    - pnpm

2.  **Clone the repository:**

    ```bash
    git clone <repository-url>
    cd coda-mcp
    ```

3.  **Install dependencies:**

    ```bash
    pnpm install
    ```

4.  **Build the project:**
    ```bash
    pnpm build
    ```
    This compiles the TypeScript code to JavaScript in the `dist/` directory.

## Running the Server

The MCP server communicates over standard input/output (stdio). To run it, set the environment variables and run the compiled JavaScript file - `dist/index.js`.

TDQS

A3.5/5.0

Scored across 19 tools

Disambiguation5/5

Every tool has a distinct action and target (e.g., create_page vs. duplicate_page vs. rename_page, delete_row vs. delete_rows vs. update_row). No two tools perform overlapping operations. Agents can clearly differentiate based on names and descriptions.

Naming Consistency5/5

All tools follow the consistent pattern 'coda_verb_noun' using snake_case (e.g., 'coda_list_rows', 'coda_update_row'). Verbs are imperative and uniquely identify the action. The naming is predictable and uniform across the entire set.

Tool Count5/5

With 19 tools, the server covers the main entities in Coda (documents, pages, tables, rows, columns) without being overwhelming. Each tool earns its place, providing both basic and advanced operations (e.g., upsert_rows, push_button). The count is well-scoped for a full-featured MCP server.

Completeness4/5

The tool set offers extensive CRUD coverage for pages and rows, including append, replace, peek, and upsert. Notable missing operations include deleting pages, creating tables/columns, and updating table structures, but the core workflows are well-supported. Minor gaps exist but do not severely impede common use cases.

Maintenance

ActivityInactive
ResponsivenessNo issues