coda-mcp-readonly
# Coda MCP Read-Only 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 and reading.
## Acknowledgments
This project is a fork of the original [Coda MCP server](https://github.com/orellazri/coda-mcp).
**Credits to [Orel Lazri](https://github.com/orellazri)** for the original implementation and the foundation of this tool.
## 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_get_page_content`**: Retrieves the content of a specified page (by ID or name) as markdown.
- **`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.
## Usage
Add the MCP server to Cursor/Claude Desktop/etc. like so:
```json
{
"mcpServers": {
"coda-readonly": {
"command": "npx",
"args": ["-y", "coda-mcp-readonly@latest"],
"env": {
"API_KEY": "..."
}
}
}
}
```
Required environment variables:
- `API_KEY`: Your Coda API key. You can generate one from your Coda account settings.
## 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
Scored across 9 tools
The tools are mostly distinct, but coda_get_page_content and coda_peek_page serve similar purposes—both retrieve page content with slight differences in format and length. This overlap could cause confusion, but all other tools clearly target different resources or actions.
All tool names follow a consistent coda_ prefix followed by a verb_noun pattern (e.g., list_documents, get_page_content, resolve_link). The naming is uniform, using snake_case throughout, making it easy to predict tool functions.
With 9 tools, the server is well-scoped for a read-only Coda API. Each tool serves a clear purpose in reading documents, pages, tables, and rows, without unnecessary bloat or missing essential operations.
For a read-only server, the tool surface covers the core lifecycle of reading Coda objects: documents, pages, tables, columns, and rows. Minor gaps exist, such as no separate tool to fetch a single column or table metadata, but these can be worked around with existing list endpoints.