Skip to main content
Glama

atlas_sheet_update

Idempotent

Update specific cells in an existing spreadsheet row by row key and column header—not cell coordinates—to change values, markers, or metadata; unknown headers abort before writing.

Instructions

Update specific cells of an existing spreadsheet row by row_key and column header name (never by cell coordinate).

Use this tool to modify balancing values, implementation markers, or metadata in an existing row.
To add a brand-new row to a tab, use `atlas_sheet_append`. If unsure of tab names, call `atlas_sheets` first.

Behavior & Output:
- Resolves the exact cell range from `row_key` + header names, preventing off-by-one row overwrites.
- If a column name is unknown, aborts without writing and returns the list of valid column headers.
- Returns JSON `{ok, sheet, tab, row, key, changes, verified, resynced, dry_run}` and refreshes the local search index.

Input Schema

NameRequiredDescriptionDefault
tabYesExact worksheet/tab name inside the spreadsheet (e.g. 'Units' or 'Weapons'). Use `atlas_sheets` to list valid tabs.
sheetNoOptional spreadsheet name or ID when multiple spreadsheets are registered. Omit if only one spreadsheet exists.
dry_runNoIf true, compute and return the cell diff without writing changes to the spreadsheet (default false).
row_keyYesPrimary key value identifying the target row in the key column (e.g. 'monster_goblin').
updatesYesMapping of `{column_header_name: new_value}` for the cells to update in that row (e.g. `{"HP": 45, "Status": "✅"}`). Never pass raw cell coordinates like 'C14'.
key_columnNoOptional header name of the key column used to match `row_key`. Defaults to the first column of the tab.

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changedv0.1.1
    • addedInput schema / properties / dry_run / description
      Added value: +"If true, compute and return the cell diff without writing changes to the spreadsheet (default false)."
    • addedInput schema / properties / key_column / description
      Added value: +"Optional header name of the key column used to match `row_key`. Defaults to the first column of the tab."
    • addedInput schema / properties / row_key / description
      Added value: +"Primary key value identifying the target row in the key column (e.g. 'monster_goblin')."
    • addedInput schema / properties / row_key / minLength
      Added value: +1
    • addedInput schema / properties / sheet / description
      Added value: +"Optional spreadsheet name or ID when multiple spreadsheets are registered. Omit if only one spreadsheet exists."
    • addedInput schema / properties / tab / description
      Added value: +"Exact worksheet/tab name inside the spreadsheet (e.g. 'Units' or 'Weapons'). Use `atlas_sheets` to list valid tabs."
    • addedInput schema / properties / tab / minLength
      Added value: +1
    • changedInput schema / properties / updates / additionalProperties
      Previous value: -trueNew value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedInput schema / properties / updates / description
      Added value: +"Mapping of `{column_header_name: new_value}` for the cells to update in that row (e.g. `{\"HP\": 45, \"Status\": \"✅\"}`). Never pass raw cell coordinates like 'C14'."
  2. First observedv0.1.0

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: it resolves the cell range from key + header, aborts without writing and returns the valid header list when a column name is unknown, and refreshes the local search index. The annotations only declare non-readonly, non-destructive, idempotent; the description supplies the actual failure mode and side effects an agent needs.

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 and address model, then a scannable "Behavior & Output" block; every line carries information. The literal return-JSON enumeration is mildly redundant given an output schema exists, which keeps it off a 5.

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 six-parameter nested-object mutation tool with full schema coverage and a declared output schema, the description covers intent, addressing model, failure behavior, side effects, and routing to siblings. Nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters are already documented in the schema, including the header-name mapping and the `dry_run` diff behavior. The description reinforces the key-vs-coordinate addressing constraint but adds no syntax or format detail the schema lacks; baseline 3 applies.

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 and resource ("Update specific cells of an existing spreadsheet row") plus the exact addressing model (by `row_key` and column header name, never by cell coordinate). This is enough to distinguish it from `atlas_sheet_append` without opening either schema.

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

Usage Guidelines5/5

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

Gives concrete when-to-use cases (balancing values, implementation markers, metadata), names the sibling to use for a different intent (`atlas_sheet_append` for brand-new rows), and prescribes a prerequisite call (`atlas_sheets`) when tab names are unknown. No alternative is left to inference.

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