Skip to main content
Glama

Add or update rows

upsert_rows
DestructiveIdempotent

Adds or updates rows in a dataset. This is how you "add new data" or "correct a number": every view reading the dataset shows the change immediately, with no view edit needed. Rows are matched on the dataset's key columns: a new key inserts, an existing key is merged (only the columns you send are overwritten). Safe to re-run. Values must match the column types (number columns take JSON numbers, not strings like "$1,200"; date columns take ISO strings like "2026-03-01" or "2026-03"). Unknown or not applicable is null, never "" or 0. It writes only to this Quillm workspace and calls no other service.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
noteNoOptional changelog note, e.g. "October close" or "corrected refunds".
rowsYesRow objects keyed by column name. Must include the key column(s).
datasetYesThe dataset's name, e.g. "ad_spend_daily".

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already flag idempotentHint and destructiveHint, and the description adds real context beyond them: views reflect the change immediately with no view edit, merge only overwrites columns you send, safe to re-run, value-type requirements, null conventions, and the fact that it writes only to this workspace and calls no other service. This is unusually rich behavioral disclosure for a mutation tool.

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

Conciseness4/5

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

Front-loaded with the core action, then layered with semantics and constraints in roughly six tight sentences; the quoted trigger phrases aid routing. It is slightly dense and could trim a clause or two, but nothing is filler.

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?

For a three-parameter mutation tool with no output schema but full annotation coverage, the description supplies everything needed to call it correctly: matching behavior, merge semantics, idempotency, type rules, null handling, and side-effect scope.

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 coverage is already 100%, so the baseline is 3, but the description adds genuine meaning not in the schema: rows are matched on key columns, only sent columns are overwritten, and values must match column types (JSON numbers not '$1,200', ISO dates). It does not describe the note parameter or the 5000-row limit, so it is strong rather than complete.

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 (adds or updates rows in a dataset) and immediately clarifies the upsert semantics. It is clearly distinguishable from siblings like delete_rows, query_dataset, and update_dataset without opening any 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 concrete trigger phrasing — this is how you 'add new data' or 'correct a number' — and explains the key-matching rule that decides insert vs merge. It does not name sibling alternatives or state when-not to use it, so it stops short of the top score.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.