Skip to main content
Glama
SheetForge MCP

SheetForge MCP

by iHeldan

evaluate_workbook_scenarios

Destructive

Compare explicit workbook alternatives read-only, or commit one verified outcome with guarded sum/count checks and rollback protection.

Instructions

Compare explicit alternatives read-only, or commit one exact verified outcome.

scenario_set requires version=1, a Recipe v1 (only sum/count; output is never
written), key_fields, guards=[{metric, scope: overall|each_group, min?, max?}],
and scenarios=[{id, updates: [{key: {...}, values: {...}}]}]. Bounds are inclusive
exact comparisons. Each-group checks include all baseline/candidate groups;
missing baseline groups and empty coverage fail. No optimization or forecasting.
One native table, existing keys/literal updates only, no formulas/key changes.
Commit requires the identical set, selected_scenario id, scenario_token and
expected_workbook_sha256 from comparison; source drift requires a new comparison.
Full metric checks run again on the saved workbook under ChangeSet rollback.
Limits: 5 alternatives, 8 sum/count metrics, 20 guards, 50000 source cells,
1000 targets/49 column spans per alternative, 256KB JSON, sample_limit 1-5.

Input Schema

NameRequiredDescriptionDefault
modeNocompare
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sample_limitNo
scenario_setYes
scenario_tokenNo
selected_scenarioNo
expected_workbook_sha256No

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.14.0

TDQS

A4.2/5.0
Behavior5/5

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

Annotations supply only destructiveHint=true, so the description carries the real burden and does: it discloses that comparison never writes output, that commit re-runs full metric checks on the saved workbook under ChangeSet rollback, that stale source requires re-comparison, and it enumerates hard limits (5 alternatives, 8 metrics, 20 guards, 50000 cells, 256KB JSON, sample_limit 1-5). The write behavior on commit is consistent with destructiveHint=true, not contradictory.

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?

The two-mode framing is front-loaded, and despite the telegraphic, spec-like style every clause carries load: the guard semantics, the commit prerequisites, the rollback re-validation, and the limits all affect correct invocation. It is dense but proportionate to a nested-object tool; minor deduction for the terse phrasing making some constraints harder to parse than they need to be.

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?

There is no output schema, so the description must imply what the agent gets back, and it does enough by indicating that comparison yields a scenario_token and workbook SHA-256 that commit consumes. For a 7-parameter tool with a deeply nested scenario_set, the documented contract, failure modes, and limits are close to complete; only the concrete shape of the comparison result remains implicit.

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 only 14% (just filepath), so the description must compensate, and it largely does: it spells out scenario_set's required shape (version=1, Recipe v1 restricted to sum/count, key_fields, guards with metric/scope/min/max, scenarios with id/updates), defines bounds as inclusive exact comparisons, and pins sample_limit to 1-5. The remaining gap is the mode parameter, whose accepted values ('compare'/'commit') are only implied by the first sentence rather than stated.

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

Purpose4/5

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

The opening sentence states a specific verb and resource pair with an explicit two-mode split: 'Compare explicit alternatives read-only, or commit one exact verified outcome.' That is far more specific than a tautology, and the scope (scenario sets over a workbook) is unambiguous. It stops short of 5 because it never names or contrasts the nearest sibling workflows (run_workbook_recipe, apply_workbook_changeset) that an agent might otherwise reach for.

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?

It gives clear conditions for each mode: compare is read-only and needs only a scenario_set; commit requires 'the identical set, selected_scenario id, scenario_token and expected_workbook_sha256 from comparison,' and source drift forces a new comparison. It also excludes a class of use cases ('No optimization or forecasting'), which is genuine when-not guidance. It loses a point for not routing to or away from any named alternative tool.

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