Skip to main content
Glama

set_data_table_rows_from_json

DestructiveIdempotent

Upsert multiple DataTable rows from JSON in one import and save, deep-merging into existing values and creating missing rows from defaults. Returns per-row results and summary.

Instructions

Upsert many DataTable rows with one native JSON import and one save, each deep-merged onto its current values like set_data_table_row_fields; missing rows are created from defaults. Returns per-row results and a summary. A failed row does not fail the call: check summary.failed and saved.

Returns: { table_path, row_struct, results:{ row_name:{ success, created, updated_existing, changed_columns:[..], unchanged_despite_request:[..], unknown_columns?:[..], error? } }, summary:{ total, created, updated, failed }, saved, row_count, problems:[..] }

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
rowsNoObject of { row_name: {column:value} }, or that object as a JSON string; each fields object is overlaid non-destructively (a value that is a JSON object deep-merges into the existing struct member, scalars/arrays replace)
saveNoWhen true (default) save the package once after all rows are written; when false leave it dirty in memory
data_tableNoAlias of table_path (the DataTable asset path, e.g. "/Game/Data/DT_Items"); table_path wins when both are given
table_pathNoFull asset path of the DataTable (data_table also accepted)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv1.2.0
    • addedInput schema / properties / data_table / description
      Added value: +"Alias of table_path (the DataTable asset path, e.g. \"/Game/Data/DT_Items\"); table_path wins when both are given"
    • changedInput schema / properties / rows / description
      Previous value: -"Object of { row_name: {column:value} }; each fields object is overlaid non-destructively (a value that is a JSON object deep-merges into the existing struct member, scalars/arrays replace)"New value: +"Object of { row_name: {column:value} }, or that object as a JSON string; each fields object is overlaid non-destructively (a value that is a JSON object deep-merges into the existing struct member, scalars/arrays replace)"
    • removedInput schema / required
      Removed value: -[
      -  "table_path"
      -]
  2. First observedv1.1.0

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare destructive/idempotent/readOnly=false, and the description goes well beyond them: it discloses partial-failure semantics ('a failed row does not fail the call: check summary.failed and saved'), the single deferred save behavior, missing-row creation from defaults, and the deep-merge vs replace rule for field values. It also documents the full return payload despite no output schema existing.

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?

Purpose and merge semantics are front-loaded in the first two sentences, and the 'Returns:' block is justified because no output schema exists. The return dump is verbose and partly duplicates names that would be self-evident from a call, but given the missing output schema it earns its place.

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

Completeness4/5

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

For a destructive bulk mutation with no output schema, it covers merge rules, save behavior, failure isolation, and the full result shape. The remaining gap is preconditions: it doesn't say whether table_path must already exist or whether a new DataTable is created, which matters given a separate create_data_table sibling.

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% and every parameter (rows, save, data_table, table_path alias precedence) is already documented in the schema, so the baseline is 3. The description reinforces the overlay/deep-merge semantics but adds no parameter-level detail the schema lacks.

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 precise verb and resource ('Upsert many DataTable rows') plus the mechanism ('one native JSON import and one save'), which is distinguishable from the singular siblings set_data_table_row_from_json and set_data_table_row. It also names the merge model relative to set_data_table_row_fields, so an agent can place it in the family without opening schemas.

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

Usage Guidelines3/5

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

The batch framing ('many rows ... one save') implies this is the bulk path versus the single-row siblings, and the 'like set_data_table_row_fields' reference signals semantic equivalence. However, it never explicitly states when to prefer it over set_data_table_row_from_json, set_data_table_row, or set_data_table_cell, nor any preconditions such as whether the target DataTable asset must already exist.

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

Deploy Server

Other Tools