{"slug":"coda-automation-2","title":"coda-automation","summary":"Automate Coda tasks via Rube MCP (Composio): manage docs, pages, tables, rows, formulas, permissions, and publishing. Always search tools first for current schemas.","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-14T20:43:28.529878Z","repo":{"url":"https://github.com/davepoon/buildwithclaude","stars":3556,"forks":535,"license":"MIT","updatedAt":"2026-09-27T03:56:38Z"},"bodyHtml":"<hr>\n<h2>name: coda-automation\ndescription: \"Automate Coda tasks via Rube MCP (Composio): manage docs, pages, tables, rows, formulas, permissions, and publishing. Always search tools first for current schemas.\"\nrequires:\nmcp: [rube]\ncategory: project-management</h2>\n<h1>Coda Automation via Rube MCP</h1>\n<p>Automate Coda document and data operations through Composio's Coda toolkit via Rube MCP.</p>\n<p><strong>Toolkit docs</strong>: <a href=\"https://composio.dev/toolkits/coda\">composio.dev/toolkits/coda</a></p>\n<h2>Prerequisites</h2>\n<ul>\n<li>Rube MCP must be connected (RUBE_SEARCH_TOOLS available)</li>\n<li>Active Coda connection via <code>RUBE_MANAGE_CONNECTIONS</code> with toolkit <code>coda</code></li>\n<li>Always call <code>RUBE_SEARCH_TOOLS</code> first to get current tool schemas</li>\n</ul>\n<h2>Setup</h2>\n<p><strong>Get Rube MCP</strong>: Add <code>https://rube.app/mcp</code> as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.</p>\n<ol>\n<li>Verify Rube MCP is available by confirming <code>RUBE_SEARCH_TOOLS</code> responds</li>\n<li>Call <code>RUBE_MANAGE_CONNECTIONS</code> with toolkit <code>coda</code></li>\n<li>If connection is not ACTIVE, follow the returned auth link to complete Coda authentication</li>\n<li>Confirm connection status shows ACTIVE before running any workflows</li>\n</ol>\n<h2>Core Workflows</h2>\n<h3>1. Search and Browse Documents</h3>\n<p><strong>When to use</strong>: User wants to find, list, or inspect Coda documents</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>CODA_SEARCH_DOCS</code> or <code>CODA_LIST_AVAILABLE_DOCS</code> - Find documents [Required]</li>\n<li><code>CODA_RESOLVE_BROWSER_LINK</code> - Resolve a Coda URL to doc/page/table IDs [Alternative]</li>\n<li><code>CODA_LIST_PAGES</code> - List pages within a document [Optional]</li>\n<li><code>CODA_GET_A_PAGE</code> - Get specific page details [Optional]</li>\n</ol>\n<p><strong>Key parameters</strong>:</p>\n<ul>\n<li><code>query</code>: Search term for finding documents</li>\n<li><code>isOwner</code>: Filter to docs owned by the user</li>\n<li><code>docId</code>: Document ID for page operations</li>\n<li><code>pageIdOrName</code>: Page identifier or name</li>\n<li><code>url</code>: Browser URL for resolve operations</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li>Document IDs are alphanumeric strings (e.g., 'AbCdEfGhIj')</li>\n<li><code>CODA_RESOLVE_BROWSER_LINK</code> is the best way to convert a Coda URL to API IDs</li>\n<li>Page names may not be unique within a doc; prefer page IDs</li>\n<li>Search results include docs shared with the user, not just owned docs</li>\n</ul>\n<h3>2. Work with Tables and Data</h3>\n<p><strong>When to use</strong>: User wants to read, write, or query table data</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>CODA_LIST_TABLES</code> - List tables in a document [Prerequisite]</li>\n<li><code>CODA_LIST_COLUMNS</code> - Get column definitions for a table [Prerequisite]</li>\n<li><code>CODA_LIST_TABLE_ROWS</code> - List all rows with optional filters [Required]</li>\n<li><code>CODA_SEARCH_ROW</code> - Search for specific rows by query [Alternative]</li>\n<li><code>CODA_GET_A_ROW</code> - Get a specific row by ID [Optional]</li>\n<li><code>CODA_UPSERT_ROWS</code> - Insert or update rows in a table [Optional]</li>\n<li><code>CODA_GET_A_COLUMN</code> - Get details of a specific column [Optional]</li>\n</ol>\n<p><strong>Key parameters</strong>:</p>\n<ul>\n<li><code>docId</code>: Document ID containing the table</li>\n<li><code>tableIdOrName</code>: Table identifier or name</li>\n<li><code>query</code>: Filter query for searching rows</li>\n<li><code>rows</code>: Array of row objects for upsert operations</li>\n<li><code>keyColumns</code>: Column IDs used for matching during upsert</li>\n<li><code>sortBy</code>: Column to sort results by</li>\n<li><code>useColumnNames</code>: Use column names instead of IDs in row data</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li>Table names may contain spaces; URL-encode if needed</li>\n<li><code>CODA_UPSERT_ROWS</code> does insert if no match on <code>keyColumns</code>, update if match found</li>\n<li><code>keyColumns</code> must reference columns that have unique values for reliable upserts</li>\n<li>Column IDs are different from column names; list columns first to map names to IDs</li>\n<li><code>useColumnNames: true</code> allows using human-readable names in row data</li>\n<li>Row data values must match the column type (text, number, date, etc.)</li>\n</ul>\n<h3>3. Manage Formulas</h3>\n<p><strong>When to use</strong>: User wants to list or evaluate formulas in a document</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>CODA_LIST_FORMULAS</code> - List all named formulas in a doc [Required]</li>\n<li><code>CODA_GET_A_FORMULA</code> - Get a specific formula's current value [Optional]</li>\n</ol>\n<p><strong>Key parameters</strong>:</p>\n<ul>\n<li><code>docId</code>: Document ID</li>\n<li><code>formulaIdOrName</code>: Formula identifier or name</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li>Formulas are named calculations defined in the document</li>\n<li>Formula values are computed server-side; results reflect the current state</li>\n<li>Formula names are case-sensitive</li>\n</ul>\n<h3>4. Export Document Content</h3>\n<p><strong>When to use</strong>: User wants to export a document or page to HTML or Markdown</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>CODA_BEGIN_CONTENT_EXPORT</code> - Start an export job [Required]</li>\n<li><code>CODA_CONTENT_EXPORT_STATUS</code> - Poll export status until complete [Required]</li>\n</ol>\n<p><strong>Key parameters</strong>:</p>\n<ul>\n<li><code>docId</code>: Document ID to export</li>\n<li><code>outputFormat</code>: Export format ('html' or 'markdown')</li>\n<li><code>pageIdOrName</code>: Specific page to export (optional, omit for full doc)</li>\n<li><code>requestId</code>: Export request ID for status polling</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li>Export is asynchronous; poll status until <code>status</code> is 'complete'</li>\n<li>Large documents may take significant time to export</li>\n<li>Export URL in the completed response is temporary; download promptly</li>\n<li>Polling too frequently may hit rate limits; use 2-5 second intervals</li>\n</ul>\n<h3>5. Manage Permissions and Sharing</h3>\n<p><strong>When to use</strong>: User wants to view or manage document access</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>CODA_GET_SHARING_METADATA</code> - View current sharing settings [Required]</li>\n<li><code>CODA_GET_ACL_SETTINGS</code> - Get access control list settings [Optional]</li>\n<li><code>CODA_ADD_PERMISSION</code> - Grant access to a user or email [Optional]</li>\n</ol>\n<p><strong>Key parameters</strong>:</p>\n<ul>\n<li><code>docId</code>: Document ID</li>\n<li><code>access</code>: Permission level ('readonly', 'write', 'comment')</li>\n<li><code>principal</code>: Object with email or user ID of the recipient</li>\n<li><code>suppressEmail</code>: Whether to skip the sharing notification email</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li>Permission levels: 'readonly', 'write', 'comment'</li>\n<li>Adding permission sends an email notification by default; use <code>suppressEmail</code> to prevent</li>\n<li>Cannot remove permissions via API in all cases; check ACL settings</li>\n</ul>\n<h3>6. Publish and Customize Documents</h3>\n<p><strong>When to use</strong>: User wants to publish a document or manage custom domains</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>CODA_PUBLISH_DOC</code> - Publish a document publicly [Required]</li>\n<li><code>CODA_UNPUBLISH_DOC</code> - Unpublish a document [Optional]</li>\n<li><code>CODA_ADD_CUSTOM_DOMAIN</code> - Add a custom domain for published doc [Optional]</li>\n<li><code>CODA_GET_DOC_CATEGORIES</code> - Get doc categories for discovery [Optional]</li>\n</ol>\n<p><strong>Key parameters</strong>:</p>\n<ul>\n<li><code>docId</code>: Document ID</li>\n<li><code>slug</code>: Custom URL slug for the published doc</li>\n<li><code>categoryIds</code>: Category IDs for discoverability</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li>Publishing makes the document accessible to anyone with the link</li>\n<li>Custom domains require DNS configuration</li>\n<li>Unpublishing removes public access but retains shared access</li>\n</ul>\n<h2>Common Patterns</h2>\n<h3>ID Resolution</h3>\n<p><strong>Doc URL -&gt; Doc ID</strong>:</p>\n<pre><code>1. Call CODA_RESOLVE_BROWSER_LINK with the Coda URL\n2. Extract docId from the response\n</code></pre>\n<p><strong>Table name -&gt; Table ID</strong>:</p>\n<pre><code>1. Call CODA_LIST_TABLES with docId\n2. Find table by name, extract id\n</code></pre>\n<p><strong>Column name -&gt; Column ID</strong>:</p>\n<pre><code>1. Call CODA_LIST_COLUMNS with docId and tableIdOrName\n2. Find column by name, extract id\n</code></pre>\n<h3>Pagination</h3>\n<ul>\n<li>Coda uses cursor-based pagination with <code>pageToken</code></li>\n<li>Check response for <code>nextPageToken</code></li>\n<li>Pass as <code>pageToken</code> in next request until absent</li>\n<li>Default page sizes vary by endpoint</li>\n</ul>\n<h3>Row Upsert Pattern</h3>\n<pre><code>1. Call CODA_LIST_COLUMNS to get column IDs\n2. Build row objects with column ID keys and values\n3. Set keyColumns to unique identifier column(s)\n4. Call CODA_UPSERT_ROWS with rows and keyColumns\n</code></pre>\n<h2>Known Pitfalls</h2>\n<p><strong>ID Formats</strong>:</p>\n<ul>\n<li>Document IDs: alphanumeric strings</li>\n<li>Table/column/row IDs: prefixed strings (e.g., 'grid-abc', 'c-xyz')</li>\n<li>Use RESOLVE_BROWSER_LINK to convert URLs to IDs</li>\n</ul>\n<p><strong>Data Types</strong>:</p>\n<ul>\n<li>Row values must match column types</li>\n<li>Date columns expect ISO 8601 format</li>\n<li>Select/multi-select columns expect exact option values</li>\n<li>People columns expect email addresses</li>\n</ul>\n<p><strong>Rate Limits</strong>:</p>\n<ul>\n<li>Coda API has per-token rate limits</li>\n<li>Implement backoff on 429 responses</li>\n<li>Bulk row operations via UPSERT_ROWS are more efficient than individual updates</li>\n</ul>\n<h2>Quick Reference</h2>\n<table>\n<thead>\n<tr>\n<th>Task</th>\n<th>Tool Slug</th>\n<th>Key Params</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Search docs</td>\n<td>CODA_SEARCH_DOCS</td>\n<td>query</td>\n</tr>\n<tr>\n<td>List docs</td>\n<td>CODA_LIST_AVAILABLE_DOCS</td>\n<td>isOwner</td>\n</tr>\n<tr>\n<td>Resolve URL</td>\n<td>CODA_RESOLVE_BROWSER_LINK</td>\n<td>url</td>\n</tr>\n<tr>\n<td>List pages</td>\n<td>CODA_LIST_PAGES</td>\n<td>docId</td>\n</tr>\n<tr>\n<td>Get page</td>\n<td>CODA_GET_A_PAGE</td>\n<td>docId, pageIdOrName</td>\n</tr>\n<tr>\n<td>List tables</td>\n<td>CODA_LIST_TABLES</td>\n<td>docId</td>\n</tr>\n<tr>\n<td>List columns</td>\n<td>CODA_LIST_COLUMNS</td>\n<td>docId, tableIdOrName</td>\n</tr>\n<tr>\n<td>List rows</td>\n<td>CODA_LIST_TABLE_ROWS</td>\n<td>docId, tableIdOrName</td>\n</tr>\n<tr>\n<td>Search rows</td>\n<td>CODA_SEARCH_ROW</td>\n<td>docId, tableIdOrName, query</td>\n</tr>\n<tr>\n<td>Get row</td>\n<td>CODA_GET_A_ROW</td>\n<td>docId, tableIdOrName, rowIdOrName</td>\n</tr>\n<tr>\n<td>Upsert rows</td>\n<td>CODA_UPSERT_ROWS</td>\n<td>docId, tableIdOrName, rows, keyColumns</td>\n</tr>\n<tr>\n<td>Get column</td>\n<td>CODA_GET_A_COLUMN</td>\n<td>docId, tableIdOrName, columnIdOrName</td>\n</tr>\n<tr>\n<td>Push button</td>\n<td>CODA_PUSH_A_BUTTON</td>\n<td>docId, tableIdOrName, rowIdOrName, columnIdOrName</td>\n</tr>\n<tr>\n<td>List formulas</td>\n<td>CODA_LIST_FORMULAS</td>\n<td>docId</td>\n</tr>\n<tr>\n<td>Get formula</td>\n<td>CODA_GET_A_FORMULA</td>\n<td>docId, formulaIdOrName</td>\n</tr>\n<tr>\n<td>Begin export</td>\n<td>CODA_BEGIN_CONTENT_EXPORT</td>\n<td>docId, outputFormat</td>\n</tr>\n<tr>\n<td>Export status</td>\n<td>CODA_CONTENT_EXPORT_STATUS</td>\n<td>docId, requestId</td>\n</tr>\n<tr>\n<td>Get sharing</td>\n<td>CODA_GET_SHARING_METADATA</td>\n<td>docId</td>\n</tr>\n<tr>\n<td>Add permission</td>\n<td>CODA_ADD_PERMISSION</td>\n<td>docId, access, principal</td>\n</tr>\n<tr>\n<td>Publish doc</td>\n<td>CODA_PUBLISH_DOC</td>\n<td>docId, slug</td>\n</tr>\n<tr>\n<td>Unpublish doc</td>\n<td>CODA_UNPUBLISH_DOC</td>\n<td>docId</td>\n</tr>\n<tr>\n<td>List packs</td>\n<td>CODA_LIST_PACKS</td>\n<td>(none)</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<p><em>Powered by <a href=\"https://composio.dev\">Composio</a></em></p>\n","files":[{"path":"SKILL.md","sizeBytes":9188,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-14T20:44:57.079919Z","sha256":"BD6891E42A275163B24C83667D60D364019C06B9141EB1CE2893BC6B75398324","sizeBytes":3610},"review":null,"source":{"repositoryUrl":"https://github.com/davepoon/buildwithclaude","path":"plugins/all-skills/skills/coda-automation","license":"MIT","commit":"6178ae2b0900b3600419853206de1dddf0f28311","subtreeSha":"A1EA9C2FBBFEC7B7A8B05D6543715C8E075AE33C735E57E92F6E2EA42AD9104F","lastSyncedAt":"2026-09-27T19:47:46.68834Z"},"reviewedAt":"2026-09-14T20:47:54.635578Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/davepoon/buildwithclaude/tree/main/plugins/all-skills/skills/coda-automation"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install davepoon-buildwithclaude@llmmart"},{"target":"git","command":"git clone https://github.com/davepoon/buildwithclaude.git"}]}