@vinhnguyen/coda-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +246 -0
- package/index.js +1988 -0
- package/package.json +72 -0
package/README.md
ADDED
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
# Coda MCP Server
|
|
2
|
+
|
|
3
|
+
A Model Context Protocol (MCP) server that connects Claude to [Coda](https://coda.io) — enabling full read/write access to docs, pages, tables, rows, columns, formulas, controls, and automations. Designed to turn Coda into a powerful **knowledge base** for AI assistants.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **40 tools** covering the complete Coda API v1
|
|
8
|
+
- Full CRUD for docs, pages, tables, and rows
|
|
9
|
+
- Page content export (HTML/Markdown) with automatic async polling
|
|
10
|
+
- Table search and bulk row retrieval for knowledge base queries
|
|
11
|
+
- Doc structure overview in a single call
|
|
12
|
+
- Formula and control value reading
|
|
13
|
+
- Automation triggering
|
|
14
|
+
- Button pressing on table rows
|
|
15
|
+
- Analytics access
|
|
16
|
+
- Mutation status tracking for async write operations
|
|
17
|
+
|
|
18
|
+
## Quick Start
|
|
19
|
+
|
|
20
|
+
### 1. Get a Coda API Token
|
|
21
|
+
|
|
22
|
+
1. Go to [Coda Account Settings](https://coda.io/account#apiSettings)
|
|
23
|
+
2. Click **Generate API token**
|
|
24
|
+
3. Copy the token
|
|
25
|
+
|
|
26
|
+
### 2. Install
|
|
27
|
+
|
|
28
|
+
**Option A: npx (no install)**
|
|
29
|
+
```bash
|
|
30
|
+
npx @vinhnguyen/coda-mcp
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Option B: Global install**
|
|
34
|
+
```bash
|
|
35
|
+
npm install -g @vinhnguyen/coda-mcp
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Option C: From source**
|
|
39
|
+
```bash
|
|
40
|
+
git clone https://github.com/glorynguyen/coda-mcp.git
|
|
41
|
+
cd coda-mcp
|
|
42
|
+
npm install
|
|
43
|
+
npm start
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 3. Configure with Claude
|
|
47
|
+
|
|
48
|
+
#### Claude Desktop
|
|
49
|
+
|
|
50
|
+
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"mcpServers": {
|
|
55
|
+
"coda": {
|
|
56
|
+
"command": "npx",
|
|
57
|
+
"args": ["-y", "@vinhnguyen/coda-mcp"],
|
|
58
|
+
"env": {
|
|
59
|
+
"CODA_API_TOKEN": "your-api-token-here"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
#### Claude Code
|
|
67
|
+
|
|
68
|
+
Add to `~/.claude.json` or project `.claude/settings.json`:
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"mcpServers": {
|
|
73
|
+
"coda": {
|
|
74
|
+
"command": "npx",
|
|
75
|
+
"args": ["-y", "@vinhnguyen/coda-mcp"],
|
|
76
|
+
"env": {
|
|
77
|
+
"CODA_API_TOKEN": "your-api-token-here"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Or run from source:
|
|
85
|
+
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"mcpServers": {
|
|
89
|
+
"coda": {
|
|
90
|
+
"command": "node",
|
|
91
|
+
"args": ["/path/to/coda-mcp/index.js"],
|
|
92
|
+
"env": {
|
|
93
|
+
"CODA_API_TOKEN": "your-api-token-here"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Environment Variables
|
|
101
|
+
|
|
102
|
+
| Variable | Required | Description |
|
|
103
|
+
|----------|----------|-------------|
|
|
104
|
+
| `CODA_API_TOKEN` | Yes | API token from [Coda Account Settings](https://coda.io/account#apiSettings) |
|
|
105
|
+
|
|
106
|
+
## Tools Reference
|
|
107
|
+
|
|
108
|
+
### Doc Operations (5 tools)
|
|
109
|
+
|
|
110
|
+
| Tool | Description |
|
|
111
|
+
|------|-------------|
|
|
112
|
+
| `coda_list_docs` | List accessible docs with optional search filter |
|
|
113
|
+
| `coda_get_doc` | Get doc metadata (name, owner, timestamps, link) |
|
|
114
|
+
| `coda_create_doc` | Create a new doc, optionally from a template |
|
|
115
|
+
| `coda_update_doc` | Update doc title or icon |
|
|
116
|
+
| `coda_delete_doc` | Delete a doc |
|
|
117
|
+
|
|
118
|
+
### Page Operations (6 tools)
|
|
119
|
+
|
|
120
|
+
| Tool | Description |
|
|
121
|
+
|------|-------------|
|
|
122
|
+
| `coda_list_pages` | List all pages in a doc with hierarchy |
|
|
123
|
+
| `coda_get_page` | Get page details (name, subtitle, parent/children) |
|
|
124
|
+
| `coda_create_page` | Create a page with optional content (HTML/Markdown) |
|
|
125
|
+
| `coda_update_page` | Update page name, content (replace or append), icon, cover |
|
|
126
|
+
| `coda_delete_page` | Delete a page |
|
|
127
|
+
| `coda_get_page_content` | Export page content as HTML or Markdown |
|
|
128
|
+
|
|
129
|
+
### Table Operations (2 tools)
|
|
130
|
+
|
|
131
|
+
| Tool | Description |
|
|
132
|
+
|------|-------------|
|
|
133
|
+
| `coda_list_tables` | List all tables and views in a doc |
|
|
134
|
+
| `coda_get_table` | Get table details (schema, row count, filters) |
|
|
135
|
+
|
|
136
|
+
### Column Operations (2 tools)
|
|
137
|
+
|
|
138
|
+
| Tool | Description |
|
|
139
|
+
|------|-------------|
|
|
140
|
+
| `coda_list_columns` | List all columns in a table with types |
|
|
141
|
+
| `coda_get_column` | Get column details |
|
|
142
|
+
|
|
143
|
+
### Row Operations (6 tools)
|
|
144
|
+
|
|
145
|
+
| Tool | Description |
|
|
146
|
+
|------|-------------|
|
|
147
|
+
| `coda_list_rows` | List rows with optional filtering and sorting |
|
|
148
|
+
| `coda_get_row` | Get a specific row with all values |
|
|
149
|
+
| `coda_upsert_rows` | Insert or update rows (with upsert key columns) |
|
|
150
|
+
| `coda_update_row` | Update a specific row |
|
|
151
|
+
| `coda_delete_row` | Delete a single row |
|
|
152
|
+
| `coda_delete_rows` | Delete multiple rows by IDs |
|
|
153
|
+
| `coda_push_button` | Trigger a button column on a row |
|
|
154
|
+
|
|
155
|
+
### Formula & Control Operations (4 tools)
|
|
156
|
+
|
|
157
|
+
| Tool | Description |
|
|
158
|
+
|------|-------------|
|
|
159
|
+
| `coda_list_formulas` | List named formulas in a doc |
|
|
160
|
+
| `coda_get_formula` | Get a formula and its current value |
|
|
161
|
+
| `coda_list_controls` | List controls (sliders, pickers, etc.) |
|
|
162
|
+
| `coda_get_control` | Get a control and its current value |
|
|
163
|
+
|
|
164
|
+
### Utility Operations (3 tools)
|
|
165
|
+
|
|
166
|
+
| Tool | Description |
|
|
167
|
+
|------|-------------|
|
|
168
|
+
| `coda_resolve_browser_link` | Resolve a Coda URL to its resource type and ID |
|
|
169
|
+
| `coda_get_mutation_status` | Check status of an async write operation |
|
|
170
|
+
| `coda_whoami` | Get current API token owner info |
|
|
171
|
+
|
|
172
|
+
### Analytics Operations (2 tools)
|
|
173
|
+
|
|
174
|
+
| Tool | Description |
|
|
175
|
+
|------|-------------|
|
|
176
|
+
| `coda_list_doc_analytics` | Get doc-level analytics (views, copies) |
|
|
177
|
+
| `coda_list_page_analytics` | Get page-level analytics |
|
|
178
|
+
|
|
179
|
+
### Automation Operations (1 tool)
|
|
180
|
+
|
|
181
|
+
| Tool | Description |
|
|
182
|
+
|------|-------------|
|
|
183
|
+
| `coda_trigger_automation` | Trigger an automation rule by ID |
|
|
184
|
+
|
|
185
|
+
### Knowledge Base Helpers (5 tools)
|
|
186
|
+
|
|
187
|
+
| Tool | Description |
|
|
188
|
+
|------|-------------|
|
|
189
|
+
| `coda_search_docs` | Search docs by name |
|
|
190
|
+
| `coda_get_doc_structure` | Get full doc overview: pages + tables in one call |
|
|
191
|
+
| `coda_search_table` | Search rows in a table by query |
|
|
192
|
+
| `coda_get_page_with_content` | Get page metadata + exported content in one call |
|
|
193
|
+
| `coda_list_all_rows` | Bulk retrieve all rows with automatic pagination |
|
|
194
|
+
|
|
195
|
+
## Knowledge Base Usage
|
|
196
|
+
|
|
197
|
+
This MCP server is specifically designed to make Coda work as a knowledge base for AI. Here are common patterns:
|
|
198
|
+
|
|
199
|
+
### Discover available knowledge
|
|
200
|
+
```
|
|
201
|
+
"What Coda docs do I have access to?"
|
|
202
|
+
→ coda_list_docs
|
|
203
|
+
|
|
204
|
+
"Show me the structure of my wiki doc"
|
|
205
|
+
→ coda_get_doc_structure
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Read knowledge base content
|
|
209
|
+
```
|
|
210
|
+
"Read the Getting Started page from my doc"
|
|
211
|
+
→ coda_get_page_with_content (returns Markdown)
|
|
212
|
+
|
|
213
|
+
"Show me all entries in the FAQ table"
|
|
214
|
+
→ coda_list_all_rows
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Search for information
|
|
218
|
+
```
|
|
219
|
+
"Find docs about onboarding"
|
|
220
|
+
→ coda_search_docs
|
|
221
|
+
|
|
222
|
+
"Search the knowledge base table for authentication"
|
|
223
|
+
→ coda_search_table
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Write to knowledge base
|
|
227
|
+
```
|
|
228
|
+
"Add a new article to the wiki"
|
|
229
|
+
→ coda_create_page (with Markdown content)
|
|
230
|
+
|
|
231
|
+
"Add a new entry to the FAQ table"
|
|
232
|
+
→ coda_upsert_rows
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
## Rate Limits
|
|
236
|
+
|
|
237
|
+
The Coda API enforces rate limits:
|
|
238
|
+
- **Read operations**: 100 requests per 6 seconds
|
|
239
|
+
- **Write operations**: 10 requests per 6 seconds
|
|
240
|
+
- **Doc content writes**: 5 requests per 10 seconds
|
|
241
|
+
|
|
242
|
+
The server returns errors for 429 responses. Implement retry logic in your usage patterns if needed.
|
|
243
|
+
|
|
244
|
+
## License
|
|
245
|
+
|
|
246
|
+
MIT
|