content_duplicate
ChatGPTDuplicate content from one location to another. Can copy pages and documents into both new or existing documents. Call tool_guide with "content" topic for copy-from-template flows.
content_image_upload
ChatGPTUpload an image to a canvas placeholder, or (omit blobId) mint a pre-signed S3 upload URL — use the returned imageUrl with table_rows_manage to write into a table image cell. Base64 data URLs are not supported. Call tool_guide with "content" topic for image and canvas writes.
content_modify
ChatGPTModify canvas content: insert, replace, or delete elements, or make headings and tables collapsible/foldable. When the content you insert includes one or more tables, add them with table_create instead of Markdown tables — keep a table as Markdown only when its rows are not records (a visual layout, not data you'd sort, filter, or group). Inline formatting: **bold**, *italic*, __underline__, and color/highlight via <color:Red>…</color>, <color:Red bg:Yellow>…</color>, or <color: bg:Yellow>…</color>. Call tool_guide with "content" topic first when targeting an element ID, or unsure which operation applies.
content_read
ChatGPTRead body content of a page or cell canvas. Accepts a page URI (the default), a page-canvas URI, or a cell-canvas URI (returned as canvasUri by table_rows_read for canvas-typed cells). Call tool_guide with "page" topic for content type and markdown options.
control_delete
ChatGPTDelete a control from the document. This permanently removes the control.
control_manage
ChatGPTCreate or update a canvas control (formula, button, or reaction). Use action "create" to add a new control, or "update" to modify an existing one. When the write meets the exact-repair contract (formula-repair branch), construct the formula URI directly and update without loading a guide or pre-write discovery with content_read. For exact formula repairs, skip only unrequested confirmation readback. If the user explicitly asks for the resulting value or state, read the stored formula and supported computed result after the mutation. Formulas reference columns and rows by id, not name: ref{tables/<tableId>/columns/<columnId>#Name} keeps working when the object is renamed, whereas a name-based reference silently breaks. Reads return formulas in that form — echo one back verbatim when modifying an existing formula, editing only the literals outside its ref{...} tokens. Otherwise, call tool_guide with "formula" topic; for a partial formula replacement, read the current formula from the owning page or canvas before constructing the update.
control_read
ChatGPTRead a canvas control's full configuration by its formula or control coda:// URI — any control type, not just formulas and buttons. Returns type, current value, and the control's type-specific configuration under format (a button's label/actionFormula/color/disableIfFormula, a slider's minimum/maximum, a reaction's imageIcon); formula controls also carry formula/error. Obtain the URI from content_read (include "controls" or "formulas"), which returns the same fields for every control on a canvas — use this tool for a single control you already hold a URI for.
document_create
ChatGPTCreate a new Coda document. Call tool_guide with "document" topic for the page_update + content_modify workflow that follows.
document_delete
ChatGPTPermanently delete a Coda document. This action cannot be undone.
document_manage
ChatGPTChange a document's access control (add, update, or revoke a permission) or move the document to a different folder. Requires share access; moving also requires edit access.
document_outline
ChatGPTOutline a document: document metadata (title, icon, createdAt, owner, sourceDoc) plus a paginated list of its pages with per-page metadata (title, pageType, isHidden, parentPageUri, position, icon, coverPhoto, subtitle, canvasUri, authors, createdAt/updatedAt/createdBy/updatedBy, child page outlines). The document's structure, not its body content.
formula_execute
ChatGPTEvaluate a Coda Formula Language (CFL) expression and return the result. Requires a document URI — truncate longer URIs to 'coda://docs/{docId}' (or 'coda://databases/{docId}' for a database). Call tool_guide with "formula" topic first when authoring or validating CFL you have not been given verbatim.
name_match
ChatGPTMatch approximate page, table, view, or person names to candidates in the document. Returns matched URIs / user profiles ranked by similarity. When multiple names need resolving, batch them into a single call (up to 20 lookups) rather than calling repeatedly. For the current user ("me"/"my"), use whoami instead — person lookups here are for other named people.
page_create
ChatGPTCreate a new page. To copy existing pages or documents, use content_duplicate instead.
page_delete
ChatGPTDelete a page from a document. Set shouldDeleteChildren to delete child pages recursively.
page_describe
ChatGPTDescribe page metadata (title, pageType, isHidden, parentPageUri, position, icon, coverPhoto, subtitle, canvasUri, authors, createdAt, updatedAt, createdBy, updatedBy, child page outlines). Page URIs only — for body content call content_read with the page URI directly.
page_update
ChatGPTUpdate an existing page. Call tool_guide with "page" topic for page titles.
search
ChatGPTSearch for content across documents, pages, tables, rows, and folders. Returns ranked results with URLs.
table_columns_delete
ChatGPTDelete columns from a table. Call tool_guide with "table" topic for column addressing.
table_columns_manage
ChatGPTAdd or update table columns (name, type, formula, default value, width). Every entry in columns carries its own action. For an entry with action "update": cannot change cell text formatting — use table_rows_manage with markdown (e.g. "bold") instead. When the write meets the exact-repair contract (formula-repair branch), update directly without loading the Table guide. Formulas reference columns and rows by id, not name: ref{tables/<tableId>/columns/<columnId>#Name} keeps working when the object is renamed, whereas a name-based reference silently breaks. Reads return formulas in that form — echo one back verbatim when modifying an existing formula, editing only the literals outside its ref{...} tokens. Otherwise, call tool_guide with "table" topic for column types.
table_columns_read
ChatGPTReturns column schema for a table: column names, IDs, isWritable flag, format.type, formula body (when present), and rowCount. Slim by default — per-variant format details (SelectList selectOptions, Scale iconSet/maximum, Lookup objectId, Currency code, Reaction imageIcon, DatePicker format, etc.) and views are omitted. Pass include: ['formats'] to get full format details, ['views'] to inspect view configs. WHEN TO CALL: before writing rows unless the write meets the exact-repair contract, OR configuring a view with sorts/groups/columnOrder/columnVisibility/sharedFilter that reference columns. For reading rows, running formulas, or listing existing views, skip this unless the task depends on view filter configuration — call table_rows_read or formula_execute directly with the tableUri otherwise. Formulas reference columns and rows by id, not name: ref{tables/<tableId>/columns/<columnId>#Name} keeps working when the object is renamed, whereas a name-based reference silently breaks. Reads return formulas in that form — echo one back verbatim when modifying an existing formula, editing only the literals outside its ref{...} tokens. USING THE OUTPUT: before each write, check column.isWritable (skip formula, Reaction, and Button columns) and column.format.type. Lookup columns (without formula) need rowIds from the target table (format.objectId), never display text. SelectList columns need values matching format.selectOptions exactly (case-sensitive). Pass columnsToInclude on subsequent table_rows_read calls to avoid fetching unused columns.
table_create
ChatGPTCreate a new table with columns and optional data — use this for tabular data instead of a Markdown table in content_modify. Call tool_guide with "table" topic first when you lack a column ID, value format, or view configuration vocabulary.
table_delete
ChatGPTDelete an entire table from a document. This permanently removes the table and all its data.
table_rows_delete
ChatGPTDelete rows from a table. Call tool_guide with "table" topic for row addressing.
table_rows_manage
ChatGPTAdd or update table rows. Use action "add" to insert new rows, or "update" to modify existing rows. Cell values take markdown ("bold and italic") when a value carries two or more markers; one alone is stored as typed, so "234" stays literal. A canvas column holds prose and takes a single marker. Color/highlight via <color:Red>…</color>, <color:Red bg:Yellow>…</color>, or <color: bg:Yellow>…</color> converts on its own. When the write meets the exact-repair contract (source-cell branch), update directly without loading the Table guide. For exact source-cell repairs, skip only unrequested confirmation readback. If the user asks for the updated source or recomputed result, read both the updated source cell and the derived formula cell after the mutation. Otherwise, call tool_guide with "table" topic for usage patterns.
table_rows_read
ChatGPTRead row data from a table with cell values. Pass table uri directly.
table_view_delete
ChatGPTDelete a table's view.
table_view_manage
ChatGPTAdd a new view to a table (action "add") or configure an existing view (action "configure"). Supports: name, filter, personal filter, layout (including charts), sorts, column visibility, column order, grouping, conditional formatting, and title visibility. Call tool_guide with "table" topic for usage patterns.
tool_guide
ChatGPTGet detailed guidance before working in specific areas. Call with the relevant topic before performing operations.
url_convert
ChatGPTConvert between resource URIs and Coda / Superhuman Docs web URLs. Use action "encode" for URI → https, "decode" for https → URI (returns {uri, docUri}). The URI scheme follows the URL's host — a Superhuman Docs URL decodes to superhuman:// URIs and encodes back to that host. When decoding for a specific tool, pass scope ("page" | "table" | "view" | "row" | "document") so uri is returned at the right depth. Encoding relies on the URI's leading segment (docs or databases) to pick the web path, so pass URIs through unmodified — a mismatched segment yields a broken link. No need to call document_outline or tool_guide first.
whoami
ChatGPTGet the current authenticated user information (ID, name, email) and the workspaces they belong to. For any other named person, use name_match {type:"person"} instead.
content_duplicate
Claudecontent_image_upload
Claudecontent_modify
Claudecontent_read
Claudecontrol_delete
Claudecontrol_manage
Claudedocument_create
Claudedocument_delete
Claudedocument_outline
Claudeformula_execute
Claudename_match
Claudepage_create
Claudepage_delete
Claudepage_describe
Claudepage_update
Claudesearch
Claudetable_columns_delete
Claudetable_columns_manage
Claudetable_columns_read
Claudetable_create
Claudetable_delete
Claudetable_rows_delete
Claudetable_rows_manage
Claudetable_rows_read
Claudetable_view_delete
Claudetable_view_manage
Claudetool_guide
Claudeurl_convert
Claudewhoami
Claude