Skip to main content
Glama
senoff

xlsx-for-ai

by senoff

xlsx-for-ai

xlsx-for-ai MCP server

Short name: xfa — a real CLI command (xfa <file>, xfa samples, xfa --version) and the prompt shorthand (e.g. "use xfa to read this file"). Same entrypoint as xlsx-for-ai; matches the internal xfa_* / XFA_* brand surface.

Let your agent work across all your spreadsheets for you.

The missing reliability layer that makes spreadsheet reasoning production-grade for LLMs.

A thin npm client over a hosted API. Install once, add to your agent config, and your agent gets 50 production-grade tools for reading, writing, diffing, redacting, healing, and cryptographically attesting .xlsx files — engine complexity runs server-side, engine IP stays private.

npm install -g xlsx-for-ai

The global install puts the xlsx-for-ai-mcp binary on your PATH — that's what the canonical configs below point at. A pinned global install launches fast and works offline; upgrade with npm install -g xlsx-for-ai@latest when a new version ships.

Upgrading from 1.5.x? This is a re-architecture, not a feature bump: the heavy local engine is gone from the npm package. All rendering happens server-side. The cursor-reads-xlsx alias still works. See Migration below.


MCP configuration

Add the server to your agent runtime under the name xfa (so "use xfa to read this" resolves). First invocation auto-registers an anonymous client UUID — no email, no signup, no friction.

Claude Code

The global install auto-registers the xfa MCP server in ~/.claude.json — no extra step:

npm install -g xlsx-for-ai

If your environment skips install scripts (--ignore-scripts, CI, or a sudo install), register it manually:

claude mcp add xfa -- xlsx-for-ai-mcp

Verify: in a new Claude Code session, ask "what MCP tools do you have?" — 50 xlsx_* tools should appear, including xlsx_doctor (one-call health report — try it first on any unknown workbook).

Then run xfa samples (shorthand for xlsx-for-ai samples) to drop two demo workbooks in your working directory and get paste-ready prompts to try.

Cursor

Config file: ~/.cursor/mcp.json

{
  "mcpServers": {
    "xfa": {
      "command": "xlsx-for-ai-mcp"
    }
  }
}

Verify: open Cursor settings → MCP → confirm xfa shows 50 xlsx_* tools.

Continue

Config file: ~/.continue/config.json

{
  "mcpServers": [
    {
      "name": "xfa",
      "command": "xlsx-for-ai-mcp"
    }
  ]
}

Verify: restart VS Code, open the Continue panel, and check the MCP server list.

Codex CLI

Pass --mcp-server on the command line, or add to your Codex config:

{
  "mcpServers": {
    "xfa": {
      "command": "xlsx-for-ai-mcp"
    }
  }
}

Verify: run codex --list-tools and confirm 50 xlsx_* tools are listed.

Zed

Config file: ~/.config/zed/settings.json

{
  "context_servers": {
    "xfa": {
      "command": {
        "path": "xlsx-for-ai-mcp"
      }
    }
  }
}

Verify: open Zed's assistant panel — the xlsx tools should appear in the tool picker.

Windsurf

Config file: ~/.codeium/windsurf/mcp_config.json

{
  "mcpServers": {
    "xfa": {
      "command": "xlsx-for-ai-mcp"
    }
  }
}

Verify: open Windsurf → Cascade → settings, confirm xfa is listed as an active MCP server.

Custom agents / API

For custom MCP clients, the binary is xlsx-for-ai-mcp (stdio transport). Override the API base URL with the XLSX_FOR_AI_API env var for local dev against http://localhost:3000.

Using the raw HTTP API

The MCP client is the easy path, but every tool is also a plain HTTP endpoint you can call from any language — no SDK required. Registration is anonymous and keyless: POST https://api.xlsx-for-ai.dev/api/v1/clients (no auth) returns { client_id, api_key }, then call any tool with Authorization: Bearer <api_key>. The free tier is 10,000 calls/month, 10 MB per file — no billing, no email, no signup.

# Self-issue a key (no signup), then convert report.xlsx to Markdown.
# Needs jq, and bash or zsh. The base64 body is passed to curl through a
# process-substitution fd and the token through a --config heredoc on stdin, which
# keeps both out of the argument list. -fsS --max-time makes curl fail loudly on an
# HTTP error or a hang; the guard line stops on a failed key issuance.
KEY=$(curl -fsS --max-time 30 -XPOST https://api.xlsx-for-ai.dev/api/v1/clients \
  -H 'Content-Type: application/json' \
  -d '{"client_version":"2.0.0","platform":"cli"}' | jq -r .api_key)
[ -n "$KEY" ] && [ "$KEY" != null ] || { echo "key issuance failed"; exit 1; }

curl -fsS --max-time 120 -XPOST https://api.xlsx-for-ai.dev/api/v1/tools/xlsx_convert \
  --data-binary @<(base64 < report.xlsx | tr -d '\n' | jq -Rs '{file_b64: ., to: "md"}') \
  -H 'Content-Type: application/json' \
  --config - <<CFG
header = "Authorization: Bearer $KEY"
CFG

The free tier caps files at 10 MB; larger workbooks and higher volume come back as a typed JSON error with an upgrade field (see below).

Beyond the free tier, rate-limited and oversize requests come back as a typed JSON error ({ "error": { "code", "message" } }) carrying an upgrade field with your options — see GET /api/v1/reference for the full contract.

The same governed contract is served read-only from two routes — discover the whole API without a key:

  • GET /api/v1/reference — a self-contained human HTML reference for all 50 public-stable tools, including the on-ramp above.

  • GET /api/v1/openapi.json — the versioned OpenAPI 3.1 contract, verbatim. Point codegen, Postman, or Scalar/Redoc at it.


Related MCP server: Excel MCP Server

What it does

50 tools registered in tools/list. Descriptions are intentionally rich — an agent reading a transcript can tell what each tool does and when to reach for it, without extra docs.

Triage / orient

Tool

What it does

xlsx_doctor

One-call workbook health report. HIGH/MEDIUM/LOW findings (macros, external links, hidden sheets, missing metadata, large images) + quick facts + feature flags. The first call to make on an unknown workbook.

xlsx_topology

One-call workbook orientation: sheets × dimensions × formulas × named ranges × tables × validations × hyperlinks × merges in one shot.

xlsx_list_sheets

List all sheet names and metadata. Fast first-call before reading.

xlsx_schema

Infer column types, nullable flags, header row, and sample values per sheet.

xlsx_describe

Pandas-style .describe() on every numeric column — count, mean, std, min, max, quartiles.

xlsx_workbook_views

UI state — frozen panes, zoom, active cell, hidden / veryHidden sheets, tab colors, active tab.

xlsx_properties

Workbook metadata — creator, modified, company, title, custom doc properties.

Read / write

Tool

What it does

xlsx_read

Read a workbook — text, JSON, or markdown. Formulas, named ranges, layout, and data types preserved.

xlsx_read_handle

Read by server-side handle instead of bytes — for session flows where the workbook has already been uploaded and shouldn't be transferred again.

xlsx_write

Create or update a workbook from a structured spec. Multi-sheet, formulas, named ranges, table definitions.

xlsx_data_clean

Normalize messy data in place — trim whitespace, coerce types, dedupe rows, fix obvious encoding artifacts. Returns a cleaned copy + a change log. Save-As shape; never mutates the input.

xlsx_diff

Semantic diff between two workbooks — cell-level deltas, formula changes, structural shifts. Deterministic output.

xlsx_redact

Redact PII from a workbook before sharing. Server-side detection; returns redacted copy plus audit manifest.

xlsx_convert

25+ in / 16 out formats (csv, tsv, html, ods, xls, xlsb, dif, sylk, prn, txt, dbf, eth, json, markdown, xlsx, etc.).

xlsx_validate

Cross-engine consistency check — runs the workbook through TWO independent renderers and reports cell-level divergences.

xlsx_session_set_validations

Configure per-session validation rules the server will apply to subsequent calls in the same session (e.g., reject rows missing required columns). Stateful — affects this session only.

Pandas-parity (compute fresh aggregates)

Tool

What it does

xlsx_filter

Filter rows by predicate (column op value). Returns matched rows with optional projection.

xlsx_aggregate

Group-by + aggregate (sum / count / mean / min / max / median / std).

xlsx_sort

Multi-column sort with ascending / descending per column.

xlsx_value_counts

Frequency table for a column (pandas .value_counts()).

xlsx_pivot

Compute a fresh pivot table from raw data — pandas pivot_table() shape.

xlsx_eval

Evaluate freeform formulas or recompute cell refs via HyperFormula (BSD pure-JS, ~390 functions, no I/O).

Structure-preservation — the moat (pandas drops every one of these on read)

Tool

What it does

xlsx_named_ranges

List every named range with scope, ref, and value preview.

xlsx_tables

List Excel ListObjects (Tables) with column headers, data range, totals row.

xlsx_formulas

Dump every formula across the workbook (cell, sheet, formula text, cached value).

xlsx_data_validations

List cell-level validation rules (dropdowns, numeric/date bounds, text-length, custom).

xlsx_hyperlinks

List hyperlinks with kind classifier (external / internal / mailto / unknown).

xlsx_conditional_formats

List CF rules (color scales, data bars, icon sets, formula-based highlights, top-N, duplicates).

xlsx_styles

Number formats + fonts + fills + alignment, rolled up per sheet or detailed per cell.

xlsx_comments

Both legacy notes AND threaded conversations (multi-author, with display-name resolution).

xlsx_protection

Sheet locks + per-cell locked/hidden flags + workbook structure/window locks.

xlsx_merged_cells

Layout-aware merge listing with master values + kind heuristic (header / horizontal / vertical / block).

xlsx_charts

Chart spec (type, title, series formula refs, axis titles) — ExcelJS doesn't expose these at all.

xlsx_images

Embedded image inventory (format, size, sheet, anchor cells).

xlsx_pivot_tables

Pre-existing pivot definitions — location, source, row/col/page/data fields with agg functions.

xlsx_slicers_timelines

Modern Excel filter UI — slicers (table/pivot bound) + timelines (date-range with selection).

xlsx_external_links

Workbook-to-workbook references with target classification + warning when paths break on share.

xlsx_print_settings

"What would Excel print?" — print area, paper size, margins, headers/footers, print titles.

xlsx_form_controls

Interactive widgets — checkboxes, buttons, drop-downs, spinners, scroll bars, list boxes — with linked cell + bounds.

xlsx_macros

VBA macro presence + module-name heuristics + safety advice (does NOT extract source by policy).

Integrations

Tool

What it does

xlsx_post_slack

Post a workbook to a Slack channel as a file attachment with an optional message. BYOA — the agent supplies the user's Slack bot token (xoxb-…); the token is forwarded to Slack and never persisted. Uses Slack's external upload flow.

xlsx_post_teams

Post a workbook to a Microsoft Teams channel as a file attachment in a channel message, with an optional message. BYOA — the agent supplies the user's Microsoft Graph access token (JWT); the token is forwarded to Microsoft and never persisted. Uses Graph's filesFolder + upload-session + post-message flow.

Integrity verification

Tool

What it does

xlsx_stamp

Sign a workbook with a cryptographic "integrity verification" stamp — Ed25519-signed claims (named factual checks + their pass/fail/skip status + a content hash) embedded in docProps/custom.xml. The stamp travels with the file across saves; a recipient can verify it later to confirm the file hasn't been tampered with since signing. Factual attestations only — never an opinion-shaped seal of approval.

xlsx_verify_stamp

Verify a workbook's embedded stamp. Returns (a) whether the Ed25519 signature is valid against the registered public key, (b) whether the workbook bytes match the hash IN the signed claims, and (c) the full check-result content of the stamp. Three distinct trust signals — signature integrity, content integrity, and what was originally attested.

xlsx_receipt

Attach an AI-generation receipt — Ed25519-signed claims describing the caller-declared agent identity (name, display name, identity URL), generation timestamp, content hash, optional source-file hashes, optional prompt hash, optional MCP tools called, and an optional description. Honesty boundary (load-bearing): the server signs the caller-declared agent.name — it does NOT verify the caller actually IS that agent. Cryptographic identity binding (per-agent issued signing keys) is v1.1+ scope.

xlsx_verify_receipt

Verify a workbook's embedded receipt. Returns the same three trust signals as xlsx_verify_stamp plus the caller-declared agent identity AS declared (no UI affordances implying cryptographic identity verification). Use to surface "where did this file come from?" — backed by the server's signature over caller honest declaration.

Healer — external-reference breakage

Workbooks rot. A file moves and #REF! propagates through every dependent formula. A Power Query connection embeds credentials nobody can rotate. A defined name points at an external workbook that doesn't exist anymore. The healer family diagnoses these classes and applies targeted cures — read-only diagnosis, simulated-before-applied repair, and a high-level intent path when the agent doesn't want to spell out individual cure operations.

Tool

What it does

xlsx_healer_diagnose

Structured report of external-reference breakage — broken external refs, defined-name external refs, Power Query connections with embedded credentials, #REF! propagation maps, multi-hop chains. Read-only.

xlsx_healer_simulate

Show what a specific cure operation would change before applying it — same shape as xlsx_healer_cure but read-only. Use to preview impact when the agent is uncertain whether to proceed.

xlsx_healer_cure

Apply ONE specific cure operation (e.g., strip broken external refs, harmonize a defined name, replace #REF! propagation with a deterministic value). Save-As shape; the source workbook is preserved unless confirm:true is set with mode:"in_place".

xlsx_healer_intent

High-level intent path — make-it-work, make-standalone, migrate — translated into the right sequence of cure ops. For when the agent knows the goal but not the operation.

Tool responses include a citation footer and a _meta block (tool name, version, tier, request ID, powered_by). Both pass through verbatim; nothing is stripped.


Tools

All 50 tools the MCP server exposes (generated from tools/list). Invoke any by asking your agent in plain English, or call the API/CLI directly.

Read & explore

  • xlsx_read — read an .xlsx file by path and return a rendered markdown/JSON/SQL representation.

  • xlsx_read_handle — read a workbook that has already been uploaded to the server via the chunked upload flow, by its server-side cache handle, WITHOUT re-transferring the bytes. Returns the same shape as xlsx_read (text / json / markdown) but skips the file_b64 round-trip.

  • xlsx_validate — cross-engine consistency check on a LOCAL .xlsx file — runs the workbook through TWO independent renderers (@protobi/exceljs and @cj-tech-master/excelts) and reports cell-level divergences.

Inspect structure

  • xlsx_charts — List every chart in a LOCAL .xlsx file with type (bar / line / pie / scatter / area / doughnut / radar / stock / surface / bubble), title, axis titles, and per-series formula refs (the cell ranges the chart pulls from). Sheet attribution via the OOXML drawing rel chain.

  • xlsx_comments — list every cell comment in a workbook — both legacy notes (yellow stickies, cell.note) AND modern threaded comments (multi-author conversations stored separately in the OOXML zip). Per entry: kind, sheet, cell, author, text, plus any reply thread.

  • xlsx_conditional_formats — list every conditional formatting rule in a workbook — color scales, data bars, icon sets, formula-based highlights, top-N, duplicate / unique values, contains-text, time-period, above-average. Per rule: range, type, operator, formulae, priority, stopIfTrue.

  • xlsx_data_validations — list every cell-level data validation rule (dropdowns, numeric/date bounds, text-length caps, custom formulas) defined in a workbook — the constraints that Excel enforces when a human types into the cell.

  • xlsx_describe — pandas-style df.describe() per column — count, nulls, unique, min/max/mean/std for numerics, dtype with purity score.

  • xlsx_external_links — list every external workbook reference this file depends on — =[Budget.xlsx]Sheet1!A1 style formulas. Per link: target path (decoded), classification (http / network share / absolute / relative), sheets pulled from the external workbook, count of cached cell values, and defined-name references.

  • xlsx_form_controls — list every form control (Check Box, Button, Drop-down, List Box, Option Button, Scroll Bar, Spinner, Label, Group Box) in a workbook with the linked cell, current value, dropdown source range, and min/max/step bounds where applicable.

  • xlsx_formulas — extract every formula in a LOCAL .xlsx workbook — cell coord (A1), formula text, cached result. openpyxl-style read-only metadata.

  • xlsx_hyperlinks — list every hyperlink in a workbook with its anchor cell, target URL/anchor, display text, tooltip, and a kind classifier (external / internal / mailto / unknown).

  • xlsx_images — List every embedded image in a LOCAL .xlsx file with format (png / jpg / gif / svg / bmp / tiff / emf / wmf), size in bytes, sheet attribution, and anchor cell range (the cells the image floats over). Reads xl/media/* + xl/drawings/* directly.

  • xlsx_list_sheets — list sheet names, dimensions, and visibility for a LOCAL .xlsx file.

  • xlsx_macros — Inspect xlsm / xlsb workbooks for VBA macro presence, vbaProject.bin size, and likely module names (ThisWorkbook / Sheet / Module / Class / UserForm via heuristic UTF-16LE scan). Returns short safety advice the LLM should relay to the user.

  • xlsx_merged_cells — list every merged-cell region with master-cell value, range, span dimensions, and kind heuristic ("header" / "horizontal" / "vertical" / "block"). Pandas reads merged cells by dropping the relationship — it sees one value in the master cell and three blanks alongside. xlsx_merged_cells is the layout-aware view: "A1:D1 is ONE cell that says Q4 2024" rather than four cells where three are mysteriously empty.

  • xlsx_named_ranges — list all defined names (named ranges) in a LOCAL .xlsx workbook — name, scope (workbook or sheet), kind (cell / range / formula), reference.

  • xlsx_pivot_tables — List every PRE-EXISTING pivot table definition in a LOCAL .xlsx file (the ones an Excel user already built). Per pivot: sheet, name, location range, source range (or named-range / table reference), row / column / page fields, and data fields with their agg function (sum / count / average / max / min / product / stdDev / etc.).

  • xlsx_print_settings — surface "what would Excel print right now" per worksheet — print area, orientation, paper size (A4 / Letter / Legal / Tabloid / etc.), scale or fitToPage, margins, headers/footers split into Excel's L/C/R zones, print titles (rows / columns repeated on every page), manual page breaks, plus B&W / draft / centered flags.

  • xlsx_properties — Surface the workbook's identity card from a LOCAL .xlsx file. Core: creator, last_modified_by, created/modified/lastPrinted timestamps, title, subject, company, manager, keywords, category, description. Application: app name + version, doc security label, hyperlink base. Custom: every user-defined Info > Properties entry (Department, ReviewedBy, ApprovalRequired, etc.) with type tag and value.

  • xlsx_protection — Surface every protection setting in a LOCAL .xlsx file so an agent knows what it can and cannot edit. Workbook-level (lockStructure, lockWindows), per-sheet (protected? password? hidden state?), per-action allow/block list (formatCells, sort, insertRows, pivotTables, etc.), and per-cell unlocked / hidden samples — these are the cells a human would actually be allowed to type into when the sheet is otherwise read-only.

  • xlsx_schema — infer column schema of a LOCAL .xlsx file — types, nullable flags, header row, sample values.

  • xlsx_slicers_timelines — List every slicer (interactive filter button) and timeline (date-range filter visual) in a LOCAL .xlsx file with their captions, source bindings (table column or pivot table), and timeline granularity (years / quarters / months / days) plus the currently-selected date range.

  • xlsx_styles — surface cell formatting (number formats, fonts, fills, alignment) so an agent knows what a cell LOOKS like, not just its raw value. Default mode: per-sheet rollup of top-N number formats / fonts / fills with counts. Detailed mode (opt-in, capped at 1000 cells): per-cell breakdown for narrow queries.

  • xlsx_tables — list every Excel ListObject ("Format as Table" structures) in a LOCAL .xlsx workbook — name, sheet, range, header/totals flags, columns.

  • xlsx_workbook_views — Surface the UI state of a LOCAL .xlsx file — what a human sees when they open it in Excel. Per sheet: visibility (visible / hidden / veryHidden), view state, zoom, active cell + selection, frozen-pane breakdown, gridlines / row-col headers / ruler / RTL flags, tab color. Workbook level: which sheet is active when Excel opens.

Query & analyze

  • xlsx_aggregate — pandas-style df.groupby([cols]).agg({col: func}) on a LOCAL .xlsx file. funcs: sum / mean / min / max / count / count_distinct.

  • xlsx_diff — compute a semantic diff between two LOCAL .xlsx files — cell-level deltas, formula changes, added/removed rows.

  • xlsx_eval — evaluate Excel formulas against a LOCAL .xlsx file via HyperFormula. xlwings-style.

  • xlsx_filter — pandas-style row filter on a LOCAL .xlsx file with predicates AND-combined: eq/ne/gt/gte/lt/lte/contains/in/is_null/not_null.

  • xlsx_pivot — pandas-style pivot_table() on a LOCAL .xlsx file — reshape a flat table into a 2D matrix where rows are unique values of index, columns are unique values of columns, and cells are an aggregation of values.

  • xlsx_sort — pandas-style df.sort_values() on a LOCAL .xlsx file with multi-column sort and per-column direction (asc/desc, default asc).

  • xlsx_topology — one-call workbook orientation. Returns sheets × dimensions × formulas × named ranges × tables × validations × hyperlinks × merges in one shot, plus feature flags (macros / external refs / pivots / LAMBDA / dynamic arrays).

  • xlsx_value_counts — pandas-style Series.value_counts() on one column of a LOCAL .xlsx file — count each unique value, sorted by frequency desc, with percentage.

Clean & fix

  • xlsx_data_clean — AI-native data cleaning for a LOCAL .xlsx file. Scans for the seven most common data-grime issues — NA variants (N/A, NA, null, -), merged-cell residue, type-coercion mistakes (numeric-as-text / date-as-serial / leading-zero stripped), trailing-row noise (footers / totals), header-row-not-first (preamble before headers), encoding glitches (UTF-8-as-CP1252 mojibake), and duplicate column headers — and either flags them (diagnose mode) or applies deterministic fixes (execute mode).

Convert

  • xlsx_convert — universal spreadsheet format converter. Reads ANY of 25+ input formats (xlsx, xlsb, xlsm, xls, ods, fods, numbers, csv, tsv, dbf, lotus 1-2-3, quattro pro, sylk, dif, html, rtf, etc.) and emits ANY supported output format (xlsx, csv, json, md, html, etc.).

Write (new file)

  • xlsx_redact — redact PII and sensitive values from a LOCAL .xlsx file before sharing or archiving.

  • xlsx_write — create or update a LOCAL .xlsx file from a structured spec.

Integrity & verification

  • xlsx_healer_cure — Apply ONE specific cure operation against a diagnosed workbook. Operations: rename_move (rewrite ref paths), pattern_bulk (regex-style ref rewrites), source_deleted_freeze (replace broken refs with cached values), source_deleted_redirect (point at a replacement file), source_deleted_localize (snapshot external source into a local copy), permission_denied (strip credentials), structure_changed (rewrite formulas for moved cells), format_change (re-link after extension change), make_standalone (fully dereference all externals). Returns cured workbook bytes + receipt.

  • xlsx_healer_diagnose — produce a structured diagnostic report of external references that are broken or at risk in a workbook. Returns five classes of finding: (1) external-workbook references that can't resolve, (2) defined-name external refs, (3) Power Query connections with embedded credentials, (4) #REF! propagation maps from upstream breakage, (5) multi-hop chains (workbook → workbook → workbook). Findings carry reference_id keys that downstream cure operations key on.

  • xlsx_healer_intent — Goal-driven healing. Caller declares an INTENT (make-it-work, make-standalone, or migrate) instead of a specific cure operation; Healer plans the operation sequence + applies it. make-it-work: minimum surgery to clear errors. make-standalone: fully de-externalize (snapshot every external dep). migrate: rewrite all references against a from/to prefix pair. Returns the planned operations, cured bytes, and an unactionable list.

  • xlsx_healer_simulate — simulate recipient-side accessibility of a workbook's external references. Given a list of paths the recipient CAN see (accessible_paths), returns which references will still resolve at the recipient end and which will break (and why). Read-only; produces no output workbook.

  • xlsx_receipt — Attach an AI-generation receipt to a LOCAL .xlsx file — a cryptographic attestation embedded in docProps/custom.xml that says "this file was generated by THIS agent, at THIS time, against THESE inputs." Returns the receipted workbook as base64 in _meta.file_b64; pass out_path to write to disk.

  • xlsx_stamp — Sign a LOCAL .xlsx file with a "workbook integrity verification" stamp — a cryptographic attestation embedded in docProps/custom.xml that says "this file was generated by these tools, passed these N specific checks, signed at this time, and hasn't been tampered with since." Factual claims only (never an opinion-shaped seal of approval). Returns the stamped workbook as base64 in _meta.file_b64; pass out_path to write to disk.

  • xlsx_verify_receipt — verify a workbook's embedded AI-generation receipt. Returns whether the signature is valid, whether the recomputed content hash matches the hash IN the receipt, and the full caller-declared claims (agent identity, generation timestamp, source-file hashes, prompt hash, MCP tools called, description).

  • xlsx_verify_stamp — verify a workbook's embedded integrity-verification stamp. Returns whether the cryptographic signature is valid, whether the workbook bytes match what was signed (recomputed hash vs hash IN the stamp), and the full check-result content of the stamp.

Integrations

  • xlsx_post_slack — upload a local .xlsx file to a Slack channel as a file attachment, with an optional accompanying message.

  • xlsx_post_teams — Upload a local .xlsx file to a Microsoft Teams channel as a file attachment, with an optional accompanying message.

Session

  • xlsx_session_set_validations — configure per-session data-validation rules the server will apply to subsequent calls in the same session (e.g., reject rows missing required columns, enforce enum values on a category column, range-bound numeric inputs). Stateful — affects this session only.

One-call capstone

  • xlsx_doctor — ONE-CALL workbook health report for a LOCAL .xlsx file. Scans for macros, external workbook references, hidden / veryHidden sheets, missing creator metadata, large embedded images, and surfaces interesting feature flags (LAMBDA, dynamic arrays, pivot cache, slicers, threaded comments). Findings ranked HIGH / MEDIUM / LOW. Plus quick_facts: sheet count, formulas, named ranges, merges, hyperlinks, validations, images, file size.


Functions

xlsx_eval recalculates formulas with HyperFormula v3.2.0 — 382 Excel functions across these categories:

  • Math & trig (101) — ABS, ACOS, ACOSH, ACOT, ACOTH, ARABIC, ASIN, ASINH, ATAN, ATAN2, ATANH, AVERAGE, AVERAGEA, AVERAGEIF, CEILING, CEILING.MATH, CEILING.PRECISE, COMBIN, COMBINA, COS, COSH, COT, COTH, COUNT, COUNTA, COUNTBLANK, COUNTIF, COUNTIFS, COUNTUNIQUE, CSC, CSCH, DEGREES, EVEN, EXP, FACT, FACTDOUBLE, FLOOR, FLOOR.MATH, FLOOR.PRECISE, GCD, INT, ISO.CEILING, LCM, LN, LOG, LOG10, MAX, MAXA, MAXIFS, MIN, MINA, MINIFS, MOD, MROUND, MULTINOMIAL, ODD, PI, POWER, PRODUCT, QUOTIENT, RADIANS, RAND, RANDBETWEEN, ROMAN, ROUND, ROUNDDOWN, ROUNDUP, SEC, SECH, SERIESSUM, SIGN, SIN, SINH, SQRT, SQRTPI, STDEV, STDEV.P, STDEV.S, STDEVA, STDEVP, STDEVPA, STDEVS, SUBTOTAL, SUM, SUMIF, SUMIFS, SUMPRODUCT, SUMSQ, SUMX2MY2, SUMX2PY2, SUMXMY2, TAN, TANH, TRUNC, VAR, VAR.P, VAR.S, VARA, VARP, VARPA, VARS

  • Statistical (108) — AVEDEV, BESSELI, BESSELJ, BESSELK, BESSELY, BETA.DIST, BETA.INV, BETADIST, BETAINV, BINOM.DIST, BINOM.INV, BINOMDIST, CHIDIST, CHIDISTRT, CHIINV, CHIINVRT, CHISQ.DIST, CHISQ.DIST.RT, CHISQ.INV, CHISQ.INV.RT, CHISQ.TEST, CHITEST, CONFIDENCE, CONFIDENCE.NORM, CONFIDENCE.T, CORREL, COVAR, COVARIANCE.P, COVARIANCE.S, COVARIANCEP, COVARIANCES, CRITBINOM, DEVSQ, ERF, ERFC, EXPON.DIST, EXPONDIST, F.DIST, F.DIST.RT, F.INV, F.INV.RT, F.TEST, FDIST, FDISTRT, FINV, FINVRT, FISHER, FISHERINV, FTEST, GAMMA, GAMMA.DIST, GAMMA.INV, GAMMADIST, GAMMAINV, GAMMALN, GAMMALN.PRECISE, GAUSS, GEOMEAN, HARMEAN, HYPGEOM.DIST, HYPGEOMDIST, LARGE, LOGINV, LOGNORM.DIST, LOGNORM.INV, LOGNORMDIST, LOGNORMINV, MEDIAN, NEGBINOM.DIST, NEGBINOMDIST, NORM.DIST, NORM.INV, NORM.S.DIST, NORM.S.INV, NORMDIST, NORMINV, NORMSDIST, NORMSINV, PEARSON, PHI, POISSON, POISSON.DIST, POISSONDIST, RSQ, SKEW, SKEW.P, SKEWP, SLOPE, SMALL, STANDARDIZE, STEYX, T.DIST, T.DIST.2T, T.DIST.RT, T.INV, T.INV.2T, T.TEST, TDIST, TDIST2T, TDISTRT, TINV, TINV2T, TTEST, WEIBULL, WEIBULL.DIST, WEIBULLDIST, Z.TEST, ZTEST

  • Financial (28) — CUMIPMT, CUMPRINC, DB, DDB, DOLLARDE, DOLLARFR, EFFECT, FV, FVSCHEDULE, IPMT, IRR, ISPMT, MIRR, NOMINAL, NPER, NPV, PDURATION, PMT, PPMT, PV, RATE, RRI, SLN, SYD, TBILLEQ, TBILLPRICE, TBILLYIELD, XNPV

  • Date & time (27) — DATE, DATEDIF, DATEVALUE, DAY, DAYS, DAYS360, EDATE, EOMONTH, HOUR, INTERVAL, ISOWEEKNUM, MINUTE, MONTH, NETWORKDAYS, NETWORKDAYS.INTL, NOW, SECOND, TEXT, TIME, TIMEVALUE, TODAY, WEEKDAY, WEEKNUM, WORKDAY, WORKDAY.INTL, YEAR, YEARFRAC

  • Text (26) — CHAR, CLEAN, CODE, CONCATENATE, EXACT, FIND, FORMULATEXT, HYPERLINK, LEFT, LEN, LOWER, MID, N, PROPER, REPLACE, REPT, RIGHT, SEARCH, SPLIT, SUBSTITUTE, T, TRIM, UNICHAR, UNICODE, UPPER, VALUE

  • Logical (12) — AND, CHOOSE, FALSE, IF, IFERROR, IFNA, IFS, NOT, OR, SWITCH, TRUE, XOR

  • Lookup & reference (13) — ADDRESS, ARRAYFORMULA, ARRAY_CONSTRAIN, FILTER, HLOOKUP, MATCH, MAXPOOL, MEDIANPOOL, MMULT, OFFSET, TRANSPOSE, VLOOKUP, XLOOKUP

  • Information (21) — COLUMN, COLUMNS, INDEX, ISBINARY, ISBLANK, ISERR, ISERROR, ISEVEN, ISFORMULA, ISLOGICAL, ISNA, ISNONTEXT, ISNUMBER, ISODD, ISREF, ISTEXT, NA, ROW, ROWS, SHEET, SHEETS

  • Engineering (46) — BASE, BIN2DEC, BIN2HEX, BIN2OCT, BITAND, BITLSHIFT, BITOR, BITRSHIFT, BITXOR, COMPLEX, DEC2BIN, DEC2HEX, DEC2OCT, DECIMAL, DELTA, HEX2BIN, HEX2DEC, HEX2OCT, IMABS, IMAGINARY, IMARGUMENT, IMCONJUGATE, IMCOS, IMCOSH, IMCOT, IMCSC, IMCSCH, IMDIV, IMEXP, IMLN, IMLOG10, IMLOG2, IMPOWER, IMPRODUCT, IMREAL, IMSEC, IMSECH, IMSIN, IMSINH, IMSQRT, IMSUB, IMSUM, IMTAN, OCT2BIN, OCT2DEC, OCT2HEX

The engine has no INDIRECT, WEBSERVICE, RTD, DDE — there is no dynamic-reference, network, or external-data function in the set, so a recalc can't reach off-workbook. The absent functions are the sandbox boundary.


FP&A workflows

xlsx-for-ai is built for agents working on real financial spreadsheets. Common workflows:

Budget vs. actual variance analysis

xlsx_read → extract actuals and budget → agent computes variances → xlsx_write → deliver updated workbook

Month-end reconciliation

xlsx_read (bank export) + xlsx_read (GL extract) → agent matches rows → xlsx_diff → audit trail of unmatched items

Audit-trail extraction

xlsx_schema → identify change-log columns → xlsx_read with sheet filter → agent summarizes changes by author/date

Multi-entity consolidation

xlsx_read × N entity files → agent aggregates → xlsx_write → consolidated workbook with intercompany eliminations noted

Pre-share PII redaction

xlsx_redact → strips SSNs, emails, employee IDs → redacted file safe for external distribution

These workflows are the reason tool descriptions are FP&A-legible: when a developer builds an agent for a finance team, the agent's LLM reads the tool descriptions and routes correctly without extra prompt engineering.


Reliability features

  • Deterministic diffs. xlsx_diff produces identical output for identical inputs — safe to version-control, safe to assert against in CI.

  • Confidence-rated schema inference. xlsx_schema returns type confidence scores alongside inferred types. Agents can branch on confidence rather than trusting a blind guess.

  • Audit trail. Every tool call — success or failure — is logged server-side with timestamp, client ID, endpoint, file size, latency, and error class.

  • Hardened input validation. Four pre-engine guards on every uploaded buffer: billion-laughs XML bomb defense, control-character stripping, worksheet buffer ceiling (slow ZIP-bomb defense), and typed error chaining. Applied before the xlsx engine sees any bytes.

  • Agent-readable errors. Rate-limit and validation errors return structured JSON — agents can read them and prompt the user intelligently, not just surface a status code.


Privacy

Files are transmitted to https://api.xlsx-for-ai.dev over HTTPS and processed in memory. Files are not persisted beyond the duration of a single request. No email is collected. Registration is anonymous UUID only.

See PRIVACY.md for the full data-handling policy.


What it costs

Free. All 50 tools, no paid tiers. No credit card, no email — registration is an anonymous client UUID created on first call. A volume cap (10,000 calls/month) keeps the hosted API healthy; that's the only limit.


License

The npm client (xlsx-for-ai, this package) is MIT. The hosted API server (xlsx-for-ai-server) is proprietary — engine IP, rendering pipeline, and semantic-diff algorithm are not open source.


Architecture

agent (Claude Code / Cursor / Continue / Zed / Windsurf / custom)
  └── MCP stdio
        └── xlsx-for-ai-mcp  (this package, ~200 lines)
              └── POST /api/v1/tools/<name>  →  api.xlsx-for-ai.dev
                    └── server-side engine (ExcelJS, formula eval, schema inference, redaction)

Requirements: Node.js 22+. 1.5.x line stays maintained on main for users who cannot upgrade.


Config

Stored at ~/.xlsx-for-ai/config.json. Created automatically on first run.

{
  "client_id": "<uuid>",
  "api_key": "<opaque>",
  "registered_at": "2026-05-05T00:00:00.000Z",
  "telemetry": false,
  "consent_version": 1
}

Telemetry is opt-in:

xlsx-for-ai --enable-telemetry
xlsx-for-ai --disable-telemetry
xlsx-for-ai --telemetry-status

Privacy modes — error-capture is off by default; when enabled, cell values are stripped before anything is retained (structure only, 30-day TTL, never used for training). XFA_PRIVACY=strict opts out entirely. See PRIVACY.md:

# Per-session flag (applies to all tool calls in the CLI invocation)
xlsx-for-ai --privacy=strict myfile.xlsx

# Environment variable (applies globally to all requests in the process)
XFA_PRIVACY=strict xlsx-for-ai myfile.xlsx

# In MCP server config (applies to all tool calls from the MCP server):
# Set XFA_PRIVACY=strict in your MCP server's env block

Delete the config to reset your client ID and API key:

rm ~/.xlsx-for-ai/config.json

Migration from 1.5.x

Was

Now

All rendering local

All rendering server-side

xlsx-for-ai <file> CLI

Same — still works

cursor-reads-xlsx

Still works — back-compat alias

--list-sheets, --schema, --diff, etc.

Moved to MCP tools (xlsx_list_sheets, xlsx_schema, xlsx_diff)

--export-redacted-workbook

Moved to xlsx_redact MCP tool

Heavy npm install (~50 MB)

Thin install (~2 MB); engine stays server-side

PII detection, region scoring

Moved server-side; not exposed in the npm package

The config file at ~/.xlsx-for-ai/config.json is extended in-place — existing telemetry consent is preserved.


Security

See SECURITY.md. All file content is transmitted to https://api.xlsx-for-ai.dev over HTTPS. Files are not retained beyond the duration of a single request.

Available Tools

50 tools
xlsx_aggregateA
Read-onlyIdempotent

pandas-style df.groupby([cols]).agg({col: func}) on a LOCAL .xlsx file. funcs: sum / mean / min / max / count / count_distinct. Type-aware: numeric aggregations skip non-numeric values cleanly instead of pandas' silent NaN promotion.

USE WHEN: the user asks "what's the total / average / count of X by Y?" on a LOCAL .xlsx file. Returns one row per group with the requested aggregations as a markdown table.

DO NOT USE WHEN: the user wants to see individual rows (use xlsx_filter). Or for a 2D pivot (use xlsx_pivot).

ParametersJSON Schema
NameRequiredDescriptionDefault
aggsYes
file_b64Yes
group_byYes
optionsNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description adds value by explaining type-awareness (skips non-numeric values cleanly). No contradictions.

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?

Concise and well-structured: functional description, behavioral note, clear usage guidelines. No wasted words.

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?

Describes return format (markdown table), type-awareness, and usage boundaries. Could mention edge cases or performance notes, but overall adequate for complexity.

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 0%, so description must compensate. It gives a conceptual mapping to pandas groupby but doesn't explain each parameter individually. Provides context but not per-parameter details.

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 it performs pandas-style groupby aggregation on local .xlsx files with specific functions (sum, mean, etc.). It differentiates from sibling tools like xlsx_filter and xlsx_pivot by stating when to use and when not 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 Guidelines5/5

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

Explicitly states when to use (user asks for totals/averages/counts by group) and when not to use (for individual rows or 2D pivot). Names alternatives (xlsx_filter, xlsx_pivot), providing clear guidance.

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

xlsx_chartsA
Read-onlyIdempotent

List every chart in a LOCAL .xlsx file with type (bar / line / pie / scatter / area / doughnut / radar / stock / surface / bubble), title, axis titles, and per-series formula refs (the cell ranges the chart pulls from). Sheet attribution via the OOXML drawing rel chain.

Gives you the chart contract — "Sheet2 has a bar chart titled Q4 Revenue plotting Sheet1!B2:B10 against Sheet1!A2:A10" — without rendering anything.

USE WHEN: documenting a financial model / dashboard so an LLM knows "what does this visualize, from which cells?". Or auditing for chart-data drift after a refactor.

DO NOT USE WHEN: you want to RENDER the chart as an image (this returns the spec, not pixels). Or you only need cell values (use xlsx_read).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes
optionsNo

TDQS

A4/5.0
Behavior4/5

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

Annotations provide readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds context by stating it returns the spec (not pixels), explains sheet attribution via OOXML drawing rel chain, and confirms no rendering. No contradictions, and it enriches understanding beyond annotations.

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 concise and well-structured, with a clear opening sentence, a brief example, and USE WHEN/DO NOT USE WHEN sections. Every sentence adds value without redundancy.

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 description covers what the tool does and when to use it, but lacks parameter explanations (0% coverage). With no output schema, it partially compensates by describing the return content. However, for a tool with two parameters and nested objects, more detail on parameters is needed for full completeness.

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 0%, meaning the description does not explain any parameters (file_b64, options with limit and sheet). The description mentions 'limit' and 'sheet' indirectly but does not elaborate on their purpose or constraints, leaving a significant gap for parameter usage.

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 'List every chart in a LOCAL .xlsx file' with specific details like chart type, title, axis titles, and per-series formula refs. It distinguishes from siblings by noting that xlsx_read is for cell values, 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 Guidelines5/5

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

Explicit USE WHEN and DO NOT USE WHEN sections provide clear guidance. It specifies documenting financial models or auditing for drift as use cases, and warns against using for rendering or cell values, directing to xlsx_read as an alternative.

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

xlsx_commentsA
Read-onlyIdempotent

list every cell comment in a workbook — both legacy notes (yellow stickies, cell.note) AND modern threaded comments (multi-author conversations stored separately in the OOXML zip). Per entry: kind, sheet, cell, author, text, plus any reply thread. No other tool can do this: pandas drops both comment systems on read entirely; openpyxl reads only legacy notes (not threaded comments). xlsx_comments reads both, maps personId → display name via xl/persons/person.xml, and folds reply chains into each root comment.

USE WHEN: extracting reviewer feedback / approval threads from a spreadsheet (this is where humans hide intent). Or auditing a workbook for hidden context the values themselves don't carry. Or building a "show me everywhere finance flagged something" report. Free tier — counts against the 10k/mo cap.

DO NOT USE WHEN: just reading values (use xlsx_read). Or trying to ADD comments to a workbook (xlsx_write does not write comments).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes
optionsNo

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 other safety traits. The description adds beyond this by detailing internal behavior: mapping personId to display names via a specific XML file, folding reply chains into root comments, and mentioning the free-tier 10k/mo cap. No contradiction with annotations.

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 well-structured with clear sections (USE WHEN, DO NOT USE WHEN) and front-loads the core purpose. While every sentence adds value, it could be slightly trimmed (e.g., the technical details about OOXML zip are helpful but may be secondary). Overall, it earns its length.

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

Completeness5/5

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

Given the complexity of handling two comment systems and no output schema, the description is highly complete. It explains the scope, limitations (e.g., cannot add comments), and technical details (personId mapping, reply chains). Annotations cover safety, so the description focuses on behavioral and contextual aspects effectively.

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 0%, meaning the input schema lacks descriptions. The description does not explain the parameters (file_b64, options.limit, options.sheet) beyond their existence. It relies on context, but agents would benefit from explicit parameter guidance. This is a significant gap for a 2-parameter tool with nested objects.

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 specifies a precise verb ('list') and resource ('every cell comment in a workbook'), covering both legacy notes and threaded comments. It explicitly distinguishes itself from siblings by noting that no other tool (including pandas and openpyxl) can do this, providing clear differentiation.

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?

The description provides explicit USE WHEN and DO NOT USE WHEN sections. It lists specific scenarios (extracting reviewer feedback, auditing, building reports) and clearly states when to use alternatives (xlsx_read for values, notes that xlsx_write does not write comments). This gives agents strong guidance on tool selection.

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

xlsx_conditional_formatsA
Read-onlyIdempotent

list every conditional formatting rule in a workbook — color scales, data bars, icon sets, formula-based highlights, top-N, duplicate / unique values, contains-text, time-period, above-average. Per rule: range, type, operator, formulae, priority, stopIfTrue. No other tool can do this: pandas drops conditional formatting on read entirely; openpyxl exposes the raw CF objects but offers no rollup or classification. This surfaces every rule plus a per-type tally so an agent can answer "does this workbook use color scales?" without scanning every row.

USE WHEN: auditing a dashboard / financial model to know what visual cues a human would see. Or extracting business rules embedded as CF (e.g. "row turns red when col C > 1000" — the rule IS the spec). Or generating fixtures that match a workbook's CF semantics. Free tier — counts against the 10k/mo cap.

DO NOT USE WHEN: you only care about cell values (use xlsx_read). Or you want to re-apply CF rules to a NEW workbook (xlsx_write does not write CF rules).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes
optionsNo

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint. The description adds context: lists output contents (range, type, operator, formulae, priority, stopIfTrue) and mentions a per-type tally, plus notes the tool counts against a monthly cap. No contradictions with annotations.

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 well-structured with clear sections (list of rules, uniqueness claim, USE WHEN, DO NOT USE WHEN). It is slightly verbose but each sentence adds value. Could be more concise but not overly long.

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 description covers the tool's output (per-rule details, tally) and usage contexts well, but lacks parameter documentation. No output schema exists, so the description should compensate by explaining expected input (file_b64, options) but does not. Additionally, it does not explain error conditions or file size limits beyond the 10k cap.

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 has 2 parameters (file_b64, options with limit/sheet) with 0% description coverage. The description provides zero information about these parameters: no explanation of file_b64 (base64-encoded file), limit, or sheet. The agent is left guessing parameter meaning and constraints. Severe gap.

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 defines the tool's purpose: listing every conditional formatting rule in a workbook, specifying rule types (color scales, data bars, icon sets, etc.) and per-rule details. It explicitly distinguishes itself from siblings by noting that pandas drops conditional formatting and openpyxl lacks rollup/classification, making the tool unique.

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?

The description provides explicit USE WHEN and DO NOT USE WHEN sections, citing specific audit/scenario contexts (e.g., auditing dashboards, extracting business rules) and alternatives (use xlsx_read for cell values, xlsx_write cannot re-apply CF rules). Also notes the free tier cap (10k/mo). Excellent guidance.

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

xlsx_convertA

universal spreadsheet format converter. Reads ANY of 25+ input formats (xlsx, xlsb, xlsm, xls, ods, fods, numbers, csv, tsv, dbf, lotus 1-2-3, quattro pro, sylk, dif, html, rtf, etc.) and emits ANY supported output format (xlsx, csv, json, md, html, etc.). No other tool in the MCP space ingests legacy formats — pandas.read_excel only reads xlsx/xls; openpyxl is xlsx-only. xlsx_convert is the only "any-spreadsheet → LLM-readable" hosted endpoint.

USE WHEN: the user has a .xls / .xlsb / .ods / Numbers / .csv / Lotus / Quattro / dBASE file they want to read or convert. Output to text formats (csv/json/md/html) renders into the response body for the agent to read directly. Output to binary formats (xlsx/xlsb/etc.) returns bytes in _meta.file_b64 for the npm client to save.

DO NOT USE WHEN: the input is already xlsx and you want to read it (use xlsx_read). Or for upload/attached files.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes
optionsNo
toYesTarget format. Binary formats return bytes in _meta.file_b64; text formats render in body.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false, destructiveHint=false, idempotentHint=false. The description adds value by explaining that text formats render in the response body for agent reading, while binary formats return bytes in _meta.file_b64 for client saving. This goes beyond annotations and clarifies behavioral aspects.

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 fairly long but well-structured with sections for purpose, usage, and output behavior. It front-loads the core function and uses bullet-like lines for guidelines. A slight reduction in redundancy could improve conciseness, but it remains effective.

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

Completeness5/5

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

Given the complexity of handling multiple formats and output behaviors, the description is complete. It explains input format variety, output format options, usage guidelines, and return value handling for both text and binary. No output schema exists, so the description adequately covers what the tool returns.

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 33%, but the description compensates by explaining the purpose of file_b64, the options object (with sheet and sheets), and the to parameter format targets. It adds behavioral context about text vs binary output for the to parameter, which is not in the schema.

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 it is a 'universal spreadsheet format converter' that reads 25+ input formats and emits many output formats. It distinguishes itself from siblings like xlsx_read by emphasizing legacy format support, 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 Guidelines5/5

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

The description provides explicit 'USE WHEN' and 'DO NOT USE WHEN' sections, detailing when to use this tool (e.g., for legacy formats) and when to use alternatives (e.g., xlsx_read for xlsx). It also explains output behavior differences between text and binary formats.

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

xlsx_data_cleanA

AI-native data cleaning for a LOCAL .xlsx file. Scans for the seven most common data-grime issues — NA variants (N/A, NA, null, -), merged-cell residue, type-coercion mistakes (numeric-as-text / date-as-serial / leading-zero stripped), trailing-row noise (footers / totals), header-row-not-first (preamble before headers), encoding glitches (UTF-8-as-CP1252 mojibake), and duplicate column headers — and either flags them (diagnose mode) or applies deterministic fixes (execute mode).

Informer-not-enforcer: every fix surfaces as a Finding the caller can accept / reject / scope-override before the file is mutated.

USE WHEN: an upstream pipeline produced a messy xlsx that's about to feed an LLM or downstream analysis and you want a one-pass scrub.

DO NOT USE WHEN: domain-specific transforms are needed (use a dedicated pipeline). Or for structural integrity checks (use xlsx_doctor). Or for upload/attached files.

ParametersJSON Schema
NameRequiredDescriptionDefault
accept_findingsNo
detectorsNo
file_b64Yes
modeNo
optionsNo
overridesNo
reject_findingsNo
sheetsNo

TDQS

A4.8/5.0
Behavior5/5

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

Discloses key behaviors beyond annotations: informer-not-enforcer pattern (findings for accept/reject/override), diagnose vs execute modes. Annotations show destructiveHint=false and readOnlyHint=false, but description contextualizes mutation with user consent, adding valuable transparency.

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 focused paragraphs: first describes functionality, second usage guidance. Every sentence adds value, no redundancy. Front-loaded with key actions.

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?

Given complexity (8 params, no output schema), description covers purpose, usage, behavior, and parameter context well. Missing details on return format (e.g., Finding structure) and file limitations, but sufficient for high-level understanding.

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 has 0% description coverage; description compensates by explaining mode, options, and workflow (diagnose/execute, findings, overrides) but does not explicitly detail each parameter or their types, leaving some interpretation to the schema. Still provides meaningful semantic context.

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 tool's purpose: AI-native data cleaning for local .xlsx files, listing seven specific data issues it addresses. It explicitly distinguishes from siblings (e.g., xlsx_doctor, dedicated pipelines), making 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 Guidelines5/5

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

Explicitly provides when to use (upstream messy xlsx for LLM/analysis) and when not to use (domain transforms, structural checks, uploads), with specific sibling alternatives, offering excellent guidance.

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

xlsx_data_validationsA
Read-onlyIdempotent

list every cell-level data validation rule (dropdowns, numeric/date bounds, text-length caps, custom formulas) defined in a workbook — the constraints that Excel enforces when a human types into the cell. No other tool can do this: pandas drops validations entirely on read; openpyxl exposes them but only on a per-cell loop; this surfaces them in one shot with target cells, formulae, error messages, and prompt text.

USE WHEN: auditing a form / data-entry workbook to know what inputs are legal. Or extracting a dropdown list for use elsewhere. Or generating fixtures that match the validation contract. Free tier — counts against the 10k/mo cap.

DO NOT USE WHEN: just trying to read values (use xlsx_read). Or trying to enforce validations on write (xlsx_write does not write validations).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes
optionsNo

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, destructiveHint=false, idempotentHint=true. Description adds detail about what validations are listed (target cells, formulae, error messages, prompt text) and that it surfaces them in one shot. No contradictions with annotations.

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 well-structured, front-loaded with purpose, uses 'USE WHEN'/'DO NOT USE WHEN' for clarity, and every sentence adds value. No redundancy.

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?

Covers the tool's action, use cases, and output fields, but lacks parameter descriptions. Given no output schema, the description partially compensates by mentioning returned data (target cells, formulae, etc.). Missing parameter details reduces completeness slightly.

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%, and the description does not explain the parameters (file_b64 and options.sheet). It does not mention that file_b64 is a base64-encoded Excel file or provide guidance on the optional sheet parameter. This leaves the agent to infer from context.

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 tool lists cell-level data validation rules (dropdowns, bounds, text-length caps, custom formulas). It distinguishes from siblings by noting that other tools cannot do this in one shot, providing specific examples of what it returns.

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?

Explicit 'USE WHEN' and 'DO NOT USE WHEN' sections provide concrete scenarios: auditing forms, extracting dropdowns, generating fixtures vs. reading values (use xlsx_read) or enforcement on write (xlsx_write does not write validations). Also mentions free tier cap.

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

xlsx_describeB
Read-onlyIdempotent

pandas-style df.describe() per column — count, nulls, unique, min/max/mean/std for numerics, dtype with purity score. Unlike pandas.read_excel followed by df.describe(), this does not silently flatten merged cells or drop named ranges.

USE WHEN: the user wants a quick summary of a LOCAL .xlsx file — "what's in this data?". Returns a markdown table with one row per column. Faster + more structured than dumping full contents through xlsx_read.

DO NOT USE WHEN: the user uploaded a file via paperclip/attach (built-in skill). Or for in-memory data the agent already holds.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes
optionsNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds that the tool does not silently flatten merged cells or drop named ranges, which is useful behavioral context. However, it does not elaborate on other aspects like authentication or rate limits.

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 description is moderately concise with front-loaded key information, but it could be more streamlined. It includes a useful pandas comparison and usage guidance, but the lack of parameter details is a structural gap.

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 the tool has a nested options parameter with three sub-properties and no output schema, the description fails to explain how to use these parameters or what the markdown table output contains in detail. This leaves significant gaps for the agent.

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?

The input schema has 0% description coverage, and the tool description provides no information about parameters such as file_b64 or options (header_row, max_rows, sheet). The agent must infer usage solely from the schema names, which is insufficient.

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 it performs a pandas-style df.describe() per column, listing statistics like count, nulls, unique, min/max/mean/std for numerics, and dtype with purity score. It distinguishes itself from a naive pandas approach and explicitly mentions returning a markdown table, making the tool's 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 Guidelines4/5

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

The description includes explicit 'USE WHEN' and 'DO NOT USE WHEN' sections, guiding the agent to use this for quick summaries of local .xlsx files and to avoid it for uploaded files or in-memory data. It also compares favorably to xlsx_read for speed, but does not name specific sibling alternatives like xlsx_value_counts.

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

xlsx_diffA
Read-onlyIdempotent

compute a semantic diff between two LOCAL .xlsx files — cell-level deltas, formula changes, added/removed rows. Output is byte-deterministic — calling twice with the same inputs returns identical text + diff_hash in _meta. Use that hash for caching/idempotence.

USE WHEN: the user provides two LOCAL .xlsx file paths to compare. Suitable for version control, audit trails, and change review. Built-in skills cannot produce deterministic, structured diffs.

DO NOT USE WHEN: either file came from an upload/attachment rather than a local path.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_a_b64Yes
file_b_b64Yes
optionsNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations declare idempotentHint=true, and the description adds detail about byte-deterministic output and diff_hash for caching. No contradictions with annotations. The description provides useful behavioral context beyond the annotations.

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 description is relatively concise and front-loaded with the key purpose. However, it omits parameter details and could be restructured to include them without adding much length. It is not overly long, but missing important information prevents a higher score.

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 no output schema and 0% schema coverage, the description should explain the return format (e.g., what diff_hash is, how to interpret the diff) and clarify the base64 parameter mapping. The current description is insufficient for an agent to correctly use and interpret results.

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?

The description mentions 'local .xlsx files' but the schema expects base64 strings (file_a_b64), creating a mismatch. The optional sheet parameter in options is not explained. With 0% schema description coverage, the description should clarify parameter meaning, but it fails to do so, likely confusing an agent.

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 tool computes a semantic diff between two local .xlsx files, listing specific outputs (cell-level deltas, formula changes, added/removed rows). This distinguishes it from siblings like xlsx_read or xlsx_validate.

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?

Explicit USE WHEN and DO NOT USE WHEN sections provide clear guidance, specifying that the tool is for local file paths and not for uploads/attachments. This helps the agent select the tool appropriately.

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

xlsx_doctorA
Read-onlyIdempotent

ONE-CALL workbook health report for a LOCAL .xlsx file. Scans for macros, external workbook references, hidden / veryHidden sheets, missing creator metadata, large embedded images, and surfaces interesting feature flags (LAMBDA, dynamic arrays, pivot cache, slicers, threaded comments). Findings ranked HIGH / MEDIUM / LOW. Plus quick_facts: sheet count, formulas, named ranges, merges, hyperlinks, validations, images, file size.

The "check this workbook" call agents should make BEFORE any other tool — single round trip, ranked output an LLM can read at a glance.

USE WHEN: an agent has been handed an unknown workbook and needs to triage it before drilling in. Or pre-flighting a file before sharing.

DO NOT USE WHEN: you already know what you're looking for (use the focused tool — xlsx_macros, xlsx_external_links, etc.). Or you only need data values (use xlsx_read).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. Description adds value by stating it's a single round trip, outputs ranked findings, and should be called first. No contradictions.

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?

Well-structured: begins with purpose, lists scan items, explains output format, then provides usage guidance. Every sentence adds value; no fluff.

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

Completeness5/5

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

Despite lacking an output schema, description thoroughly explains what the report contains (ranked findings, quick_facts). Covers what is scanned and how output is organized. Complete for an audit tool.

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 (file_b64) with no schema description. The description implies the file is local and base64-encoded by stating 'local .xlsx file', but does not explicitly state the parameter is base64 content. Partially compensates.

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?

Description clearly states it generates a workbook health report for local .xlsx files, listing specific items scanned (macros, references, hidden sheets, etc.). It distinguishes itself from sibling tools by branding as a 'ONE-CALL' health report and contrasting with focused tools like xlsx_macros and xlsx_read.

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?

Explicit 'USE WHEN' and 'DO NOT USE WHEN' sections provide clear context for when to call this tool versus alternatives. It recommends using this before any other tool for triage and advises against it when already looking for specific issues or data values.

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

xlsx_evalA
Read-onlyIdempotent

evaluate Excel formulas against a LOCAL .xlsx file via HyperFormula. xlwings-style. Two modes: pass formulas (array of "=SUM(A1:A10)" expressions to compute against the workbook) or cells (array of "Sheet1!A1" cell refs to fresh-evaluate). Replaces pandas' "trust the cached value" behavior with a real eval — if the cache is stale or missing, this still produces the right answer.

USE WHEN: the user wants the live computed value of a formula, not the cached one. Or when a workbook has formulas that depend on external data the cache might be stale on. Engine omits INDIRECT/HYPERLINK/WEBSERVICE/RTD/DDE by design — no I/O risk.

DO NOT USE WHEN: the workbook has no formulas (use xlsx_read). Or for upload/attached files.

ParametersJSON Schema
NameRequiredDescriptionDefault
cellsNo
file_b64Yes
formulasNo
optionsNo

TDQS

A4.6/5.0
Behavior5/5

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

Describes the evaluation engine (HyperFormula), replacement of cached values, and intentional omission of I/O-related functions. Annotations already indicate read-only and idempotent behavior; description adds context about local evaluation and limitations.

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?

Well-structured with a concise summary, followed by usage guidance. Every sentence adds value without redundancy. Information is front-loaded and easy to scan.

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?

The description covers the tool's purpose, usage context, and limitations well. However, with no output schema, it does not describe the return format or structure of the evaluated results, which could leave the agent unsure of what to expect.

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 0%, so description compensates partially by explaining the two modes (cells and formulas) and their purpose. However, the required file_b64 parameter is not described in detail (base64 format not mentioned), and options object only gets a brief mention. A more explicit description of each parameter's role and constraints would improve the score.

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?

Clearly states the tool evaluates Excel formulas against a local .xlsx file via HyperFormula. Distinguishes from sibling tools like xlsx_read (for no formulas) and describes two modes (formulas and cells).

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?

Provides explicit USE WHEN and DO NOT USE WHEN sections, specifying conditions and alternatives. Mentions omission of risky functions like INDIRECT and HYPERLINK, guiding proper use.

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

xlsx_filterA
Read-onlyIdempotent

pandas-style row filter on a LOCAL .xlsx file with predicates AND-combined: eq/ne/gt/gte/lt/lte/contains/in/is_null/not_null. Operates on real cell values — formulas evaluated server-side, not the cached results that pandas trusts blindly.

USE WHEN: the user asks for "rows where X" / "show me only Y" against a LOCAL .xlsx file. Returns matching rows as a markdown table, capped at 1000 rows by default with the actual match count.

DO NOT USE WHEN: the user wants raw access to all rows (use xlsx_read). Or when the file came from an upload.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes
optionsNo
predicatesYes

TDQS

A4.8/5.0
Behavior5/5

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

Beyond annotations (readOnly, idempotent, etc.), the description adds critical behavioral details: formulas are evaluated server-side (not cached results), returns markdown table capped at 1000 rows with actual match count. No contradiction with annotations.

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 concise and well-structured: it opens with the core purpose, followed by behavioral context, then clear usage guidelines. Every sentence adds value without redundancy.

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?

Given the tool's complexity (nested objects, no output schema), the description covers purpose, usage, behavioral traits, and key parameter aspects. It could further detail the output format or options like header_row, but overall it is sufficiently complete.

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 0% schema coverage, the description compensates by explaining that predicates are AND-combined and listing supported operators. However, it does not describe other parameters like file_b64, header_row, or sheet, leaving some reliance on the schema.

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 it performs a 'pandas-style row filter' on a local .xlsx file with AND-combined predicates, and explicitly distinguishes it from xlsx_read for raw access. The verb 'filter' and resource 'LOCAL .xlsx file' are specific.

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?

The description includes explicit 'USE WHEN' and 'DO NOT USE WHEN' sections, directing agents to use this tool when the user requests filtered rows and to avoid it for raw access (use xlsx_read) or for uploaded files.

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

xlsx_form_controlsA
Read-onlyIdempotent

list every form control (Check Box, Button, Drop-down, List Box, Option Button, Scroll Bar, Spinner, Label, Group Box) in a workbook with the linked cell, current value, dropdown source range, and min/max/step bounds where applicable. No other tool gives this in a single call: ExcelJS doesn't expose form controls; pandas drops them entirely; openpyxl support is partial. xlsx_form_controls reads xl/ctrlProps/ctrlProp*.xml directly + maps to sheets via the rel chain.

USE WHEN: documenting a survey workbook, scoring rubric, dashboard, or forms-as-spreadsheets template where the interactive UI carries semantic meaning. Or auditing a workbook to find which cells human users can change via a control vs. by direct typing. Free tier — counts against the 10k/mo cap.

DO NOT USE WHEN: just reading values (use xlsx_read).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes
optionsNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds value by disclosing the free tier limit (10k/mo cap) and explaining the internal implementation (reads xl/ctrlProps/ctrlProp*.xml directly). No contradictions.

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 well-structured, front-loaded with the core purpose and capabilities, followed by usage guidance. Every sentence adds value, no fluff. The length is appropriate for the tool's complexity.

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

Completeness5/5

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

Given the annotations and no output schema, the description is complete. It covers return content, constraints (free tier, cap), and usage contexts. It does not need to explain return values since no output schema exists, but the description details what is returned.

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?

Input schema has 2 parameters with 0% description coverage. The description does not explain what file_b64 or options.sheet mean or how to use them. Although parameter names are somewhat self-explanatory, the description fails to add semantic meaning beyond the raw schema, leaving a gap for agents.

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 what the tool does: 'list every form control ... in a workbook' with specific details (linked cell, current value, etc.). It also distinguishes from siblings by noting that no other tool gives this in a single call and contrasts with ExcelJS, pandas, and openpyxl limitations.

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?

The description explicitly provides 'USE WHEN' scenarios (documenting survey workbook, scoring rubric, auditing) and a 'DO NOT USE' scenario ('just reading values' with a specific alternative, xlsx_read). This gives clear guidance on when to choose this tool over siblings.

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

xlsx_formulasA
Read-onlyIdempotent

extract every formula in a LOCAL .xlsx workbook — cell coord (A1), formula text, cached result. openpyxl-style read-only metadata. Distinct from xlsx_read which returns evaluated values; this returns the formulas themselves so an agent can audit, transform, or rewrite them.

USE WHEN: the user wants to see what formulas a workbook uses — spot-checking a model, auditing references, debugging unexpected results. pandas cannot extract formulas; this is the only way for an agent to see them.

DO NOT USE WHEN: the user wants computed values (use xlsx_read). Or for upload/attached files.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes
optionsNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds the important constraint that the workbook must be LOCAL and that the tool performs openpyxl-style read-only metadata extraction, which clarifies its behavior beyond annotations.

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 concise and well-structured, with a clear front-loaded purpose statement, a distinction from sibling tool xlsx_read, and explicit usage guidelines in a compact format. No extraneous 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?

Given the tool's complexity (2 parameters, no output schema, many siblings), the description provides strong purpose and usage guidance, and hints at output structure. However, the lack of parameter explanations and output schema leaves some gaps, particularly for optimizing use of options like limit and sheet.

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 0%, yet the description does not explain any parameters (file_b64, options, include_results, limit, sheet). It only describes the output format (cell coord, formula text, cached result), leaving the agent without guidance on how to use the parameters effectively.

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 tool extracts every formula from a local .xlsx workbook, returning cell coordinates, formula text, and cached results. It distinguishes from xlsx_read, which returns evaluated values, making the purpose specific and unambiguous.

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?

The description provides explicit 'USE WHEN' and 'DO NOT USE WHEN' sections, guiding the agent to use this tool for formula auditing and to avoid it for computed values (recommending xlsx_read instead). It also notes that pandas cannot extract formulas, reinforcing uniqueness.

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

xlsx_healer_cureA

Apply ONE specific cure operation against a diagnosed workbook. Operations: rename_move (rewrite ref paths), pattern_bulk (regex-style ref rewrites), source_deleted_freeze (replace broken refs with cached values), source_deleted_redirect (point at a replacement file), source_deleted_localize (snapshot external source into a local copy), permission_denied (strip credentials), structure_changed (rewrite formulas for moved cells), format_change (re-link after extension change), make_standalone (fully dereference all externals). Returns cured workbook bytes + receipt.

USE WHEN: a diagnostic report (xlsx_healer_diagnose) named a specific operation as the recommended fix; or restoring a workbook whose source moved by a known prefix.

DO NOT USE WHEN: the failure mode isn't a supported operation (use xlsx_healer_intent for goal-shaped fixes). Or when diagnose hasn't been run (cures need diagnose-emitted reference_ids).

ParametersJSON Schema
NameRequiredDescriptionDefault
cure_paramsNo
file_b64Yes
intentNo
modeNo
operationYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false and destructiveHint=false; the description adds that the tool returns 'cured workbook bytes + receipt' and lists specific operations, providing context beyond the annotations. However, it does not explicitly describe the behavior for as_copy vs in_place modes.

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 well-structured with clear sections and front-loaded purpose, but the list of operations is somewhat dense. It is appropriately sized for the tool's complexity.

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?

Given the tool's complexity, no output schema, and 0% schema coverage, the description covers the main purpose, operations, and usage guidelines, but lacks explanations for 'cure_params' and 'intent' parameters, making it incomplete.

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 0%, so description must compensate. It explains the 'operation' parameter by listing allowed values, and implies 'file_b64' is the workbook file, but it does not describe 'cure_params', 'intent', or 'mode' parameters, leaving a significant gap.

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 states 'Apply ONE specific cure operation against a diagnosed workbook' and lists the supported operations, clearly distinguishing it from sibling tools like xlsx_healer_diagnose and xlsx_healer_intent.

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?

Explicit 'USE WHEN' and 'DO NOT USE WHEN' sections provide clear context for when to use this tool versus alternatives (e.g., xlsx_healer_intent for goal-shaped fixes), and prerequisites (diagnose must have been run).

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

xlsx_healer_diagnoseA
Read-onlyIdempotent

produce a structured diagnostic report of external references that are broken or at risk in a workbook. Returns five classes of finding: (1) external-workbook references that can't resolve, (2) defined-name external refs, (3) Power Query connections with embedded credentials, (4) #REF! propagation maps from upstream breakage, (5) multi-hop chains (workbook → workbook → workbook). Findings carry reference_id keys that downstream cure operations key on.

USE WHEN: a workbook shows #REF! errors, an agent moves a file and refs need rewriting, a customer reports "the workbook stopped working after we reorganized SharePoint", or auditing a corpus for hidden external-link breakage before sharing.

DO NOT USE WHEN: the user wants the cleaning/normalization surface (use xlsx_data_clean — different concern). Or when there is no .xlsx source path (Healer reads the source bytes, doesn't reconstruct from a structured spec).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare read-only and idempotent. Description adds detail on output structure (five finding classes with ref_id keys) and input requirement (source bytes, no reconstruction from spec). No contradictions.

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?

Efficiently structured: purpose statement, enumerated findings, usage guidance. No redundant text. Front-loaded with main action.

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

Completeness5/5

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

Single parameter description implicitly clear. Covers purpose, output structure (five finding classes with reference_ids), usage scenarios, and exclusions. No missing needed context for agent to decide.

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 lacks any description for file_b64. The description indirectly explains it's the source bytes of the .xlsx file, but doesn't specify encoding or constraints. Adds some value over schema but leaves gaps.

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?

Clear verb+resource with enumerated finding types. Explicitly distinguishes from sibling xlsx_data_clean and indicates relationship to healer_cure. No ambiguity.

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?

Explicit when to use with concrete examples, and when not to use with alternative tool named. No gaps.

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

xlsx_healer_intentA

Goal-driven healing. Caller declares an INTENT (make-it-work, make-standalone, or migrate) instead of a specific cure operation; Healer plans the operation sequence + applies it. make-it-work: minimum surgery to clear errors. make-standalone: fully de-externalize (snapshot every external dep). migrate: rewrite all references against a from/to prefix pair. Returns the planned operations, cured bytes, and an unactionable list.

USE WHEN: the user describes the goal in plain English ("just make this work for the recipient" / "send a self-contained version" / "we moved the share root, update the refs"). Or when multiple cure operations need to compose.

DO NOT USE WHEN: the user has chosen a specific cure operation (use xlsx_healer_cure directly). Or when no diagnostic has been run on the workbook yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo
file_b64Yes
intentYes
intent_paramsNo
modeNo
operationNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate non-read-only, non-destructive, non-idempotent, and open-world. Description adds behavioral context: it returns planned operations, cured bytes, and an unactionable list, and explains the three intents. No contradictions. Some details about authentication or rate limits missing, but adequate given annotations.

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 relatively concise and well-structured, with a clear purpose statement, intent breakdown, and usage guidelines. It could be slightly more compact by trimming redundant phrases, but overall efficient.

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 tool with 6 parameters (2 required), no output schema, and nested objects, the description covers the main intent parameters and usage. However, it leaves some ambiguity about the return format ('unactionable list' is not explained) and how planning works. With no output schema, more detail would be helpful.

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 description coverage is 0%, but description compensates by explaining the three intents and their meanings (e.g., 'make-it-work: minimum surgery to clear errors'). Also describes intent_params with from/to. However, parameters like confirm, mode, operation are not explained, leaving some gaps.

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 tool's purpose: goal-driven healing where the user declares an intent (make-it-work, make-standalone, migrate) and the tool plans and applies operations. It also distinguishes from sibling tools like xlsx_healer_cure by emphasizing the goal-driven approach.

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?

Explicitly states when to use (user describes goal in plain English, multiple operations needed) and when not to use (specific cure operation chosen, no diagnostic run). Provides clear alternatives, making it easy for the agent to decide.

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

xlsx_healer_simulateA
Read-onlyIdempotent

simulate recipient-side accessibility of a workbook's external references. Given a list of paths the recipient CAN see (accessible_paths), returns which references will still resolve at the recipient end and which will break (and why). Read-only; produces no output workbook.

USE WHEN: an agent or user wants to know "will this workbook work when I send it to ?" before sharing — e.g., before posting to Slack, attaching to email, or sharing a OneDrive link. Or auditing a workbook against a known recipient-accessible-paths inventory.

DO NOT USE WHEN: the user wants to FIX the breakage (use xlsx_healer_cure or xlsx_healer_intent). Or when the recipient is the sender themselves (no path discrepancy to simulate).

ParametersJSON Schema
NameRequiredDescriptionDefault
accessible_pathsYes
file_b64Yes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint. The description adds that it is read-only, produces no output workbook, and only simulates. No contradictions. Could detail decoding of file_b64, but sufficient overall.

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?

Three short paragraphs: purpose, when to use, when not to use. Every sentence adds value. Front-loaded with the primary action. No unnecessary words.

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?

Given no output schema, the description explains what the tool returns: which references resolve and which break with reasons. It covers behavior, inputs, and usage boundaries. Slightly vague on output format, but sufficient for agent decision.

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 description coverage is 0%, so the description must compensate. It explicitly names 'accessible_paths' and explains its role. 'file_b64' is implied as the workbook. Minor improvement: clarify file_b64 is base64-encoded XLSX.

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 tool simulates recipient-side accessibility of external references, using specific verb and resource. It distinguishes from siblings xlsx_healer_cure and xlsx_healer_intent by explicitly contrasting when to use vs when not.

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?

The description provides explicit 'USE WHEN' and 'DO NOT USE WHEN' sections with concrete examples (e.g., before sharing to Slack) and direct alternatives (xlsx_healer_cure, xlsx_healer_intent). This is optimal guidance.

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

xlsx_imagesA
Read-onlyIdempotent

List every embedded image in a LOCAL .xlsx file with format (png / jpg / gif / svg / bmp / tiff / emf / wmf), size in bytes, sheet attribution, and anchor cell range (the cells the image floats over). Reads xl/media/* + xl/drawings/* directly.

Surfaces "Sheet1 has a 4 KB PNG anchored at B2:D6" — what an LLM needs to know whether the workbook ships with branding / charts-as-images / signatures.

USE WHEN: cataloging visual assets. Or auditing a workbook for embedded images that need to be replaced (logos, signatures). Or fingerprinting a template by its image inventory.

DO NOT USE WHEN: you want the image PIXELS (this surfaces metadata, not bytes). Or you only need cell values (use xlsx_read).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes
optionsNo

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, destructiveHint=false, etc. Description adds that it reads xl/media/* and xl/drawings/* directly and returns metadata only, not pixel data. No contradictions.

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?

Well-structured with a clear main statement, an example, and distinct usage sections. Slightly wordy but front-loaded and easy to follow.

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?

Given no output schema, the description adequately explains return values (format, size, sheet, anchor). Mentions local file requirement. Does not specify pagination or base64 encoding but schema covers limit and required field.

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 0% (no parameter descriptions). The description does not explain file_b64 (base64) or the options.limit and options.sheet parameters beyond the tool's general capability. Lacks parameter-specific guidance.

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 tool lists every embedded image in a local .xlsx file with format, size, sheet attribution, and anchor cell range. It distinguishes itself from siblings like xlsx_read (cell values) and xlsx_charts (charts-as-images).

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?

Explicit USE WHEN (cataloging visual assets, auditing, fingerprinting) and DO NOT USE WHEN (want pixels, need cell values) sections. Provides alternative tool xlsx_read for cell values.

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

xlsx_list_sheetsA
Read-onlyIdempotent

list sheet names, dimensions, and visibility for a LOCAL .xlsx file. Use this when you only need names + dims, not cell content. If you'll read content anyway, skip this and call xlsx_read directly.

USE WHEN: the user references a LOCAL file path and you need to discover sheet names before reading. Fast orientation call — use before xlsx_read when you need metadata only.

DO NOT USE WHEN: the file came from an upload/attachment (built-in skill handles that). Or when you already know the sheet structure. Or when you plan to call xlsx_read immediately after (just call xlsx_read).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint. The description adds that it is a 'fast orientation call' and that it only works for local files (not uploads). No contradiction with annotations.

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?

Description is well-structured with clear sections (USE WHEN, DO NOT USE WHEN), but a bit wordy. Could be more concise, but no wasted sentences.

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?

No output schema, but description lists return fields (names, dimensions, visibility). Covers usage context well. Lacks detail on return format, but acceptable for a simple metadata 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 has 1 parameter (file_b64) with 0% description coverage. The description mentions 'local file path' but the parameter is file_b64 (base64). This mismatch could confuse the agent; the description does not explain how to provide the file content.

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 tool lists sheet names, dimensions, and visibility for a local .xlsx file. It uses specific verbs and resources, distinguishing it from siblings like xlsx_read, which reads cell content.

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?

Explicitly provides when-to-use (before xlsx_read for metadata only) and when-not-to-use (file from upload, known structure, or planning immediate xlsx_read). Mentions alternative xlsx_read, making it easy for the agent to decide.

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

xlsx_macrosA
Read-onlyIdempotent

Inspect xlsm / xlsb workbooks for VBA macro presence, vbaProject.bin size, and likely module names (ThisWorkbook / Sheet / Module / Class / UserForm via heuristic UTF-16LE scan). Returns short safety advice the LLM should relay to the user.

By DELIBERATE POLICY this tool does NOT extract or execute macro source code. Surfaces presence + module-name candidates only — security-audit metadata for "should I trust this file?" decisions.

USE WHEN: receiving a macro-enabled workbook from an unknown sender and you want to know what to expect before opening. Or auditing many workbooks for "do any of these contain macros?" without sampling each.

DO NOT USE WHEN: you need to actually inspect / debug VBA source — open the file in Excel (Alt+F11) on a trusted machine.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes

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, destructiveHint=false, idempotentHint=true. The description adds critical behavioral detail: deliberately does not extract or execute macro source code, uses heuristic UTF-16LE scan, and returns safety advice to relay to the user. No contradiction.

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 well-structured into distinct sections (purpose, policy, usage). It is slightly verbose but each sentence adds value. The most critical information is front-loaded.

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?

Given the tool's complexity and lack of output schema, the description adequately explains the return value (presence, size, module names, safety advice) and limitations. Missing: explicit mention of input format (base64) and potential error cases, but overall sufficient.

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%. The description does not explicitly explain the 'file_b64' parameter (that it expects a base64-encoded file). The purpose is implied but not clarified, which could lead to incorrect usage.

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 uses specific verbs ('Inspect', 'Returns') and resources ('xlsm / xlsb workbooks for VBA macro presence'). It clearly distinguishes from sibling tools that analyze other xlsx aspects by focusing solely on macro detection and metadata.

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?

Provides explicit 'USE WHEN' and 'DO NOT USE WHEN' sections, detailing appropriate scenarios (unknown sender, auditing) and when to avoid (need to inspect VBA source), along with a concrete alternative (open in Excel).

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

xlsx_merged_cellsA
Read-onlyIdempotent

list every merged-cell region with master-cell value, range, span dimensions, and kind heuristic ("header" / "horizontal" / "vertical" / "block"). Pandas reads merged cells by dropping the relationship — it sees one value in the master cell and three blanks alongside. xlsx_merged_cells is the layout-aware view: "A1:D1 is ONE cell that says Q4 2024" rather than four cells where three are mysteriously empty. No other tool surfaces merges with master values rolled in: pandas drops merge metadata; openpyxl exposes ranges but not the master value alongside.

USE WHEN: parsing report templates, dashboards, or form workbooks where merges encode visual hierarchy (section titles, sub-headers, banner rows). Or auditing a workbook for accidental merges that distort downstream pandas reads. Free tier — counts against the 10k/mo cap.

DO NOT USE WHEN: you only need cell values and don't care about visual structure (use xlsx_read).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes
optionsNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) are already present. Description adds details about what is returned (master value, range, span, kind heuristic) and notes the free tier cap. No contradiction with annotations.

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?

Well-structured with problem statement, tool purpose, comparison, usage guidelines, and limitations. Slightly lengthy but front-loaded with key information. No wasted sentences.

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

Completeness5/5

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

Given no output schema, description explains return fields (value, range, span, kind). Use cases and limitations are covered. Schema has 2 params with clear types. Annotations provide safety cues. Complete for a listing tool.

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 has 2 parameters with 0% coverage. Description does not explain file_b64 or options (limit, sheet) beyond what schema provides. While schema is self-explanatory, description could add context (e.g., file format, how to pass base64). Adequate but missing added 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 tool lists merged-cell regions with master-cell value, range, span dimensions, and kind heuristic. It distinguishes from siblings by noting no other tool surfaces merges with master values, and explains the value over pandas and openpyxl.

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?

Explicit USE WHEN (parsing report templates, dashboards, auditing) and DO NOT USE WHEN (if only need cell values, use xlsx_read). Provides clear context and alternatives.

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

xlsx_named_rangesA
Read-onlyIdempotent

list all defined names (named ranges) in a LOCAL .xlsx workbook — name, scope (workbook or sheet), kind (cell / range / formula), reference. pandas.read_excel collapses named ranges into anonymous ranges; this tool surfaces them so the agent can reason about formulas like =NPV(DiscountRate, Cashflows) before reading data.

USE WHEN: the agent is reasoning about a financial / engineering model and needs to know what cells named-range references resolve to. Call before xlsx_read to orient.

DO NOT USE WHEN: the workbook has no formulas (named ranges are mostly relevant for formula contexts). Or for upload/attached files.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true, so no safety concerns. Description adds context about why pandas collapses named ranges and what the tool returns (name, scope, kind, reference), enhancing the agent's understanding of behavior beyond annotations.

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?

Description is concise and well-structured: a clear first sentence stating purpose, a context note about pandas, and separate USE WHEN/DO NOT USE WHEN sections. Every sentence adds value without redundancy.

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 tool with one parameter and no output schema, the description adequately covers what the tool returns and when to use it. It could optionally mention if the list is sorted or any limitations, but overall it's sufficiently complete for the agent to understand its role.

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 has one required parameter 'file_b64' with no description in schema (0% coverage). The description mentions 'LOCAL .xlsx workbook' but does not explain the parameter format (e.g., base64 encoding). With low schema coverage, the description should have compensated but did not, leaving the agent without clear parameter documentation.

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?

Description clearly states the verb 'list' and resource 'defined names (named ranges)' in a LOCAL .xlsx workbook, listing the output fields (name, scope, kind, reference). It distinguishes from siblings like xlsx_read and xlsx_formulas by specifying that it surfaces information that pandas.read_excel collapses.

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?

Explicit USE WHEN and DO NOT USE WHEN sections provide clear guidance. It recommends calling before xlsx_read to orient, and warns against use when workbook has no formulas or for upload/attached files. This helps the agent decide when to invoke this tool over alternatives.

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

xlsx_pivotA
Read-onlyIdempotent

pandas-style pivot_table() on a LOCAL .xlsx file — reshape a flat table into a 2D matrix where rows are unique values of index, columns are unique values of columns, and cells are an aggregation of values. agg modes: sum / mean / min / max / count / count_distinct. Optional fill_value for missing index×column combinations.

USE WHEN: the user wants a cross-tab — "X by Y", "rows by columns" — that needs more than groupby. Returns a markdown table.

DO NOT USE WHEN: there's only one grouping dimension (use xlsx_aggregate). Or for upload/attached files.

ParametersJSON Schema
NameRequiredDescriptionDefault
aggNo
columnsNo
file_b64Yes
indexYes
optionsNo
valuesYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare the tool as read-only and idempotent. The description adds aggregation modes, fill_value, and return format (markdown table). However, it does not clarify that file_b64 is base64 content, creating a minor inconsistency with 'LOCAL .xlsx file'.

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 concise and well-structured: first a defining sentence, then details, then usage guidelines. Every sentence adds value, and the structure aids readability.

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?

Given the complexity of a pivot operation and no output schema, the description adequately explains the output (markdown table) and usage context. It distinguishes from xlsx_aggregate but not from other siblings like xlsx_read, which is acceptable due to specific 'USE WHEN'.

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?

With 0% schema coverage, the description explains most parameters (index, columns, values, agg, fill_value) but omits options.header_row and options.sheet, and only implicitly describes file_b64. Coverage is about 66%, not fully compensating.

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 tool performs a pandas-style pivot_table on a local .xlsx file, reshaping data into a 2D matrix with index, columns, and aggregation. It explicitly distinguishes from groupby operations.

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?

The description includes explicit 'USE WHEN' and 'DO NOT USE WHEN' sections, providing clear criteria for when to pivot versus using xlsx_aggregate, and noting it is not for upload or attached files.

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

xlsx_pivot_tablesA
Read-onlyIdempotent

List every PRE-EXISTING pivot table definition in a LOCAL .xlsx file (the ones an Excel user already built). Per pivot: sheet, name, location range, source range (or named-range / table reference), row / column / page fields, and data fields with their agg function (sum / count / average / max / min / product / stdDev / etc.).

Distinct from xlsx_pivot which COMPUTES a fresh pivot from raw data — this tool surfaces the existing pivot CONTRACT so an agent can answer "what does PivotTable3 on the Summary sheet actually compute?".

USE WHEN: documenting a financial model that uses pivot tables. Or auditing whether a pivot still points at the right source range after a data refactor. Or answering "which sheet aggregates Sales by Region?" without re-deriving it.

DO NOT USE WHEN: you want to COMPUTE a fresh pivot from raw data (use xlsx_pivot). Or you only need cell values (use xlsx_read).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes
optionsNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. Description adds behavioral context such as listing only pre-existing pivot definitions and details returned per pivot (sheet, name, location, source, fields, aggregations). No contradictions.

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?

Well-structured with clear sections: main purpose, details of output, distinction from sibling, when/not to use. Every sentence adds value. No wasted words.

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?

Provides detailed information about what data is returned per pivot (sheet, name, location, source, fields, aggregations) and three use cases. Lacks specifics on file type limitations (e.g., .xlsm?) and error handling, but overall sufficient given no output schema.

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 0%, so description must compensate. It mentions 'file_b64' implicitly via 'LOCAL .xlsx file' and 'options.sheet' as optional filter. However, it does not explain how to provide the file (e.g., base64 string) or format of options object. Adds some meaning beyond schema but incomplete.

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?

Clearly states verb 'List' and resource 'PRE-EXISTING pivot table definitions in a LOCAL .xlsx file'. Distinguishes from sibling xlsx_pivot by specifying it lists existing definitions rather than computing fresh ones.

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?

Explicitly provides when to use: documenting financial models, auditing source ranges, answering aggregation questions. Also provides DO NOT USE cases with specific alternative tool names (xlsx_pivot, xlsx_read).

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

xlsx_post_slackA
Destructive

upload a local .xlsx file to a Slack channel as a file attachment, with an optional accompanying message. Token intake: set SLACK_BOT_TOKEN in the environment (recommended — keeps the token out of conversation logs). Alternatively pass slack_token as a tool argument (legacy; token will appear in MCP conversation history). Posts via Slack's 3-step external upload flow (files.getUploadURLExternal → upload → files.completeUploadExternal), which is the only sanctioned path as of 2024+.

USE WHEN: the user asks "post this workbook to #channel," "share this with the team in Slack," or any other outbound-file-to-Slack request. The agent has just produced or modified a workbook and wants to deliver it. Free tier — counts against the 10k/mo cap.

DO NOT USE WHEN: the file lives in a Slack channel and you want to READ it (that's the inbound Manual-Mode-Detector pattern, not this). Or when no Slack bot token is available — the user must have installed a Slack app with files:write scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
file_b64No
filenameNo
messageNo
slack_tokenYes
workbook_handleNo

TDQS

A4.3/5.0
Behavior5/5

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

Discloses the 3-step upload flow, 10k/month free tier cap, and token handling options (environment vs argument). Annotations already indicate destructive (destructiveHint=true) and non-idempotent, but description adds operational context beyond annotations.

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 is front-loaded, but description is somewhat lengthy with multiple paragraphs. Could be more concise without losing clarity.

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?

Given 6 parameters, no output schema, and 0% schema coverage, description covers usage and constraints but lacks parameter-level detail. Adequate for basic use but incomplete for nuanced decisions.

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 0% (no parameter descriptions in schema). Description explains 'message' as optional, but does not detail file_b64, filename, workbook_handle, or channel format. Only partially compensates for missing schema descriptions.

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?

Description clearly states 'upload a local .xlsx file to a Slack channel as a file attachment, with an optional accompanying message', which is a specific verb+resource. Distinct from siblings like xlsx_post_teams.

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?

Explicit 'USE WHEN' and 'DO NOT USE WHEN' sections with examples ('post this workbook to #channel') and alternatives (reading from Slack is Manual-Mode-Detector pattern). Covers token prerequisites.

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

xlsx_post_teamsA
Destructive

Upload a local .xlsx file to a Microsoft Teams channel as a file attachment, with an optional accompanying message.

Token intake: set TEAMS_GRAPH_TOKEN in the environment (recommended — keeps the token out of conversation logs). Alternatively pass graph_token as a tool argument (legacy; token will appear in MCP history). Uses Microsoft Graph's upload-session + chatMessage flow.

USE WHEN: the user asks "post this workbook to my Teams channel" or any outbound-file-to-Teams request after producing or modifying a workbook.

DO NOT USE WHEN: posting to Slack (use xlsx_post_slack). Or when no Microsoft Graph token is available — the user needs an Entra ID app with Files.ReadWrite.All + ChannelMessage.Send scopes.

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes
file_b64No
filenameNo
graph_tokenYes
messageNo
team_idYes
workbook_handleNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true; description adds token intake options and Graph flow details, but does not elaborate on behavioral traits beyond annotations.

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?

Four concise sentences front-load purpose, then token info, then usage rules. No wasted 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?

Covers usage and token handling but lacks return value info (no output schema) and parameter details. Adequate for basic guidance but incomplete given 7 parameters.

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%, yet description provides no per-parameter explanations. Only high-level token handling mentioned, leaving agents unaware of parameter purposes like workbook_handle.

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?

Description clearly states the tool uploads a local .xlsx file to a Teams channel as an attachment with optional message, distinguishing it from the sibling xlsx_post_slack.

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?

Explicit 'USE WHEN' and 'DO NOT USE WHEN' sections provide clear context, alternatives (Slack), and prerequisites (Graph token).

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

xlsx_print_settingsA
Read-onlyIdempotent

surface "what would Excel print right now" per worksheet — print area, orientation, paper size (A4 / Letter / Legal / Tabloid / etc.), scale or fitToPage, margins, headers/footers split into Excel's L/C/R zones, print titles (rows / columns repeated on every page), manual page breaks, plus B&W / draft / centered flags. No other tool can do this rolled-up: pandas drops every bit of print configuration; openpyxl exposes it but in nested object form. xlsx_print_settings is the "if a human hits Cmd+P, what comes out?" answer.

USE WHEN: about to PDF / print a workbook and want to know what it'll look like before doing it. Or auditing a financial / regulatory report's print configuration (legal sometimes cares about page-1 headers). Or extracting the print-titles row a complex workbook uses for repeating headers. Free tier — counts against the 10k/mo cap.

DO NOT USE WHEN: just reading values (use xlsx_read).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes
optionsNo

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, destructiveHint=false, and idempotentHint=true, indicating a safe read operation. The description adds behavioral context by detailing what information is returned (print area, orientation, margins, headers, etc.), which goes beyond the annotations.

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 well-structured with clear use cases and a brief technical note, but it is somewhat lengthy. Most sentences add value, though a slightly more streamlined version could improve readability without losing essential details.

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?

Given the complexity of print settings and the absence of an output schema, the description is quite comprehensive about what the tool returns and when to use it. However, the lack of parameter explanations is a notable gap, preventing full completeness for an AI 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?

The input schema has two parameters (file_b64 and options.sheet) with 0% schema description coverage. The description does not explain the meaning or format of these parameters, such that file_b64 is the base64-encoded file content. It only implies that the tool works on a workbook per worksheet, leaving a significant gap for an AI agent to use correctly.

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 tool's purpose: to surface Excel print settings per worksheet, listing numerous attributes. It distinguishes itself from siblings like xlsx_read by emphasizing that it provides a rolled-up view of print configuration that other tools do not capture.

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?

The description explicitly states when to use the tool (before PDF/print, audit, extract print-titles) and when not to use it (for reading values, use xlsx_read). It also mentions the free tier cap (10k/mo), providing clear guidance for an AI agent.

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

xlsx_propertiesA
Read-onlyIdempotent

Surface the workbook's identity card from a LOCAL .xlsx file. Core: creator, last_modified_by, created/modified/lastPrinted timestamps, title, subject, company, manager, keywords, category, description. Application: app name + version, doc security label, hyperlink base. Custom: every user-defined Info > Properties entry (Department, ReviewedBy, ApprovalRequired, etc.) with type tag and value.

Reads docProps/core.xml, docProps/app.xml, and docProps/custom.xml directly — a surface pandas drops entirely.

USE WHEN: auditing a workbook for attribution ("who built this and when?"). Or stripping sensitive metadata before sharing externally. Or extracting custom finance/legal flags ("ReviewedBy", "ApprovalRequired") that workflows pin to the file.

DO NOT USE WHEN: just reading values (use xlsx_read). Or trying to MODIFY metadata (use xlsx_redact for sensitive-field stripping).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds valuable context: the tool reads specific XML files (docProps/core.xml, app.xml, custom.xml) and does not modify data, confirming its read-only nature.

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 well-organized with clear sections and usage guidance. Some redundancy exists (e.g., repeating 'core' vs specific fields), but overall it is concise and front-loaded.

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

Completeness5/5

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

Given the simple parameter and no output schema, the description fully covers purpose, usage, behavioral context, and alternatives. It is self-contained and sufficient for an agent to correctly invoke the 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?

The single parameter file_b64 has no schema description (0% coverage). The description only mentions 'from a LOCAL .xlsx file' but does not explain that the parameter is a base64-encoded string, which is critical for correct usage.

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 tool's purpose: to surface the workbook's identity card from a local .xlsx file, listing specific properties and sources. It distinguishes from siblings like xlsx_read and xlsx_redact by specifying when not to use them.

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?

Explicitly states when to use (auditing, stripping metadata, extracting custom flags) and when not to use (just reading values, modifying metadata), with clear sibling alternatives (xlsx_read, xlsx_redact).

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

xlsx_protectionA
Read-onlyIdempotent

Surface every protection setting in a LOCAL .xlsx file so an agent knows what it can and cannot edit. Workbook-level (lockStructure, lockWindows), per-sheet (protected? password? hidden state?), per-action allow/block list (formatCells, sort, insertRows, pivotTables, etc.), and per-cell unlocked / hidden samples — these are the cells a human would actually be allowed to type into when the sheet is otherwise read-only.

Reads sheetProtection action attrs directly from the OOXML zip (workaround for ExcelJS stripping them on round-trip).

USE WHEN: an agent is about to suggest edits and you want to fail fast on cells / sheets the user can't change anyway. Or auditing a "submitted form" workbook to see which inputs the author intended fillable.

DO NOT USE WHEN: just reading values (use xlsx_read). Or trying to BREAK protection (this surfaces what's locked; it does not unlock).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes
optionsNo

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, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description adds value by explaining the direct OOXML zip reading method (workaround for ExcelJS issues) and clarifying that it does not unlock protection. No contradictions.

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 well-structured with clear sections (overview, technical detail, usage guidance). It is reasonably concise for the complexity of the tool, though could be slightly trimmed. The front-loading of purpose is effective.

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?

Covers workbook-level, per-sheet, per-action, and per-cell protections, and explains the OOXML reading method. Lacks details about return format but this is acceptable without an output schema. Nearly complete for a tool 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?

Input schema has 2 parameters with 0% description coverage. The description mentions 'local .xlsx file' for file_b64 and implies per-sheet via 'per-sheet', but does not explicitly describe the parameters' types, formats, or optionality (e.g., options.sheet). Since schema provides no descriptions, the tool definition should compensate but falls short.

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 tool's purpose: 'Surface every protection setting in a LOCAL .xlsx file so an agent knows what it can and cannot edit.' It lists specific aspects covered (workbook-level, per-sheet, per-action, per-cell) and distinguishes from sibling xlsx_read by specifying it is for reading values only.

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?

Provides explicit USE WHEN and DO NOT USE WHEN sections. It advises use before suggesting edits or auditing forms, and warns against using for just reading values (use xlsx_read) or attempting to break protection. This clear guidance helps the agent decide when to invoke.

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

xlsx_readA
Read-onlyIdempotent

xfa — read an .xlsx file by path and return a rendered markdown/JSON/SQL representation.

The path resolves on the SERVER's filesystem. In a LOCAL-CLI deployment (npx xlsx-for-ai-mcp) the server IS the user's machine, so /Users/..., /home/..., or ~-prefixed paths work directly. In a remote/hosted deployment the server runs on a different host — ingest user-provided files via the upload-handle flow first, then use xlsx_read_handle.

DEFAULT returns ALL sheets — do not re-call per-sheet. Pass sheet="" only to filter. format="md" (markdown table, default), "json", or "sql". Synonyms: "markdown"→"md", "text"→"md".

USE WHEN: the user gives a path the SERVER can reach (LOCAL CLI absolute or ~-prefixed; remote: a path on the hosted machine).

DO NOT USE WHEN: a paperclip/attach upload in a different agent (use that agent's built-in xlsx skill). Or user-provided files on a remote/hosted deployment (use xlsx_read_handle). Or in-memory bytes the agent already has.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes
optionsNo

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds critical context: path resolution differences between local and remote deployments, default returns all sheets, format synonyms, and the fact that the server's filesystem is used. No contradictions with annotations.

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 well-structured with clear sections and front-loaded key information. However, it is slightly verbose due to detailed path explanations and synonyms. Every sentence adds value, but some redundancy could be trimmed.

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 the required 'file_b64' parameter and no output schema, the description is incomplete. It addresses path-based reading but ignores the file_b64 parameter entirely, creating a significant gap. The tool's behavior regarding base64 input is undocumented, which hinders 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?

The description fails to explain the required 'file_b64' parameter (a base64 string) despite focusing on path-based reading. While it partially explains the 'options' sub-parameters (format, sheet), it omits 'maxRows'. With 0% schema description coverage, the description should compensate but does not adequately cover all parameters.

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 tool reads .xlsx files and returns a markdown/JSON/SQL representation. It effectively distinguishes itself from siblings like xlsx_read_handle by specifying different use cases (path-based vs. handle-based).

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?

Explicitly provides when-to-use (path on server's filesystem) and when-not-to-use (paperclip upload, remote user files, in-memory bytes). Also notes default behavior of returning all sheets, preventing redundant calls.

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

xlsx_read_handleA
Read-onlyIdempotent

read a workbook that has already been uploaded to the server via the chunked upload flow, by its server-side cache handle, WITHOUT re-transferring the bytes. Returns the same shape as xlsx_read (text / json / markdown) but skips the file_b64 round-trip.

USE WHEN: the workbook has already been chunked + finalized into the server-side workbook cache (a workbook_handle was returned from the finalize call) and you want to read it again — e.g., a multi-step session where the same large workbook is queried repeatedly. Avoids re-uploading the bytes on every call.

DO NOT USE WHEN: you have a local file path and no prior upload (use xlsx_read — it handles the file_b64 transport for you). Handles expire when the cache TTL elapses; the call returns a clear "not found / expired" error in that case.

ParametersJSON Schema
NameRequiredDescriptionDefault
optionsNo
workbook_handleYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds value by noting the dependency on prior upload, handle expiration, and the return shape. No contradiction.

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 concise and well-structured: purpose statement followed by usage guidelines. Every sentence adds value, and key information is front-loaded.

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

Completeness5/5

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

Given the tool's simplicity, read-only nature, and strong annotations, the description covers all essential aspects: what it does, when to use, limitations (handle expiry), and error handling. No output schema needed as return shape is delegated to xlsx_read.

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 0%, so description must compensate. It mentions the workbook_handle parameter implicitly and references 'same shape as xlsx_read' for options, but does not explicitly describe the options object's fields or enum values. Adequate but not thorough.

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 tool's function: read a pre-uploaded workbook using a server-side cache handle without re-transferring bytes. It specifies the return shape matches xlsx_read and distinguishes from the sibling tool xlsx_read, which handles file_b64 transport.

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?

Explicit 'USE WHEN' and 'DO NOT USE WHEN' sections provide clear context for when to use this tool vs. alternatives (e.g., xlsx_read for local files). Also mentions handle expiration and error behavior.

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

xlsx_receiptA

Attach an AI-generation receipt to a LOCAL .xlsx file — a cryptographic attestation embedded in docProps/custom.xml that says "this file was generated by THIS agent, at THIS time, against THESE inputs." Returns the receipted workbook as base64 in _meta.file_b64; pass out_path to write to disk.

Honesty boundary (load-bearing): the server signs the CALLER-DECLARED agent.name — it does NOT verify the caller actually IS that agent. The signature proves "this server signed these strings at this time," not "this came from claude-sonnet-4-6." Caller is responsible for honest declaration. Cryptographic identity binding is v1.1+ scope.

USE WHEN: an AI agent generates a workbook and the recipient wants verifiable provenance — "what produced this file, when, against what." Or chaining attestations across a multi-step pipeline.

DO NOT USE WHEN: the workbook was human-authored (use xlsx_stamp — Stamp attests to check results, Receipt attests to generation context).

ParametersJSON Schema
NameRequiredDescriptionDefault
agentYes
covers_sheetsNo
descriptionNo
file_b64No
inputsNo
workbook_handleNo

TDQS

A4.8/5.0
Behavior5/5

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

Description discloses critical behavioral traits: embedded attestation in docProps/custom.xml, base64 return, honest declaration boundary (server signs caller-declared agent.name). Annotations already mark readOnlyHint=false and destructiveHint=false; description adds context without contradiction.

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 well-structured with clear sections (overview, honesty boundary, usage guidelines). Every sentence adds value, no repetition, and the key information is front-loaded.

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?

Given 6 parameters, complex nested objects, and no output schema, the description adequately covers the tool's main purpose, return value (_meta.file_b64), and usage contexts. Some parameter details are missing, but the overall intent is clear.

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 0% schema coverage, description compensates by explaining the agent parameter's honesty boundary and mentioning file_b64 and out_path (though out_path is not in schema). It gives functional context for key parameters but omits details on covers_sheets, inputs, and workbook_handle.

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 tool attaches an AI-generation cryptographic receipt to an .xlsx file and distinguishes it from sibling tools like xlsx_stamp (for human-authored workbooks) and xlsx_verify_receipt (for verification).

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?

Explicit 'USE WHEN' and 'DO NOT USE WHEN' sections provide clear guidance on appropriate contexts, with an explicit alternative (xlsx_stamp) and an honesty boundary note.

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

xlsx_redactA
Idempotent

redact PII and sensitive values from a LOCAL .xlsx file before sharing or archiving. DEFAULT preserves formulas + comments + named ranges + styles, strips only cell values. Pass strip_formulas=true / strip_comments=true to remove those too.

ALWAYS pass out_path when the user wants the redacted file saved to disk. WITHOUT out_path: redacted bytes return in _meta.file_b64 (base64) — caller must save them. The response text confirms whether a save happened — trust the response, do not infer.

USE WHEN: the user provides a LOCAL .xlsx path and wants PII removed. Server-side detection; returns a redacted copy with an audit manifest showing what was removed.

DO NOT USE WHEN: the file came from an upload/attachment. Or in sandboxed contexts without local filesystem access.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes
optionsNo

TDQS

A4.1/5.0
Behavior5/5

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

The description discloses default behavior (preservation of formulas, comments, etc.), optional stripping parameters, and output handling (out_path vs. base64 return). This adds significant detail beyond annotations, which only indicate idempotent and open-world hints.

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 well-structured with a purpose line, default behavior, output instructions, and usage conditions. It is slightly lengthy but each sentence adds value; minor redundancy in the 'USE WHEN' block.

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 description covers input requirements, default behavior, and output format, but the absence of explanation for 'file_b64' and the erroneous mention of 'out_path' reduce completeness. Without output schema, the description provides adequate but imperfect guidance.

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 0%, so description is crucial. It explains options (strip_formulas, strip_comments, mode) and output behavior, but it references 'out_path' as a parameter not in the schema, causing confusion. It also fails to describe the required 'file_b64' parameter, leaving a gap.

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 tool redacts PII and sensitive values from LOCAL .xlsx files. The verb 'redact' and resource 'LOCAL .xlsx file' are specific, and it distinguishes from many sibling xlsx tools that perform other operations.

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?

The description explicitly provides USE WHEN and DO NOT USE WHEN conditions, including file source and sandbox context. However, it does not name an alternative sibling tool for other redaction scenarios, leaving room for improvement.

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

xlsx_schemaA
Read-onlyIdempotent

infer column schema of a LOCAL .xlsx file — types, nullable flags, header row, sample values. Use when the agent needs to reason about column types BEFORE deciding how to handle data. Includes confidence (high/medium/low) per column.

USE WHEN: the user references a LOCAL file path and you need to understand column types before processing or writing code against the data. Useful before xlsx_read when downstream handling depends on types.

DO NOT USE WHEN: the file came from an upload/attachment. Or for in-memory data the agent already holds.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes
optionsNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already specify read-only, idempotent, non-destructive. Description adds the critical constraint of local file requirement and reveals output includes confidence levels. No contradiction with annotations.

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?

Well-structured with purpose sentence, usage hints, and explicit when/not. Front-loaded and mostly concise, though some repetition of 'LOCAL' and the usage section could be tighter.

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?

Covers purpose, usage, and behavioral constraints well. Lacks parameter format details and a more detailed description of the return structure (though output components are listed). Without output schema, description should provide more specifics.

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 has 0% description coverage. Description mentions file_b64 (required) and options (range, sheet) but does not clarify that file_b64 is base64-encoded content, nor does it explain range/sheet format. Meaning added is minimal.

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 tool infers column schema of local .xlsx files, listing output components (types, nullable flags, header row, sample values, confidence). It distinguishes from siblings like xlsx_read by emphasizing its use before reading data and that it only handles local files.

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?

Explicit 'USE WHEN' and 'DO NOT USE WHEN' sections provide clear guidance: use for local file paths before processing, not for uploads/attachments or in-memory data. Also mentions its utility before xlsx_read.

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

xlsx_session_set_validationsA
Idempotent

configure per-session data-validation rules the server will apply to subsequent calls in the same session (e.g., reject rows missing required columns, enforce enum values on a category column, range-bound numeric inputs). Stateful — affects this session only.

USE WHEN: the workflow has multiple write/clean steps in sequence and you want consistent server-side validation across them without restating the rules on every call. Or when validating user-supplied data against a known schema you want enforced for the rest of the session.

DO NOT USE WHEN: you only have a single call to make (just include the validation logic in that call). Or when you do not have a session_id (sessions are returned from the session-create surface; this tool is a no-op without one).

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
validationsYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover idempotent and non-destructive nature. Description adds stateful session-only scope and no-op without session_id. Does not contradict annotations. Could mention if validations are cumulative or replaced, but overall adequate.

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?

Description is three well-structured paragraphs: definition with examples, USE WHEN, DO NOT USE WHEN. Front-loaded with purpose, each sentence earns its place. No fluff.

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?

Given no output schema, description explains that subsequent calls will use these validations and that it's stateful. It covers the main behavioral context. However, could elaborate on whether validations replace or append, and details of validation rule structure. Still sufficient for most use cases.

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 0%, so description must compensate. It mentions 'ref', 'sheet', 'type' in examples but does not fully explain these properties or the session_id format. Adds some meaning but not enough detail for a parameter with nested structure.

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 it configures per-session data-validation rules with specific examples (reject missing columns, enforce enum values, range-bound numeric). It distinguishes from siblings like xlsx_data_validations and xlsx_validate by emphasizing stateful session-only behavior.

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?

Explicit 'USE WHEN' and 'DO NOT USE WHEN' sections provide concrete scenarios: multi-step workflows with consistent server-side validation vs. single calls, and requirement of valid session_id. This fully guides the agent on when to select this tool.

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

xlsx_slicers_timelinesA
Read-onlyIdempotent

List every slicer (interactive filter button) and timeline (date-range filter visual) in a LOCAL .xlsx file with their captions, source bindings (table column or pivot table), and timeline granularity (years / quarters / months / days) plus the currently-selected date range.

Reads the OOXML zip (xl/slicers/, xl/slicerCaches/, xl/timelines/, xl/timelineCaches/) directly — a surface ExcelJS silently drops on round-trip.

USE WHEN: documenting a dashboard so an LLM knows what filter UI a human sees. Or auditing whether a slicer's binding still matches the underlying data after a refactor.

DO NOT USE WHEN: just reading values (use xlsx_read). Or trying to APPLY a filter (use xlsx_filter — slicers/timelines are UI metadata, not data filters).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes

TDQS

A4.5/5.0
Behavior4/5

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

Beyond annotations (readOnlyHint, etc.), the description discloses that it reads OOXML zip directly and that ExcelJS drops these on round-trip, adding valuable 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 concise, well-organized with clear sections, and every sentence adds value without redundancy.

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

Completeness5/5

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

For a list-type tool with no output schema, the description fully specifies what is listed and how it works, including internal paths, providing complete context.

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 0% for the single parameter file_b64. The description implies the file is a base64-encoded local .xlsx file but does not explicitly describe the parameter, leaving some ambiguity.

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 precisely states the tool lists slicers and timelines in an .xlsx file, specifying details like captions, source bindings, and timeline granularity. It distinguishes from siblings like xlsx_read and xlsx_filter.

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?

Explicit 'USE WHEN' and 'DO NOT USE WHEN' sections provide clear guidance on appropriate contexts and alternatives, such as using xlsx_read for values and xlsx_filter for applying filters.

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

xlsx_sortA
Read-onlyIdempotent

pandas-style df.sort_values() on a LOCAL .xlsx file with multi-column sort and per-column direction (asc/desc, default asc). Stable across all sort keys; type-aware comparison; nulls always sort last.

USE WHEN: the user wants rows ordered by one or more columns. Returns the sorted rows as a markdown table.

DO NOT USE WHEN: the data is already sorted as desired (use xlsx_read). Or for upload/attached files.

ParametersJSON Schema
NameRequiredDescriptionDefault
byYes
file_b64Yes
optionsNo

TDQS

A4.3/5.0
Behavior4/5

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

Beyond annotations (readOnly, idempotent), description adds stability across sort keys, type-aware comparison, and nulls sorting last. This enriches understanding of tool behavior beyond safety/cache hints.

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?

Concise but informative: first line defines core functionality, then behavioral details, then usage guidelines. No wasted words.

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?

Covers core purpose, usage, and behavioral traits. Lacks details on error handling or file format constraints, but given good annotations and simple nature, it's fairly complete. Mentions return format (markdown table).

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%. Description only explains the 'by' parameter (multi-column, direction) but doesn't clarify 'file_b64' (file input) or 'options' (header_row, limit, sheet). Missing important parameter context.

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?

Description clearly states it sorts rows of a local .xlsx file with multi-column and per-column direction. It uses specific verb 'sort' and resource 'xlsx file', and distinguishes from siblings by focusing on sorting rather than other data operations.

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?

Explicit USE WHEN and DO NOT USE WHEN sections with alternative tool (xlsx_read) for cases where data is already sorted or for upload/attached files. Provides clear decision criteria.

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

xlsx_stampA

Sign a LOCAL .xlsx file with a "workbook integrity verification" stamp — a cryptographic attestation embedded in docProps/custom.xml that says "this file was generated by these tools, passed these N specific checks, signed at this time, and hasn't been tampered with since." Factual claims only (never an opinion-shaped seal of approval). Returns the stamped workbook as base64 in _meta.file_b64; pass out_path to write to disk.

The caller supplies the checks array (e.g., from a supervisor review): list of named tests, each with passed/failed/skipped status. Verifiers see the individual check results, not a single good/bad opinion.

USE WHEN: an agent has just produced or reviewed a workbook and wants to attach provable provenance + check results that travel with the file. Recipients verify via xlsx_verify_stamp.

DO NOT USE WHEN: the user just wants to share a file (use xlsx_post_slack / xlsx_post_teams).

ParametersJSON Schema
NameRequiredDescriptionDefault
checksYes
exclude_sheetsNo
file_b64No
generated_byNo
workbook_handleNo

TDQS

A4.1/5.0
Behavior4/5

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

Description discloses the cryptographic stamping, base64 return, and checks array. Annotations (readOnlyHint=false, destructiveHint=false) are consistent. Minor mismatch: mentions 'out_path' as a parameter but it's absent from the schema. Overall, good behavioral disclosure beyond annotations.

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 front-loaded with the main purpose and well-organized (concept, return, parameters, usage). It is slightly verbose but every sentence adds value. Efficient for the tool's complexity.

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?

Given the complexity (nested objects, 5 params, no output schema), the description explains the stamp concept and return format but misses details on exclude_sheets, file_b64, workbook_handle, and generated_by. No output schema means return value description ('_meta.file_b64') is insufficient. Partially 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?

Schema coverage is 0%, so description must compensate. It explains 'checks' well (list of named tests with status) but ignores other parameters: exclude_sheets, file_b64, generated_by, workbook_handle. Also mentions 'out_path' which isn't in schema. Incomplete guidance for most parameters.

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 tool signs a .xlsx file with a cryptographic integrity stamp, distinguishing it from file-sharing tools like xlsx_post_slack. The verb 'Sign' and resource 'LOCAL .xlsx file' are specific and unambiguous.

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?

Explicit usage guidance is provided with 'USE WHEN' and 'DO NOT USE WHEN' sections, including concrete alternatives (xlsx_post_slack / xlsx_post_teams) and a reference to the verification counterpart xlsx_verify_stamp.

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

xlsx_stylesA
Read-onlyIdempotent

surface cell formatting (number formats, fonts, fills, alignment) so an agent knows what a cell LOOKS like, not just its raw value. Default mode: per-sheet rollup of top-N number formats / fonts / fills with counts. Detailed mode (opt-in, capped at 1000 cells): per-cell breakdown for narrow queries. No other tool can do this with this fidelity: pandas drops styles on read entirely. The single most valuable slice is number formats — pandas hands an LLM "45292" and the cell rendered as "2024-01-01" because format was "yyyy-mm-dd". xlsx_styles is what makes that recoverable.

USE WHEN: an LLM is about to interpret raw numbers (date serials, currency, percents, scientific notation) and you want the format hint that tells it what those numbers MEAN to a human. Or auditing a dashboard's typography. Or fingerprinting a template. Free tier — counts against the 10k/mo cap.

DO NOT USE WHEN: you only need the data (use xlsx_read which already includes basic numFmt hints in the output).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes
optionsNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare readOnlyHint, idempotentHint, etc. The description adds significant behavioral detail: default mode is a per-sheet rollup with counts, detailed mode is opt-in and capped at 1000 cells. It explains the value of number formats for interpreting date serials and other formatted numbers. No contradictions with annotations.

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 well-structured with three paragraphs: purpose and modes, use cases, usage guidelines. It is front-loaded with the core purpose. Some sentences are redundant (e.g., restating the value of number formats), but overall efficient.

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?

Given the tool has 2 parameters (one nested), no output schema, and 0% schema coverage, the description covers the essential context: two modes, cap, use cases, and differentiation from siblings. It lacks explicit description of the return value format, but the mode descriptions provide enough for an agent to understand output shape.

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 description coverage is 0%, so the description must compensate. It explains the 'detailed' and 'limit' parameters by describing default vs detailed modes and the 1000-cell cap. However, it does not explicitly describe 'file_b64' or the 'options' structure, leaving some ambiguity. Overall, it adds meaningful semantics.

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 tool surfaces cell formatting (number formats, fonts, fills, alignment) to reveal how a cell looks, distinguishing it from raw values. It specifies that no other tool provides this fidelity and contrasts with xlsx_read, which only includes basic numFmt hints.

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?

Explicit 'USE WHEN' and 'DO NOT USE WHEN' sections provide clear guidance on when to use this tool (interpreting raw numbers, auditing dashboards, fingerprinting templates) and when to use alternatives (xlsx_read for data only). Also mentions the free tier cap.

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

xlsx_tablesA
Read-onlyIdempotent

list every Excel ListObject ("Format as Table" structures) in a LOCAL .xlsx workbook — name, sheet, range, header/totals flags, columns. pandas cannot see ListObjects; if a workbook uses Excel Tables, this is the only way to enumerate them.

USE WHEN: the user references a "table" in a workbook by name, or you need to know what structured tables exist before reading. Useful for workbooks with multiple tables on one sheet.

DO NOT USE WHEN: the workbook has no Excel-Tables (just data ranges). Or for upload/attached files.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes
optionsNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint. The description adds that the tool works only on LOCAL workbooks and that it enumerates tables that pandas cannot read. This provides meaningful context beyond annotations without contradiction.

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 concise with clear sections and front-loaded purpose. The USE WHEN/DO NOT USE WHEN format is helpful. Slight redundancy (e.g., 'pandas cannot see ListObjects' repeats the uniqueness point) but overall well-structured and not overly long.

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?

Given no output schema, the description mentions returned fields (name, sheet, range, flags, columns) but does not detail the output format or provide examples. Parameter details are missing. For a tool with 2 parameters (one nested) and no output schema, the description should cover these gaps but does not fully do so.

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 0%, meaning no parameter descriptions in the schema itself. The description does not explain file_b64 (base64 file) or the options parameter (include_columns, sheet). While the tool's purpose implies file_b64, the options are left completely unexplained, which is insufficient for correct invocation.

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 verb (list) and resource (Excel ListObjects in a local .xlsx workbook), including specifics like name, sheet, range, and flags. It distinguishes from siblings by noting that pandas cannot see ListObjects, making this the only way to enumerate them.

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?

Explicit USE WHEN and DO NOT USE WHEN sections provide clear context: use when the user references a named table or needs to discover tables before reading; avoid when there are no Excel Tables or for upload/attached files. This is excellent guidance for tool selection.

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

xlsx_topologyA
Read-onlyIdempotent

one-call workbook orientation. Returns sheets × dimensions × formulas × named ranges × tables × validations × hyperlinks × merges in one shot, plus feature flags (macros / external refs / pivots / LAMBDA / dynamic arrays). No other tool can do this: pandas gives you a frame per sheet but no structure; openpyxl makes you fan out across 6+ object trees to learn the same thing; this is the "what is in this workbook?" call you make first to decide which other tool to call next.

USE WHEN: an agent has just been handed a workbook and needs to orient before drilling in. Or surveying many workbooks for triage / index. Or auditing whether a workbook is "interesting" (formulas? macros? external refs?). Free tier — counts against the 10k/mo cap.

DO NOT USE WHEN: you already know the sheet you want and just want its data (use xlsx_read or xlsx_describe).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, destructiveHint, idempotentHint, openWorldHint. The description adds behavioral context like 'one-call' nature, free tier with 10k/month cap, and the broad scope of what it inspects. No contradictions.

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 bit long but well-structured: a concise core statement, a comparative paragraph, and clear use/when-not sections. Every sentence adds value, though the list of returned items could be slightly abbreviated.

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 description lists what the tool returns but lacks specifics on the output format (e.g., JSON structure). Given no output schema, this is a gap. However, the tool's purpose and usage are well covered, so it's slightly incomplete.

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 (file_b64) with no schema description coverage. The description does not explain the parameter format, but its purpose is inferable from the tool name and context. Baseline 3 given low coverage but simple parameter.

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 tool returns a workbook orientation with a detailed list of components (sheets, dimensions, formulas, etc.) and contrasts with siblings like pandas and openpyxl. It explicitly says 'No other tool can do this', making its unique purpose very clear.

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?

The description provides explicit USE WHEN and DO NOT USE WHEN sections, giving clear context for when to use this tool (orientation after receiving a workbook, triage, auditing) and alternatives (xlsx_read, xlsx_describe) when not to use it.

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

xlsx_validateA
Read-onlyIdempotent

cross-engine consistency check on a LOCAL .xlsx file — runs the workbook through TWO independent renderers (@protobi/exceljs and @cj-tech-master/excelts) and reports cell-level divergences. No other tool can do this: pandas trusts cached values, openpyxl is single-engine, and Excel-itself disagrees with everything else on edge cases like LAMBDA, dynamic arrays, and timezone handling. xlsx_validate is the only way to know whether two engines agree on what your workbook says.

USE WHEN: the user is about to send the workbook downstream for analysis or as an authoritative source — pre-flight check. Or for audit / regression testing across engine versions. Free tier — counts against the 10k/mo cap.

DO NOT USE WHEN: a casual read suffices (use xlsx_read). Or for upload/attached files.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes

TDQS

A4.1/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations by mentioning the two engines, cell-level reports, a free-tier cap of 10k/mo, and that it runs locally. It does not contradict annotations and provides valuable insight into the tool's 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?

The description is well-structured and front-loaded with the core purpose. It efficiently uses sections for usage guidelines. While somewhat verbose (e.g., 'No other tool can do this' paragraph), the structure aids readability.

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?

Given the simple input schema (one parameter) and no output schema, the description covers purpose and usage well but omits details on parameter encoding and return format. Annotations provide some safety context, but the lack of output description leaves completeness lacking.

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 input schema has one parameter (file_b64) with 0% schema description coverage. The description mentions 'LOCAL .xlsx file' but does not explain that the parameter expects base64-encoded file content. This is a significant gap for an agent to correctly invoke the tool.

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 that the tool performs a cross-engine consistency check on a local .xlsx file, comparing two independent renderers and reporting cell-level divergences. It distinguishes from siblings by noting that no other tool can do this cross-engine validation.

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?

The description explicitly provides 'USE WHEN' (pre-flight check, audit/regression testing) and 'DO NOT USE WHEN' (casual read, use xlsx_read; upload/attached files) sections, giving clear guidance on when to choose this tool over alternatives.

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

xlsx_value_countsA
Read-onlyIdempotent

pandas-style Series.value_counts() on one column of a LOCAL .xlsx file — count each unique value, sorted by frequency desc, with percentage. Excludes nulls by default; pass include_nulls=true to count them.

USE WHEN: the user asks "what's the distribution of X?" / "how often does each value appear?". Returns a markdown table.

DO NOT USE WHEN: the user wants groupby + multi-column aggregations (use xlsx_aggregate). Or for upload/attached files.

ParametersJSON Schema
NameRequiredDescriptionDefault
columnYes
file_b64Yes
optionsNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly, non-destructive, idempotent. Description adds: excludes nulls by default, include_nulls parameter, returns markdown table, sorted desc with percentage. This goes beyond annotations to specify exact behavior and output format.

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?

Very concise, front-loaded with core functionality, uses clear sections (USE WHEN, DO NOT USE WHEN). Every sentence adds value, no fluff.

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

Completeness5/5

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

For a simple value_counts tool, the description covers purpose, usage context, null handling, sort order, output format. No output schema is needed as return value described. Complete for expected use.

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?

With 0% schema coverage, description partially compensates by mentioning column and include_nulls. However, it does not describe file_b64 (how to supply the file) or options like header_row, sheet, top_n. Users must infer these from parameter names or tool context.

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?

Clearly states it performs value_counts on one column of a local xlsx file, counts unique values sorted by frequency descending with percentage. Distinguishes from sibling xlsx_aggregate by specifying it's for single-column distribution, not groupby aggregations.

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?

Explicitly provides USE WHEN conditions (distributions, frequency) and DO NOT USE WHEN cases (groupby aggregations, upload/attached files). Directs to alternative tool xlsx_aggregate for multi-column aggregations.

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

xlsx_verify_receiptA
Read-onlyIdempotent

verify a workbook's embedded AI-generation receipt. Returns whether the signature is valid, whether the recomputed content hash matches the hash IN the receipt, and the full caller-declared claims (agent identity, generation timestamp, source-file hashes, prompt hash, MCP tools called, description). A workbook can fail verification three ways: (1) no receipt present (never receipted, or receipt was stripped); (2) signature_valid=false (claims modified after signing); (3) hash_matches=false (workbook bytes modified after receipt was generated). Honesty: a valid receipt proves the SERVER signed the caller-DECLARED agent string — not that the agent IS that.

USE WHEN: a workbook arrives claiming AI provenance and the user wants to verify it. Or auditing a corpus of workbooks to find ones with broken receipts (likely-tampered) or no receipts at all.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64No
workbook_handleNo

TDQS

A3.9/5.0
Behavior5/5

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

Annotations already provide readOnlyHint, idempotentHint, and destructiveHint=false. The description adds valuable behavioral context: three failure modes (no receipt, invalid signature, hash mismatch) and what the tool returns. No contradictions.

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 well-structured with clear sections (function, failure modes, usage). It is front-loaded with purpose. Some redundancy exists (e.g., 'verify a workbook's' repeated), but overall efficient for the information conveyed.

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?

Given no output schema, the description adequately explains return structure (signature valid, hash matches, claims) and usage context. However, it omits parameter details and does not fully list the returned claims, leaving gaps for an agent.

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 0%, yet the description provides no explanation of the two parameters (file_b64, workbook_handle). An agent cannot determine which to use or their semantics from the description alone. This is a critical gap.

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 tool verifies a workbook's AI-generation receipt, distinguishing it from siblings like xlsx_receipt (generation) and xlsx_verify_stamp. It specifies the exact operation: checking signature, content hash, and returning claims.

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?

The 'USE WHEN' section provides explicit guidance: when a workbook claims AI provenance or for auditing. It also includes a caveat about honesty. No explicit 'when not to use' or alternatives, but sibling differentiation is implied.

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

xlsx_verify_stampA
Read-onlyIdempotent

verify a workbook's embedded integrity-verification stamp. Returns whether the cryptographic signature is valid, whether the workbook bytes match what was signed (recomputed hash vs hash IN the stamp), and the full check-result content of the stamp. A workbook can fail verification three ways: (1) no stamp present (file was never stamped, or the stamp was stripped); (2) signature_valid=false (someone modified the claims after signing, or signed with a different key); (3) hash_matches=false (someone modified the workbook bytes after signing). Each is a distinct trust signal.

USE WHEN: the agent (or a downstream verifier) needs to confirm a workbook hasn't been tampered with since it was signed, OR needs to surface the original check results that were attested to. Common scenario: incoming workbook from a counterparty, agent runs verify before trusting any of its values.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64No
workbook_handleNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate read-only and idempotent behavior. Description adds the three verification outcomes and failure modes, providing useful context beyond annotations.

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 concise, front-loaded with the primary purpose, and efficiently organized with a list of failure modes and a usage section.

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?

The description covers the return values, failure modes, and when to use the tool. It lacks explicit mention of prerequisites (e.g., workbook must have a stamp) but is otherwise complete for a verification 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 0%, but the description does not explain the two parameters (file_b64, workbook_handle). The agent must infer their usage, which is insufficient given the lack of schema descriptions.

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 tool verifies an integrity stamp and details the three failure modes, distinguishing it from sibling tools like xlsx_verify_receipt by focusing on stamps.

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?

The 'USE WHEN' section provides explicit scenarios for using the tool, but does not exclude cases where other verification tools (e.g., xlsx_verify_receipt) might be more appropriate.

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

xlsx_workbook_viewsA
Read-onlyIdempotent

Surface the UI state of a LOCAL .xlsx file — what a human sees when they open it in Excel. Per sheet: visibility (visible / hidden / veryHidden), view state, zoom, active cell + selection, frozen-pane breakdown, gridlines / row-col headers / ruler / RTL flags, tab color. Workbook level: which sheet is active when Excel opens.

The "when the user opens this file, what do they see?" rollup — useful when an agent needs to reason about UI continuity (resume editing, notice a hidden sheet, replicate frozen panes in a generated workbook).

USE WHEN: handed a workbook mid-workflow and need "where was the user last working?" (active cell, tab, zoom). Or auditing for hidden / veryHidden sheets that often conceal sensitive data.

DO NOT USE WHEN: just reading values (use xlsx_read).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_b64Yes
optionsNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already indicate readOnlyHint and idempotentHint. The description adds significant context by detailing exactly what data is returned (visibility, view state, zoom, active cell, frozen panes, etc.), which goes beyond the annotations and fully informs the agent of tool behavior.

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 well-structured with a clear front-loaded purpose, followed by details and usage guidance. Every sentence adds value, and there is no redundancy or filler. It is appropriately sized for the information provided.

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

Completeness5/5

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

Given the lack of output schema and low schema coverage, the description provides thorough information about what the tool returns, including specific fields and usage scenarios. It covers both behavior and context, making it complete for a read-only inspection tool.

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 0%, so the description should compensate by explaining parameters. While it implies file_b64 is the file and options.sheet may filter, it does not explicitly define their meaning or format. The description mentions 'per sheet' but lacks a direct mapping to parameters, making it only partially adequate.

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 tool surfaces the UI state of a local .xlsx file, listing per-sheet and workbook-level details. It explicitly distinguishes from sibling tools like xlsx_read for reading values, 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 Guidelines5/5

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

The description provides explicit 'USE WHEN' and 'DO NOT USE WHEN' sections, specifying scenarios like resuming editing or auditing hidden sheets, and directing to xlsx_read for value reading. This provides clear decision guidance.

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

xlsx_writeA

create or update a LOCAL .xlsx file from a structured spec.

Spec shape: {sheets: [{name, cells: [{address, value | formula}]}]}. Each cell has an A1 address ("A1", "B2") and EITHER value (string|number|boolean|null) OR formula (string, no leading "="). Minimal example: {"sheets":[{"name":"Sheet1","cells":[{"address":"A1","value":"id"},{"address":"A2","value":1},{"address":"B2","formula":"A2*2"}]}]}

ALWAYS pass out_path to save to disk. Without out_path the workbook bytes return in _meta.file_b64.

USE WHEN: the user wants to write or edit a spreadsheet at a LOCAL file path. Server-validated before writing — safer than generating xlsx bytes directly.

DO NOT USE WHEN: working in a sandbox without local filesystem write access. Or editing an uploaded file in place (there is no local path to write to).

ParametersJSON Schema
NameRequiredDescriptionDefault
base_file_b64No
specYes

TDQS

A4/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false (confirming write intent) and destructiveHint=false. The description adds behavioral context: server-side validation before writing, fallback to _meta.file_b64 when no out_path given, and the requirement to pass out_path for disk save. This enhances agent understanding beyond annotations. A minor deduction for not clarifying whether an existing file is overwritten or updated.

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 description is somewhat lengthy but well-structured: purpose, spec shape, example, output behavior, and usage guidance. The example is helpful but could be shortened. The mention of 'out_path' not in schema adds unnecessary complexity. It's informative but not maximally concise.

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?

Given the tool's complexity (nested spec, optional base_file, output via b64 or file), the description covers creation/update, spec details, and output modes. However, the omission of base_file_b64 explanation and the inclusion of out_path (not a parameter) leaves gaps. The lack of output schema is partially mitigated by noting _meta.file_b64. Overall, adequate but 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?

Schema description coverage is 0%, so the description must compensate. It describes the 'spec' parameter well (shape, example, constraints) but mentions 'out_path' which is NOT in the input schema (the schema only has spec and base_file_b64). This mismatch creates confusion about required/optional parameters. The base_file_b64 parameter is not explained at all. Overall, the description adds some value for spec but fails to fully cover both parameters, and introduces an undocumented parameter.

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 begins with a clear verb+resource phrase: 'create or update a LOCAL .xlsx file from a structured spec.' This immediately distinguishes the tool from sibling tools like xlsx_read, xlsx_convert, etc., which handle other operations. The purpose is specific and unambiguous.

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?

The description explicitly provides 'USE WHEN' and 'DO NOT USE WHEN' conditions, giving direct guidance on appropriate contexts and exclusions. It also compares to alternatives (safer than generating xlsx bytes directly), helping the agent decide when to invoke this tool over others.

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

TDQS

A4.2/5.0
Disambiguation5/5

Every tool has a highly specific, distinct purpose with clear descriptions and usage guidance. Tools like xlsx_aggregate, xlsx_pivot, xlsx_filter, and xlsx_sort are well-differentiated. Even closely related tools like xlsx_healer_cure, xlsx_healer_diagnose, xlsx_healer_intent, and xlsx_healer_simulate have explicit DO NOT USE WHEN clauses that prevent confusion.

Naming Consistency5/5

All tools follow a consistent `xlsx_` prefix with a verb_noun pattern (e.g., xlsx_aggregate, xlsx_post_slack, xlsx_verify_receipt). The naming is uniform and predictable, making it easy for an agent to infer tool functionality. There is no mixing of conventions like camelCase or different verb styles.

Tool Count4/5

With 50 tools, the server is comprehensive but slightly over the typical well-scoped range. However, each tool addresses a distinct, justified need in the Excel manipulation domain, from basic read/write to advanced auditing and healing. The high count is offset by excellent organization and clear descriptions, making navigation manageable.

Completeness5/5

The server covers an exhaustive range of operations: reading, writing, inspection (formulas, styles, comments, conditional formatting), transformation (aggregate, pivot, filter, sort, clean), validation (cross-engine, data validations), external reference management (heal, simulate), metadata (properties, protection, print settings), and even posting to Slack/Teams. Few gaps exist; the toolset is remarkably complete for its domain.

Maintenance

ActivityActive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/senoff/xlsx-for-ai'

If you have feedback or need assistance with the MCP directory API, please join our Discord server