Coda Automation via Rube MCP
Automate Coda document and data operations through Composio's Coda toolkit via Rube MCP.
Toolkit docs: composio.dev/toolkits/coda
Prerequisites
-
Rube MCP must be connected (RUBE_SEARCH_TOOLS available)
-
Active Coda connection via RUBE_MANAGE_CONNECTIONS with toolkit coda
-
Always call RUBE_SEARCH_TOOLS first to get current tool schemas
Setup
Get Rube MCP: Add https://rube.app/mcp as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.
-
Verify Rube MCP is available by confirming RUBE_SEARCH_TOOLS responds
-
Call RUBE_MANAGE_CONNECTIONS with toolkit coda
-
If connection is not ACTIVE, follow the returned auth link to complete Coda authentication
-
Confirm connection status shows ACTIVE before running any workflows
Core Workflows
- Search and Browse Documents
When to use: User wants to find, list, or inspect Coda documents
Tool sequence:
-
CODA_SEARCH_DOCS or CODA_LIST_AVAILABLE_DOCS
-
Find documents [Required]
-
CODA_RESOLVE_BROWSER_LINK
-
Resolve a Coda URL to doc/page/table IDs [Alternative]
-
CODA_LIST_PAGES
-
List pages within a document [Optional]
-
CODA_GET_A_PAGE
-
Get specific page details [Optional]
Key parameters:
-
query : Search term for finding documents
-
isOwner : Filter to docs owned by the user
-
docId : Document ID for page operations
-
pageIdOrName : Page identifier or name
-
url : Browser URL for resolve operations
Pitfalls:
-
Document IDs are alphanumeric strings (e.g., 'AbCdEfGhIj')
-
CODA_RESOLVE_BROWSER_LINK is the best way to convert a Coda URL to API IDs
-
Page names may not be unique within a doc; prefer page IDs
-
Search results include docs shared with the user, not just owned docs
- Work with Tables and Data
When to use: User wants to read, write, or query table data
Tool sequence:
-
CODA_LIST_TABLES
-
List tables in a document [Prerequisite]
-
CODA_LIST_COLUMNS
-
Get column definitions for a table [Prerequisite]
-
CODA_LIST_TABLE_ROWS
-
List all rows with optional filters [Required]
-
CODA_SEARCH_ROW
-
Search for specific rows by query [Alternative]
-
CODA_GET_A_ROW
-
Get a specific row by ID [Optional]
-
CODA_UPSERT_ROWS
-
Insert or update rows in a table [Optional]
-
CODA_GET_A_COLUMN
-
Get details of a specific column [Optional]
Key parameters:
-
docId : Document ID containing the table
-
tableIdOrName : Table identifier or name
-
query : Filter query for searching rows
-
rows : Array of row objects for upsert operations
-
keyColumns : Column IDs used for matching during upsert
-
sortBy : Column to sort results by
-
useColumnNames : Use column names instead of IDs in row data
Pitfalls:
-
Table names may contain spaces; URL-encode if needed
-
CODA_UPSERT_ROWS does insert if no match on keyColumns , update if match found
-
keyColumns must reference columns that have unique values for reliable upserts
-
Column IDs are different from column names; list columns first to map names to IDs
-
useColumnNames: true allows using human-readable names in row data
-
Row data values must match the column type (text, number, date, etc.)
- Manage Formulas
When to use: User wants to list or evaluate formulas in a document
Tool sequence:
-
CODA_LIST_FORMULAS
-
List all named formulas in a doc [Required]
-
CODA_GET_A_FORMULA
-
Get a specific formula's current value [Optional]
Key parameters:
-
docId : Document ID
-
formulaIdOrName : Formula identifier or name
Pitfalls:
-
Formulas are named calculations defined in the document
-
Formula values are computed server-side; results reflect the current state
-
Formula names are case-sensitive
- Export Document Content
When to use: User wants to export a document or page to HTML or Markdown
Tool sequence:
-
CODA_BEGIN_CONTENT_EXPORT
-
Start an export job [Required]
-
CODA_CONTENT_EXPORT_STATUS
-
Poll export status until complete [Required]
Key parameters:
-
docId : Document ID to export
-
outputFormat : Export format ('html' or 'markdown')
-
pageIdOrName : Specific page to export (optional, omit for full doc)
-
requestId : Export request ID for status polling
Pitfalls:
-
Export is asynchronous; poll status until status is 'complete'
-
Large documents may take significant time to export
-
Export URL in the completed response is temporary; download promptly
-
Polling too frequently may hit rate limits; use 2-5 second intervals
- Manage Permissions and Sharing
When to use: User wants to view or manage document access
Tool sequence:
-
CODA_GET_SHARING_METADATA
-
View current sharing settings [Required]
-
CODA_GET_ACL_SETTINGS
-
Get access control list settings [Optional]
-
CODA_ADD_PERMISSION
-
Grant access to a user or email [Optional]
Key parameters:
-
docId : Document ID
-
access : Permission level ('readonly', 'write', 'comment')
-
principal : Object with email or user ID of the recipient
-
suppressEmail : Whether to skip the sharing notification email
Pitfalls:
-
Permission levels: 'readonly', 'write', 'comment'
-
Adding permission sends an email notification by default; use suppressEmail to prevent
-
Cannot remove permissions via API in all cases; check ACL settings
- Publish and Customize Documents
When to use: User wants to publish a document or manage custom domains
Tool sequence:
-
CODA_PUBLISH_DOC
-
Publish a document publicly [Required]
-
CODA_UNPUBLISH_DOC
-
Unpublish a document [Optional]
-
CODA_ADD_CUSTOM_DOMAIN
-
Add a custom domain for published doc [Optional]
-
CODA_GET_DOC_CATEGORIES
-
Get doc categories for discovery [Optional]
Key parameters:
-
docId : Document ID
-
slug : Custom URL slug for the published doc
-
categoryIds : Category IDs for discoverability
Pitfalls:
-
Publishing makes the document accessible to anyone with the link
-
Custom domains require DNS configuration
-
Unpublishing removes public access but retains shared access
Common Patterns
ID Resolution
Doc URL -> Doc ID:
- Call CODA_RESOLVE_BROWSER_LINK with the Coda URL
- Extract docId from the response
Table name -> Table ID:
- Call CODA_LIST_TABLES with docId
- Find table by name, extract id
Column name -> Column ID:
- Call CODA_LIST_COLUMNS with docId and tableIdOrName
- Find column by name, extract id
Pagination
-
Coda uses cursor-based pagination with pageToken
-
Check response for nextPageToken
-
Pass as pageToken in next request until absent
-
Default page sizes vary by endpoint
Row Upsert Pattern
- Call CODA_LIST_COLUMNS to get column IDs
- Build row objects with column ID keys and values
- Set keyColumns to unique identifier column(s)
- Call CODA_UPSERT_ROWS with rows and keyColumns
Known Pitfalls
ID Formats:
-
Document IDs: alphanumeric strings
-
Table/column/row IDs: prefixed strings (e.g., 'grid-abc', 'c-xyz')
-
Use RESOLVE_BROWSER_LINK to convert URLs to IDs
Data Types:
-
Row values must match column types
-
Date columns expect ISO 8601 format
-
Select/multi-select columns expect exact option values
-
People columns expect email addresses
Rate Limits:
-
Coda API has per-token rate limits
-
Implement backoff on 429 responses
-
Bulk row operations via UPSERT_ROWS are more efficient than individual updates
Quick Reference
Task Tool Slug Key Params
Search docs CODA_SEARCH_DOCS query
List docs CODA_LIST_AVAILABLE_DOCS isOwner
Resolve URL CODA_RESOLVE_BROWSER_LINK url
List pages CODA_LIST_PAGES docId
Get page CODA_GET_A_PAGE docId, pageIdOrName
List tables CODA_LIST_TABLES docId
List columns CODA_LIST_COLUMNS docId, tableIdOrName
List rows CODA_LIST_TABLE_ROWS docId, tableIdOrName
Search rows CODA_SEARCH_ROW docId, tableIdOrName, query
Get row CODA_GET_A_ROW docId, tableIdOrName, rowIdOrName
Upsert rows CODA_UPSERT_ROWS docId, tableIdOrName, rows, keyColumns
Get column CODA_GET_A_COLUMN docId, tableIdOrName, columnIdOrName
Push button CODA_PUSH_A_BUTTON docId, tableIdOrName, rowIdOrName, columnIdOrName
List formulas CODA_LIST_FORMULAS docId
Get formula CODA_GET_A_FORMULA docId, formulaIdOrName
Begin export CODA_BEGIN_CONTENT_EXPORT docId, outputFormat
Export status CODA_CONTENT_EXPORT_STATUS docId, requestId
Get sharing CODA_GET_SHARING_METADATA docId
Add permission CODA_ADD_PERMISSION docId, access, principal
Publish doc CODA_PUBLISH_DOC docId, slug
Unpublish doc CODA_UNPUBLISH_DOC docId
List packs CODA_LIST_PACKS (none)
Powered by Composio