Skip to main content
Glama
SheetForge MCP

SheetForge MCP

by iHeldan

SheetForge MCP

Local-first Excel MCP server for AI agents that need structured reads, workbook introspection, and safer .xlsx mutation.

SheetForge MCP is an Excel MCP server for .xlsx automation over the Model Context Protocol. It is built for AI agents, MCP clients, and automation workflows that need more than raw cell access: compact structured reads, workbook-aware guidance, layout-aware inspection, and safer write paths with Python and openpyxl, without launching Microsoft Excel or LibreOffice.

If you are looking for an Excel MCP server for spreadsheet automation, workbook inspection, Excel report generation, dashboard authoring, or .xlsx editing from AI tools, SheetForge MCP is built for that workflow.

Instead of treating every sheet as a blind cell grid, SheetForge helps agents distinguish native Excel tables, worksheet-shaped datasets, layout-heavy dashboards, and chart sheets, then choose the right read or mutation path for each workbook task.

Package name: sheetforge-mcp CLI command: sheetforge-mcp Published package release: 0.14.0 Repository docs track the current main-branch tool surface, which currently exposes 83 MCP tools. Workbook Contracts v1 is included in 0.14.0: explicit bindings and full bounded data checks can guard Recipe preview/commit, with logical-field, file-path and worksheet-versus-table recovery guidance. Verified Recipes v1 is included in 0.11.0: reusable native-table reports with explicit checks and verified preview/commit. Verified Explanations v1 is included in 0.12.0: read-only, independently reconciled changes between recomputed recipe results. Verified Rebase and Verified Scenarios v1 are included in 0.13.0: intent-preserving keyed edits and outcome-checked alternatives with verified commits.

Why SheetForge

  • reusable workbook contracts via inspect_workbook_contract and optional Recipe enforcement: separate declared meanings from checked key/type/value rules, resolve only approved exact headers, block ambiguous bindings, and guide agents through logical-field errors without weakening the contract

  • outcome-checked alternatives via evaluate_workbook_scenarios: compare explicit keyed changes against exact overall/group metric bounds, then commit one selected outcome with post-save recomputation and rollback

  • intent-preserving table edits via apply_table_patch: rebind keyed updates against a pinned base, reject changed premises and conflicting writes, and commit a fresh verified preview while keeping unrelated current values

  • agent-friendly reads via suggest_read_strategy, describe_dataset, query_table, and aggregate_table

  • verified multi-step edits via apply_workbook_changeset: preview the complete candidate, value/table/layout assertions, structural diff, and sampled cell changes, then commit that exact plan only if the source workbook still matches

  • reusable report recipes via run_workbook_recipe: filter and aggregate a native table, check the result, and write it through a verified ChangeSet without passing intermediate rows through the model

  • explainable report changes via explain_recipe_delta: recompute the same recipe on two source versions, compare by unique keys, and reconcile added/removed/updated contributions without modifying either workbook

  • safer workbook creation and baselines: create_workbook refuses to overwrite an existing .xlsx, while create_workbook_snapshot creates a verified non-overwriting copy for before/after validation

  • serialized workbook mutation: same-host writers lock each workbook before loading it, then keep the lock through atomic replace and reopen verification so concurrent agents do not silently overwrite one another

  • smarter worksheet boundaries with bounded strict, default, and extended read presets plus compact metadata for any trailing blocks that were intentionally left out

  • workbook and layout awareness via profile_workbook, describe_sheet_layout, list_tables, list_charts, and analyze_range_impact

  • safer local mutation through dry_run, compact write responses, guarded native-table append/upsert flows, and workbook diff/audit/repair loops

  • local-first performance and privacy with openpyxl, no desktop Excel dependency, and no cloud-auth requirement

Related MCP server: fcp-sheets

Excel MCP Server Features

  • workbook creation and metadata

  • worksheet creation, renaming, copying, deletion, and visibility

  • structured reads, compact table reads, declarative table queries, grouped aggregates, and cell search

  • row, column, and range mutations

  • formulas and validation checks

  • formatting, freezes, autofilters, merges, and conditional formatting

  • native Excel tables, charts, and pivot summaries

  • stdio, streamable-http, and deprecated sse transports

Common Use Cases

  • AI agents that need safe, structured Excel workbook access through MCP

  • spreadsheet automation workflows that read and update .xlsx reports

  • Excel dashboard generation with formatting, tables, charts, freeze panes, and print setup

  • workbook QA and inspection flows that need metadata, named ranges, tables, charts, and protection state

  • data extraction from native Excel tables or worksheet-shaped datasets without hand-written openpyxl scripts

Requirements

  • Python 3.10+

  • .xlsx workbooks

  • either uvx or a local package install

Quick Start

Install and run directly from PyPI with uvx, or install the package locally in your Python environment.

Stdio

Use stdio when the MCP client starts the server locally.

uvx sheetforge-mcp stdio
{
  "mcpServers": {
    "excel": {
      "command": "uvx",
      "args": ["sheetforge-mcp", "stdio"]
    }
  }
}

Streamable HTTP

Use streamable-http when you want a long-running local server process.

EXCEL_FILES_PATH=/path/to/excel-files uvx sheetforge-mcp streamable-http

Default endpoint:

http://127.0.0.1:8017/mcp

Example client config:

{
  "mcpServers": {
    "excel": {
      "url": "http://127.0.0.1:8017/mcp"
    }
  }
}

Remote binding is an explicit opt-in because the HTTP transports do not provide built-in authentication:

FASTMCP_HOST=0.0.0.0 \
SHEETFORGE_ALLOW_REMOTE=true \
EXCEL_FILES_PATH=/path/to/excel-files \
uvx sheetforge-mcp streamable-http

Only expose a remote listener behind an authenticated and access-controlled network boundary.

SSE

SSE is kept for compatibility, but new integrations should prefer streamable-http.

EXCEL_FILES_PATH=/path/to/excel-files uvx sheetforge-mcp sse

Default endpoint:

http://127.0.0.1:8017/sse

File Path Rules

  • Paths refer to the server filesystem, not the client's cwd. Reuse supplied paths; never invent an absolute prefix for a relative name.

  • In stdio mode, filepath values must be absolute paths.

  • In streamable-http and sse mode, relative paths are resolved under EXCEL_FILES_PATH.

  • In streamable-http and sse mode, absolute paths are accepted only when they remain inside EXCEL_FILES_PATH; parent traversal and symlink escapes are rejected.

  • In streamable-http and sse mode, the server creates EXCEL_FILES_PATH automatically if it does not exist.

Path-policy errors include a stable code and safe next step. Retry the original user-supplied root-relative path on a rooted server, or ask for the intended absolute path in normal stdio. No automatic basename fallback or relocation occurs. See path guidance and error recovery.

Environment Variables

Variable

Default

Used by

Purpose

FASTMCP_HOST

127.0.0.1

HTTP and SSE

Bind address for the server process

FASTMCP_PORT

8017

HTTP and SSE

Port for the server process

EXCEL_FILES_PATH

./excel_files

HTTP and SSE

Base directory for relative workbook paths

SHEETFORGE_ALLOW_REMOTE

unset

HTTP and SSE

Required opt-in for any non-loopback bind; does not add authentication

Tooling Overview

Worksheet tabs and native Excel tables have separate names. For a named source, use list_tables to verify its containing tab, then read_excel_table; a missing name in the worksheet list does not prove the table is absent. See source selection and error recovery.

The server currently registers 83 MCP tools across these groups:

  • workbook overview: create_workbook, create_worksheet, create_workbook_snapshot, get_workbook_metadata, profile_workbook, describe_sheet_layout, audit_workbook, plan_workbook_repairs, apply_workbook_repairs, apply_workbook_changeset, run_workbook_recipe, explain_recipe_delta, diff_workbooks, analyze_range_impact, explain_formula_cell, detect_circular_dependencies, create_named_range, inspect_named_range, list_named_ranges, delete_named_range, list_all_sheets, list_tables

  • data access: suggest_read_strategy, describe_dataset, query_table, aggregate_table, bulk_aggregate_workbooks, bulk_filter_workbooks, union_tables, cross_workbook_lookup, quick_read, read_excel_table, read_data_from_excel, read_excel_as_table, search_in_sheet, write_data_to_excel, append_table_rows, append_excel_table_rows, upsert_excel_table_rows, update_rows_by_key

  • worksheet and range changes: copy_worksheet, delete_worksheet, rename_worksheet, set_worksheet_visibility, get_worksheet_protection, set_worksheet_protection, copy_range, delete_range, insert_rows, insert_columns, delete_sheet_rows, delete_sheet_columns

  • formatting and layout: format_range, format_ranges, read_range_formatting, freeze_panes, set_autofilter, set_print_area, set_print_titles, set_column_widths, autofit_columns, set_row_heights, merge_cells, unmerge_cells, get_merged_cells

  • formulas and validation: apply_formula, validate_formula_syntax, inspect_formula, validate_excel_range, get_data_validation_info, inspect_data_validation_rules, remove_data_validation_rules, inspect_conditional_format_rules, remove_conditional_format_rules

  • analysis and structure: create_table, list_charts, find_free_canvas, create_chart, create_chart_from_series, create_pivot_table

  • guarded table patches: apply_table_patch

  • guarded alternatives: evaluate_workbook_scenarios

  • workbook contracts: inspect_workbook_contract and run_workbook_recipe(..., workbook_contract=...)

For explicit reusable field definitions and mandatory source checks before report generation, see the Workbook Contracts guide and net-sales contract. Declared business meanings are not machine-verified facts. V1 integrates Recipes only; it does not silently enforce contracts on other tools.

For comparing proposed edits before choosing one, see the Verified Scenarios guide and budget example. Scenarios verify explicit sum/count bounds, not forecasts or the business correctness of a decision.

For native-table edits prepared against an earlier snapshot, see apply_table_patch and the Verified Rebase guide. This is separate from unconditional key-based upserts: declared read dependencies and old target values are checked before compiling a fresh ChangeSet.

For chart authoring, prefer create_chart as the primary entry point:

  • use data_range for the simple contiguous-data path

  • use explicit series plus optional categories_range for non-contiguous or hand-authored charts

  • use top-level width and height to control chart size in centimeters; defaults are 15 x 7.5

  • use placement when you want SheetForge to position the chart relative to worksheet content, a source range, or a named table instead of guessing target_cell manually

  • use placement={"relative_to": "free_canvas"} when a busy dashboard needs the first non-overlapping chart slot instead of a simple right/below placement rule

  • keep create_chart_from_series for backward compatibility or existing prompts that already rely on it

The most agent-friendly read tools are:

  • suggest_read_strategy: recommends the best next read tool for a workbook target, including whether SheetForge should treat it as a native Excel table, a clean worksheet dataset, a layout-heavy dashboard sheet, or a chart sheet

  • describe_dataset: samples a worksheet or native Excel table and returns headers, schema hints, key-candidate guesses, structural signals, guarded worksheet-boundary metadata, and a recommended follow-up read path

  • query_table: filters, projects, sorts, and limits worksheet-shaped data or native Excel tables with a declarative JSON query instead of ad hoc cell loops

  • aggregate_table: computes grouped metrics such as count, sum, avg, min, and max over worksheet-shaped data or native Excel tables

  • bulk_aggregate_workbooks: computes the same grouped metrics across many workbook files in one call, with explicit schema handling via strict, intersect, or union

  • bulk_filter_workbooks: returns matching rows across many workbook files with optional source provenance columns, so recurring cross-file QA and reporting checks no longer need one-tool-call-per-file loops

  • union_tables: combines comparable worksheet or native-table rows across many workbook files, with optional deduplication keys and explicit schema handling for workbook collections that drift over time

  • cross_workbook_lookup: enriches one workbook dataset from one or more lookup workbooks with left-join style matching, optional duplicate-match handling, and compact per-row provenance for matched lookup rows

  • profile_workbook: one-call inventory for sheets, tables, charts, named ranges, and key layout/protection state, including chart occupied_range for grid-anchored worksheet charts

  • describe_sheet_layout: worksheet-level structural summary for safe dashboard edits, including freeze panes, print settings, merges, chart anchors, table metadata, conditional-format and validation counts, custom row/column sizing, and a small free-canvas preview

  • audit_workbook: workbook-level audit for high-signal problems such as broken #REF! formulas, error cells, hidden sheets, header-quality issues, layout-heavy sheets, and named ranges that reference missing sheets

  • plan_workbook_repairs: converts workbook audit findings into prioritized next steps, including suggested SheetForge tool calls for inspection, safe dry runs, and repair workflows

  • apply_workbook_repairs: dry-runs or applies the safe repair subset from those plans, including broken named ranges, broken validation rules, broken conditional formats, and optional hidden-sheet reveals

  • apply_workbook_changeset: previews a bounded multi-tool report mutation on an isolated candidate, evaluates explicit postconditions, and commits it with exact-file stale-write protection plus optional verified snapshot and rollback

  • run_workbook_recipe: executes a versioned JSON recipe over one native table, checks unique keys, row counts or sum reconciliation, probes column/row-order invariance, and writes a reserved rectangle in the same workbook through ChangeSet preview/commit. See the Verified Recipes guide and example recipe.

  • explain_recipe_delta: independently reconciles changes in recomputed sum/count recipe results across two source versions by unique keys. Includes group drilldown, exact decimal evidence and explicit sample remainders. It does not validate saved report cells or infer business causes. See Verified Explanations.

  • diff_workbooks: compares two workbook files and reports structural changes plus sampled cell-value diffs, which is useful for before/after verification in agent workflows

  • create_workbook_snapshot: creates the verified, non-overwriting baseline that makes diff_workbooks usable without an external copy script

  • analyze_range_impact: preflight blast-radius check for a worksheet range, including overlaps with tables, chart footprints, merged cells, named ranges, data validations, conditional formats, autofilters, print areas, formula cells inside the range, and formulas or rule expressions elsewhere that depend on it directly or transitively, through named ranges, or through structured table references such as Table1[Sales]

  • explain_formula_cell: resolves a formula cell's direct references, shows upstream formula-chain cells, returns a compact formula_chain summary with depth layers and sampled paths, and reports downstream dependents so agents can debug workbook logic without manual tracing

  • detect_circular_dependencies: scans workbook formula graphs, including named-range-driven edges, and reports self-references plus multi-cell circular dependency groups before they surprise downstream automation

  • create_named_range: creates workbook-level or sheet-scoped named ranges with dry_run and replace support, so agents can promote important workbook regions into stable references without dropping to ad hoc Python

  • inspect_formula: inspects a formula string without workbook context, listing functions, reference token types, volatile functions, and risky functions such as INDIRECT

  • inspect_named_range: inspects one defined name, including its scope, destinations, and whether it points at missing sheets or broken references

  • quick_read: single-call compact table read that auto-selects the first sheet when needed, with guarded strict / default / extended boundaries, start_row pagination, and start_col / end_col column windowing for large sheets

  • read_excel_table: read a native Excel table by table_name without guessing worksheet bounds, now with start_row pagination and optional start_col / end_col table column windowing

  • list_all_sheets: quick workbook inventory with sheet sizes, emptiness flags, and sheet_type for worksheets versus chart sheets

  • read_excel_as_table: compact headers + rows output for structured datasets, with guarded boundary presets, compact=True for the smallest payload, start_row for page-like reads, and start_col / end_col for narrower column slices

  • read_data_from_excel: cell-address-aware range reader that supports max_rows and max_cols windowing for large non-tabular ranges, values_only=True for smaller 2D payloads, and cursor-based continuations for multi-step 2D traversal

  • read_range_formatting: compact formatting readback for a worksheet range, grouped by distinct style signatures instead of noisy per-cell dumps, with merged-range and conditional-format overlap summaries

  • search_in_sheet: exact or partial value search across instantiated worksheet cells, so distant style-only cells do not force a scan of the entire rectangular used range

Workbook inventory tools such as list_all_sheets, profile_workbook, and list_charts surface both worksheets and chart sheets. Grid-oriented tools such as quick_read, read_excel_table, create_table, formatting, formulas, and validation require a real worksheet and return a clear chartsheet error if you target the wrong sheet type.

The most agent-friendly write helpers for structured data are:

  • upsert_excel_table_rows: update matching rows in a native Excel table and append missing keys in one call Note: totals-row tables are update-only for now; append attempts are rejected rather than shifting unrelated rows.

  • append_excel_table_rows: append rows to a native Excel table when you want the table ref to grow with the new records

  • append_table_rows: append header-aware rows to worksheet-shaped data when you do not have a native Excel table

  • update_rows_by_key: update worksheet-shaped data by a named key column without appending missing keys

For the compact table readers (quick_read, read_excel_as_table, read_excel_table):

  • row_mode="arrays" keeps the smallest headers + rows shape

  • row_mode="objects" returns records keyed by normalized field names such as first_name

  • normalized field names are ASCII-safe transliterations, so headers like Näyttökerrat become nayttokerrat

  • infer_schema=True adds lightweight schema hints inferred from the returned rows

  • start_col / end_col let you slice wide worksheets or native Excel tables down to just the columns you need before pagination or schema inference

  • truncated pages now include next_start_row, which you can pass back to the same tool for the next page

  • non-tabular range reads can also return continuations.down and continuations.right cursor tokens so agents can continue large 2D windows without recomputing coordinates

  • suggest_read_strategy helps agents choose between table-aware, worksheet-aware, range-aware, and workbook-orientation reads before they spend context on the wrong path

  • describe_dataset provides a lighter-weight dataset summary than a full read, including sample rows, header quality, key candidates, and recommended next tool

  • describe_dataset, quick_read, read_excel_as_table, and read_excel_table now also return structure_token, content_token, and snapshot_metadata, so agents can carry read-time identity forward into safer optimistic-concurrency writes

  • worksheet-shaped compact readers and row-mutation helpers favor the first contiguous data block after the header, so sparse footer notes or distant outlier rows do not silently stretch total_rows, append targets, or key-based update scans

  • worksheet reads can opt into read_boundary_mode="strict" (0 blank rows), "default" (5), or "extended" (100); the bounded presets deliberately avoid an unlimited raw gap parameter

  • describe_dataset, quick_read, and read_excel_as_table surface a read_boundary object with the effective tolerance, data end, ignored row count, and compact trailing-block locations

  • non-default boundary views are read-only diagnostics and return write_precondition_compatible=false; reread with the default mode before carrying a structure token into a write

  • query_table is the lightest way to pull just the matching rows and columns you need from a worksheet dataset or native Excel table

  • query_table and bulk_filter_workbooks accept ne as a shorthand for neq, and membership filters can use either values or the shorter value list form

  • aggregate_table lets agents compute grouped summaries directly in SheetForge instead of over-reading the full dataset into context first

  • bulk_aggregate_workbooks extends that pattern across many workbook files when a recurring reporting workflow would otherwise need ad hoc Python or repeated per-file tool calls

  • aggregate metrics accept both the canonical {"op": "sum", "field": "Sales", "as": "total_sales"} shape and the more guessable alias form {"agg": "sum", "column": "Sales", "as": "total_sales"}

  • bulk_filter_workbooks does the same for row-level inspection, while keeping workbook provenance visible by default

  • union_tables is the fastest way to normalize many comparable workbook datasets into one combined tabular payload before downstream QA, export, or further aggregation

  • cross_workbook_lookup is the fastest way to enrich one workbook from another without writing an ad hoc merge script, especially for master-data lookups, status enrichment, and cross-file QA workflows

  • append_excel_table_rows is the right append path for native Excel tables when you do not need key-based upsert behavior

  • append_table_rows now refuses to write directly under an adjacent native Excel table and points you at append_excel_table_rows instead of silently leaving the table range stale

  • token-aware structured writes can pass expected_structure_token to abort on structural drift; append-style writes additionally require allow_structure_change=True, and successful writes report both previous and new structure/content tokens

  • rename_worksheet now updates formula cells as well as chart references and named ranges, and it also renames the default sibling pivot sheet (Data_pivot -> Revenue_pivot) when that move is conflict-free

  • copy_worksheet preserves native tables with workbook-unique copied names, data validations, conditional formatting, freeze panes, autofilters, print settings, protection, charts with their exact anchor geometry, and sheet-scoped names; copied self-references and structured table references are rewritten to the new sheet

  • formatting color inputs accept RRGGBB, #RRGGBB, AARRGGBB, or #AARRGGBB, so prompts do not need to strip CSS-style # prefixes first

  • audit_workbook is the fastest workbook-wide preflight when you need to know whether a spreadsheet is safe and predictable enough for autonomous editing

  • audit_workbook now treats dominant native-table sheets more honestly when nearby dashboard/layout artifacts extend the used range, so unrelated merged/chart areas do not create false blank-header risk on an otherwise clean table

  • plan_workbook_repairs is the fastest way to turn those audit findings into an actual action queue instead of manually deciding the next tool call for every problem

  • apply_workbook_repairs lets agents preview or apply the safe subset of those repairs without having to orchestrate each broken workbook artifact manually

  • diff_workbooks is the quickest before/after QA pass when an agent has touched workbook structure and wants proof of what actually changed

  1. Unfamiliar workbook -> verified multi-step mutation Start with profile_workbook (or list_all_sheets for the lightest inventory), inspect layout-heavy tabs with describe_sheet_layout, and run analyze_range_impact. Put supported report-building edits and explicit postconditions into apply_workbook_changeset(mode="preview"); if ready_to_commit=true, repeat the same plan with mode="commit", expected_workbook_sha256, and changeset_token from the preview.

  2. Workbook repair loop Use audit_workbook to find high-signal issues, plan_workbook_repairs to turn them into an action queue, apply_workbook_repairs(..., dry_run=True) to preview the safe subset, then rerun audit_workbook after applying repairs to confirm the workbook is back to a low-risk state.

  3. Multi-workbook reporting Use bulk_aggregate_workbooks, bulk_filter_workbooks, union_tables, or cross_workbook_lookup to build the reporting dataset first, then write the summarized rows into a fresh workbook tab and finish the presentation layer with format_ranges, find_free_canvas, create_chart, and autofit_columns.

See TOOLS.md for the full reference. Release notes live in CHANGELOG.md.

Response Format

Every tool now returns a JSON envelope with a consistent top-level shape:

{
  "ok": true,
  "operation": "read_excel_as_table",
  "message": "read_excel_as_table completed",
  "data": {}
}

Error responses follow the same contract:

{
  "ok": false,
  "operation": "write_data_to_excel",
  "error": {
    "type": "DataError",
    "message": "No data provided to write"
  }
}

For destructive tools that support preview mode, the envelope may also include dry_run and changes. Committed write operations now default to compact summaries; pass include_changes=True when you want per-cell, per-range, or per-operation detail.

Development

Install dependencies:

uv sync --extra dev

Run tests:

uv run --extra dev pytest -q

Run lint checks:

uv run --extra dev ruff check src tests

Run the package locally:

uv run sheetforge-mcp stdio

Build distributions locally:

uv build

Release Flow

  • Update pyproject.toml, manifest.json, and the tracked .mcpb bundle together for each release.

  • Keep the tracked bundle filename in sync with the package version, for example sheetforge-mcp-<version>.mcpb.

  • Every distribution-building workflow verifies the wheel, source distribution, and tracked MCPB bundle against shared public-artifact allowlists before release or publication.

  • GitHub releases run a build verification workflow only.

  • PyPI publishing is a separate manual workflow, so releases do not create a failing deployment before Trusted Publisher is configured for the package.

Repository Layout

  • src/excel_mcp/server.py: MCP server, transport setup, and tool registration

  • src/excel_mcp/workbook.py: workbook lifecycle helpers and workbook metadata

  • src/excel_mcp/changeset.py: verified multi-operation preview/commit transactions and assertions

  • src/excel_mcp/recipes.py: bounded native-table report recipes, checks, lineage samples, and ChangeSet compilation

  • src/excel_mcp/explanations.py: read-only keyed recipe deltas with independent arithmetic/filter checks and bounded evidence

  • src/excel_mcp/data.py: read, write, table, and search helpers

  • src/excel_mcp/sheet.py: worksheet and range mutations

  • tests/: regression tests covering data, layout, charts, pivots, formatting, tables, and resource safety

  • scripts/verify_release_artifacts.py: shared wheel/sdist/MCPB content verifier used by CI and release workflows

  • manifest.json: packaged MCP bundle metadata

  • docs/index.html: static project landing page

Why SheetForge MCP

  • Excel-first MCP surface: the toolset is focused on real .xlsx workbook operations, not generic file I/O

  • agent-friendly responses: consistent JSON envelopes, compact writes, and dry_run previews reduce context waste

  • workbook introspection: profile_workbook, list_all_sheets, list_tables, and list_charts make unfamiliar spreadsheets easier to navigate

  • safer edits: analyze_range_impact gives agents a read-only preflight before overwriting, deleting, or restructuring an important range, including downstream formula chains plus validation-rule and conditional-format references elsewhere in the workbook even when formulas point at the range through named ranges or structured table references

  • verified transactions: apply_workbook_changeset binds a bounded operation/assertion plan to the canonical target path and exact source SHA-256, tests it on an isolated candidate, verifies cells, tables, freeze panes, autofilters, and chart placement, and replaces the source once only after all checks pass

  • layout planning: find_free_canvas suggests safe empty slots for charts or dashboard blocks before you place them, defaulting to the standard chart footprint when you omit explicit sizing

  • practical Excel output: formatting, print setup, worksheet protection, table upserts, chart authoring, and autofit helpers cover real reporting workflows

  • Python ecosystem fit: built on openpyxl, packaged for uvx, and easy to run locally over stdio or through a deliberately gated HTTP deployment

Notes For Integrators

  • stdio mode is careful not to write non-protocol text to stdout.

  • All tools return structured JSON envelopes, which makes client-side parsing predictable.

  • Tool responses now use compact JSON serialization to reduce MCP payload size while keeping the same envelope shape.

  • read_data_from_excel(..., preview_only=True) limits the response to the first 10 rows in the selected range and marks the payload as truncated when applicable.

  • read_data_from_excel(..., compact=True) omits default validation stubs for cells that do not have validation rules.

  • read_data_from_excel(..., values_only=True) returns a plain 2D values array for range reads that do not need per-cell addresses or validation metadata.

  • read_data_from_excel(..., max_rows=...) paginates tall rectangular ranges and returns next_start_row plus next_start_cell when more rows remain.

  • read_data_from_excel(..., max_cols=...) paginates wide rectangular ranges and returns next_start_col plus next_column_start_cell when more columns remain.

  • read_data_from_excel(..., cursor=...) resumes from a continuation token so agents can keep paging without recomputing the next window manually; 2D windows expose directional continuations under continuations.down and continuations.right

  • read_excel_as_table(..., compact=True) minimizes the tabular payload to headers and rows unless truncation metadata is needed, while still returning dataset identity metadata

  • compact tabular readers still include structure_token, content_token, and snapshot_metadata, even when the tabular payload itself is minimized

  • quick_read(..., start_row=...) and read_excel_as_table(..., start_row=...) let agents paginate deep worksheets without first reading from the top.

  • quick_read(..., start_col=..., end_col=...) and read_excel_as_table(..., start_col=..., end_col=...) let agents request only the relevant columns from wide worksheets instead of pulling every column into context.

  • read_excel_table(..., start_col=..., end_col=...) now supports the same narrower column slices for native Excel tables, as long as the requested columns fall inside the table range.

  • quick_read(..., include_headers=False), read_excel_as_table(..., include_headers=False), and read_excel_table(..., include_headers=False) let follow-up pages omit repeated header payload once the first page already established the schema.

  • read_excel_table(..., start_row=...) now supports deeper pagination into native Excel tables instead of always reading from the top.

  • Truncated tabular reads now return next_start_row so agents can continue paging without recalculating offsets.

  • Oversized read responses now fail early with ResponseTooLargeError plus structured hints, so agents can retry with smaller ranges or pagination before the client truncates the payload.

  • quick_read, read_excel_as_table, and read_excel_table can now return records plus inferred schema hints when you opt into row_mode="objects" and infer_schema=True.

  • Read tools do not recalculate Excel formulas; formula cells surface as formula text such as =B2*C2, and inferred schema labels formula-backed columns as formula so agents do not mistake them for fresh numeric values.

  • profile_workbook provides a single-call workbook inventory with sheet-level table, chart, protection, print, and filter metadata for faster agent orientation, and now includes chart occupied_range alongside anchors and dimensions for grid-anchored worksheet charts.

  • Core mutation tools now default to compact responses on committed writes, including data writes, formatting, worksheet layout helpers, and merge/unmerge helpers. Use include_changes=True for detailed diffs.

  • Token-aware structured writes now return previous_structure_token, new_structure_token, previous_content_token, new_content_token, and snapshot_metadata, which makes multi-agent or read-then-write flows safer without adding hidden workbook metadata.

  • dry_run versions of those structured writes now label snapshot metadata as token_basis="dry_run_preview" and keep the on-disk file facts under source_file_*, so preview tokens are no longer mixed with live-file metadata.

  • Workbook saves that go through safe_workbook(..., save=True) use a timeout-aware same-host workbook lock plus temp-file save, fsync, atomic replace, rollback-on-verification-failure, and reopen verification. Symlink paths update their real target without replacing the symlink itself. If automatic rollback fails, the recovery backup is retained and identified in the error. This protects cooperating SheetForge processes on one machine; it is not a distributed lock for cloud-sync providers.

  • format_ranges batches multiple formatting operations into one workbook pass and reports per-range errors without discarding successful ranges. A failed range is rolled back to its pre-operation styles, values, comments, hyperlinks, merge state, and conditional-format rules before the batch continues.

  • validate_formula_syntax performs structural token validation, checks Excel coordinate limits, and rejects risky functions such as INDIRECT, HYPERLINK, WEBSERVICE, DGET, and RTD case-insensitively. It does not calculate formulas or replace Excel's own calculation engine.

  • write_data_to_excel remains a raw cell-write primitive and can store formula strings directly; use it only with trusted data, or use apply_formula when you want SheetForge's formula safety checks.

  • Server logs rotate at 5 MiB with two backups instead of growing without a bound.

  • autofit_columns estimates practical column widths from the current cell contents, with optional column filters and min/max bounds.

  • list_charts now reports chart width and height in centimeters in addition to anchor, type, and series metadata.

  • get_worksheet_protection and set_worksheet_protection add a safe worksheet-level wrapper around Excel protection flags.

  • set_print_area and set_print_titles make report/export setup scriptable without dropping into raw openpyxl workbook internals.

  • list_tables now returns lightweight schema metadata such as headers, row counts, and stripe settings in addition to table names and ranges.

  • upsert_excel_table_rows expands native Excel table ranges automatically when it appends missing keys, refuses to grow a table into already occupied cells, and rejects append attempts when the target table has an enabled totals row.

  • Core mutation tools support dry_run=True so clients can preview changes before saving a workbook.

License

MIT. See LICENSE.

Available Tools

83 tools
aggregate_tableC
Read-only

Compute grouped metrics over worksheet-shaped data or a native Excel table.

NameRequiredDescriptionDefault
limitNo
filtersNo
metricsNo
sort_byNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
group_byNo
row_modeNoarrays
sort_descNo
header_rowNo
sheet_nameNo
table_nameNo
infer_schemaNo

TDQS

C2.1/5.0
Behavior2/5

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

readOnlyHint=true already covers the safety profile, so the tool is honest about being a read. Beyond that the description adds no behavior: no indication of how metrics/filters are applied, whether missing group_by means a single total, how limit interacts with ordering, or what happens when both table_name and worksheet data are plausible.

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

Conciseness3/5

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

A single front-loaded sentence with no filler, which is structurally good. For a 12-parameter aggregation tool, though, this level of brevity crosses into under-specification rather than efficient conciseness.

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

Completeness1/5

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

Twelve parameters, near-zero schema descriptions, no output schema, and a one-line description leave the agent without enough to call this correctly. It lacks any explanation of metric/filter shapes, output shape, or the sheet-vs-table selection logic.

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

Parameters1/5

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

With roughly 0% schema description coverage across roughly 10 parameters (filters, metrics, group_by, sort_by, sort_desc, limit, row_mode, header_row, table_name, infer_worksheet), the description carries the full explanatory burden and explains none of them. The object-shaped filters/metrics arrays are especially opaque without guidance.

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

Purpose3/5

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

Names a specific verb ('compute grouped metrics') and resource ('worksheet-shaped data or a native Excel table'), so the general idea of a read-only grouped aggregation is conveyed. However, 'worksheet-shaped data' is vague and nothing distinguishes this from close siblings like query_table, create_pivot_table, or bulk_aggregate_workbooks.

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

Usage Guidelines2/5

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

The sentence says nothing about when to use this tool versus alternatives, no prerequisites (e.g. sheet vs table selection, header row expectations), and no exclusions. An agent must infer routing entirely from the name.

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

analyze_range_impactB
Read-only

Inspect workbook structures that overlap a worksheet range before mutation.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
range_refYes
sheet_nameYes

TDQS

B3.1/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, so the description is not carrying the safety burden. It adds the meaningful framing that this is a pre-mutation impact check. However, it doesn't disclose what the result contains (a list of affected structures? a risk summary?) or how exhaustive the analysis is, which is the core behavioral question for an 'impact' 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?

A single front-loaded sentence with zero filler; the precondition is placed at the end where it reads naturally. It is efficient, though the brevity edges into under-specification given the tool's analytic complexity.

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

Completeness2/5

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

Three required parameters, no output schema, and only one-third schema description coverage — this description needed to explain the range format and what 'structures' means. It does neither, so an agent can call it but cannot predict or interpret its result.

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

Parameters2/5

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

Schema coverage is only 33%: filepath is well-documented in the schema, but range_ref and sheet_name have no descriptions at all. The description does not compensate — it never specifies the range_ref notation (A1? sheet-qualified? named range?) or whether sheet_name scopes the analysis or is just context. For a low-coverage schema this is a real gap.

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?

States a specific verb ('Inspect') and a scoped resource ('workbook structures that overlap a worksheet range'), plus a temporal qualifier ('before mutation'). The ambiguity is that 'structures' is never enumerated — an agent can't tell whether it covers merged cells, tables, named ranges, validation, conditional formats, or formulas — though the aggregate/impact framing does separate it from point-inspection siblings like get_merged_cells or list_named_ranges.

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?

'before mutation' implies the usage context (a pre-write safety check), which is genuine guidance. But no alternative is named, no exclusion is stated, and there's no guidance on which mutation tools it should precede or whether it's required vs. optional.

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

append_excel_table_rowsC
Destructive

Append rows to a native Excel table and expand its range safely.

NameRequiredDescriptionDefault
rowsYes
dry_runNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameNo
table_nameYes
include_changesNo
allow_structure_changeNo
expected_structure_tokenNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotation already declares destructiveHint=true, and the description adds the useful facts that rows are appended and the table's range is expanded. However, 'safely' is unsubstantiated: nothing explains what 'expand its range' actually changes, what can go wrong, or how the dry_run / allow_structure_change / structure-token guards behave. Safety-profile coverage is inherited from annotations rather than earned.

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?

A single front-loaded sentence with no filler; every word is about the action and its effect. It is tight but borders on under-specified rather than padded.

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

Completeness2/5

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

An eight-parameter, destructive, structure-token-guarded mutation with no output schema needs far more description than one sentence. The agent is left without any explanation of the guard parameters or the return shape, which is inadequate for a write operation of this complexity.

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

Parameters2/5

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

Schema description coverage is only 13% (only filepath is documented), so the description must compensate for eight parameters and does not touch any of them. Critical semantics — the shape/keys of 'rows', what dry_run previews, when expected_structure_token must be supplied, and what allow_structure_change permits — are undisclosed in either the schema or the description.

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?

States a specific verb ('append rows') and resource ('native Excel table'), plus the side effect of expanding the table range. It does not distinguish itself from siblings append_table_rows or upsert_excel_table_rows, so an agent must guess which append variant to use.

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

Usage Guidelines2/5

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

The description gives no when-to-use context, no prerequisites, and no exclusions. With near-identical siblings (append_table_rows, upsert_excel_table_rows, update_rows_by_key) in the toolset, the absence of routing guidance is a real gap.

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

append_table_rowsC
Destructive

Append dictionary-shaped rows by matching worksheet headers on a worksheet dataset.

NameRequiredDescriptionDefault
rowsYes
dry_runNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
header_rowNo
sheet_nameYes
include_changesNo
allow_structure_changeNo
expected_structure_tokenNo

TDQS

C2.7/5.0
Behavior2/5

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

The description adds one genuine behavioral fact — rows are dicts matched against existing worksheet headers — but annotations already flag destructiveHint=true, and the description never explains what makes this destructive, that appending may extend the sheet, or what allow_structure_change/expected_structure_token guard against. For a destructive write with an 8-parameter surface, that is a significant disclosure gap.

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?

A single front-loaded sentence with no filler; the core mechanism is stated first. Its brevity is efficient, though it borders on under-specification for the tool's complexity rather than being verbose.

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

Completeness2/5

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

With 8 parameters, a destructive mutation, low schema coverage, and no output schema to explain results, the description leaves the agent without critical context — notably the dry-run preview path and the structure-change safety token. What is present is accurate but far from sufficient for correct invocation.

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

Parameters2/5

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

Schema description coverage is only 13% (just filepath), so the description must carry the load and largely does not. The phrase 'dictionary-shaped rows by matching worksheet headers' usefully clarifies the required `rows` shape, but dry_run, header_row, include_changes, allow_structure_change, and expected_structure_token get no explanation at all.

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?

States a specific verb (append), resource (rows), and mechanism (matching worksheet headers), which is enough for an agent to know this writes new records rather than updating existing ones. It does not explicitly distinguish itself from close siblings like append_excel_table_rows or upsert_excel_table_rows, leaving the 'worksheet dataset' vs 'excel table' boundary to be inferred.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no statement of when to prefer this over append_excel_table_rows, upsert_excel_table_rows, update_rows_by_key, or write_data_to_excel. Nothing tells the agent when dry_run or expected_structure_token should be employed.

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

apply_formulaC
Destructive

Apply Excel formula to cell. Excel formula will write to cell with verification.

NameRequiredDescriptionDefault
cellYes
formulaYes
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes

TDQS

C2.9/5.0
Behavior3/5

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

The destructiveHint annotation already signals mutation, and the description adds useful context that the formula will be written with verification. However, it does not explain whether existing cell content is overwritten, whether recalculation occurs, or how verification failures are surfaced.

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 description is short and front-loaded with the core action. The second sentence is slightly redundant by repeating 'Excel formula', but it adds the verification behavior and does not waste much space.

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

Completeness2/5

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

For a destructive mutation tool with four required parameters, 25% schema coverage, and no output schema, the description is too thin. It omits overwrite behavior, formula evaluation expectations, and error/verification details that an agent would need to invoke it confidently.

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

Parameters2/5

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

Schema description coverage is only 25%, with meaningful guidance only for filepath. The description does not compensate by explaining the expected format for formula, how cell references should be specified, or how sheet_name interacts with cell.

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 description states a specific verb and resource: apply an Excel formula to a cell. It is clear enough to distinguish from validation or inspection siblings, but it does not explicitly name or differentiate those alternatives.

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

Usage Guidelines2/5

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

It implies usage for writing a formula into a cell, but gives no guidance on when to use this instead of validate_formula_syntax, write_data_to_excel, or inspect_formula. No exclusions or prerequisites are stated.

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

apply_table_patchA
Destructive

Preview/commit a three-way keyed patch against a pinned retained base.

patch requires version=1, source={table_name, optional sheet_name}, nonempty
key_fields, explicit read_fields (use [] only for no extra dependencies), and
updates=[{key: {all key fields}, values: {literal field updates}}]. Write fields
must not be keys/read_fields. Checks complete unique keys and row-local read
dependencies; does not infer undeclared or cross-row dependencies. Existing
rows only, same exact headers with reordering allowed, no formula evaluation.
Conflicts/missing rows/changed premises block the entire batch. Commit requires
the identical patch/base and rebase_token/expected_workbook_sha256 from a fresh
preview. Reuses ChangeSet snapshots, exact-file checks and rollback. Limits:
1000 target cells, 50 contiguous column spans, 50000 table cells/64 columns per
source; sample_limit 1-10 bounds examples only. Tokens are not authentication.
NameRequiredDescriptionDefault
modeNopreview
patchYes
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
rebase_tokenNo
sample_limitNo
base_filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
expected_base_sha256Yes
expected_workbook_sha256No

TDQS

A4.2/5.0
Behavior5/5

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

Well beyond the destructiveHint=true annotation, the description discloses that conflicts/missing rows/changed premises block the entire batch, that commit demands an identical patch/base plus token and sha256 from a fresh preview, that ChangeSet snapshots and rollback are reused, and that tokens are not authentication. It even quantifies limits (1000 target cells, 50 spans, 50000 cells/64 columns, sample_limit 1-10), giving the agent a full behavioral profile before invoking a destructive operation.

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 constraints are front-loaded, and nearly every clause carries non-redundant operational detail (validations, blocking rules, commit prerequisites, limits). The middle paragraph is dense and multi-clause, which costs some readability, but it is compact relative to the complexity of an 8-parameter destructive patch tool rather than padded.

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 complex, destructive, nested-object tool with no output schema, the description covers invocation requirements, validations, blocking conditions, and limits thoroughly. The notable gap is what the preview returns (the actual shape of the token, examples, or conflict report), which the agent would need to interpret results — but safety and invocation semantics are fully addressed.

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

Parameters5/5

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

Schema coverage is only 25% and the critical `patch` parameter is an opaque free-form object in the schema, yet the description fully specifies its required structure (version=1, source={table_name, sheet_name}, nonempty key_fields, explicit read_fields with [] semantics, updates=[{key, values}]) and the constraint that write fields must not be keys or read_fields. It also clarifies mode behavior, what sample_limit bounds, and the role of rebase_token/expected_workbook_sha256 — compensating almost entirely for the sparse schema.

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 first sentence states a specific verb (preview/commit), resource (three-way keyed patch), and target (pinned retained base) in a single well-formed clause. The body enumerates the exact patch shape and operation semantics, making the purpose unmistakable. It stops short of naming a sibling tool it replaces (e.g., apply_workbook_changeset or update_rows_by_key), so differentiation is by capability rather than by explicit routing.

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?

Usage context is implied through the preview/commit split and the statement that commit requires a fresh preview's rebase_token/expected_workbook_sha256. It also lists blocking conditions (conflicts, missing rows, changed premises). However, there is no explicit 'use this when / use X instead' guidance against the many sibling mutation tools, so the agent must infer the boundary itself.

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

apply_workbook_changesetA
Destructive

Preview or commit an assertion-backed group of workbook mutations as one transaction.

Each operation is {"tool": "name", "args": {...}}. Supported tool names are
create_worksheet, write_data_to_excel, format_range, format_ranges, freeze_panes,
set_autofilter, set_column_widths, set_row_heights, autofit_columns, create_table,
and create_chart. Assertions support sheet_exists, cell_equals, range_equals,
range_values_unchanged, table_exists, freeze_panes_equals, autofilter_equals,
chart_exists, and no_cell_ref_errors.

Call preview first. Commit the identical plan with expected_workbook_sha256 and
changeset_token from that preview. Snapshot creation defaults to enabled.
NameRequiredDescriptionDefault
modeNopreview
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
assertionsNo
operationsYes
sample_limitNo
changeset_tokenNo
create_snapshotNo
snapshot_filepathNo
expected_workbook_sha256No

TDQS

A4.4/5.0
Behavior4/5

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

Annotations supply only destructiveHint=true, and the description adds real value on top: transactional grouping, an enforced preview→commit handshake bound to a workbook SHA and token, and the fact that snapshot creation defaults to enabled. It stops short of stating rollback/atomicity semantics on partial failure or what happens if the SHA no longer matches.

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

Conciseness5/5

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

Front-loaded with the core action, then the data shapes, then the workflow — three tight paragraphs with no filler. The long enumerations are necessary because the schema does not constrain those object shapes, so every token 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 9-parameter destructive batch tool with no output schema, the description covers the plan format, verification strategy, and commit safety contract. Gaps remain around failure/rollback behavior and what the preview response contains (tokens, samples), which an agent must infer from the parameter names.

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?

With only 11% schema coverage, the description carries most of the load and does so for the important parameters: the operations element shape ({tool, args}), the valid tool names, the valid assertion types, plus changeset_token and expected_workbook_sha256. It leaves sample_limit and snapshot_filepath unexplained, and mode is only inferable from 'preview or commit'.

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 — preview or commit a group of workbook mutations as a single transaction — and immediately distinguishes itself from the many single-operation siblings (write_data_to_excel, format_range, freeze_panes) by being the batch/transactional entry point. The enumeration of composable tool names makes the scope unambiguous.

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?

"Call preview first. Commit the identical plan with expected_workbook_sha256 and changeset_token from that preview" gives an explicit two-phase workflow with the exact inputs required at each step. It does not state when an agent should prefer this over calling the individual mutation tools directly, which is the one missing routing cue.

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

apply_workbook_repairsB
Destructive

Apply safe workbook repair actions with dry-run planning and before/after diff output.

NameRequiredDescriptionDefault
dry_runNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
header_rowNo
sheet_namesNo
repair_typesNo
sample_limitNo

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, so the safety profile is partly covered. The description adds useful behavioral context by mentioning dry-run planning and before/after diff output, but it does not explain what kinds of changes are destructive, whether repairs are reversible, or what permissions are needed. The word 'safe' is also somewhat vague against a destructive annotation.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no filler. Every phrase contributes to the stated purpose and safety mechanism.

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

Completeness2/5

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

This is a destructive six-parameter tool with no output schema and very low schema description coverage. The one-sentence description is too thin to fully prepare an agent to invoke it correctly; it omits repair scope, parameter meanings, and risk details beyond the dry-run and diff mention.

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

Parameters2/5

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

Schema description coverage is only 17%, with only filepath documented in the schema. The description does not explain repair_types, sheet_names, header_row, sample_limit, or the dry_run default, so it fails to compensate for the low parameter documentation.

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 description states a specific verb and resource: 'Apply safe workbook repair actions.' An agent can tell this tool mutates workbook repairs rather than reading or planning. It does not explicitly differentiate itself from the sibling plan_workbook_repairs or apply_workbook_changeset, so it misses the top score.

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

Usage Guidelines2/5

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

The description mentions dry-run planning but does not explain when to use this tool versus plan_workbook_repairs or apply_workbook_changeset. There is no explicit guidance on prerequisites, when a dry run should be used first, or when to avoid applying repairs directly.

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

audit_workbookC
Read-only

Audit workbook structure for high-signal issues that affect agent workflows.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
header_rowNo
sample_limitNo

TDQS

C2.7/5.0
Behavior2/5

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

readOnlyHint=true already tells the agent this is a safe read, so the description's remaining job is to disclose what the audit actually examines and returns. It does not: no categories of issues, no severity model, no indication of cost or scoping, and no output schema exists to compensate. Only the vague 'high-signal' qualifier is added.

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?

A single front-loaded sentence with no filler or repetition. It is appropriately sized, though the economy comes at the cost of substance rather than through efficient packing of useful detail.

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

Completeness2/5

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

With no output schema, three parameters at 33% coverage, and no annotation beyond readOnlyHint, the description should describe what an audit returns and how the two optional tuning parameters change it. Neither is covered, so an agent can select the tool but not invoke or interpret it confidently.

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

Parameters2/5

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

Schema description coverage is only 33% — only filepath is documented (and that documentation lives in the schema, not the description). header_row and sample_limit carry no explanation anywhere, and the description never mentions them, so an agent cannot tell what header_row=1 means for detection or what sample_limit bounds.

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 description names a specific verb and resource ('Audit workbook structure') plus the class of finding ('high-signal issues that affect agent workflows'), so an agent knows roughly what it produces. It does not distinguish itself from near-siblings such as inspect_workbook_contract, profile_workbook, or describe_sheet_layout, leaving overlap unaddressed.

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

Usage Guidelines2/5

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

There is no guidance on when to choose this over inspect_workbook_contract, profile_workbook, or describe_dataset, nor any prerequisite or exclusion. The phrase 'affects agent workflows' gestures at a use case but never states a condition for selection.

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

autofit_columnsC
Destructive

Auto-fit worksheet columns based on content width.

NameRequiredDescriptionDefault
columnsNo
dry_runNo
paddingNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
max_widthNo
min_widthNo
sheet_nameYes

TDQS

C2.4/5.0
Behavior2/5

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

The annotation declares destructiveHint=true, yet the description does not state that this tool mutates and saves the workbook, nor that dry_run exists as a preview escape hatch. 'Based on content width' hints at the algorithm but discloses nothing about persistence, overwrite of existing widths, or reversibility.

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

Conciseness3/5

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

The single sentence is front-loaded and wastes no words, but its brevity here reflects under-specification rather than efficiency given seven parameters and a mutation side effect.

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

Completeness2/5

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

For a destructive, 7-parameter mutation tool with no output schema and near-zero schema descriptions, the description should at minimum cover the columns scoping, dry_run preview, and padding/bounds parameters. None of that is present, leaving the agent likely to call it with defaults blindly.

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

Parameters2/5

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

Schema description coverage is only 14% (only filepath documented), and the description mentions none of the five other parameters: columns, dry_run, padding, min_width, max_width. With the description silent and the schema bare, the agent cannot know how to scope the fit to specific columns or tune width bounds.

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

Purpose3/5

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

States a specific verb and resource ('Auto-fit worksheet columns') and gives the basis for sizing ('content width'), so the core action is understandable. However, it never distinguishes itself from the sibling set_column_widths, which an agent could easily confuse with this tool.

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

Usage Guidelines2/5

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

There is no guidance on when to auto-fit versus explicitly setting widths via set_column_widths, and no mention of prerequisites such as the sheet needing to exist or be writable. The agent must infer all routing decisions.

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

bulk_aggregate_workbooksC
Read-only

Aggregate comparable worksheet or table data across multiple workbooks.

NameRequiredDescriptionDefault
limitNo
filtersNo
metricsNo
sort_byNo
group_byNo
row_modeNoarrays
filepathsYes
sort_descNo
header_rowNo
sheet_nameNo
table_nameNo
schema_modeNostrict
infer_schemaNo
source_sample_limitNo

TDQS

C2.7/5.0
Behavior3/5

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

The readOnlyHint annotation establishes that this is a safe read operation, and the description is consistent with that. However, beyond the annotation, the description adds only the scope 'across multiple workbooks' and does not explain output shape, schema handling, limits, or what happens with non-comparable data.

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 description is a single, front-loaded sentence with no filler. It is concise, though extremely sparse given the tool's complexity.

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

Completeness1/5

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

For a 14-parameter aggregation tool with no output schema and almost no annotation detail, the description is far too thin. An agent cannot reliably infer how to use schema_mode, infer_schema, filters, metrics, grouping, sorting, or row modes.

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

Parameters1/5

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

There are 14 parameters with 0% schema description coverage, so the description must compensate for parameter semantics. It explains none of them: filters, metrics, group_by, sort_by, row_mode, schema_mode, infer_schema, source_sample_limit, header_row, sheet_name, and table_name are all left undocumented.

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 description states a specific verb and resource: aggregate comparable worksheet or table data across multiple workbooks. It is clear enough for an agent to grasp the core operation, but it does not distinguish this tool from siblings such as aggregate_table, union_tables, or cross_workbook_lookup.

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

Usage Guidelines2/5

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

The description implies usage by mentioning multiple workbooks, but it gives no explicit when-to-use or when-not-to-use guidance. It also fails to name alternatives like aggregate_table, bulk_filter_workbooks, or query_table.

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

bulk_filter_workbooksC
Read-only

Filter comparable worksheet or table data across multiple workbooks. Uses the same filter operators and aliases as query_table.

NameRequiredDescriptionDefault
limitNo
selectNo
filtersNo
sort_byNo
row_modeNoarrays
filepathsYes
sort_descNo
header_rowNo
sheet_nameNo
table_nameNo
schema_modeNostrict
infer_schemaNo
source_sample_limitNo
include_source_columnsNo

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. Beyond that the description discloses almost nothing: it doesn't explain what happens when schemas differ across files, how schema_mode 'strict' vs 'infer_schema' changes behavior, or what source_sample_limit and include_source_columns do to the result.

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?

Two tight sentences with zero filler, and the core action is front-loaded. The brevity is efficient rather than padded, though it comes at the cost of the missing detail noted above.

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

Completeness2/5

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

For a 14-parameter, cross-workbook aggregation tool with no output schema, the definition is far too thin. Schema reconciliation behavior, output shape (concatenated rows? per-file grouping?), and error handling for mismatched workbooks are all unstated, so an agent cannot confidently predict results.

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

Parameters2/5

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

Schema description coverage is 0% across 14 parameters, so only 'filepaths' carries any documentation at all. The description's only semantic contribution is pointing to query_table for filter operator syntax; it says nothing about limit, select, row_mode, sort_by/sort_desc, header_row, schema_mode, infer_schema, or source_sample_limit, leaving most parameters undocumented in both places.

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?

States a specific verb and resource ('Filter ... worksheet or table data') plus the multi-workbook scope, and names the sibling whose semantics it mirrors (query_table). An agent can distinguish it from query_table on the single-vs-multiple-workbook axis. The adjective 'comparable' is left unexplained, which slightly weakens the boundary.

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 clause 'Uses the same filter operators and aliases as query_table' implies this is the batch counterpart to that tool, which is useful routing context. However, there is no explicit when-to-use/when-not statement and nothing about which path to take when the workbooks are not in fact comparable.

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

copy_rangeC
Destructive

Copy a range of cells to another location.

NameRequiredDescriptionDefault
dry_runNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes
source_endYes
source_startYes
target_sheetNo
target_startYes

TDQS

C2.6/5.0
Behavior2/5

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

The annotations declare destructiveHint=true, so the agent knows this is a mutation, but the description does not disclose what gets destroyed or overwritten. It does not explain that copying to an occupied target may replace existing cell contents, which is critical behavioral context for a destructive operation.

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

Conciseness3/5

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

The single sentence is front-loaded and free of filler, but it is under-specified for a seven-parameter destructive mutation. Conciseness is not the issue; the description is too thin for the tool's complexity.

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

Completeness2/5

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

With no output schema, sparse annotations, and very low schema description coverage, the description should carry more weight. It omits overwrite behavior, range format expectations, dry_run semantics, and target sheet defaults, leaving significant gaps for correct invocation.

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

Parameters2/5

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

Schema description coverage is only 14% across seven parameters, so the description must compensate—but it provides no detail on parameter meaning. It does not specify the expected range notation for source_start, source_end, or target_start, whether target_start is a top-left anchor, or what dry_run does.

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 description states a specific verb and resource ("Copy a range of cells") and a destination ("to another location"), which is clear enough to understand the operation. It does not differentiate from sibling tools like copy_worksheet or delete_range, leaving the agent to infer the distinction from names alone.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, no prerequisites (e.g., target sheet must exist), and no exclusions. The agent is told what it does but not when to choose it over sibling operations.

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

copy_worksheetC
Destructive

Copy a worksheet with tables, rules, charts, names, and layout settings.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
source_sheetYes
target_sheetYes

TDQS

C2.8/5.0
Behavior3/5

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

The description usefully discloses what content is carried over (tables, rules, charts, names, layout), which goes beyond the destructiveHint=true annotation. However, it never addresses the destructive side: whether an existing target sheet is overwritten, whether the source is consumed, or what happens on name collision — the most important behavioral question for this tool.

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

Conciseness3/5

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

A single front-loaded sentence with no filler, but its brevity comes at the cost of under-specification rather than efficiency. For a destructive copy operation with three required parameters, the one-liner is too minimal.

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

Completeness2/5

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

Given destructiveHint=true, 3 required params, 33% schema coverage, and no output schema, the description leaves critical gaps: overwrite semantics, target creation behavior, and whether permissions/protected sheets affect the copy. It names what gets copied but not how the operation behaves.

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

Parameters2/5

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

Schema description coverage is only 33% — filepath is well documented in the schema, but source_sheet and target_sheet carry names only. The description adds no meaning about these two parameters, such as whether target_sheet must be a new name or an existing sheet, so it fails to compensate for the coverage gap.

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?

States a specific verb (copy) and resource (worksheet), and enumerates what is carried over: tables, rules, charts, names, layout settings. It implicitly distinguishes itself from copy_range by scoping to the whole sheet, though it never explicitly contrasts with that sibling.

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

Usage Guidelines2/5

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

No guidance on when to use this versus copy_range or create_worksheet, and no prerequisites such as whether target_sheet must already exist or whether an existing sheet is overwritten. The agent must infer the usage context entirely.

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

create_chartA
Destructive

Create chart in worksheet from a contiguous range or explicit series.

This is the preferred chart authoring entry point; explicit-series calls are
also still available via create_chart_from_series for backward compatibility.
NameRequiredDescriptionDefault
styleNo
titleNo
widthNo
heightNo
seriesNo
x_axisNo
y_axisNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
placementNo
chart_typeYes
data_rangeNo
sheet_nameYes
target_cellNo
categories_rangeNo

TDQS

A3.5/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, but the description adds no behavioral context about what may be overwritten (e.g., an existing chart at target_cell), placement side effects, or permissions. It is consistent with the create mutation, so no contradiction, but it does not go beyond the annotation.

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

Conciseness5/5

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

Two short sentences with the primary purpose front-loaded; the sibling note is useful routing rather than padding. There is essentially no wasted text.

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

Completeness2/5

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

For a 14-parameter mutation tool with 7% schema coverage and no output schema, the description is too thin. It does not cover required chart_type values, valid series/range forms, placement collision behavior, or output/return expectations.

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

Parameters2/5

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

Schema description coverage is only 7%; only filepath is documented. The description hints at data_range and series but says nothing about chart_type values, series object shape, placement, target_cell, categories_range, style, width/height, or axes, leaving most of 14 parameters unexplained.

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?

The first sentence gives a specific verb and resource ('Create chart in worksheet') and explicitly names the two input modes, contiguous range or explicit series. It also distinguishes this tool from sibling create_chart_from_series by calling itself the preferred entry point.

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 states this is the preferred chart authoring entry point and directs legacy explicit-series use to create_chart_from_series. It does not explain when the sibling is actually required rather than merely available, nor when to prefer data_range over series, but the primary routing is explicit.

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

create_chart_from_seriesC
Destructive

Create a chart from explicit series definitions for non-contiguous ranges.

NameRequiredDescriptionDefault
styleNo
titleNo
widthNo
heightNo
seriesNo
x_axisNo
y_axisNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
placementNo
chart_typeYes
sheet_nameYes
target_cellNo
categories_rangeNo

TDQS

C2.9/5.0
Behavior2/5

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

Annotations supply only destructiveHint=true; the description adds no behavioral context at all — nothing about where the chart is inserted (placement/target_cell), whether it can overwrite an existing chart, or that it mutates the workbook file. For a 13-parameter mutation tool this leaves almost everything undisclosed.

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?

A single well-formed sentence with the differentiating qualifier front-loaded and no filler. It is efficient, though its brevity is more a symptom of under-specification than of disciplined editing.

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

Completeness2/5

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

With 13 parameters, 8% schema description coverage, no output schema, and only a destructiveHint annotation, the description would need to carry far more. It omits chart_type values, series object shape, placement semantics, and any note on mutation effects, leaving an agent unable to call it confidently.

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

Parameters2/5

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

Schema description coverage is only 8% (just filepath), and the description only vaguely gestures at two of the thirteen parameters via 'series definitions' and 'non-contiguous ranges' (i.e., series, categories_range). Required parameters like chart_type and sheet_name, plus placement, target_cell, style, and axis labels, get zero semantic guidance and chart_type has no enum.

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?

States a specific verb and resource ('Create a chart') and adds a scope qualifier ('from explicit series definitions for non-contiguous ranges') that implicitly distinguishes it from the sibling create_chart. It stops short of naming create_chart, so the contrast must be inferred rather than read.

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?

'for non-contiguous ranges' implies the selection condition, but the description never says when to prefer create_chart instead, nor does it mention prerequisites such as an existing workbook/sheet or whether the chart is appended vs. placed. Usage is inferable but not stated.

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

create_named_rangeC
Destructive

Create a workbook-level or sheet-scoped named range.

NameRequiredDescriptionDefault
nameYes
hiddenNo
dry_runNo
replaceNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
range_refYes
sheet_nameNo
scope_sheetNo

TDQS

C2.6/5.0
Behavior2/5

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

Annotations only declare destructiveHint=true; the description doesn't explain why creation is destructive or what gets destroyed (e.g., an existing range with the same name), nor does it mention the replace, hidden, or dry_run behaviors. The scope wording adds a little context about name visibility/conflicts, but the heavy behavioral burden for an 8-parameter mutation tool is largely unmet.

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

Conciseness3/5

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

A single front-loaded sentence with no filler, but it is under-specified rather than appropriately concise given the tool's parameter surface. Nothing is wasted, yet very little is said.

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

Completeness2/5

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

For an 8-parameter, destructive-annotated mutation tool with 13% schema coverage and no output schema, the description should at minimum explain overwrite/replace behavior, scope semantics, and dry_run. Almost all of that is absent.

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

Parameters2/5

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

Schema coverage is 13% — only filepath is documented in the schema. The description gestures at scope via 'workbook-level or sheet-scoped' but never clarifies how sheet_name and scope_sheet differ, nor what replace, hidden, or dry_run do. With seven undocumented parameters, the description does not compensate for the coverage gap.

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?

States a specific verb and resource ('Create ... named range') and adds a meaningful scope distinction (workbook-level vs sheet-scoped) that an agent couldn't infer from the name alone. It doesn't explicitly differentiate from siblings like list_named_ranges, inspect_named_range, or delete_named_range, but the create semantics are unambiguous.

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

Usage Guidelines2/5

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

No guidance on when to use this versus the other named-range tools, no mention of prerequisites such as whether the workbook must be open/saved, and no explanation of when to prefer sheet-scoped over workbook-level scope. The agent must infer everything from the tool name.

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

create_pivot_tableC
Destructive

Create pivot table in worksheet.

NameRequiredDescriptionDefault
rowsYes
valuesYes
columnsNo
agg_funcNosum
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
data_rangeYes
sheet_nameYes
replace_existingNo

TDQS

C2/5.0
Behavior2/5

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

Annotations declare destructiveHint=true, so the agent knows this is a mutating operation, but the description adds nothing: it doesn't say that replace_existing overwrites an existing pivot at the same location, where the resulting pivot is placed, or whether the source data is touched. For a destructive 8-parameter mutation, that is a substantial gap beyond what the annotation already says.

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

Conciseness2/5

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

One short sentence with no filler, but its brevity reflects under-specification rather than economy — the length budget is unused on the information an agent actually needs.

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

Completeness1/5

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

With 8 parameters, 5 of them required, destructiveHint=true, and no output schema, the definition needs to carry serious weight. It says nothing about parameter intent, overwrite semantics, or what is returned, so it is not sufficient to invoke this tool correctly.

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

Parameters1/5

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

Schema description coverage is only 13% (filepath alone is documented), leaving rows, values, columns, agg_func, data_range, sheet_name, and replace_existing as bare titles. The description doesn't compensate at all — no mention of expected aggregation keywords for agg_func ('sum' is only a default in the schema), the address format for data_range, or what null columns means.

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

Purpose3/5

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

States a specific verb and resource ('Create pivot table') and the target location ('in worksheet'), so the basic operation is identifiable. However, it does not distinguish this from nearby aggregation siblings such as aggregate_table, query_table, or create_table, leaving an agent to guess which one to pick.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool rather than aggregate_table, query_table, or create_table, and no prerequisites (sheet must exist, must be unprotected). The only framing is the noun 'pivot table', which the agent has to interpret on its own.

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

create_tableC
Destructive

Creates a native Excel table from a specified range of data.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
data_rangeYes
sheet_nameYes
table_nameNo
table_styleNoTableStyleMedium9

TDQS

C2.7/5.0
Behavior2/5

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

The annotations declare destructiveHint=true, but the description does not explain what may be destroyed, whether an existing table would be overwritten, or any permission/formatting side effects. With this annotation present, the description should at least acknowledge the destructive implications or conditions under which data may be replaced.

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 description is a single, front-loaded sentence with no wasted words. However, its brevity is also the source of missing behavioral and parameter context, which is captured elsewhere.

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

Completeness2/5

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

For a mutation tool with destructiveHint=true, five parameters, and no output schema, the description is too sparse. It omits overwrite behavior, table naming/style options, and any indication of what the tool returns or how it interacts with existing tables.

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

Parameters2/5

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

Schema description coverage is only 20%, and the description adds no information about table_name, table_style, or sheet_name. It only vaguely references 'a specified range of data,' leaving four of five parameters undocumented in both schema and description.

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 description states a specific verb and resource: 'Creates a native Excel table from a specified range of data.' It is clear what the tool does, but it does not distinguish this from sibling tools such as create_pivot_table, list_tables, or read_excel_as_table.

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

Usage Guidelines2/5

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

There is no guidance on when to use create_table versus alternatives like create_pivot_table, list_tables, or append_table_rows. No prerequisites, exclusions, or selection criteria are provided.

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

create_workbookC
Destructive

Create a new Excel workbook with an optional initial worksheet name.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameNoSheet1

TDQS

C2.7/5.0
Behavior2/5

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

Annotations declare destructiveHint=true, which strongly suggests the call can overwrite/clobber an existing file at filepath, yet the description never mentions overwrite behavior, error handling, or what is returned. For a file-creating mutation whose safety profile is flagged destructive, this is a meaningful omission.

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?

A single front-loaded sentence with no waste. It is short, though that brevity contributes to the gaps elsewhere rather than reflecting efficient information density.

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

Completeness2/5

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

No output schema and no annotations describing return values, so the description should say what comes back (workbook object, path, metadata) and whether an existing file is overwritten. Neither is covered, leaving the agent unable to predict side effects of a destructive-flagged call.

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

Parameters2/5

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

Schema coverage is 50%: filepath has a detailed path-handling description in the schema, but sheet_name has no description there. The description only restates that the sheet name is optional and initial; it adds no format constraints (length, invalid characters, behavior if the sheet name already exists) and doesn't reinforce the path rules.

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?

Clear verb+resource: 'Create a new Excel workbook' with an optional initial worksheet. It is distinguishable from create_worksheet (which adds a sheet to an existing workbook) by implication, though the description never explicitly contrasts them.

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

Usage Guidelines2/5

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

No guidance on when to use this versus create_worksheet, create_workbook_snapshot, or write_data_to_excel. The agent gets no conditions, prerequisites, or alternatives.

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

create_workbook_snapshotB
Destructive

Create a verified workbook snapshot without overwriting an existing file.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
snapshot_filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already flag destructiveHint=true (a file is written), and the description adds a genuinely useful constraint: an existing file will not be overwritten. However, it does not say whether the call errors or silently no-ops when the target exists, what 'verified' checks, or what permissions/paths are required.

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?

One front-loaded sentence with no filler; the non-overwrite constraint is stated up front. The only inefficiency is the unexplained qualifier 'verified', which costs a word without conveying behavior.

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

Completeness3/5

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

For a two-parameter file-writing tool with no output schema and no readOnly hint, the definition covers the essential guard (no overwrite) but omits return behavior and failure modes an agent needs to plan around. Adequate, not complete.

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 coverage is 100% and both path parameters carry detailed routing guidance (server-relative vs absolute on unrooted stdio), so the schema does the heavy lifting. The description adds no meaning about how filepath and snapshot_filepath relate or whether they may coincide — baseline 3.

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?

States a specific verb and resource ('create a verified workbook snapshot'), so the action is unambiguous. It does not differentiate itself from neighbors like create_workbook or diff_workbooks, nor does it explain what 'verified' adds, so it stops short of a 5.

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

Usage Guidelines2/5

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

The description never says when to snapshot versus copying a workbook, diffing, or committing changes via apply_workbook_changeset. There are no prerequisites or exclusions — only an implicit clue that the call is meant for recording a state before mutation.

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

create_worksheetC
Destructive

Create new worksheet in workbook.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes

TDQS

C2.6/5.0
Behavior2/5

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

The only annotation is destructiveHint=true, with no readOnlyHint, so the agent knows this mutates state — but the description adds nothing beyond that. It does not say what happens if a sheet with that name already exists, whether the file must be closed, or what write permissions are needed. For a mutation tool with minimal annotation coverage, this leaves significant behavioral gaps.

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

Conciseness3/5

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

The single sentence is front-loaded and waste-free, but its brevity comes at the cost of under-specification rather than genuine economy. It is concise without being informative.

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

Completeness2/5

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

For a file-mutating tool with no output schema, half its parameters undocumented, and no stated duplicate-name behavior, the description is too thin. An agent cannot predict success/failure conditions or the result of the call from this text alone.

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

Parameters2/5

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

Schema coverage is 50%: filepath has a rich description, but sheet_name is completely bare. The tool description does not compensate — it says nothing about sheet_name uniqueness, the 31-character Excel limit, or invalid characters, which are the most common failure modes for this operation.

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 description gives a specific verb ('Create') and resource ('new worksheet in workbook'), so the agent knows exactly what the tool does. It does not, however, differentiate itself from siblings like copy_worksheet, rename_worksheet, or create_workbook, which all touch sheets in the same workbook.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus copy_worksheet (to duplicate an existing sheet) or create_workbook (when no workbook exists yet), and no prerequisites are stated. The agent must infer the usage context entirely from the tool name.

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

cross_workbook_lookupC
Read-only

Enrich one workbook dataset from matching rows in one or more lookup workbooks.

NameRequiredDescriptionDefault
limitNo
selectNo
row_modeNoarrays
join_typeNoleft
lookup_keyNo
match_modeNofirst
source_keyYes
schema_modeNostrict
infer_schemaNo
lookup_selectNo
case_sensitiveNo
lookup_sort_byNo
source_filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
lookup_filepathsYes
lookup_sort_descNo
lookup_header_rowNo
lookup_sheet_nameNo
lookup_table_nameNo
source_header_rowNo
source_sheet_nameNo
source_table_nameNo
lookup_sample_limitNo
include_lookup_match_countNo
include_lookup_source_columnsNo

TDQS

C2.7/5.0
Behavior2/5

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

The readOnlyHint annotation only confirms this is a non-mutating read, so the description carries the rest of the burden and discloses almost nothing. With 24 parameters controlling join_type, match_mode, schema_mode, and row_mode -- all of which materially change behavior -- plus no output schema, the description gives no insight into what happens with multiple lookup workbooks, duplicate matches, or schema mismatches.

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?

A single front-loaded sentence with no padding and the core operation stated first. It is efficient, though the extreme brevity for a 24-parameter tool suggests under-specification rather than genuine editorial discipline.

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

Completeness2/5

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

Given 24 parameters, 4% schema coverage, no output schema, and only a readOnlyHint annotation, the definition leaves far too much unspecified. An agent cannot determine what the enriched result looks like, how multiple lookups compose, or how the mode parameters interact.

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

Parameters2/5

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

Schema description coverage is 4%: only source_filepath and lookup_filepaths items carry descriptions, leaving roughly 22 parameters documented by title alone. The phrase 'one or more lookup workbooks' faintly echoes that lookup_filepaths is a list, but the description adds nothing about join_type, match_mode, or the select/limit parameters.

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 description pairs the specific verb 'Enrich' with the resource 'workbook dataset' and clarifies that the enrichment comes from matching rows in lookup workbooks, so it reads as a join/lookup operation. It is distinguishable from siblings such as union_tables or aggregate_table, though it never names an alternative explicitly.

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

Usage Guidelines2/5

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

There is no statement of when to use this instead of union_tables, query_table, or bulk_filter_workbooks, and no prerequisites or exclusions. The agent must infer the tool's role from the name and description alone.

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

delete_named_rangeC
Destructive

Delete a workbook-level or sheet-scoped named range.

NameRequiredDescriptionDefault
nameYes
dry_runNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
scope_sheetNo

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, so the safety profile is carried structurally. The description adds only the scope distinction and says nothing about irreversibility, error behavior when the name is absent, or what a dry run reports — the key behavioral affordances an agent needs for a destructive call.

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

Conciseness5/5

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

A single front-loaded sentence with no filler; the verb and its object appear immediately. Nothing is redundant or padded.

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

Completeness2/5

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

For a destructive mutation with four parameters, 25% schema coverage, and no output schema, the description is too thin. It omits dry_run, missing-range behavior, and confirmation/error semantics, leaving the agent to guess on the risky parts of the call.

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

Parameters2/5

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

Schema description coverage is only 25% (only filepath is documented), so the description must compensate. It partially explains scope_sheet by contrasting 'workbook-level' versus 'sheet-scoped', but leaves 'name' matching semantics and especially 'dry_run' — the most important parameter for a destructive tool — entirely unexplained.

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?

States a specific verb and resource (delete a named range) and adds that both workbook-level and sheet-scoped ranges can be targeted. It does not explicitly route against siblings like create_named_range, inspect_named_range, or list_named_ranges, but 'named range' is specific enough that confusion is unlikely.

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

Usage Guidelines2/5

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

The description never says when to use this versus list_named_ranges/inspect_named_range first, nor any preconditions (must the range exist, must the sheet exist, does a dry run need to precede it). Usage is only inferable from the verb itself.

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

delete_rangeC
Destructive

Delete a range of cells and shift remaining cells.

NameRequiredDescriptionDefault
dry_runNo
end_cellYes
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes
start_cellYes
shift_directionNoup

TDQS

C2.9/5.0
Behavior3/5

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

The destructiveHint annotation already flags this as a destructive operation. The description adds useful behavioral context by saying remaining cells shift, but it does not explain the shift_direction option, the dry_run option, or whether the deletion is reversible.

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 description is a single efficient sentence with the core action front-loaded. It does not waste words, though its brevity contributes to gaps in usage and parameter guidance.

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

Completeness2/5

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

This is a destructive mutation tool with six parameters, low schema coverage, and no output schema. The description omits important details about shift direction, dry-run behavior, cell address format, and when to choose this tool over row/column deletion siblings.

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

Parameters2/5

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

Schema description coverage is only 17%, with just filepath documented in the schema. The description does not explain start_cell, end_cell, sheet_name, shift_direction, or dry_run, so it fails to compensate for the sparse schema documentation.

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 description states a specific verb and resource: delete a range of cells. It also notes that remaining cells shift, which clarifies the effect. It is clear on its own but does not distinguish itself from sibling tools such as delete_sheet_rows or delete_sheet_columns.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives like delete_sheet_rows, delete_sheet_columns, or delete_worksheet. It also provides no exclusions or prerequisites for range deletion.

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

delete_sheet_columnsC
Destructive

Delete one or more columns starting at the specified column.

NameRequiredDescriptionDefault
countNo
dry_runNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
start_colYes
sheet_nameYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, so the safety profile is covered; the description adds nothing beyond it. It doesn't say that remaining columns shift left, that data in the deleted columns is unrecoverable, or that a `dry_run` option exists to preview the effect.

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?

A single front-loaded sentence with no filler. It is efficient, though the brevity is a byproduct of omission rather than disciplined editing.

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

Completeness2/5

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

A destructive, 5-parameter mutation tool with no output schema and 20% parameter coverage needs more: irreversibility, dry_run behavior, and the column-shift side effect are all absent. An agent could call it correctly on syntax but not safely.

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 coverage is only 20% (only `filepath` is documented), so the description carries most of the burden. It does explain `start_col` and `count` ('one or more columns starting at ...'), but leaves `sheet_name` and critically `dry_run` completely unexplained.

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?

States a specific verb and resource ('Delete ... columns') plus the positional semantics ('starting at the specified column'), which distinguishes it from insert_columns and delete_sheet_rows. It stops short of naming alternatives explicitly, but the operation is unambiguous.

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

Usage Guidelines2/5

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

No guidance on when to use this versus delete_range, delete_sheet_rows, or insert_columns, and no prerequisites (e.g., worksheet protection, whether the sheet must be unprotected). The one decision that matters most for a destructive tool — whether to dry-run first — is never mentioned.

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

delete_sheet_rowsC
Destructive

Delete one or more rows starting at the specified row.

NameRequiredDescriptionDefault
countNo
dry_runNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
start_rowYes
sheet_nameYes

TDQS

C2.9/5.0
Behavior3/5

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

The annotations already disclose destructiveHint=true, so the destructive nature is covered. The description adds useful scope by saying it deletes one or more rows starting at start_row, but it does not explain irreversibility, whether dry_run previews changes, or any permission requirements.

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 description is a single front-loaded sentence with no wasted words. However, for a destructive five-parameter tool, that brevity leaves significant omissions, so it is concise but arguably too sparse.

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

Completeness2/5

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

With no output schema and a destructive operation, the description should clarify dry_run behavior, required filepath/sheet_name context, and consequences of deletion. It leaves those gaps despite annotations only covering destructiveness.

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

Parameters2/5

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

Schema description coverage is only 20%, and the description compensates only partially by implying that count and start_row define a contiguous row deletion. It does not clarify dry_run, sheet_name, or how filepath should be supplied beyond the schema's filepath note.

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 description states a specific verb and resource: delete rows, with scope 'starting at the specified row' and 'one or more rows.' It distinguishes itself from delete_sheet_columns by operating on rows, but it does not explicitly name or contrast sibling tools such as delete_range or insert_rows.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives like delete_range, delete_sheet_columns, or insert_rows. It also omits prerequisites or conditions such as confirming a destructive operation or using dry_run first.

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

delete_worksheetC
Destructive

Delete worksheet from workbook.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes

TDQS

C2.4/5.0
Behavior2/5

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

The destructiveHint annotation already flags this as a write/destroy operation. The description adds nothing further: it doesn't say deletion is irreversible, whether data in the sheet is lost, whether it works on the last remaining sheet, or whether the file on disk is modified. For a destructive operation, that is a meaningful gap even with annotations present.

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

Conciseness3/5

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

The single sentence is front-loaded and free of waste, but it is under-specified rather than concise — brevity here comes at the cost of missing behavioral and parameter detail.

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

Completeness2/5

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

A destructive, two-parameter tool with no output schema and half its parameters undocumented in the schema needs the description to carry more: irreversibility, path handling expectations, and the meaning of sheet_name. Almost all of that is absent.

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

Parameters2/5

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

Schema coverage is 50%: filepath is well documented in the schema, but sheet_name has no schema description at all. The description never mentions either parameter, so it does not compensate for the undocumented sheet_name (the worksheet tab to remove).

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

Purpose3/5

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

"Delete worksheet from workbook" names a specific verb and resource, so the basic action is unambiguous. But it adds nothing beyond the tool name and title ("Delete Worksheet"), and does not distinguish it from siblings like delete_range, delete_named_range, or delete_sheet_rows that also destroy content.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus delete_range, delete_sheet_rows, or rename_worksheet, and no prerequisites such as whether the workbook must be saved or the sheet unprotected. The agent must infer all conditions for use.

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

describe_datasetC
Read-only

Summarize a worksheet or native Excel table for agent-friendly orientation.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
header_rowNo
sheet_nameNo
table_nameNo
sample_rowsNo
read_boundary_modeNodefault

TDQS

C2.9/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes that this is a safe read operation, so the description does not need to restate that. It adds that the tool produces a summary for orientation, but it omits behavioral details such as how sample_rows is used, what the summary contains, or how sheet_name and table_name are resolved.

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 description is a single front-loaded sentence with no wasted words. It is appropriately concise, though the phrase 'agent-friendly orientation' is somewhat vague.

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

Completeness2/5

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

This is a six-parameter read tool with only one documented parameter, no output schema, and many overlapping sibling tools. The description does not provide enough context about output, parameter behavior, or tool selection to be complete for an agent.

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

Parameters2/5

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

Schema description coverage is only 17%, with just the filepath parameter documented. The description hints that the tool works with either a worksheet or a native Excel table, but it does not explain header_row, sample_rows, read_boundary_mode, or the precedence between sheet_name and table_name, so it does not compensate for the low schema coverage.

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 description gives a specific verb and resource: 'Summarize a worksheet or native Excel table.' It is clear enough to distinguish this from raw data-reading tools, but it does not differentiate itself from close siblings such as describe_sheet_layout, get_workbook_metadata, or profile_workbook.

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

Usage Guidelines2/5

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

The phrase 'for agent-friendly orientation' implies a use case, but there is no explicit guidance on when to choose this tool over alternatives. No sibling tools are named, and no when-not-to-use conditions are given.

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

describe_sheet_layoutC
Read-only

Return a structural worksheet layout summary for safe dashboard-style edits.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes
sample_limitNo
free_canvas_colsNo
free_canvas_rowsNo
free_canvas_limitNo

TDQS

C2.4/5.0
Behavior2/5

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

The readOnlyHint annotation already tells the agent this is a safe read, and the description's "safe" adds nothing beyond that. It does not disclose what the summary contains, how the free-canvas sampling behaves, or any limits, so almost no behavioral context is added on top of structured fields.

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

Conciseness3/5

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

A single short sentence that is front-loaded and wastes no words, but its brevity is under-specification rather than efficiency. There is room to spend words on the return shape and parameters without bloat.

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

Completeness2/5

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

Six parameters, no output schema, and 17% schema coverage mean the description has to explain both inputs and what the layout summary reports. It does neither, leaving the agent unable to predict the response or the effect of the free-canvas and sample settings.

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

Parameters1/5

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

Schema coverage is 17% – only filepath is documented. Five parameters (sheet_name, sample_limit, free_canvas_cols, free_canvas_rows, free_canvas_limit) have no meaning given anywhere, and the description supplies none of the missing semantics. With low coverage the description carries the burden and fails entirely.

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

Purpose3/5

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

"Return a structural worksheet layout summary" states a verb and resource, but "structural layout summary" is opaque about what is actually returned (dimensions? merged cells? occupied regions?). It also fails to differentiate from nearby siblings like describe_dataset, get_workbook_metadata, or inspect_workbook_contract, which an agent could plausibly pick instead.

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?

"for safe dashboard-style edits" implies the workflow (inspect before laying out a dashboard), which is genuine but indirect usage guidance. There are no explicit when-not conditions and no named alternatives, so the agent must infer the pre-flight positioning itself.

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

detect_circular_dependenciesC
Read-only

Detect circular workbook formula dependencies, including self-references.

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

TDQS

C2.9/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe non-mutating operation, so the description need not re-establish that. It adds the useful scope detail that self-references count as circular, but says nothing about whether the scan covers the whole workbook or a single sheet, how results are reported, or cost on large files.

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?

A single front-loaded sentence with no filler and the key scope qualifier placed immediately. Its brevity is close to under-specification rather than elegance, but nothing is wasted.

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

Completeness2/5

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

With no output schema, the description carries the burden of explaining the return shape (list of cycles? paths? cells?) and it does not. Combined with an undocumented sample_limit and no statement of scan scope, an agent cannot fully predict what a call yields.

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

Parameters2/5

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

Schema coverage is only 50%: filepath is well documented in the schema, but sample_limit has no description anywhere. The tool description says nothing about what sample_limit controls or that its default of 25 bounds the reported cycles, leaving a real gap the description should have closed.

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?

Specific verb (detect) plus resource (circular workbook formula dependencies) and an explicit scope extension (including self-references). It does not, however, distinguish itself from nearby diagnostic siblings such as validate_formula_syntax, inspect_formula, or audit_workbook, which an agent could plausibly reach for instead.

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

Usage Guidelines2/5

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

The description gives no when-to-use context, no prerequisites, and no routing to alternatives. It never says whether this is the right tool for a full audit versus a single-formula check, even though validate_formula_syntax and audit_workbook are available siblings.

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

diff_workbooksB
Read-only

Diff two workbook files and report structural changes plus sampled cell-value changes.

NameRequiredDescriptionDefault
sample_limitNo
after_filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
before_filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
include_cell_changesNo

TDQS

B3.1/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe, non-mutating operation. The description adds one genuine behavioral trait beyond annotations: cell-value changes are "sampled" rather than exhaustive, which explains why results may be partial. It does not state whether both workbooks must be open, what the sampling default is, or how the diff handles renamed/added sheets.

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

Conciseness5/5

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

A single front-loaded sentence with no filler; the resource and the two output categories appear immediately. Nothing is redundant with the title or annotations.

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

Completeness3/5

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

With no output schema, the description carries the burden of explaining return shape, yet it only broadly characterizes results as structural plus sampled value changes without saying how changes are grouped or reported. For a two-file comparison tool with 4 parameters, this is adequate but leaves an agent guessing about the result format.

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

Parameters2/5

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

Schema coverage is only 50%: the two filepath parameters are documented (server-path conventions, absolute vs relative), but sample_limit and include_cell_changes have no schema descriptions at all. The description's word "sampled" hints at sample_limit's purpose but never explains what is counted, the default of 25, or what include_cell_changes=false suppresses, so the description fails to compensate for the coverage gap.

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 description uses a specific verb ("Diff") with a clear resource ("two workbook files") and states the output categories ("structural changes plus sampled cell-value changes"). No sibling tool performs a file-to-file diff, so an agent can distinguish it from inspect_workbook_contract or explain_recipe_delta, though the description never names that distinction explicitly.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus the many inspection siblings (inspect_workbook_contract, profile_workbook, audit_workbook), nor on prerequisites such as needing both files accessible server-side. The only usage context lives in the schema descriptions for the filepath parameters, not in the tool description.

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

evaluate_workbook_scenariosA
Destructive

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.
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

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.

explain_formula_cellB
Read-only

Explain a formula cell's direct references, upstream formula chain, and downstream dependents.

NameRequiredDescriptionDefault
cellYes
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
max_depthNo
sheet_nameYes

TDQS

B3/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, so the description's burden is lower. It adds value by disclosing the analysis scope (direct refs plus upstream and downstream traversal), which is genuine context beyond the annotation. It says nothing about traversal cost on large workbooks, how cycles are handled, or what the explanation output looks like.

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?

A single front-loaded sentence with no filler, and the three analysis outputs are listed in a logical order. It is arguably undersized for a four-parameter traversal tool, but nothing in it is wasteful.

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

Completeness3/5

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

With no output schema, the description must carry return-value information, and it does partially by naming the three result categories. It still leaves max_depth behavior, cycle handling, and output shape unspecified, which is a meaningful gap for a graph-traversal explainer.

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

Parameters2/5

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

Schema description coverage is only 25% – only filepath carries documentation. The description never mentions cell, sheet_name, or max_depth, so it fails to compensate. max_depth is especially consequential (it bounds the upstream chain walk) and is completely unexplained in both schema and description.

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 description names a specific verb (Explain) and resource (formula cell) and enumerates the three things it returns: direct references, upstream formula chain, downstream dependents. That is far more informative than the bare name. It does not, however, contrast itself against close siblings such as inspect_formula, analyze_range_impact, or detect_circular_dependencies, so an agent must infer the boundary.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool versus the many adjacent inspection tools in the sibling list. No prerequisites, no exclusions, and no alternative is named. The agent is left to guess between this and inspect_formula or detect_circular_dependencies.

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

explain_recipe_deltaA
Read-only

Explain sum/count changes by source identity, without modifying either file.

Recompute one shared Recipe v1 on two distinct .xlsx source versions. Requires
nonblank unique key_fields (exact headers) on every source data row, even if
excluded by recipe filters. Supports at most 8 metrics, all sum/count.
Returns added/removed/updated contributions, group changes and bounded physical
source-row examples. Numeric evidence uses exact decimal strings. Recipe float
differences are explicit numeric_adjustment values, not business explanations.

Optional metric selects one exact output alias; group must give all group_by
fields with exact literal values. All calculations/checks remain complete;
sample_limit (1-10) only bounds examples and omitted contributions are reported.
Pin both source sha256 values and recipe_sha256 from a previous response for
repeatable drilldown. The explanation_token is an integrity fingerprint, not
authorization or a commit token. Does not validate saved report cells, infer
historical recipe definitions, evaluate formulas or establish business causes.
Limits per source: 50,000 table cells, 64 columns, 10,000 recomputed result cells.
NameRequiredDescriptionDefault
groupNo
metricNo
recipeYes
key_fieldsYes
sample_limitNo
after_filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
before_filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
expected_after_sha256No
expected_before_sha256No
expected_recipe_sha256No

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and the description reinforces it ('without modifying either file'), then adds material context the annotations can't carry: hard limits (50,000 cells, 64 columns, 10,000 result cells per source), exact-decimal numeric evidence, the distinction between numeric_adjustment and business explanation, and the clarification that explanation_token is an integrity fingerprint, not authorization or a commit token.

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 organized into prerequisites, outputs, optional-parameter behavior, pinning, and limits. It is dense for a 10-parameter tool and several sentences pack two or three clauses with semicolons, but almost nothing is filler.

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 complex tool with no output schema it still describes the return shape (added/removed/updated contributions, group changes, bounded source-row examples, omitted contributions reported) and enumerates operational limits. The remaining gap is that the required `recipe` object — a free-form nested structure — has no field-level guidance anywhere, which is a real risk given 20% schema coverage.

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

Parameters5/5

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

Schema coverage is only 20%, so the description must compensate, and it does for nearly every parameter: key_fields must be exact headers present and unique on every row, metric selects one exact output alias, group must supply all group_by fields with exact literal values, sample_limit is bounded 1-10 and only affects examples, and the expected_*_sha256 parameters are described via the pin-from-previous-response guidance. Only the shape of the nested recipe object remains unspecified.

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?

States a specific verb and resource plus scope: 'Explain sum/count changes by source identity, without modifying either file' and 'Recompute one shared Recipe v1 on two distinct .xlsx source versions.' It implicitly separates itself from diff_workbooks and run_workbook_recipe by requiring two source versions plus a shared recipe, but it never names an alternative explicitly.

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 clear preconditions (nonblank unique key_fields on every row, at most 8 sum/count metrics, sha256 pinning from a previous response for repeatable drilldown) and an explicit exclusion list: does not validate saved report cells, infer historical recipes, evaluate formulas, or establish business causes. It stops short of naming a sibling to use instead when those exclusions apply.

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

find_free_canvasC
Read-only

Suggest free worksheet slots for charts or dashboard blocks.

NameRequiredDescriptionDefault
limitNo
widthNo
heightNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
min_colsNo
min_rowsNo
sheet_nameYes
origin_cellNoA1
search_rowsNo
padding_rowsNo
search_columnsNo
padding_columnsNo

TDQS

C2.4/5.0
Behavior2/5

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

readOnlyHint=true already tells the agent this is a safe read, and 'Suggest' is consistent with that. Beyond the annotation the description adds nothing: it does not define what counts as 'free' (empty cells, merged regions, padded gaps) or how candidates are ranked, which is the core behavioral question for this tool.

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

Conciseness3/5

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

A single front-loaded sentence with zero filler, so nothing is wasted. But at 12 parameters and 8% schema coverage, this level of brevity is under-specification rather than effective concision.

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

Completeness1/5

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

For a 12-parameter tool with almost no schema descriptions and no output schema, the description should explain search semantics, sizing constraints, and what a returned 'slot' looks like. It covers none of that, leaving an agent unable to invoke it correctly without guessing.

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

Parameters1/5

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

Schema description coverage is only 8% (only filepath is documented), and the description explains none of the 12 parameters. The meaning of width/height vs min_cols/min_rows, origin_cell, search_rows/search_columns, and padding_rows/padding_columns is left entirely to bare property names.

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?

States a specific verb and resource ('Suggest free worksheet slots') plus the intended use case ('charts or dashboard blocks'), so the agent knows what it returns. It does not differentiate itself from the closest sibling, describe_sheet_layout, which likely overlaps in layout-awareness.

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

Usage Guidelines2/5

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

The use case implies when it is useful (before placing a chart or dashboard block), but there is no explicit when-to-use/when-not guidance, no prerequisites (workbook open, sheet exists), and no mention of alternatives such as describe_sheet_layout.

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

format_rangeC
Destructive

Apply formatting to a range of cells. Colors accept RRGGBB, #RRGGBB, AARRGGBB, or #AARRGGBB.

NameRequiredDescriptionDefault
boldNo
italicNo
dry_runNo
bg_colorNo
end_cellNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
alignmentNo
font_sizeNo
underlineNo
wrap_textNo
font_colorNo
protectionNo
sheet_nameYes
start_cellYes
merge_cellsNo
border_colorNo
border_styleNo
number_formatNo
include_changesNo
conditional_formatNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations declare destructiveHint=true, so the safety profile is partly covered. But the description never warns that applying formatting overwrites existing cell formatting, never explains what `dry_run` previews, and never mentions whether `include_changes` returns a diff — all material for a 20-parameter mutation tool. The color-syntax note is useful but is parameter-level detail, not behavioral disclosure.

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?

Two sentences, zero filler, action front-loaded before the format detail. The efficiency is good, though the brevity edges into under-specification for a tool this large.

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

Completeness2/5

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

A 20-parameter destructive mutation with 5% schema coverage, no output schema, and several nested-object params (protection, conditional_format) is not adequately explained by two sentences. An agent could invoke it, but would be guessing on most of the surface area and on the dry-run/change-reporting workflow.

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

Parameters2/5

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

Schema description coverage is 5% across 20 parameters, so the description carries nearly the full burden and mostly fails it. It clarifies color string formats (RRGGBB / #RRGGBB / AARRGGBB / #AARRGGBB) for bg_color, font_color, and border_color, but leaves alignment, number_format, border_style, protection, conditional_format, merge_cells, dry_run, and include_changes entirely unexplained.

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?

States a specific verb and resource ("Apply formatting to a range of cells") that an agent can act on immediately. However, it does nothing to distinguish this from the near-identical sibling `format_ranges`, so an agent has no basis for choosing between the singular and plural variants.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no mention of when to prefer `format_ranges`, `copy_range`, or `read_range_formatting` instead. The `dry_run` parameter strongly implies a preview workflow but the description never says to preview before applying, which is exactly the kind of guidance a destructive tool needs.

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

format_rangesB
Destructive

Apply formatting to multiple ranges in a single workbook pass. Colors accept RRGGBB, #RRGGBB, AARRGGBB, or #AARRGGBB.

NameRequiredDescriptionDefault
rangesYes
dry_runNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes
include_changesNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, and the description adds the useful note that all ranges are applied in one pass. However, it never says that existing formatting is overwritten, what dry_run actually previews, or what include_changes returns — the operationally relevant details for a destructive mutation.

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

Conciseness5/5

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

Two sentences, zero padding, with the core action front-loaded and the format constraint following. Nothing is wasted.

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

Completeness3/5

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

No output schema exists, so the description should explain return/preview behavior for a destructive tool, and it does not. Combined with an undocumented ranges item structure and two undocumented flags, an agent can call it but cannot confidently predict the payload shape or effects.

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

Parameters2/5

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

Schema coverage is only 20% (filepath only), so the description must carry the load. It adds genuine value by listing accepted color encodings (RRGGBB, #RRGGBB, AARRGGBB, #AARRGGBB), but the central 'ranges' array is a bare object with additionalProperties:true and no documented item shape, and dry_run/include_changes are left unexplained.

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?

States a specific verb and resource ('Apply formatting to multiple ranges') and scopes it to 'a single workbook pass'. The word 'multiple' implicitly distinguishes it from the single-range sibling format_range, though the sibling is never named.

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?

Usage is only implied: an agent can infer this is the batch alternative to format_range. There is no explicit when-to-use, no when-not, and no mention of the sibling it competes with or of prerequisites such as sheet existence or protection.

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

freeze_panesC
Destructive

Set or clear worksheet freeze panes.

NameRequiredDescriptionDefault
cellNo
dry_runNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes
include_changesNo

TDQS

C2.7/5.0
Behavior2/5

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

The destructiveHint annotation already flags that this tool changes worksheet state, and the description aligns with that by mentioning set or clear. However, it adds little behavioral context: it does not explain what is destroyed, how clearing works, or what dry_run and include_changes do.

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 description is a single front-loaded sentence with no wasted words. It is appropriately concise, though its brevity contributes to the broader underspecification of the tool.

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

Completeness2/5

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

For a five-parameter mutation tool with only 20% schema description coverage and no output schema, the description is too thin. It omits how to clear panes, what cell format to use, and what dry_run or include_changes change about behavior.

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

Parameters2/5

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

Schema description coverage is only 20%, so the description must compensate for undocumented parameters, but it provides no parameter-level meaning. It does not explain that cell may control the freeze position or that a null/empty cell may clear panes, and it is silent on dry_run and include_changes.

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 description states a specific verb and resource: setting or clearing worksheet freeze panes. It is clear enough to distinguish this tool from most siblings, though it does not clarify how freeze panes differ from other worksheet layout tools.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this tool versus alternatives, nor any prerequisites. The only usage signal is the phrase 'set or clear,' which implies mutation but leaves the choice conditions unstated.

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

get_data_validation_infoB
Read-only
Get all data validation rules in a worksheet.

This tool helps identify which cell ranges have validation rules
and what types of validation are applied.

Args:
    filepath: Path to Excel file
    sheet_name: Name of worksheet
    
Returns:
    JSON string containing all validation rules in the worksheet
NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes

TDQS

B3.2/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes that this is a safe read operation. The description adds that it returns a JSON string containing all validation rules, but it does not describe error behavior, empty worksheets, permission needs, or output structure in any depth.

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 description is short and front-loads the core purpose before listing arguments and return value. The middle sentence is somewhat redundant with the opening, but the overall structure is efficient and easy to scan.

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

Completeness3/5

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

For a simple read-only tool, the description gives enough to understand the basic operation and that the result is a JSON string. However, without an output schema it could do more to describe the returned validation-rule structure, and it leaves the overlap with inspect_data_validation_rules unresolved.

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

Parameters2/5

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

Schema description coverage is only 50%. The filepath parameter is well described in the schema, but sheet_name has no schema description and the tool description only restates it as 'Name of worksheet', which adds no meaningful semantic detail. The description does not compensate for the missing parameter guidance.

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 description clearly states a specific verb and resource: get all data validation rules in a worksheet. It also explains that the result identifies validated cell ranges and validation types. However, it does not distinguish itself from the very similar sibling tool inspect_data_validation_rules.

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?

Usage is implied by saying it helps identify which ranges have validation rules and what validation types are applied. There is no explicit when-to-use guidance, no exclusions, and no comparison to alternatives such as inspect_data_validation_rules or validate_excel_range.

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

get_merged_cellsC
Read-only

Get merged cells in a worksheet.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes

TDQS

C2.9/5.0
Behavior2/5

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

readOnlyHint=true already tells the agent this is a safe read, so the description is not required to carry the safety burden, but it adds nothing beyond that: no indication of what the return looks like (cell ranges? addresses?), whether unmerged sheets return empty, or how merged regions are scoped. Effectively a restatement of the name.

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?

One short, front-loaded sentence with no filler. It errs toward under-specification rather than verbosity, but every word present earns its place.

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

Completeness2/5

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

With no output schema and no description of the result shape, an agent cannot know whether this returns region coordinates, addresses, or a count. For a two-parameter read tool with annotations covering safety, the description should at least sketch the return value.

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 coverage is 50%: filepath carries detailed server-path guidance while sheet_name is bare. The description's phrase 'in a worksheet' weakly signals that sheet_name scopes the query, but adds no format or validity details, so it only marginally compensates for the undocumented parameter.

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?

Specific verb+resource ('Get merged cells in a worksheet') that clearly identifies a read operation on merge metadata. It is distinguishable from the sibling merge_cells/unmerge_cells by the 'get' verb, though it never names those siblings explicitly.

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

Usage Guidelines2/5

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

No statement of when to call this versus alternatives such as describe_sheet_layout, read_range_formatting, or unmerge_cells. An agent must infer usage from the name and the fact that a sheet_name is required.

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

get_workbook_metadataA
Read-only

Get workbook metadata; sheets lists TABS, not native table names.

Table inventory is not included. A missing table name in sheets does NOT mean
the table is absent. Use list_tables without sheet_name to verify named sources.
NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
include_rangesNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so safety is covered; the description adds genuinely useful context beyond that — it discloses what the output does NOT contain (table inventory) and warns against a specific false inference. It does not describe return shape or cost/latency, which keeps it from a 5.

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 critical disambiguation is front-loaded in the first clause and the warning about missing table names follows immediately. Three short sentences, no filler, though the formatting is slightly choppy.

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

Completeness3/5

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

With no output schema and no annotations beyond readOnlyHint, the description carries the burden of describing what 'metadata' returns, yet it only covers the sheets field and omits include_ranges entirely. An agent can avoid the main pitfall but still doesn't know what it will receive.

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

Parameters2/5

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

Schema coverage is only 50%: filepath is richly documented in the schema, but include_ranges has no description anywhere, and the tool description adds nothing about either parameter. Since half the parameters are undocumented both places, the description should have explained what include_ranges yields.

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?

States a specific verb and resource ('Get workbook metadata') and immediately clarifies that 'sheets' means tab names, not native tables — a distinction no sibling name conveys. It stops short of saying what else the metadata contains (dimensions, properties, counts), so the scope is only partially pinned down.

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 an explicit negative rule ('a missing table name in sheets does NOT mean the table is absent') plus the corrective action ('Use list_tables without sheet_name to verify named sources'). It does not address when to prefer list_all_sheets or describe_sheet_layout, leaving a routing gap among similar-sounding siblings.

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

get_worksheet_protectionC
Read-only

Get worksheet protection status and option flags.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so safety is covered. The description adds only that the result includes option flags, but does not say which flags, what an unprotected sheet returns, or what happens with an invalid sheet name — limited added value against the annotation baseline.

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?

A single front-loaded sentence with no filler. It is efficient, though arguably under-specified rather than maximally useful.

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

Completeness2/5

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

No output schema exists, so the description carries the burden of explaining return values — yet 'option flags' is left undefined (protect contents? protect objects? password-protected?). Combined with undocumented sheet_name, an agent cannot fully anticipate the response.

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

Parameters2/5

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

Schema coverage is 50%: filepath is documented in the schema, but sheet_name has no description anywhere. The tool description offers no parameter guidance to compensate for that gap (e.g., that sheet_name must match an existing sheet).

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?

States a specific verb and resource (get worksheet protection status) plus what is returned (option flags). It is clear which resource it targets, though it never names the write counterpart set_worksheet_protection that an agent could confuse it with.

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

Usage Guidelines2/5

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

No when-to-use guidance is given: nothing says to call this before set_worksheet_protection or to check protection before attempting writes. The read-only nature is implied by the name but the alternative tool is never mentioned.

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

insert_columnsC
Destructive

Insert one or more columns starting at the specified column.

NameRequiredDescriptionDefault
countNo
dry_runNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
start_colYes
sheet_nameYes

TDQS

C2.6/5.0
Behavior2/5

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

Annotations only flag destructiveHint=true; the description adds nothing about the key behavioral consequence that existing cells shift right and referencing formulas may change. It also never mentions the available dry_run safeguard or default count of 1, both of which materially affect how an agent should call a destructive mutation.

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

Conciseness3/5

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

A single front-loaded sentence with zero waste, but for a 5-parameter destructive tool it is under-specified rather than tight. Brevity here costs correctness.

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

Completeness2/5

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

With no output schema, sparse schema docs, and only a destructiveHint annotation, the description should carry far more: sheet targeting, shift semantics, dry_run usage, and indexing conventions. It leaves all of that to guesswork.

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

Parameters2/5

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

Schema description coverage is only 20% (only filepath is documented), so the description must compensate and does not: start_col's indexing base (0- vs 1-based), count's default of 1, and dry_run's purpose are all left unexplained.

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?

States a specific verb+resource ('Insert ... columns') and its insertion point ('starting at the specified column'), which clearly separates it from sibling delete_sheet_columns and insert_rows. It omits the worksheet/file scope, but the resource is unmistakable.

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

Usage Guidelines2/5

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

No guidance on when to use this versus insert_rows, delete_sheet_columns, or write_data_to_excel, and no mention of prerequisites such as sheet protection or whether formulas in shifted columns are adjusted. The agent must infer all routing.

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

insert_rowsC
Destructive

Insert one or more rows starting at the specified row.

NameRequiredDescriptionDefault
countNo
dry_runNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
start_rowYes
sheet_nameYes

TDQS

C2.9/5.0
Behavior3/5

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

The destructiveHint=true annotation already signals a mutating operation, and the description adds the key insertion semantics (rows are inserted at a position, so surrounding content shifts). However, it does not disclose what happens to formatting/formulas/merged cells below the insertion point, nor the meaning of dry_run, which matters for a destructive 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?

A single front-loaded sentence with no filler; the anchor ('starting at the specified row') comes after the action. It is efficient, though the brevity is partly under-specification rather than pure economy.

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

Completeness2/5

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

For a destructive 5-parameter mutation with no output schema and near-zero schema description coverage, the description omits dry_run, count semantics, and the fate of content at and below the insertion point. An agent cannot safely or precisely invoke it from what is given.

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

Parameters2/5

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

Schema description coverage is only 20%: only filepath is documented. The description does nothing to explain start_row, sheet_name, count, or the safety-relevant dry_run flag, so four of five parameters rely on bare titles and defaults.

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 description pairs a specific verb ('Insert') with a specific resource ('rows') and states scope ('one or more') plus the anchor ('starting at the specified row'). This distinguishes it from delete_sheet_rows and insert_columns, though it never names a sibling explicitly.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus append_table_rows, write_data_to_excel, or append_excel_table_rows, nor any prerequisite or exclusion. The agent must infer the choice from the name alone.

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

inspect_conditional_format_rulesB
Read-only

Inspect worksheet conditional formatting rules with stable rule indexes.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes
broken_onlyNo

TDQS

B3/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes that this is a safe read operation. The description adds that rule indexes are stable, which is useful behavioral context for follow-up operations, but it does not explain what 'stable' means, whether broken rules are included by default, or what the return shape looks like.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no filler. It efficiently states the operation and the key trait of stable rule indexes.

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

Completeness2/5

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

With no output schema and low parameter description coverage, the description is too sparse for an inspection tool. It omits parameter semantics, return structure, and how stable indexes should be used with related mutation tools.

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

Parameters2/5

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

Schema description coverage is only 33%: filepath is documented, but sheet_name and broken_only are not. The description mentions 'worksheet' but adds no meaning for the parameters, especially the broken_only filtering option.

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 description states a specific verb and resource: inspecting worksheet conditional formatting rules. Adding 'stable rule indexes' clarifies the nature of the output and distinguishes it from a mutation like remove_conditional_format_rules, though it does not explicitly name alternatives.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this tool versus siblings such as remove_conditional_format_rules, read_range_formatting, or inspect_data_validation_rules. Usage is only implied by the verb 'Inspect'.

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

inspect_data_validation_rulesC
Read-only

Inspect worksheet data validation rules with stable rule indexes.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes
broken_onlyNo

TDQS

C2.9/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read. The description adds the useful behavioral fact that rule indexes are stable (implying they can be referenced later, e.g. for removal), but says nothing about scope, pagination, or what happens when no rules exist.

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?

One short, front-loaded sentence with no filler. It is arguably over-terse for a tool with an undocumented filter parameter, but nothing is wasted.

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

Completeness2/5

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

No output schema and an undocumented boolean filter mean the agent has no way to know what broken_only does or what the returned rule objects look like. Given an overlapping sibling tool (get_data_validation_info), the definition leaves real gaps.

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

Parameters2/5

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

Schema coverage is only 33%: filepath is documented in the schema, but sheet_name and especially broken_only (a filtering flag whose semantics matter) are undocumented in either place. The description contributes only 'worksheet', which implies sheet_name and adds nothing for broken_only.

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?

Specific verb 'inspect' plus resource 'worksheet data validation rules', with the added qualifier 'stable rule indexes' that hints at what the output contains. It does not explicitly name the near-duplicate sibling get_data_validation_info, so differentiation is only partial.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool versus get_data_validation_info or remove_data_validation_rules, despite those being obvious alternatives. An agent must infer usage entirely from the name and the phrase 'stable rule indexes'.

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

inspect_formulaA
Read-only

Inspect a formula string for functions, references, and risky signals.

NameRequiredDescriptionDefault
formulaYes

TDQS

A3.6/5.0
Behavior3/5

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

The description adds some context beyond the readOnlyHint annotation by specifying what is inspected, but it does not disclose what the output looks like, what counts as a 'risky signal', or how errors are handled. The annotation already covers safety, and the description adds a modest layer of behavioral context.

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

Conciseness5/5

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

The description is a single sentence, front-loaded with the action and object, and contains no redundant words. It is appropriately short and to the point.

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

Completeness3/5

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

For a simple one-parameter, read-only tool, the description gives a basic understanding of the tool's function. However, the lack of an output schema and the vague term 'risky signals' leave gaps about the return format and the precise nature of the analysis, so it is not fully complete.

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

Parameters2/5

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

The schema has no description for the 'formula' parameter (0% coverage), so the description must compensate. However, it only states 'formula string', which essentially repeats the parameter name and type without adding format examples or acceptable values. This adds minimal semantic value.

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?

The description clearly states the specific verb 'Inspect' and the resource 'a formula string', and enumerates what is examined: 'functions, references, and risky signals'. This distinguishes it from siblings like validate_formula_syntax and apply_formula, making the purpose unambiguous.

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 description implies when to use the tool—when you need to analyze a formula for functions, references, and risky signals—but it does not provide explicit context about when not to use it or mention alternative tools. The use case is inferable but not explicitly delineated.

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

inspect_named_rangeB
Read-only

Inspect a named range, including scope, destinations, and broken-reference signals.

NameRequiredDescriptionDefault
nameYes
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
scope_sheetNo

TDQS

B3.2/5.0
Behavior4/5

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

readOnlyHint=true already tells the agent this is a safe read, so the description's added value is disclosing the content of the inspection — scope, destinations, and broken-reference signals — which is useful since there is no output schema. It stops short of saying what happens when the name is missing or how errors are reported.

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?

A single front-loaded sentence with no filler; the inspected aspects are listed compactly. It is efficient but so terse that it omits routing and parameter context rather than wasting words.

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

Completeness3/5

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

For a read-only, 3-parameter tool with no output schema, the description covers what is examined but omits error behavior for an unknown name and the meaning of scope_sheet. Adequate minimum, with clear gaps around parameter and failure semantics.

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

Parameters2/5

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

Schema description coverage is only 33%: filepath is well documented in the schema, but name and scope_sheet have no descriptions anywhere. The description does not compensate — it never explains what scope_sheet selects or how name resolution behaves (workbook-scoped vs sheet-scoped).

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?

States a specific verb and resource ("Inspect a named range") and enumerates what is examined: scope, destinations, broken-reference signals. This clearly separates it from list_named_ranges or delete_named_range, though it never names a sibling explicitly.

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

Usage Guidelines2/5

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

There is no statement of when to use this versus list_named_ranges (bulk listing) or when a range should be inspected instead. The deep-dive intent is only inferable from the list of inspected aspects, leaving the agent to guess.

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

inspect_workbook_contractA
Read-only

Read-only full bounded native-table contract check; never infer business meaning.

Contract v1 requires version=1, name, source={table_name, optional sheet_name},
row_grain (a declaration), key_fields (logical names), and fields=[{name,
headers: [approved exact alternatives], type: string|number|integer|boolean,
nullable?: false, meaning?, allowed_values?, min?, max?}]. Optional min_rows
defaults to 1; filters use logical field names and Recipe predicates. Missing
or multiple matching headers are unresolved, never automatically selected.
Checks all source rows BEFORE filtering, excluding native totals. Declared
meanings are not verified facts. No coercion, formulas, dates, joins or code.
Limits: 32KB JSON, 32 fields, 8 aliases/field, 8 key fields, 20 filters,
50000 table cells/64 columns; sample_limit 1-5 affects row examples only.
Pass the same contract as workbook_contract to run_workbook_recipe to enforce
it in preview/commit; this inspection alone does not guard other tools.
Recovery: omit sample_limit for default 3 (never use Recipe's 10 here).
recipe_input_fields lists the exact logical names to use in Recipe inputs;
bindings values are physical headers for inspection, not Recipe field names.
For {name: "net", headers: ["NetSales"]}, use metrics.field="net", not
"NetSales". For {name: "currency", headers: ["Currency"]}, use
group_by=["currency"]. Metric as="Revenue" is an output label, not remapped.
Follow next_action: unresolved/violated requires an owner decision, not a
changed contract or filtered-out violation. Reuse the supplied filepath;
do not construct an absolute path by prefixing the client working directory.
NameRequiredDescriptionDefault
contractYes
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sample_limitNo

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=true; the description adds substantial behavior beyond that: checks all source rows BEFORE filtering, excludes native totals, no coercion/formulas/dates/joins/code, missing or multiple header matches are left unresolved rather than auto-selected, declared meanings are not verified, and sample_limit affects only row examples. It also spells out hard limits (32KB JSON, 32 fields, 8 aliases/field, 8 key fields, 20 filters, 50000 cells/64 columns) and the recovery behavior for sample_limit.

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

Conciseness3/5

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

Nearly every sentence carries non-redundant information, but the whole thing is delivered as one unbroken run-on block that mixes contract schema, limits, naming rules, and recovery advice with no headings or front-loaded structure. An agent must parse ~250 words linearly to find the contract spec it needs first.

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?

With no output schema and a nested free-form contract object, the description does the heavy lifting: limits, resolution semantics, next_action handling, and filepath rules are all present. The main residual gap is the return payload itself — next_action, recipe_input_fields, and bindings are referenced but their structure and values are never described, so the agent learns how to call it far better than how to read the result.

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

Parameters5/5

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

Schema coverage is only 33% and the contract parameter is an undescribed free-form object, so the description has to carry the load — and it does, enumerating the contract v1 shape: version=1, name, source.table_name/sheet_name, row_grain, key_fields, fields with headers/type/nullable/meaning/allowed_values/min/max, plus min_rows defaulting to 1 and logical-name filter syntax. It also disambiguates sample_limit (default 3 here vs Recipe's 10) and clarifies the logical-vs-physical naming distinction with concrete examples (metrics.field="net" not "NetSales").

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?

States a specific verb+resource+scope: a read-only, bounded contract check over a native Excel table, with an explicit constraint ('never infer business meaning'). It distinguishes itself from the enforcement path by naming run_workbook_recipe and clarifying that inspection alone does not guard other tools. It does not, however, differentiate itself from adjacent read/diagnostic siblings such as describe_dataset, profile_workbook, or read_excel_as_table.

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 real routing guidance: pass this contract as workbook_contract to run_workbook_recipe to enforce it in preview/commit, and follow next_action on unresolved/violated rather than silently changing the contract or filtering violations out. It also tells the agent to reuse the supplied filepath instead of prefixing cwd. No explicit exclusion against other inspection siblings, so not a 5.

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

list_all_sheetsA
Read-only

List all sheets in a workbook with row/column counts. Quick overview before reading data.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.

TDQS

A3.6/5.0
Behavior3/5

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

readOnlyHint=true already declares the safety profile, so the description's main added value is that results include row/column counts — useful output context, especially since no output schema exists. It doesn't say whether hidden sheets or charts-only sheets are included, or how large workbooks behave.

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

Conciseness5/5

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

Two short sentences, zero filler, with the operation stated first and the usage hint second. Nothing could be removed without losing information.

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 single-parameter read tool with full schema coverage and a read-only annotation, the definition is nearly sufficient; it even sketches the return content. It stops short of noting the result shape or how it differs from other workbook-overview tools, which would fully close the gap.

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?

Only one parameter with 100% schema description coverage, and that schema text already covers the tricky path-rooting rules. The description adds nothing about filepath semantics, which is acceptable at this coverage level but is the baseline rather than a contribution.

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?

States a specific verb and resource ('List all sheets in a workbook') and adds the payload ('with row/column counts'). It doesn't differentiate from nearby siblings such as get_workbook_metadata, describe_sheet_layout, or list_tables, so an agent can't tell exactly which overview tool to pick from the text alone.

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?

'Quick overview before reading data' implies a workflow position, which is real but minimal guidance. There are no explicit when-not conditions and no named alternatives among the many sibling listing/metadata tools, so selection against those remains inference.

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

list_chartsC
Read-only

List embedded charts in a workbook or worksheet.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameNo

TDQS

C2.9/5.0
Behavior2/5

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

readOnlyHint=true already declares the safety profile, so the description's only real obligation is to add context such as what is returned or whether both chart sheets and embedded charts are covered. It adds none of that, effectively restating the name. No mention of whether output includes chart names, anchors, or types.

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

Conciseness5/5

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

A single front-loaded sentence with zero filler. Nothing could be cut, though the size reflects under-specification rather than tightness.

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

Completeness2/5

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

No output schema exists, so the description should say what a listed chart entry looks like (name, sheet, type, position) — it does not. For a listing tool whose entire value is the returned collection, this is a significant omission.

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 coverage is 50%: filepath is richly documented in the schema, sheet_name is not. The phrase 'in a workbook or worksheet' does imply that omitting sheet_name scans the whole workbook and supplying it narrows to one sheet, which is modest but genuine added meaning. Baseline 3 fits.

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?

States a specific verb and resource ('List embedded charts') and scopes it to a workbook or worksheet. It contrasts adequately with the create_chart/create_chart_from_series siblings, though it does not distinguish itself from other inspection tools like get_workbook_metadata.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance, no prerequisites, and no named alternative (e.g., 'use get_workbook_metadata for a full inventory'). The agent must infer that this is a read-first step before chart manipulation.

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

list_named_rangesB
Read-only

List workbook defined names and their destinations.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.

TDQS

B3.4/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes safety. The description adds that destinations are returned alongside names, which is useful context, but it omits behavioral details such as whether all names are included or how empty workbooks are handled.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no filler. Every word contributes directly to identifying the tool's purpose and output.

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 simple read-only listing tool with a fully documented single parameter and a readOnlyHint annotation, the description is largely sufficient. It could more explicitly say it lists workbook-level defined names, but no critical information 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% and the single filepath parameter is thoroughly documented in the schema. The description adds no additional parameter semantics beyond what the schema already provides, so the baseline of 3 is appropriate.

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 description gives a specific verb ('List') and resource ('workbook defined names') and states what is returned ('their destinations'). It is clear, but it does not explicitly distinguish itself from sibling tools like inspect_named_range or create_named_range.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as inspect_named_range. The listing intent is implied, but no conditions, exclusions, or alternatives are stated.

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

list_tablesA
Read-only

Map native table names to worksheet tabs and ranges; these names are distinct.

Omit sheet_name to search the whole workbook, especially after a missing-tab
error. Table and worksheet names may differ; neither name implies the other.
NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameNo

TDQS

A3.6/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, so the burden is lower. The description adds real behavioral context (table names and sheet names are independent, so a missing tab may simply mean no table is registered there), but says nothing about the shape of the result, ordering, or handling of workbooks with no tables.

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?

Three short sentences, front-loaded with the core mapping behavior before the parameter guidance. Minor redundancy between "these names are distinct" and "neither name implies the other," but nothing that wastes meaningful space.

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 two-parameter read-only listing tool with no output schema, the description covers purpose, the key naming gotcha, and the sheet_name default comprehensively. The only shortfall is that it doesn't state what the listing contains per table (range/ref), which an agent must infer from the opening clause.

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 50%: filepath is well documented in the schema, while sheet_name has no schema description at all. The description compensates for that gap by explaining what omitting sheet_name does (whole-workbook search) and what its absence implies operationally, which is exactly the missing semantics.

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 description names a specific verb and resource ("Map native table names to worksheet tabs and ranges") and clarifies the mapping nature of the output. It distinguishes the tool conceptually from a plain sheet lister by stressing that table and worksheet names are distinct, though it doesn't name the sibling tools it differs from (e.g. list_all_sheets, list_named_ranges).

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?

It gives one concrete usage trigger — omit sheet_name to search the whole workbook, especially after a missing-tab error — which is genuinely actionable. However, there is no explicit guidance on when to prefer this over adjacent tools like read_excel_table, query_table, or list_all_sheets, leaving the main routing decision implicit.

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

merge_cellsC
Destructive

Merge a range of cells.

NameRequiredDescriptionDefault
dry_runNo
end_cellYes
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes
start_cellYes
include_changesNo

TDQS

C2.6/5.0
Behavior2/5

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

Annotations declare destructiveHint=true but the description never explains why: that non-anchor cell contents are discarded on merge, and what dry_run or include_changes would show. For a destructive mutation with low annotation detail (only a hint and a title), the description adds no behavioral context at all.

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

Conciseness3/5

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

One short, front-loaded sentence with zero waste, but the brevity tips into under-specification rather than disciplined concision. Nothing extraneous, yet almost nothing useful either.

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

Completeness2/5

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

A 6-parameter destructive tool with no output schema, 17% schema coverage, and two undocumented optional flags. Given that complexity, a single-sentence description leaves out exactly the details an agent would need before calling it.

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

Parameters2/5

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

Schema coverage is 17% – only filepath carries a description, and that one is essentially a path-resolution policy. The description says nothing about the start_cell/end_cell coordinate format, what dry_run previews, or what include_changes controls, so it fails to compensate for the coverage gap.

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?

A specific verb ('merge') plus a specific resource ('a range of cells') makes the basic operation unambiguous. It does not, however, distinguish itself from the closely related siblings unmerge_cells and get_merged_cells, so it stops short of a 5.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites (e.g. sheet protection or existing merges), and no mention of unmerge_cells as the inverse operation. The agent is left to infer the entire usage context from the name alone.

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

plan_workbook_repairsC
Read-only

Turn workbook audit findings into prioritized next steps for SheetForge workflows.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
header_rowNo
sample_limitNo

TDQS

C2.4/5.0
Behavior2/5

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

readOnlyHint=true is consistent with a planning tool, but the description adds nothing beyond it: it doesn't say whether the tool runs the audit itself or consumes prior results, what the prioritized plan looks like, or that nothing is written to the workbook. With no output schema, this is a meaningful gap.

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

Conciseness3/5

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

A single front-loaded sentence with no waste, but its brevity stems from under-specification rather than efficiency.

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

Completeness2/5

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

No output schema and minimal annotations, so the description should carry the burden of explaining inputs-to-output behavior for a 3-parameter tool. It explains neither the return value (a plan? a report?) nor the two undocumented parameters, leaving the agent unable to predict the result.

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

Parameters2/5

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

Schema coverage is only 33%: filepath is well documented in-schema, but header_row and sample_limit are undocumented anywhere. The description provides zero parameter guidance and doesn't explain how sample_limit affects the plan output.

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

Purpose3/5

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

The verb phrase 'Turn workbook audit findings into prioritized next steps' describes a planning/advice operation, which distinguishes it loosely from the mutating sibling apply_workbook_repairs. However, it never says where 'audit findings' come from (the tool takes only a filepath, not findings), leaving the actual operation ambiguous.

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

Usage Guidelines2/5

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

There is no statement of when to use this versus audit_workbook, apply_workbook_repairs, or apply_workbook_changeset, which are the obvious alternatives in this dense sibling set. The mention of 'SheetForge workflows' hints at context but gives no actionable selection criteria.

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

profile_workbookB
Read-only

Return a compact workbook inventory with sheets, tables, charts, and layout state.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true, so safety is covered. The word 'compact' hints at the depth/verbosity tradeoff, but the description does not say how much detail each section contains, whether it is a single-pass read cost, or how it relates to deeper inspection tools.

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

Conciseness5/5

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

One front-loaded sentence with zero waste; the resource and its contents come before anything else.

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

Completeness3/5

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

With no output schema, the description should convey the shape and depth of the returned inventory. It names the sections but not their granularity, and it omits routing against the several sibling tools that return overlapping metadata, which leaves the agent guessing on a fairly crowded toolset.

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?

Single required parameter with 100% schema description coverage, so the baseline is 3. The description adds nothing about the filepath semantics, but the schema already carries the path-resolution rules.

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?

States a specific verb (Return) and resource (workbook inventory) and enumerates the sections included: sheets, tables, charts, layout state. However, it does not distinguish itself from overlapping siblings such as get_workbook_metadata, describe_sheet_layout, list_tables, or list_charts, leaving the agent unsure where this differs.

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

Usage Guidelines2/5

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

No guidance on when to use this versus alternatives, no prerequisites, and no exclusions. The agent is left to infer that this is a broad overview tool rather than a targeted one.

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

query_tableC
Read-only

Filter, project, sort, and limit worksheet or table data. Filters support eq/neq/ne, comparisons, string matching, blank checks, and in/not_in with value or values.

NameRequiredDescriptionDefault
limitNo
selectNo
filtersNo
sort_byNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
row_modeNoarrays
sort_descNo
header_rowNo
sheet_nameNo
table_nameNo
infer_schemaNo

TDQS

C2.9/5.0
Behavior3/5

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

readOnlyHint=true already covers the safety profile, so the bar is lower. The description adds genuine capability context by enumerating the supported filter operators, but it says nothing about how limit interacts with filters, what row_mode does to the result shape, or whether infer_schema changes typing behavior.

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?

Two tight sentences with the primary operations front-loaded and no filler. The second sentence is information-dense but stays on topic.

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

Completeness2/5

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

For an 11-parameter tool with no output schema, the description omits too much: result shape (affected by row_mode), sheet_name/table_name exclusivity, header_row semantics, and the structure of filter objects. An agent can form an intent but not a reliably correct call.

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

Parameters2/5

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

Schema description coverage is only 9% (only filepath is documented), so the description must carry the other ten parameters and it does not. It clarifies the filter vocabulary but never gives the filter object structure (key/op/value), and row_mode, header_row, sheet_name vs table_name, sort_desc, and infer_schema are left entirely undefined in both schema and prose.

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?

Names a specific verb set (filter, project, sort, limit) and the resource (worksheet or table data), which is more precise than the sibling read_excel_table or read_data_from_excel. It never contrasts itself with those read/aggregate siblings, so an agent must guess whether query_table, read_excel_as_table, or aggregate_table is the right entry point.

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

Usage Guidelines2/5

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

There is no when-to-use statement, no exclusions, and no mention of the obvious alternatives (read_excel_table, read_excel_as_table, search_in_sheet, aggregate_table) in a sibling list of 70+ tools. Usage is only implied by the verb list.

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

quick_readA
Read-only

Read a compact table from an explicit sheet or the first workbook sheet.

Can return either array rows or object-shaped records, plus optional schema
hints inferred from the returned rows.
sheet_name is a worksheet tab, NOT a native table name. For named tables use
read_excel_table(table_name=...); list_tables verifies the containing worksheet.
NameRequiredDescriptionDefault
end_colNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
max_rowsNo
row_modeNoarrays
start_colNoA
start_rowNo
header_rowNo
sheet_nameNo
infer_schemaNo
include_headersNo
read_boundary_modeNodefault

TDQS

A3.6/5.0
Behavior4/5

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

readOnlyHint=true already covers the safety profile, so the description's added value is the return-shape disclosure: array rows vs object-shaped records, plus optional inferred schema hints. That is meaningful context for a tool with no output schema. It does not mention error behavior, row-limit defaults, or how read_boundary_mode affects results.

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 capability in the first sentence, then the return-shape note, then the disambiguation caveat. Three tight blocks with no filler, though the parenthetical tool-call syntax in the final sentence is slightly informal.

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

Completeness3/5

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

The output side is adequately covered and the sheet-vs-table distinction is handled, but for an 11-parameter read tool with near-zero schema descriptions and no output schema, the range/header/limit parameters that determine what data actually comes back go unaddressed.

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

Parameters2/5

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

Schema description coverage is 9% (only filepath is documented), so the description must compensate for 11 parameters, and it only clarifies sheet_name, row_mode's two output flavors, and infer_schema. start_col, end_col, start_row, header_row, max_rows, include_headers, and read_boundary_mode are left entirely unexplained in both schema and description.

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?

States a specific verb and resource: read a compact table from an explicit sheet or the first workbook sheet. It clearly distinguishes itself from read_excel_table by name, but does not distinguish itself from the other read siblings such as read_data_from_excel or read_excel_as_table, which an agent would also need to choose between.

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?

Explicitly routes named-table reads to read_excel_table(table_name=...) and notes list_tables verifies the containing worksheet, which is real when-to-use guidance. It also clears up an ambiguity (sheet_name is a worksheet tab, not a native table name). It lacks any when-not guidance relative to the other plain-read siblings.

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

read_data_from_excelA
Read-only
Read data from Excel worksheet with cell metadata including validation rules.

Args:
    filepath: Path to Excel file
    sheet_name: Worksheet tab name, NOT a native table name; list_tables maps tables to tabs
    start_cell: Starting cell (default A1)
    end_cell: Ending cell (optional, auto-expands if not provided)
    max_rows: Optional maximum number of rows to return from the starting row
    max_cols: Optional maximum number of columns to return from the starting column
    cursor: Optional continuation token returned by an earlier range read
    preview_only: Whether to return preview only
    compact: Whether to omit default validation metadata for smaller responses
    values_only: Whether to return a 2D value grid without per-cell metadata

Returns:  
JSON string containing either structured cell data with validation metadata
or a plain 2D value grid when values_only=True.
NameRequiredDescriptionDefault
cursorNo
compactNo
end_cellNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
max_colsNo
max_rowsNo
sheet_nameYes
start_cellNoA1
values_onlyNo
preview_onlyNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description adds real behavioral detail: end_cell auto-expands when omitted, cursor is a continuation token from an earlier range read, compact suppresses default validation metadata, and values_only changes the return shape. It does not discuss size limits or what happens on invalid ranges, keeping it below a 5.

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 summary sentence followed by a scannable Args list and a Returns note; no padding. The one weak line is the tautological preview_only entry, but overall it is efficiently sized for a 10-parameter tool.

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?

With no output schema, the explicit Returns section covering both the structured cell form and the 2D grid is important and present. What is missing is concrete behavior for preview_only and any pagination/truncation semantics beyond the cursor token.

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 10%, so the description must compensate, and it largely does: every one of the 10 params gets an explanatory line, including the non-obvious ones (sheet_name vs table name, end_cell auto-expansion, cursor continuation, compact metadata omission). preview_only is described tautologically ('Whether to return preview only'), leaving one real gap.

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?

States a specific verb and resource ('Read data from Excel worksheet') plus the distinguishing payload ('cell metadata including validation rules'). It does not explicitly differentiate from close siblings like read_excel_table, quick_read, or read_excel_as_table, so an agent must infer the boundary.

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?

Usage is implied by the description (range reads with metadata, optional values-only mode), and it usefully warns that sheet_name is a tab, not a table, routing to list_tables. However there is no explicit 'use this instead of quick_read/read_excel_as_table when…' guidance despite several overlapping siblings.

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

read_excel_as_tableA
Read-only
Read Excel data as a compact table with headers and rows or record objects.
sheet_name is a worksheet TAB, not a native table. For an approved named
table use read_excel_table(table_name=...); list_tables maps tables to tabs.
Much more context-efficient than read_data_from_excel for structured data,
with optional inferred schema hints for downstream steps.
NameRequiredDescriptionDefault
compactNo
end_colNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
max_rowsNo
row_modeNoarrays
start_colNoA
start_rowNo
header_rowNo
sheet_nameYes
infer_schemaNo
include_headersNo
read_boundary_modeNodefault

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so safety is covered; the description adds value beyond that by disclosing the output shape (headers + rows vs record objects) and the context-efficiency tradeoff versus read_data_from_excel, plus optional schema hints. It does not cover error behavior (missing file, bad range) or truncation via max_rows, so not a 5.

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-loads what it returns, then the tab-vs-table gotcha, then the sibling routing, then the efficiency rationale — a logical order. Slightly dense with parenthetical asides, but no filler sentences.

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

Completeness3/5

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

For a 12-parameter, no-output-schema tool, the description covers the routing and output-shape questions well but leaves most range/pagination behavior unexplained, which matters for an agent deciding how to page large sheets. Adequate but with clear gaps.

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 coverage is only 8% across 12 parameters, so this description must compensate. It does clarify the critical sheet_name semantics and implicitly explains compact, row_mode ('arrays' vs record objects), include_headers, and infer_schema, but the six range/boundary parameters (start_col, end_col, start_row, max_rows, header_row, read_boundary_mode) get no meaning from either schema or description.

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 ('Read Excel data as a compact table with headers and rows or record objects') and explicitly distinguishes itself from two siblings: read_excel_table (named tables) and read_data_from_excel. An agent can route correctly 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 Guidelines5/5

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

Gives the exact disambiguation rule ('sheet_name is a worksheet TAB, not a native table'), names the alternative for approved named tables, points to list_tables for mapping, and states when this beats read_data_from_excel (structured data, context efficiency). When-to-use and alternatives are both explicit.

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

read_excel_tableA
Read-only

Read a native Excel table by its table name, not by a worksheet tab name.

Use the exact table_name from list_tables. Omit sheet_name when unknown;
if supplied, it must be the table's containing worksheet tab, not the table name.
Supports compact table payloads, object-shaped record output, and optional
inferred schema hints.
NameRequiredDescriptionDefault
compactNo
end_colNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
max_rowsNo
row_modeNoarrays
start_colNo
start_rowNo
sheet_nameNo
table_nameYes
infer_schemaNo
include_headersNo

TDQS

A3.6/5.0
Behavior3/5

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

readOnlyHint=true already covers the safety profile, so the bar is lower. The description adds that output can be compact payloads, object-shaped records, or schema hints, but those mirror the compact/row_mode/infer_schema parameters rather than disclosing behavior beyond them, and nothing is said about paging or size limits.

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?

Four short sentences, front-loaded with the table-vs-tab distinction that matters most. Little waste, though the closing sentence enumerates output modes that the schema already names as parameters.

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

Completeness2/5

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

Eleven parameters, no output schema, and near-zero schema coverage mean the description should explain column/row addressing (start_col/end_col string format) and how max_rows interacts with start_row. Those gaps would plausibly cause malformed calls, and the description does not close them.

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

Parameters2/5

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

Schema description coverage is only 9% (filepath alone is documented), so the description must carry the load. It adds meaning for compact, row_mode ('object-shaped record output'), and infer_schema ('inferred schema hints'), but leaves start_row, start_col, end_col, max_rows, and include_headers entirely unglossed, including the accepted column format.

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 and draws the critical distinction up front: read a native Excel table by table name, not by a worksheet tab name. That contrast alone separates it from sheet/range-oriented siblings like read_data_from_excel and read_excel_as_table.

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?

Explicitly routes the agent to list_tables to obtain the exact table_name and tells it to omit sheet_name when unknown, with a clear constraint on what sheet_name means if provided. It stops short of naming when to prefer this over query_table or read_excel_as_table, so a 4 rather than 5.

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

read_range_formattingC
Read-only

Read a compact formatting summary for a worksheet range.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
range_refYes
sheet_nameYes
sample_limitNo

TDQS

C2.9/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe non-mutating read, so the description's burden is lighter. It adds that the result is 'compact' — a summary rather than a full formatting dump — which is genuinely useful context, but it never says what is summarized (number formats, fills, borders?) or how the compacting works.

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?

One front-loaded sentence with zero filler — nothing to trim. Its weakness is under-specification rather than verbosity, but as pure structure it is efficient.

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

Completeness2/5

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

No output schema exists, so the description must explain what a 'formatting summary' returns and how sample_limit affects it; it does neither. For a 4-parameter tool with 25% schema coverage, an agent is left guessing about the response shape and two of the inputs.

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

Parameters2/5

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

Schema description coverage is only 25%: sheet_name and range_ref are bare strings and sample_limit has a default of 10 with no explanation. The description's 'compact ... summary' hints at why a sample limit exists, but it never mentions sampling, sample size, or the accepted range_ref syntax, so it fails to compensate for the coverage gap.

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?

States a specific verb and resource ('Read a compact formatting summary for a worksheet range'), which clearly separates it from data-reading siblings like read_data_from_excel or query_table. It does not, however, name or contrast itself against the adjacent formatting/inspection tools (format_range, inspect_conditional_format_rules, describe_sheet_layout).

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

Usage Guidelines2/5

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

There is no statement of when to reach for this tool versus alternatives such as read_data_from_excel (values) or describe_sheet_layout (structure). The word 'formatting' only implies the use case; nothing tells the agent what problem this solves or when not to call it.

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

remove_conditional_format_rulesB
Destructive

Remove worksheet conditional formatting rules by index or remove all broken ones.

NameRequiredDescriptionDefault
dry_runNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes
broken_onlyNo
rule_indexesNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already flag destructiveHint=true, so the safety profile is carried by structured data. The description adds the two removal scopes, but leaves the most important behavioral question unanswered: what happens when neither rule_indexes nor broken_only is set — does it wipe all rules on the sheet? Dry-run behavior is also undisclosed.

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?

A single compact sentence with the action and both selection modes front-loaded; nothing wasted, but the compression is partly under-specification rather than density.

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

Completeness2/5

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

A destructive, multi-param mutation tool with no output schema and thin parameter documentation needs more: the default/omitted-parameter behavior, the dry_run flag, and whether indexes refer to the order returned by inspect_conditional_format_rules are all 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 coverage is only 20%, and the description semantically maps to just two params ('by index' -> rule_indexes, 'broken ones' -> broken_only). It says nothing about dry_run or sheet_name/filepath handling, and nothing about whether the two selectors combine or conflict.

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?

States a specific verb and resource ('Remove worksheet conditional formatting rules') plus the two selection modes (by index / broken only). It is clearly distinguishable from the read-side sibling inspect_conditional_format_rules, though that contrast is not made explicit.

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 two modes imply when each applies ('by index' vs 'remove all broken ones'), but there is no guidance on when to prefer this over inspect_conditional_format_rules first, no prerequisites, and no mention of when to use dry_run before a destructive removal.

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

remove_data_validation_rulesB
Destructive

Remove worksheet data validation rules by index or remove all broken ones.

NameRequiredDescriptionDefault
dry_runNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes
broken_onlyNo
rule_indexesNo

TDQS

B3.3/5.0
Behavior3/5

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

The destructiveHint=true annotation already carries the safety profile, and the description adds the useful scoping detail that removal can be limited to broken rules. However, it never mentions the dry_run parameter, which is the main reversibility/preview mechanism for a destructive tool, and it does not say what happens to dependent cells or invalid indexes.

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?

A single tight sentence with no filler and the two modes front-loaded. It is efficient, though the one-line form leaves no room for the operational caveats an agent needs.

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

Completeness2/5

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

For a destructive, 5-parameter mutation tool with no output schema and 20% schema coverage, the description is thin: dry_run, the interaction between rule_indexes and broken_only, and the result of a failed index are all unaddressed. It does not give an agent enough to call it safely.

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 coverage is only 20% (only filepath is documented), so the description must compensate. It partially does: 'by index' maps to rule_indexes and 'broken ones' maps to broken_only. But dry_run is entirely unexplained, and nothing clarifies precedence when rule_indexes and broken_only are both supplied.

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?

States a specific verb and resource ('Remove worksheet data validation rules') plus the two operating modes (by index, or all broken ones). It is clearly distinguishable from siblings like inspect_data_validation_rules and remove_conditional_format_rules by resource, though it does not name them explicitly.

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 two modes imply usage: pass indexes to target specific rules, or target broken ones. But there is no explicit when-to-use guidance, no mention of when to prefer inspection first, and the dry_run safety path is never surfaced as a recommended first step.

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

rename_worksheetC
Destructive

Rename worksheet in workbook.

NameRequiredDescriptionDefault
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
new_nameYes
old_nameYes

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already flag destructiveHint=true, but the description adds no behavioral context such as conflicts with existing sheet names, effects on formulas referencing the old name, or error conditions.

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

Conciseness3/5

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

It is concise and front-loaded, but the single sentence mostly restates the tool name and does not earn its place with useful detail.

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

Completeness2/5

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

For a mutation tool with sparse annotations, low schema description coverage, and no output schema, the description leaves too much unsaid about inputs and side effects.

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

Parameters2/5

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

Schema coverage is only 33%, with old_name and new_name undocumented in the schema. The description implies a rename mapping but does not explain the parameters or clarify their required semantics.

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?

States a specific verb and resource: 'Rename worksheet'. An agent can distinguish it from create/delete/copy worksheet siblings by the operation, though the description does not explicitly contrast alternatives.

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

Usage Guidelines2/5

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

Provides no guidance on when to use this tool versus siblings such as copy_worksheet or delete_worksheet, and no prerequisites or exclusions are stated.

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

run_workbook_recipeA
Destructive

Preview or commit a reusable JSON recipe without echoing intermediate rows.

Recipe v1 requires version=1, source={table_name, optional sheet_name},
group_by=[exact header names], metrics=[{op, field, as}], and
output={sheet_name, range_ref, optional allow_overwrite=false}.
Optional filters use query_table operators; optional checks support unique_key
(fields), row_count (min/max), and sum_matches (source_field/output_field).
count metrics omit field. Other metrics: sum, avg, min, max, count_non_null,
count_distinct. Only literal finite JSON cells in referenced fields are supported.
Optional workbook_contract enforces Contract v1: source selectors must match,
ALL Recipe input references must use contract fields[].name, NEVER physical
fields[].headers. Copy names from inspection.recipe_input_fields (binding keys).
Example: net bound to NetSales -> metrics=[{op:"sum",field:"net",as:"Revenue"}];
currency bound to Currency -> group_by=["currency"]. The as label stays Revenue.
This also applies to filters.field, unique_key.fields and sum_matches.source_field.
Contract field errors return bounded details.examples with Recipe JSON-pointer
paths and exact replace_with names where known: fix the Recipe references only,
keep workbook_contract unchanged, then make a NEW preview before commit.
Contract filters are mandatory
AND predicates. All contract rows are checked before filtering and again on
the saved workbook. Repeat the identical contract on commit; changed contracts
invalidate recipe tokens. Declared meanings are not verified business truth.

Output is one reserved rectangle in the same workbook, fully replaced including
blank padding. Occupied output requires allow_overwrite=true; table/merge overlap
is rejected. Preview first, then commit the unchanged recipe with recipe_token
and expected_workbook_sha256 from preview. A verified snapshot is always enabled.
Limits: 50,000 source cells, 64 source columns, 10,000 output cells; sample_limit 1-10.
NameRequiredDescriptionDefault
modeNopreview
recipeYes
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
recipe_tokenNo
sample_limitNo
workbook_contractNo
expected_workbook_sha256No

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only carry destructiveHint=true; the description fills in extensive behavior beyond that: the output rectangle is 'fully replaced including blank padding,' occupied output needs allow_overwrite=true, table/merge overlap is rejected, contract changes invalidate recipe tokens, a snapshot is always enabled, and 'declared meanings are not verified business truth.' Hard limits (50k source cells, 64 columns, 10k output cells, sample_limit 1-10) are also disclosed.

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

Conciseness3/5

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

The purpose is front-loaded, but the body is a dense unfragmented block of run-on sentences and parenthetical asides. Most content earns its place given the recipe DSL's complexity, but bullet-less prose with rapid topic shifts reduces scannability.

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 nested-object tool with no output schema, it covers the critical call-path details: recipe construction, contract enforcement, token/sha handoff, overwrite semantics, error shape (details.examples with JSON-pointer paths), and limits. It doesn't describe what a preview actually returns structurally (only that sample_limit controls sampling), leaving a small gap.

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% (only filepath is documented), so the description must compensate, and it largely does: it spells out the v1 recipe shape (version, source, group_by, metrics with op/field/as, output, filters, checks) and explains recipe_token and expected_workbook_sha256 as coming from preview, plus sample_limit 1-10. It leaves the mode enum's default and full meaning implicit and only references filters/checks as 'query_table operators' without detail.

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 first sentence states a specific verb pair (preview/commit) and a specific resource (a reusable JSON recipe that writes to a reserved output rectangle in a workbook). The 'without echoing intermediate rows' clause adds a distinguishing trait. It doesn't explicitly say how it differs from sibling aggregate_table or query_table, keeping it at 4.

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 an explicit workflow: 'Preview first, then commit the unchanged recipe with recipe_token and expected_workbook_sha256 from preview.' Also prescribes the error-recovery sequence ('fix the Recipe references only, keep workbook_contract unchanged, then make a NEW preview'). However, it never says when to reach for this tool versus aggregate_table/query_table, so no explicit alternative routing.

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

search_in_sheetC
Read-only

Search for cells matching a value in a worksheet.

NameRequiredDescriptionDefault
exactNo
queryYes
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes
max_resultsNo

TDQS

C2.6/5.0
Behavior2/5

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

readOnlyHint=true already tells the agent this is a safe read, so the description owes no safety disclosure. Beyond that it adds nothing: no indication of what matches look like (cell addresses vs values), case sensitivity, cost/limits on scanning, or what exact=false changes. The single sentence is essentially a restatement of the title.

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

Conciseness3/5

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

One short, front-loaded sentence with zero redundancy, but the brevity is under-specification rather than economy – it leaves obvious questions unanswered given a five-parameter tool.

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

Completeness2/5

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

With five parameters, four undocumented, and no output schema, the definition should at minimum explain matching mode and result shape. Instead, an agent cannot tell whether results are cell addresses, values, or ranges, nor how exact=false modifies matching.

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

Parameters2/5

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

Schema description coverage is only 20% – only filepath is documented. The query, sheet_name, exact (default true), and max_results (default 50) parameters have no schema descriptions, and the description does not compensate: it never explains matching semantics for exact, what max_results truncation means, or whether query is typed as string/number/regex.

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?

States a specific verb (search) and resource (cells matching a value in a worksheet), so an agent knows exactly what the operation does. It does not, however, distinguish itself from nearby read-oriented siblings such as query_table, read_data_from_excel, or quick_read.

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

Usage Guidelines2/5

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

The description gives no signal about when to prefer this over the many other read/query siblings, nor any prerequisites or exclusions. An agent must infer usage purely from the name.

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

set_autofilterC
Destructive

Set worksheet autofilter for an explicit or inferred range.

NameRequiredDescriptionDefault
dry_runNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
range_refNo
sheet_nameYes
include_changesNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations only supply destructiveHint=true; the description adds nothing about that risk. It does not say whether an existing autofilter is replaced, whether data is altered or just a view is set, or what dry_run and include_changes do behaviorally.

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?

A single front-loaded sentence with no filler. It is efficient, though the brevity comes at the cost of the missing details flagged elsewhere.

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

Completeness2/5

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

For a destructive 5-parameter mutation tool with no output schema and 80% undocumented schema coverage, one sentence is inadequate. An agent cannot tell what the tool changes, what dry_run returns, or how the inferred range is determined.

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

Parameters2/5

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

Schema coverage is only 20% (filepath is the sole documented parameter). The description implies range_ref is optional by saying the range may be "inferred," but says nothing about sheet_name, dry_run, or include_changes, leaving most parameters undocumented in both places.

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?

States a specific verb plus resource ("Set worksheet autofilter") and notes the range can be explicit or inferred, which tells an agent what the tool acts on. It does not distinguish itself from any sibling, but no sibling is an obvious near-duplicate here.

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

Usage Guidelines2/5

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

No guidance on when to use this versus applying a filter through other means, no preconditions (does the sheet need data? must it be unprotected?), and no mention of dry_run as a safe preview path. The only hint is that the range may be inferred, which is usage-adjacent but not explicit.

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

set_column_widthsC
Destructive

Set explicit widths for one or more worksheet columns.

NameRequiredDescriptionDefault
widthsYes
dry_runNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes
include_changesNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already flag destructiveHint=true, so the agent knows this mutates. The description adds nothing beyond that: it doesn't say existing widths are overwritten, whether protected sheets are rejected, or that dry_run/include_changes exist for previewing and reporting effects.

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?

One front-loaded sentence with no filler. It is efficient, though its brevity here reflects under-specification rather than tight writing.

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

Completeness2/5

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

For a 5-parameter destructive mutation with no output schema and a nested object parameter, the description leaves out the widths format, the dry_run behavior, and what happens to previously set widths. Not enough for an agent to call it correctly.

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

Parameters2/5

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

Schema coverage is only 20% (just filepath). The critical 'widths' object is undocumented — no example like {"A": 20} or unit semantics — and dry_run and include_changes appear only as bare titles with defaults. The description compensates for none of this.

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?

States a specific verb and resource ('Set explicit widths ... worksheet columns'), which is clear on its own. It does not distinguish itself from the obvious sibling autofit_columns, which sets widths indirectly.

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

Usage Guidelines2/5

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

No guidance on when to choose this over autofit_columns, no preconditions (e.g., sheet existence, protection), and no mention of the provided dry_run parameter as a safe-preview path.

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

set_print_areaC
Destructive

Set or clear worksheet print area.

NameRequiredDescriptionDefault
dry_runNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
range_refNo
sheet_nameYes
include_changesNo

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, so the description's main job would be adding context such as what clearing removes, whether the action is reversible, or how dry_run behaves. It adds almost none of that, only noting the dual set/clear behavior. That duality is a real behavioral fact but it is left unexplained in terms of trigger or consequence.

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

Conciseness3/5

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

One front-loaded sentence with no filler, so nothing is wasted. But the brevity comes from under-specification rather than tight editing; the definition is too thin for a five-parameter mutation tool.

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

Completeness2/5

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

For a destructive, five-parameter mutation with no output schema and a dry_run flag, the agent needs to know how a dry run reports its would-be changes and how ranges map to the print area. Neither is covered, so an agent must guess at the tool's real contract.

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

Parameters2/5

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

Schema description coverage is only 20% (filepath alone is documented), so the description must carry the load for range_ref, sheet_name, dry_run, and include_changes — yet it names none of them. At best, 'or clear' faintly implies range_ref can be null to remove the print area, but that is never stated and the other four parameters get no semantic help.

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?

States a specific verb pair and resource: setting or clearing a worksheet's print area. An agent can tell what it mutates without opening the schema. It does not differentiate itself from neighbors such as set_print_titles, which is a similar-sounding sibling an agent could confuse it with.

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

Usage Guidelines2/5

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

No guidance on when to use this versus set_print_titles or other layout tools, and no stated prerequisites. The set-versus-clear distinction is only implicit in the word 'or' — the description never says that omitting the range clears the print area.

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

set_print_titlesB
Destructive

Set, preserve, or clear repeating print title rows and columns.

NameRequiredDescriptionDefault
rowsNo
columnsNo
dry_runNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes
include_changesNo

TDQS

B3/5.0
Behavior3/5

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

The destructiveHint annotation already flags that this is a destructive operation, and the description adds useful mode information by mentioning set, preserve, and clear. However, it does not explain what is destroyed when clearing, how dry_run or include_changes affect behavior, or whether changes are reversible.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no filler, so it is maximally concise and well structured.

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

Completeness2/5

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

For a six-parameter destructive mutation tool with no output schema and low schema description coverage, the one-sentence description is too sparse. It states the broad purpose but leaves key parameters and behavioral details unexplained.

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

Parameters2/5

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

Schema description coverage is only 17%, so the description needs to compensate for undocumented parameters. It only maps conceptually to rows and columns and says nothing about accepted string formats, null semantics, dry_run, or include_changes.

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 description uses a specific verb and resource: setting, preserving, or clearing repeating print title rows and columns. It is clearly distinct from set_print_area, but it does not explicitly name alternatives or sibling tools.

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

Usage Guidelines2/5

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

The description implies that the tool is used for print title rows and columns, but it gives no explicit guidance on when to choose it over siblings such as set_print_area or freeze_panes. It also omits prerequisites and when-not-to-use conditions.

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

set_row_heightsC
Destructive

Set explicit heights for one or more worksheet rows.

NameRequiredDescriptionDefault
dry_runNo
heightsYes
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes
include_changesNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, and the description adds only the word 'explicit', which hints at overriding existing sizing. It does not explain what dry_run previews, what include_changes returns, whether existing heights are replaced or merged, or whether the operation requires an unprotected sheet.

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?

A single front-loaded sentence with no wasted words. Brevity is achieved, though partly through under-specification rather than tight editing.

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

Completeness2/5

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

For a destructive, 5-parameter tool with a nested object and no output schema, one sentence is far from sufficient. Nothing tells the agent how heights are keyed, what units apply, or what the dry-run/changeset options do.

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

Parameters2/5

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

Schema description coverage is only 20% (only filepath documented), so the description must compensate. It does imply that 'heights' is a row-to-height mapping via 'one or more worksheet rows', but dry_run and include_changes remain completely undefined in both schema and description.

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?

Clear specific verb (set) plus resource (row heights) with scope (one or more rows). However it gives no differentiation from closely related siblings like set_column_widths or autofit_columns, so an agent must infer which tool applies.

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

Usage Guidelines2/5

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

No when-to-use guidance, no exclusions, and no mention of alternatives such as autofit_columns or format_range. The agent must infer entirely from the tool name that this sets manual heights rather than auto-sizing.

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

set_worksheet_protectionC
Destructive

Enable or disable worksheet protection with optional capability flags.

NameRequiredDescriptionDefault
dry_runNo
enabledNo
optionsNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
passwordNo
sheet_nameYes
include_changesNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations only declare destructiveHint=true, so the description carries most of the burden. It does not say that disabling strips existing protection from the sheet, whether a password is required to unprotect, what the capability flags actually govern, or that dry_run previews the effect.

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?

A single front-loaded sentence with no filler. It is tight, but the brevity comes at the cost of the missing detail noted elsewhere.

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

Completeness2/5

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

For a 7-parameter mutating tool with a password field, a dry-run flag, and no output schema, the description is far too thin. An agent cannot tell what the tool returns, how protection interacts with an existing password, or what dry_run changes.

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

Parameters2/5

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

Schema description coverage is only 14% across 7 parameters, so the description must compensate and largely does not. 'Optional capability flags' gestures at the options object, but enabled, password, dry_run, and include_changes are left entirely to bare schema titles.

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?

States a specific verb+resource: enable or disable worksheet protection, plus the notion of capability flags. An agent can tell what the tool does, though it is not distinguished from the sibling get_worksheet_protection (the read counterpart).

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

Usage Guidelines2/5

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

No when-to-use, when-not, or prerequisite guidance. It never points to get_worksheet_protection for inspecting current protection state, nor does it explain when dry_run should be used before a real change.

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

set_worksheet_visibilityC
Destructive

Set worksheet visibility to visible, hidden, or veryHidden.

NameRequiredDescriptionDefault
dry_runNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes
visibilityYes
include_changesNo

TDQS

C2.8/5.0
Behavior2/5

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

The destructiveHint annotation already flags this as a mutation, but the description adds no behavioral context. It does not explain what hidden or veryHidden means in practice, whether visible restores prior state, how protected workbooks behave, or what dry_run changes.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no filler. It is efficiently structured, though its brevity contributes to the completeness gaps scored elsewhere.

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

Completeness2/5

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

For a destructive worksheet mutation with no output schema and weak parameter documentation, the description is too thin. It does not cover dry-run semantics, side effects, or the meaning of include_changes, leaving an agent without enough context for safe invocation.

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

Parameters2/5

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

The description clarifies the visibility values, which is useful because the schema defines no enum for that parameter. However, with 5 parameters and only 20% schema description coverage, it leaves sheet_name format, dry_run, and include_changes unexplained, so it does not compensate for the low coverage.

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 description gives a specific verb ('Set') and resource ('worksheet visibility'), and lists the allowed visibility states. It is distinguishable from siblings such as delete_worksheet or set_worksheet_protection, but it does not explicitly contrast them.

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

Usage Guidelines2/5

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

It provides no when-to-use guidance, no prerequisites, and no alternatives. An agent must infer from the tool name alone that this is the tool for changing visibility rather than deleting or protecting a sheet.

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

suggest_read_strategyC
Read-only

Recommend the best SheetForge read tool for the requested workbook target.

NameRequiredDescriptionDefault
goalNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
header_rowNo
sheet_nameNo
table_nameNo
sample_rowsNo

TDQS

C2.7/5.0
Behavior2/5

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

readOnlyHint=true is already declared, so the description only needs to add behavior — but it does not say whether this tool actually opens/parses the workbook (and at what cost) or just reasons over the arguments, nor how the recommendation is returned. For a 'strategy' tool, the distinction between inspecting the file versus returning a static suggestion is the single most important behavioral fact, and it is missing.

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?

A single front-loaded sentence with no filler. It is efficiently written, though the brevity contributes to the specification gaps noted elsewhere rather than being 'complete and tight'.

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

Completeness2/5

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

Six parameters at 17% coverage, no output schema, and only a readOnly annotation — the description is far too thin for a tool whose whole value is explaining which reader to pick and why. It never says how the recommendation should be interpreted or whether the caller is expected to re-invoke the suggested tool.

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

Parameters2/5

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

Schema description coverage is only 17% — just filepath is documented; goal, header_row, sheet_name, table_name, and sample_rows are bare. The description mentions only an abstract 'workbook target' and adds no meaning for goal (what kind of goal phrasing helps), sample_rows (why 25), or header_row.

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?

States a specific verb ('Recommend') and object ('best SheetForge read tool for the requested workbook target'), so an agent knows this is a router/advisor rather than a reader. It does not name the candidate read tools (quick_read, read_excel_as_table, read_range_formatting) or say what signal the recommendation is based on, so it is clear but undifferentiated from the many read siblings.

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

Usage Guidelines2/5

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

There is no statement of when to call this instead of directly calling quick_read, describe_dataset, or read_excel_table, and no prerequisites or exclusions. The agent must infer the 'call me first when unsure which reader to use' pattern from the name alone.

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

union_tablesC
Read-only

Union comparable worksheet or table data across multiple workbook files.

NameRequiredDescriptionDefault
limitNo
selectNo
sort_byNo
row_modeNoarrays
dedupe_onNo
filepathsYes
sort_descNo
header_rowNo
sheet_nameNo
table_nameNo
schema_modeNostrict
infer_schemaNo
source_sample_limitNo
include_source_columnsNo

TDQS

C2.7/5.0
Behavior2/5

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

The readOnlyHint annotation already establishes that this is a safe read operation, so the description does not need to cover safety. However, it says nothing about important behavior for a 14-parameter operation: strict versus inferred schema handling, what happens when source schemas differ, or how deduplication and error cases behave.

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 description is a single front-loaded sentence with no filler. It is structurally efficient, though its brevity leaves substantial gaps that are penalized elsewhere.

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

Completeness2/5

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

For a complex 14-parameter tool with no output schema, this description is far too sparse. It does not explain how schema alignment works, what 'comparable' means in practice, or how the many options affect the result.

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

Parameters2/5

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

Schema description coverage is effectively 0%, and the description explains none of the 14 parameters. It vaguely implies file inputs and worksheet/table sources, but gives no meaning for limit, select, sort_by, row_mode, dedupe_on, schema_mode, infer_schema, header_row, or include_source_columns.

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 description states a specific verb ('Union') and resource ('worksheet or table data across multiple workbook files'), making the core operation clear. It does not explicitly distinguish itself from siblings such as cross_workbook_lookup or aggregate_table, so it falls short of a 5.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance, no exclusions, and no alternatives. An agent cannot tell from this text when unioning is preferable to cross_workbook_lookup, query_table, or aggregate_table.

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

unmerge_cellsC
Destructive

Unmerge a range of cells.

NameRequiredDescriptionDefault
dry_runNo
end_cellYes
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes
start_cellYes
include_changesNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already flag destructiveHint=true, so the safety profile is known, but the description adds nothing beyond that: it does not say what happens to the underlying values or formatting (only the top-left cell's content is typically kept), nor does it explain the dry_run or include_changes options that mitigate that risk.

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?

A single short sentence with no filler and the action front-loaded. Its brevity is more under-specification than verbosity, which is penalized elsewhere, so structure itself is fine.

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

Completeness2/5

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

For a destructive mutation with 6 parameters, 17% schema coverage and no output schema, the description should at least cover the dry_run escape hatch and data-loss semantics. It leaves an agent without enough to call this safely or correctly.

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

Parameters2/5

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

Schema description coverage is only 17% — only filepath is documented, and even that lives in the schema, not the description. The description's phrase 'a range of cells' weakly implies start_cell/end_cell but says nothing about sheet_name, dry_run, or include_changes, leaving most of the 6 parameters unexplained.

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 description states a specific verb and resource ('Unmerge a range of cells'), which is unambiguous. However, it does not differentiate from the close siblings merge_cells and get_merged_cells, so the agent gets no routing signal from the text itself.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus merge_cells or when to inspect existing merges with get_merged_cells first. It also gives no precondition such as the range actually containing merged cells.

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

update_rows_by_keyC
Destructive

Update existing table rows using a named key column.

NameRequiredDescriptionDefault
dry_runNo
updatesYes
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
header_rowNo
key_columnYes
sheet_nameYes
include_changesNo
expected_structure_tokenNo

TDQS

C2.4/5.0
Behavior2/5

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

The annotations already declare destructiveHint=true, but the description does not explain what is destroyed or overwritten, how unmatched keys are handled, what dry_run does, or what include_changes and expected_structure_token control. For an 8-parameter destructive mutation, this leaves important behavior opaque.

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

Conciseness3/5

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

The sentence is concise and front-loaded, but it is too thin for a destructive tool with eight parameters. Conciseness is achieved at the cost of necessary detail.

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

Completeness2/5

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

Given eight parameters, low schema coverage, destructive behavior, and no output schema, the description is not complete enough. It omits key semantics around updates structure, dry-run behavior, change reporting, and structure-token validation.

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

Parameters1/5

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

Schema description coverage is only 13%, and the description explains only the concept of a key column. It adds no meaning for updates, filepath, sheet_name, header_row, dry_run, include_changes, or expected_structure_token, leaving most parameters undocumented.

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 description states a specific verb ('Update') and resource ('existing table rows') with the key mechanism ('using a named key column'). However, it does not distinguish this tool from nearby siblings such as upsert_excel_table_rows or apply_table_patch.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this tool versus alternatives, no mention of prerequisites, and no exclusions. The agent must infer its role from the name and sibling list.

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

upsert_excel_table_rowsC
Destructive

Update matching rows in a native Excel table and append missing keys.

NameRequiredDescriptionDefault
rowsYes
dry_runNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
key_columnYes
sheet_nameNo
table_nameYes
include_changesNo
allow_structure_changeNo
expected_structure_tokenNo

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, and the description is consistent with that. However, it discloses nothing about the safety machinery in the schema: dry_run preview, allow_structure_change, and expected_structure_token are all opt-in behaviors an agent must know about before mutating a workbook. For a destructive 9-param mutation, that is a major omission.

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?

A single front-loaded sentence with no filler; the core behavior leads. It is concise to the point of under-specification, but that is penalized in other dimensions rather than here.

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

Completeness2/5

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

Nine parameters, 11% schema coverage, no output schema, and a destructive annotation — the description supplies none of the guardrail or key-matching context an agent needs to call this safely. Substantially incomplete for the tool's complexity.

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

Parameters2/5

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

Schema description coverage is 11% — only filepath is documented. The description alludes to key-based matching but never names key_column, and says nothing about rows shape, dry_run, sheet_name, include_changes, allow_structure_change, or expected_structure_token. With 8 of 9 parameters undocumented, the description fails to compensate.

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?

States a specific verb+resource pair ('Update matching rows in a native Excel table') and adds the upsert twist ('append missing keys'), which meaningfully separates it from append_excel_table_rows and update_rows_by_key. It stops short of naming those siblings explicitly, so an agent must infer the distinction from the word 'upsert'.

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 upsert semantics imply when to use it (mixed insert/update workloads), but there is no explicit when-not or pointer to append_excel_table_rows / update_rows_by_key for the pure-append or pure-update cases. Usage is inferable rather than stated.

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

validate_excel_rangeC
Read-only

Validate if a range exists and is properly formatted.

NameRequiredDescriptionDefault
end_cellNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes
start_cellYes

TDQS

C2.7/5.0
Behavior2/5

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

readOnlyHint=true is consistent with the description, but beyond that nothing is disclosed: it doesn't say whether an invalid range raises an error or returns a falsy result, whether an out-of-used-range but syntactically valid cell counts as 'exists', or anything about cost. Essentially restates the tool name.

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?

A single front-loaded sentence with no filler. It is efficient, though its brevity is partly under-specification rather than tight writing.

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

Completeness2/5

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

With no output schema and 75% of parameters undocumented, the description should explain the result shape (boolean? message?) and the end_cell-omitted behavior, but it explains neither. An agent cannot predict what it will get back or how to act on it.

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

Parameters2/5

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

Schema coverage is only 25% (filepath is the only documented parameter), so the description must compensate and does not. It never explains what start_cell/end_cell refer to (A1 notation?) or that end_cell is optional/null and presumably means a single-cell range, nor what sheet_name scoping implies.

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?

States a specific verb ('validate') and resource ('range') plus the two things checked: existence and formatting. This distinguishes it from sibling readers/mutators like read_range_formatting or inspect_workbook_contract, though 'properly formatted' is left undefined.

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

Usage Guidelines2/5

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

No guidance on when to call this versus the many sibling readers (read_data_from_excel, quick_read, read_range_formatting) or what to do with a negative result. The agent must infer both the trigger condition and the follow-up action.

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

validate_formula_syntaxB
Read-only

Validate Excel formula syntax without applying it.

NameRequiredDescriptionDefault
cellYes
formulaYes
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes

TDQS

B3.1/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is non-mutating, so 'without applying it' is largely redundant with the annotation. The description adds nothing about what validation produces (boolean vs. error message), whether validation is contextual to the given cell/sheet, or whether the file must exist first.

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?

A single front-loaded sentence with no filler or repetition. It is efficient, though the terseness contributes to the gaps noted in the other dimensions.

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

Completeness2/5

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

Four required parameters, no output schema, and a mutation-adjacent workflow ('validate before apply') — yet the description says nothing about return values (pass/fail shape, error detail) or the sheet/cell context requirement. For this parameter profile the description should carry far more.

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

Parameters2/5

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

Schema coverage is only 25% — just filepath is documented — and the description supplies zero parameter meaning. It does not explain the non-obvious requirement that sheet_name and cell give the reference context needed to validate relative/A1 references, which is the key semantic an agent would otherwise have to guess.

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?

States a specific verb+resource (validate Excel formula syntax) and the qualifier 'without applying it' implicitly separates it from the write-side sibling apply_formula. It does not name inspect_formula or explain_formula_cell, so the boundary with those read-side formula tools is left to inference.

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?

'Without applying it' hints at the check-before-apply workflow but never states when to prefer this over apply_formula or inspect_formula. The agent must infer that this is a pre-flight gate rather than a diagnostic/explanation tool.

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

write_data_to_excelC
Destructive
Write data to Excel worksheet.
Excel formula will write to cell without any verification.

PARAMETERS:  
filepath: Path to Excel file
sheet_name: Name of worksheet to write to
data: List of lists containing data to write to the worksheet, sublists are assumed to be rows
start_cell: Cell to start writing to, default is "A1"
NameRequiredDescriptionDefault
dataYes
dry_runNo
filepathYesReuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.
sheet_nameYes
start_cellNoA1
include_changesNo

TDQS

C2.9/5.0
Behavior3/5

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

The destructiveHint annotation already signals mutation. The description adds a useful warning that 'Excel formula will write to cell without any verification,' but it does not explain overwrite behavior, whether existing data is replaced, what dry_run does, or other operational details.

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 description is short and front-loaded: a one-line purpose followed by a warning and compact parameter notes. Every part is relevant, though it could be slightly better organized.

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

Completeness2/5

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

For a destructive 6-parameter write tool with no output schema and low schema description coverage, the description leaves important gaps: dry_run and include_changes are undocumented, overwrite semantics are unstated, and return behavior is absent.

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

Parameters2/5

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

Schema description coverage is only 17%, and the description omits two parameters entirely: dry_run and include_changes. It does add useful meaning for data ('list of lists... sublists are assumed to be rows'), but that partial compensation is insufficient given the low schema coverage and missing safety-related parameters.

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 description states a specific verb and resource: 'Write data to Excel worksheet.' It is clear what the tool does, though it does not explicitly differentiate itself from siblings such as append_table_rows, upsert_excel_table_rows, or apply_formula.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like append_table_rows, upsert_excel_table_rows, or apply_formula. It also lacks prerequisites or exclusions.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 82 tool updatesv0.14.0
    • Changedaggregate_table1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedanalyze_range_impact1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedappend_excel_table_rows1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedappend_table_rows1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedapply_formula1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Addedapply_table_patch
    • Changedapply_workbook_changeset2 fields changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
      • changedInput schema / properties / snapshot_filepath / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "description": "Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing.",
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedapply_workbook_repairs1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedaudit_workbook1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedautofit_columns1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedbulk_aggregate_workbooks1 field changed
      • addedInput schema / properties / filepaths / items / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedbulk_filter_workbooks1 field changed
      • addedInput schema / properties / filepaths / items / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedcopy_range1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedcopy_worksheet1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedcreate_chart1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedcreate_chart_from_series1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedcreate_named_range1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedcreate_pivot_table1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedcreate_table1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedcreate_workbook1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedcreate_workbook_snapshot2 fields changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
      • addedInput schema / properties / snapshot_filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedcreate_worksheet1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedcross_workbook_lookup2 fields changed
      • addedInput schema / properties / lookup_filepaths / items / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
      • addedInput schema / properties / source_filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changeddelete_named_range1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changeddelete_range1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changeddelete_sheet_columns1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changeddelete_sheet_rows1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changeddelete_worksheet1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changeddescribe_dataset1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changeddescribe_sheet_layout1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changeddetect_circular_dependencies1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changeddiff_workbooks2 fields changed
      • addedInput schema / properties / after_filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
      • addedInput schema / properties / before_filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Addedevaluate_workbook_scenarios
    • Changedexplain_formula_cell1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Addedexplain_recipe_delta
    • Changedfind_free_canvas1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedformat_range1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedformat_ranges1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedfreeze_panes1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedget_data_validation_info1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedget_merged_cells1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedget_workbook_metadata1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedget_worksheet_protection1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedinsert_columns1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedinsert_rows1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedinspect_conditional_format_rules1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedinspect_data_validation_rules1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedinspect_named_range1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Addedinspect_workbook_contract
    • Changedlist_all_sheets1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedlist_charts1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedlist_named_ranges1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedlist_tables1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedmerge_cells1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedplan_workbook_repairs1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedprofile_workbook1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedquery_table1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedquick_read1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedread_data_from_excel1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedread_excel_as_table1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedread_excel_table1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedread_range_formatting1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedremove_conditional_format_rules1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedremove_data_validation_rules1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedrename_worksheet1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Addedrun_workbook_recipe
    • Changedsearch_in_sheet1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedset_autofilter1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedset_column_widths1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedset_print_area1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedset_print_titles1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedset_row_heights1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedset_worksheet_protection1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedset_worksheet_visibility1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedsuggest_read_strategy1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedunion_tables1 field changed
      • addedInput schema / properties / filepaths / items / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedunmerge_cells1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedupdate_rows_by_key1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedupsert_excel_table_rows1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedvalidate_excel_range1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedvalidate_formula_syntax1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
    • Changedwrite_data_to_excel1 field changed
      • addedInput schema / properties / filepath / description
        Added value: +"Reuse supplied server path; NEVER prepend client cwd. Rooted: relative OK; unrooted stdio: absolute, ask if missing."
  2. 1 tool updatev0.10.0
    • Addedapply_workbook_changeset
  3. 5 tool updatesv0.9.0
    • Changedcreate_workbook1 field changed
      • addedInput schema / properties / sheet_name
        Added value: +{
        +  "default": "Sheet1",
        +  "title": "Sheet Name",
        +  "type": "string"
        +}
    • Addedcreate_workbook_snapshot
    • Changeddescribe_dataset1 field changed
      • addedInput schema / properties / read_boundary_mode
        Added value: +{
        +  "default": "default",
        +  "title": "Read Boundary Mode",
        +  "type": "string"
        +}
    • Changedquick_read1 field changed
      • addedInput schema / properties / read_boundary_mode
        Added value: +{
        +  "default": "default",
        +  "title": "Read Boundary Mode",
        +  "type": "string"
        +}
    • Changedread_excel_as_table1 field changed
      • addedInput schema / properties / read_boundary_mode
        Added value: +{
        +  "default": "default",
        +  "title": "Read Boundary Mode",
        +  "type": "string"
        +}
  4. 76 tool updatesv0.8.0
    • First observedaggregate_table
    • First observedanalyze_range_impact
    • First observedappend_excel_table_rows
    • First observedappend_table_rows
    • First observedapply_formula
    • First observedapply_workbook_repairs
    • First observedaudit_workbook
    • First observedautofit_columns
    • First observedbulk_aggregate_workbooks
    • First observedbulk_filter_workbooks
    • First observedcopy_range
    • First observedcopy_worksheet
    • First observedcreate_chart
    • First observedcreate_chart_from_series
    • First observedcreate_named_range
    • First observedcreate_pivot_table
    • First observedcreate_table
    • First observedcreate_workbook
    • First observedcreate_worksheet
    • First observedcross_workbook_lookup
    • First observeddelete_named_range
    • First observeddelete_range
    • First observeddelete_sheet_columns
    • First observeddelete_sheet_rows
    • First observeddelete_worksheet
    • First observeddescribe_dataset
    • First observeddescribe_sheet_layout
    • First observeddetect_circular_dependencies
    • First observeddiff_workbooks
    • First observedexplain_formula_cell
    • First observedfind_free_canvas
    • First observedformat_range
    • First observedformat_ranges
    • First observedfreeze_panes
    • First observedget_data_validation_info
    • First observedget_merged_cells
    • First observedget_workbook_metadata
    • First observedget_worksheet_protection
    • First observedinsert_columns
    • First observedinsert_rows
    • First observedinspect_conditional_format_rules
    • First observedinspect_data_validation_rules
    • First observedinspect_formula
    • First observedinspect_named_range
    • First observedlist_all_sheets
    • First observedlist_charts
    • First observedlist_named_ranges
    • First observedlist_tables
    • First observedmerge_cells
    • First observedplan_workbook_repairs
    • First observedprofile_workbook
    • First observedquery_table
    • First observedquick_read
    • First observedread_data_from_excel
    • First observedread_excel_as_table
    • First observedread_excel_table
    • First observedread_range_formatting
    • First observedremove_conditional_format_rules
    • First observedremove_data_validation_rules
    • First observedrename_worksheet
    • First observedsearch_in_sheet
    • First observedset_autofilter
    • First observedset_column_widths
    • First observedset_print_area
    • First observedset_print_titles
    • First observedset_row_heights
    • First observedset_worksheet_protection
    • First observedset_worksheet_visibility
    • First observedsuggest_read_strategy
    • First observedunion_tables
    • First observedunmerge_cells
    • First observedupdate_rows_by_key
    • First observedupsert_excel_table_rows
    • First observedvalidate_excel_range
    • First observedvalidate_formula_syntax
    • First observedwrite_data_to_excel

TDQS

C2.6/5.0

Scored across 83 tools

Disambiguation2/5

The server has many functionally overlapping tools, especially read paths such as read_data_from_excel, read_excel_as_table, quick_read, read_excel_table, query_table, and describe_dataset. Validation and append/update operations also have similar boundaries, and while some descriptions clarify intended use, an agent would still need lots of context to pick correctly.

Naming Consistency4/5

Most names follow a snake_case verb_noun convention such as create_worksheet, delete_named_range, and set_column_widths. There are minor deviations and confusingly similar pairs like append_table_rows vs append_excel_table_rows and update_rows_by_key vs upsert_excel_table_rows, but the overall pattern is readable and consistent.

Tool Count1/5

With 83 tools, the surface is extremely large for an Excel MCP server and includes many specialized one-off operations. Even though Excel is a broad domain, this count far exceeds a well-scoped toolset and creates substantial selection overhead.

Completeness3/5

The server covers a wide range of workbook operations, including reads, writes, formatting, tables, charts, named ranges, protection, layout, recipes, and auditing. However, lifecycle gaps remain for some objects, notably no visible creation for conditional formatting rules and limited create/update/delete coverage for charts, pivot tables, and native tables.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers