Skip to main content
Glama

Coda Insert Rows

coda_insert_rows

Insert up to 500 rows into a Coda table and bulk-update existing rows by providing key columns for upsert.

Instructions

Insert one or more rows into a Coda table, with optional upsert.

Inserts up to 500 rows per call. Use column names (not IDs) in the cells. With key_columns, matching rows are updated (upsert) instead of inserted — this is the only way to bulk-update rows. Returns a requestId for async mutation tracking via coda_get_mutation_status. The operation is async (202).

Input Schema

NameRequiredDescriptionDefault
rowsYesList of rows to insert. Each row is a dict with 'cells' key containing a list of {column: name, value: val} objects. Example: [{'cells': [{'column': 'Name', 'value': 'Alice'}]}]
doc_idYesThe doc ID containing the table
key_columnsNoColumn names to use as upsert keys. If a row matches on these columns, it is updated instead of inserted. Omit for pure insert.
table_id_or_nameYesTable ID or name to insert rows into

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.12.1
    • changedOutput schema / (root)
      Previous value: -{
      -  "properties": {
      -    "result": {
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "result"
      -  ],
      -  "type": "object",
      -  "x-fastmcp-wrap-result": true
      -}New value: +null
  2. First observedv0.4.14

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false and openWorldHint=true, so the description carries real extra weight: the 500-row cap, the column-name (not ID) requirement, the destructive update semantics of upsert, and the async 202 behavior with a requestId tracked via coda_get_mutation_status. These are exactly the operational facts an agent needs before calling a mutating bulk tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the core action and upsert caveat, then limits, then async/return behavior. Every sentence carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description explains the return contract (requestId for async tracking) and the status-check sibling, plus limits and formatting constraints. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds non-obvious semantics not in the schema: cells must use column names rather than IDs, and key_columns is the only path to bulk-update. That is meaningful added value over the structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Insert one or more rows into a Coda table') and immediately qualifies it with the upsert variant. An agent can distinguish this from siblings like coda_update_row and coda_delete_rows without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear routing guidance: key_columns enables upsert and 'this is the only way to bulk-update rows,' which steers the agent away from row-by-row update tools. It does not state explicit exclusions (e.g., when to prefer coda_update_row), so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.