TablesWriteDo not retry automatically

Insert table rows

insert_table_rows

Write up to 500 rows into a table in one batch. Values are coerced against the field kinds (the whole batch is rejected if any cell cannot be read as its field’s kind, so a partial batch never lands), and rows whose identity matches a deleted row are skipped rather than resurrected. Subject to the plan row limit.

Parameters

ParameterTypeRequiredDescription
tableIdstringrequiredTable ID — get from list_tables
rowsobject[]requiredRows keyed by FIELD KEY, e.g. { date: "2026-08-01", amount: 12.5, description: "…" }. A select value may be an option label or its id. Computed, automatic, relation and attachment fields are rejected, never ignored.
mode"upsert" | "append"optionalupsert (default) converges a re-sent batch onto the same rows via the table’s row identity; append writes unconditionally. A table with no identity fields behaves the same either way.
mergeOnstring[]optionalField KEYS to converge on instead of the table’s row identity — your own key (an invoice number, an external id). A row matching one existing live row updates it; no match inserts; several matches are refused unless onMany is "first". A blank merge value never matches.
onMany"fail" | "first"optionalWith mergeOn: what to do when a row matches several existing rows. Default fail.
typecastbooleanoptionalDefault true: an option LABEL resolves to its id case-insensitively and a label no option carries is created. Pass false to have an unknown label refused instead.

Example call

The tool call an MCP client sends (required arguments shown with placeholder values).

{
"tool": "insert_table_rows",
"arguments": {
"tableId": "tableId_123",
"rows": "value"
}
}

Use this tool in

Related Tables tools