Skip to main content
Glama

Excel Read

excel_read
Read-only

Reads data from an Excel spreadsheet (.xlsx file). Returns the first row as headers and the remaining data rows as rows — mirroring excel_create's headers/rows params, so a read→create round-trip needs no manual row-0 handling.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute path to the .xlsx file
max_rowsNoMax rows to return (default 100)
sheet_nameNoSheet name to read (optional, reads first sheet). Matched without case. A name that no sheet has is an error listing the available ones — it never falls back to the first sheet.
force_downloadNoIf the file is stored in the cloud and evicted from this Mac (dataless), request the download and wait for it instead of failing. Off by default: a download can take minutes and use metered data, so it is the caller's decision.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
rowsYesData rows AFTER the header row; numeric cells are numbers and text cells are strings — feeds straight into excel_create's `rows`
countYesNumber of DATA rows returned (excludes the header row)
sheetYesName of the sheet that was read
sheetsYesAll sheet names in the workbook
headersYesThe first row, as column headers — mirrors excel_create's `headers` param
sparse_cellsNoPresent only when the sheet has cells far outside the table (beyond column 64): each is {row, col, value} with REAL 1-based indices. Kept out of `rows` so one stray cell can't pad every row — but never dropped.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / sheet_name / description
      Previous value: -"Sheet name to read (optional, reads first sheet)"New value: +"Sheet name to read (optional, reads first sheet). Matched without case. A name that no sheet has is an error listing the available ones — it never falls back to the first sheet."
  2. Changed1 schema field changed
    • changedInput schema / properties / sheet_name / description
      Previous value: -"Sheet name to read (optional, reads first sheet). Matched without case. A name that no sheet has is an error listing the available ones — it never falls back to the first sheet."New value: +"Sheet name to read (optional, reads first sheet)"
  3. Changed1 schema field changed
    • changedInput schema / properties / sheet_name / description
      Previous value: -"Sheet name to read (optional, reads first sheet)"New value: +"Sheet name to read (optional, reads first sheet). Matched without case. A name that no sheet has is an error listing the available ones — it never falls back to the first sheet."
  4. Changed1 schema field changed
    • addedInput schema / properties / force_download
      Added value: +{
      +  "description": "If the file is stored in the cloud and evicted from this Mac (dataless), request the download and wait for it instead of failing. Off by default: a download can take minutes and use metered data, so it is the caller's decision.",
      +  "type": "boolean"
      +}
  5. Changed2 schema fields changed
    • changedOutput schema / properties / rows / description
      Previous value: -"Data rows AFTER the header row (each an array of cell-value strings) — feeds straight into excel_create's `rows`"New value: +"Data rows AFTER the header row; numeric cells are numbers and text cells are strings — feeds straight into excel_create's `rows`"
    • removedOutput schema / properties / rows / items / items / type
      Removed value: -"string"
  6. Changed1 schema field changed
    • addedOutput schema / properties / sparse_cells
      Added value: +{
      +  "description": "Present only when the sheet has cells far outside the table (beyond column 64): each is {row, col, value} with REAL 1-based indices. Kept out of `rows` so one stray cell can't pad every row — but never dropped.",
      +  "items": {
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  7. Changed4 schema fields changed
    • changedOutput schema / properties / count / description
      Previous value: -"Number of rows returned"New value: +"Number of DATA rows returned (excludes the header row)"
    • addedOutput schema / properties / headers
      Added value: +{
      +  "description": "The first row, as column headers — mirrors excel_create's `headers` param",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / rows / description
      Previous value: -"Row data as arrays of cell-value strings"New value: +"Data rows AFTER the header row (each an array of cell-value strings) — feeds straight into excel_create's `rows`"
    • changedOutput schema / required
      Previous value: -[
      -  "sheet",
      -  "sheets",
      -  "rows",
      -  "count"
      -]New value: +[
      +  "sheet",
      +  "sheets",
      +  "headers",
      +  "rows",
      +  "count"
      +]
  8. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish read-only/non-destructive behavior; the description adds valuable detail about the returned shape and the row-0 alignment with excel_create. It does not cover edge behaviors like cloud download fallback, but those are already fully documented in the parameter schema.

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

Conciseness5/5

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

Two sentences, zero filler, with the core operation and output contract front-loaded and the round-trip rationale earning its place. Every sentence adds decision-relevant information.

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?

With an output schema present and exhaustive parameter descriptions, the description supplies the one missing piece: the semantic relationship between this tool's output and excel_create's input. An agent has everything needed to select and invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100% and every parameter already has a detailed explanation, including sheet matching and force-download semantics. The description's headers/rows note adds general context but does not need to contribute parameter-level meaning, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb (`Reads`) and resource (`Excel spreadsheet .xlsx`), then defines the return contract (`headers` first row, `rows` remaining). It is clearly distinguishable from siblings such as excel_create, excel_write_cell, and generic file_read.

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?

Clear context: this is the tool for reading .xlsx files, and it explicitly calls out the read→create round-trip with excel_create. It does not spell out when-not-to-use vs generic file readers, so it misses explicit exclusions, but the intended use case is unmistakable.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources