Skip to main content
Glama
marekrost

mcp-server-spreadsheet

by marekrost

mcp-server-spreadsheet

mcp-name: io.github.marekrost/mcp-server-spreadsheet

Data-first MCP server for reading and writing spreadsheet files (.xlsx, .csv, .ods).

Key features

  • Multi-format — works with Excel (.xlsx), CSV (.csv), and OpenDocument (.ods) files through a unified tool interface.

  • Dual mode — cell-level workbook operations and a DuckDB-powered SQL query engine, interleaved freely on the same file.

  • Workbook essentials — worksheets, rows, columns, cells, search.

  • Data-only — preserves existing formatting but only reads and writes values.

  • Stateless — every call specifies file and sheet explicitly; no handles or sessions.

  • Atomic saves — writes go to a temp file, then os.replace() into the target path.

  • Type coercion on write — numeric strings become numbers, everything else is text.

  • SQL across sheets — JOINs, GROUP BY, aggregates, subqueries via in-memory DuckDB; mutations write back to the file.

  • CSV as single-sheet workbook — CSV files are treated as a workbook with one sheet named default.

Related MCP server: SheetForge MCP

Requirements

  • Python 3.10+

Installation

No local checkout needed — just configure your MCP client (see below).

From source (for development)

git clone https://github.com/marekrost/mcp-server-spreadsheet.git
cd mcp-server-spreadsheet
uv sync

Usage

Claude Desktop

Add to your claude_desktop_config.json:

Using PyPI (recommended):

{
  "mcpServers": {
    "mcp-server-spreadsheet": {
      "command": "uvx",
      "args": ["mcp-server-spreadsheet"]
    }
  }
}

Using local source:

{
  "mcpServers": {
    "mcp-server-spreadsheet": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/mcp-server-spreadsheet", "main.py"]
    }
  }
}

Claude Code

Add to your .mcp.json:

Using PyPI (recommended):

{
  "mcpServers": {
    "mcp-server-spreadsheet": {
      "command": "uvx",
      "args": ["mcp-server-spreadsheet"]
    }
  }
}

Using local source:

{
  "mcpServers": {
    "mcp-server-spreadsheet": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/mcp-server-spreadsheet", "main.py"]
    }
  }
}

Standalone (stdio transport)

# PyPI
uvx mcp-server-spreadsheet

# Local source
uv run main.py

Restricting file access to a directory (optional)

Set MCP_SPREADSHEET_ROOT to confine all path arguments to a single directory tree. Paths outside it are rejected with a clear error returned to the agent.

{
  "mcpServers": {
    "mcp-server-spreadsheet": {
      "command": "uvx",
      "args": ["mcp-server-spreadsheet"],
      "env": { "MCP_SPREADSHEET_ROOT": "/home/me/spreadsheets" }
    }
  }
}

Unset (the default), any path the server process can access is allowed.

Format notes

Format

Sheets

Formulas

Types

.xlsx

Multiple

Preserved as strings

Native (int, float, date, bool)

.ods

Multiple

Not preserved

Native (int, float, date, bool)

.csv

Single (default)

N/A

Inferred on load (int, float, text)

Sheet management tools (add_sheet, delete_sheet, copy_sheet) raise an error for CSV files.

Tools

Workbook Operations

Tool

Description

list_workbooks

List all spreadsheet files in a directory (non-recursive)

create_workbook_file

Create a new empty spreadsheet file (format by extension)

copy_workbook

Copy an existing file to a new path

Sheet Operations

Tool

Description

list_sheets

List all sheet names in a workbook

add_sheet

Add a new sheet (optional name and position)

rename_sheet

Rename an existing sheet

delete_sheet

Delete a sheet by name

copy_sheet

Duplicate a sheet within a workbook (optional new name and position)

Reading Data

Tool

Description

read_sheet

Read entire sheet as rows (optional row/column bounds)

read_cell

Read a single cell value, e.g. B3

read_range

Read a rectangular range, e.g. A1:D10

get_sheet_dimensions

Get row and column count of the used range

Writing Data

Tool

Description

write_cell

Write a value to a single cell

write_range

Write a 2D array starting at a given cell

append_rows

Append rows after the last used row

insert_rows

Insert blank or pre-filled rows at a position (shifts rows down)

delete_rows

Delete rows by index (shifts rows up)

clear_range

Clear values in a range without removing rows/columns

copy_range

Copy a block of cells to another location (optionally to a different sheet)

Column Operations

Tool

Description

insert_columns

Insert blank columns at a position

delete_columns

Delete columns by index

Tool

Description

search_sheet

Search for a value or regex pattern, returns matching cell references

Table Mode (SQL)

Tool

Description

describe_table

Inspect column names, inferred types, row count, and sample values

sql_query

Execute a read-only SQL SELECT (supports JOINs across sheets, GROUP BY, aggregates, subqueries)

sql_execute

Execute INSERT INTO, UPDATE, or DELETE FROM — writes changes back to the file

SQL examples:

-- Filter and sort
SELECT name, revenue FROM Sales WHERE status = 'Active' ORDER BY revenue DESC LIMIT 20

-- Cross-sheet JOIN
SELECT o.order_id, c.name FROM Orders o JOIN Customers c ON o.customer_id = c.id

-- Aggregate
SELECT department, COUNT(*) AS n, AVG(salary) AS avg FROM Employees GROUP BY department

-- Mutate
UPDATE Sales SET status = 'Closed' WHERE quarter = 'Q1' AND revenue < 1000
DELETE FROM Logs WHERE date < '2024-01-01'

Sheet names with spaces must be quoted: SELECT * FROM "Q1 Sales".

Sheets whose table doesn't start at row 1

All three SQL tools accept header_row and data_start_row. Each can be an int (applied to every sheet) or a {sheet_name: row} mapping (sheets not listed fall back to the default). Use header_row when column titles live below row 1, and data_start_row when extra rows (e.g. a units row) sit between the header and the data.

# Header on row 3, data follows immediately
sql_query(file, 'SELECT * FROM "People"', header_row=3)

# Mixed workbook: People headers at row 3, Orders header at row 1 with a
# units row at row 2.
sql_query(
    file,
    'SELECT * FROM "Orders" o JOIN "People" p ON o.name = p.name',
    header_row={"People": 3, "Orders": 1},
    data_start_row={"Orders": 3},
)

sql_execute preserves rows above header_row when writing changes back.

Running tests

uv sync --group dev
uv run pytest

Every tool is exercised against .xlsx, .csv, and .ods fixtures generated into a temp directory.

Common Parameters

Every sheet-level tool accepts:

Parameter

Required

Description

file

yes

Path to the spreadsheet file (.xlsx, .csv, or .ods)

sheet

no

Sheet name. Defaults to the first sheet in the workbook

All row/column indices are 1-based. Cell references use A1 notation (A1, $B$2).

Available Tools

25 tools
add_sheetA

Add a new sheet to the workbook.

Returns the name of the newly created sheet. Not supported for CSV files.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
nameNoName for the new sheet. Auto-generated if omitted.
positionNo1-based position to insert the sheet. Appended at the end if omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it's a write operation (implied by 'Add'), returns the new sheet name, and has a specific limitation ('Not supported for CSV files'). It doesn't mention permissions, rate limits, or error conditions, but covers the essential mutation nature and constraints well.

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 extremely concise and front-loaded: the first sentence states the core purpose, the second explains the return value, and the third provides a critical limitation. Every sentence earns its place with no wasted words, making it easy for an agent to parse quickly.

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 that there's an output schema (which covers return values), no annotations, and 100% schema coverage for parameters, the description is complete enough. It covers the tool's purpose, key behavior (returns sheet name), and a major constraint (CSV limitation), which is sufficient for an agent to understand when and how to use this tool effectively.

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%, so the schema already fully documents all three parameters (file, name, position). The description doesn't add any parameter-specific details beyond what's in the schema, such as file format requirements or name constraints. The baseline of 3 is appropriate when the schema handles parameter documentation completely.

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

Purpose5/5

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

The description clearly states the specific action ('Add a new sheet') and target resource ('to the workbook'), distinguishing it from sibling tools like 'copy_sheet', 'delete_sheet', or 'rename_sheet'. It precisely defines the operation without being tautological.

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 provides clear context by stating 'Not supported for CSV files', which helps the agent know when NOT to use this tool. However, it doesn't explicitly mention alternatives or compare it to similar tools like 'copy_sheet' or 'create_workbook_file' for creating new sheets in different contexts.

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

append_rowsA

Append one or more rows after the last used row in the sheet.

Values are type-coerced (numeric strings to numbers). This is the most efficient way to add data to the end of a sheet.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
dataYesList of rows to append, e.g. [['Alice', 30], ['Bob', 25]]. Each inner list is one row.
sheetNoSheet name. Defaults to the first sheet if omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It usefully adds context about type coercion ('Values are type-coerced') and efficiency ('most efficient way'), which are not in the schema. However, it lacks details on permissions, error conditions, or what happens if the sheet is empty, leaving gaps for a mutation tool.

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 front-loaded with the core purpose in the first sentence, followed by two concise, value-adding sentences about type coercion and efficiency. Every sentence earns its place with no wasted words, making it highly 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's moderate complexity (a mutation operation with 3 parameters), no annotations, but a rich input schema (100% coverage) and an output schema (implied by 'Has output schema: true'), the description is mostly complete. It covers purpose, usage context, and behavioral traits like type coercion, though it could benefit from more transparency on mutation risks or output details.

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%, so the schema already documents all parameters thoroughly. The description does not add any parameter-specific semantics beyond what the schema provides (e.g., it doesn't explain 'data' format further). Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the specific action ('Append one or more rows after the last used row in the sheet'), identifies the resource ('sheet'), and distinguishes it from siblings like 'insert_rows' (which inserts at specific positions) or 'write_range' (which writes to arbitrary locations). The phrase 'most efficient way to add data to the end of a sheet' further differentiates its purpose.

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 provides clear context for when to use this tool ('most efficient way to add data to the end of a sheet'), implying it should be preferred over alternatives like 'write_range' or 'insert_rows' for appending. However, it does not explicitly state when NOT to use it or name specific alternative tools, which prevents a perfect score.

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

clear_rangeA

Clear all cell values in a range without removing rows or columns.

Sets every cell in the range to null. Row/column structure is preserved.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
range_strYesRange to clear in A1 notation, e.g. 'A1:D10'. Only values are removed.
sheetNoSheet name. Defaults to the first sheet if omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states the tool's effect ('sets every cell in the range to null') and what it preserves ('row/column structure is preserved'), which is good. However, it doesn't mention potential side effects, permissions needed, error conditions, or what happens to formulas/formatting in the cleared range.

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 perfectly concise with just two sentences that each earn their place. The first sentence states the core purpose, and the second clarifies the behavioral effect. There's zero wasted text, and the information is front-loaded appropriately.

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 that there's an output schema (though not shown), the description doesn't need to explain return values. For a mutation tool with no annotations, the description does a good job explaining what the tool does and what it preserves. However, it could be more complete by mentioning what happens to cell formatting or formulas in the cleared range.

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%, so the schema already documents all parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema. The baseline score of 3 is appropriate when the schema does the heavy lifting for 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?

The description clearly states the specific action ('clear all cell values in a range') and resource ('spreadsheet'), distinguishing it from siblings like delete_rows/columns (which remove structure) or write_range (which sets values). It explicitly notes that row/column structure is preserved, which differentiates it from destructive 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 provides clear context for when to use this tool ('clear all cell values in a range without removing rows or columns'), implying it should be used when you want to empty cells while keeping the spreadsheet structure intact. However, it doesn't explicitly mention when NOT to use it or name specific alternatives among the many sibling tools.

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

copy_rangeA

Copy a rectangular block of cells to another location.

Copies raw values only. The destination can be on the same sheet or a different sheet in the same workbook. Existing values at the destination are overwritten.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
source_rangeYesRange to copy from in A1 notation, e.g. 'A1:C5'
dest_startYesTop-left cell of the destination, e.g. 'E1'. The copied block expands right and down from here.
sheetNoSource sheet name. Defaults to the first sheet if omitted.
dest_sheetNoDestination sheet name. Defaults to the same sheet as the source if omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: it copies only raw values (not formulas/formatting), allows cross-sheet copying, and explicitly states that existing destination values are overwritten (destructive behavior). However, it doesn't mention error conditions, permissions, 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.

Conciseness5/5

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

The description is perfectly front-loaded with the core purpose in the first sentence, followed by important behavioral details in two concise sentences. Every sentence earns its place with zero 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?

Given this is a mutation tool with no annotations but with an output schema (which handles return values), the description provides good coverage of the core behavior. It could be more complete by mentioning error cases or prerequisites, but it adequately covers the essential what and how for a copy operation.

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%, so the schema already fully documents all 5 parameters. The description adds minimal value beyond the schema - it implies the rectangular nature of the copy and mentions same/different sheet destinations, but doesn't provide additional parameter semantics beyond what's in the 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 specific action ('Copy a rectangular block of cells') and resource ('to another location'), distinguishing it from siblings like copy_sheet (entire sheet) and copy_workbook (entire workbook). It precisely defines the scope as cell-range copying.

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 provides clear context about when to use this tool ('Copies raw values only', 'destination can be on the same sheet or a different sheet'), but doesn't explicitly mention when NOT to use it or name specific alternatives among the many sibling tools (e.g., copy_sheet for entire sheets).

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

copy_sheetA

Duplicate a sheet within the same workbook.

Copies all cell values. Returns the name of the new sheet. Not supported for CSV files.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
source_nameYesName of the existing sheet to duplicate
new_nameNoName for the copy. Auto-generated if omitted.
positionNo1-based position for the copied sheet. Placed at the end if omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It effectively describes key behaviors: the duplication operation, what gets copied ('all cell values'), return value ('Returns the name of the new sheet'), and a significant limitation ('Not supported for CSV files'). It doesn't mention error conditions, permissions needed, or whether the operation is reversible, but covers the essential behavioral traits for this tool.

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

Conciseness5/5

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

The description is perfectly concise with three short sentences that each earn their place: the core purpose, what gets copied, return value, and a critical limitation. It's front-loaded with the main functionality and wastes no words on redundant 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 that there's an output schema (which handles return value documentation) and 100% schema description coverage, the description provides good contextual completeness for a duplication tool. It covers the core operation, scope, return, and a key limitation. The main gap is lack of information about error conditions or permissions, but for a tool with good schema coverage and output schema, this is reasonably complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema - it doesn't explain parameter interactions, provide examples, or clarify edge cases. The baseline of 3 is appropriate when the schema does the heavy lifting.

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 with specific verb ('Duplicate') and resource ('a sheet within the same workbook'), and distinguishes it from siblings like copy_workbook (which copies entire workbooks) and copy_range (which copies cell ranges). The phrase 'Copies all cell values' further clarifies the scope of duplication.

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 provides clear context for when to use this tool ('Duplicate a sheet within the same workbook') and includes one explicit exclusion ('Not supported for CSV files'). However, it doesn't mention when to use alternatives like copy_workbook for entire workbook duplication or rename_sheet for simple renaming, nor does it specify prerequisites like file format requirements beyond CSV exclusion.

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

copy_workbookA

Copy an existing spreadsheet file to a new location.

Performs a full file copy preserving all data. The destination must not already exist. Returns the absolute path of the new file.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYesPath to the existing spreadsheet file to copy
destinationYesPath for the new copy. Must not already exist.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key traits: it performs a 'full file copy preserving all data' (indicating completeness and non-destructive behavior), specifies a constraint ('destination must not already exist'), and states the return value ('Returns the absolute path of the new file'). This covers essential operational details, though it lacks information on permissions, rate limits, or error handling.

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 front-loaded with the core purpose in the first sentence, followed by two concise sentences that add critical behavioral details and output information. Every sentence earns its place with no wasted words, making it highly efficient and easy to parse.

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 moderate complexity (copy operation with two parameters), 100% schema coverage, and the presence of an output schema (implied by 'Has output schema: true'), the description is complete enough. It covers the action, constraints, and return value, providing sufficient context for an agent to use the tool correctly without needing to explain parameters or output details that are already documented elsewhere.

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?

The input schema has 100% description coverage, providing clear documentation for both parameters (source and destination). The description adds minimal value beyond the schema by reiterating that the destination 'must not already exist,' which is already stated in the schema. This meets the baseline score of 3, as the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the specific action ('Copy an existing spreadsheet file') and resource ('spreadsheet file'), distinguishing it from siblings like copy_range or copy_sheet which operate on parts of spreadsheets rather than entire files. It precisely communicates the tool's function without ambiguity.

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 provides clear context for usage by specifying 'The destination must not already exist,' which helps avoid errors. However, it does not explicitly mention when to use this tool versus alternatives like create_workbook_file for new files or copy_range for partial copies, leaving some guidance implicit rather than explicit.

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

create_workbook_fileA

Create a new empty spreadsheet file at the given path.

The file format is determined by the extension (.xlsx, .csv, or .ods). The file must not already exist. Returns the absolute path of the created file.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath where the new file will be created (.csv, .ods, .xlsx). Must not already exist.
sheet_nameNoName for the initial sheet. Defaults to 'Sheet' for xlsx/ods, 'default' for csv.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: the tool creates a file (implying mutation), specifies format determination by extension, enforces that the file must not exist (preventing overwrites), and states the return value. It lacks details on permissions, error handling, or rate limits, but covers essential operational traits.

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 front-loaded with the core purpose in the first sentence, followed by essential details in compact sentences. Every sentence adds value: file format, existence check, and return value, with zero waste or 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?

Given the tool's moderate complexity, 100% schema coverage, and presence of an output schema (implied by 'Returns the absolute path'), the description is complete enough. It covers purpose, usage constraints, and key behaviors without needing to explain return values or parameters in depth, making it adequate for an AI agent.

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%, so the schema already documents both parameters thoroughly. The description adds minimal value beyond the schema, mentioning file format determination and non-existence requirement, which are partially covered in the schema. Baseline 3 is appropriate as the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the specific action ('Create a new empty spreadsheet file') and resource ('at the given path'), distinguishing it from siblings like copy_workbook or list_workbooks by focusing on creation from scratch. It specifies the file formats supported and the requirement that the file must not already exist.

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 provides clear context for usage: creating a new empty spreadsheet file with specific extensions, and it implicitly distinguishes from alternatives by not overlapping with copy_workbook or other modification tools. However, it does not explicitly state when not to use this tool or name specific alternatives, such as for modifying existing files.

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

delete_columnsB

Delete one or more columns, shifting remaining columns left.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
columnYes1-based index of the first column to delete (e.g. 1 = A, 2 = B)
countNoNumber of consecutive columns to delete starting from column
sheetNoSheet name. Defaults to the first sheet if omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the destructive action ('Delete') and the shifting effect, but lacks details on permissions required, whether changes are reversible, error handling (e.g., invalid column indices), or response format. This is inadequate for a mutation tool with zero annotation coverage.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core action and includes a key behavioral detail (shifting columns left). There is no wasted verbiage, making it highly concise and well-structured for quick understanding.

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 that there is an output schema (which handles return values), no annotations, and high schema coverage, the description is minimally complete. However, as a destructive mutation tool, it should provide more context on safety, prerequisites, or error conditions to be fully helpful, leaving some gaps in contextual understanding.

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%, so the schema fully documents all parameters. The description does not add any parameter-specific details beyond what the schema provides, such as explaining interactions between 'column' and 'count' or constraints on values. Baseline score of 3 is appropriate when the schema handles 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?

The description clearly states the action ('Delete one or more columns') and the resource ('columns'), with specific behavioral detail about shifting remaining columns left. It distinguishes from sibling tools like 'delete_rows' by focusing on columns rather than rows, and from 'delete_sheet' by targeting columns within a sheet.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives is provided. It does not mention prerequisites, such as needing an existing spreadsheet file, or compare to similar tools like 'clear_range' or 'delete_rows'. Usage is implied through the description but not explicitly stated.

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

delete_rowsB

Delete one or more rows, shifting remaining rows up.

All data in the deleted rows is permanently removed.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
rowYes1-based index of the first row to delete
countNoNumber of consecutive rows to delete starting from row
sheetNoSheet name. Defaults to the first sheet if omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses that data is 'permanently removed,' which is crucial for a destructive operation, and mentions the shifting behavior. However, it lacks details on permissions required, error handling (e.g., if rows don't exist), or what the output schema might return. The transparency is adequate but minimal for a destructive tool.

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

Conciseness5/5

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

The description is extremely concise with two sentences that are front-loaded: the first states the core action and effect, and the second warns about permanent data loss. Every word earns its place, with no redundancy or fluff, making it efficient and easy to parse.

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 that this is a destructive tool with no annotations but a rich input schema (100% coverage) and an output schema (implied by context signals), the description is minimally complete. It covers the basic action and permanence but lacks context on alternatives, permissions, or error scenarios. The output schema existence reduces the need to explain return values, but more behavioral detail would improve completeness.

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%, so the schema fully documents all parameters (file, row, count, sheet). The description adds no additional meaning beyond what the schema provides, such as clarifying parameter interactions or edge cases. Baseline 3 is appropriate as the schema does the heavy lifting, but the description doesn't enhance understanding.

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

Purpose4/5

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

The description clearly states the action ('Delete one or more rows') and the resource ('rows'), with the additional detail about shifting remaining rows up. It distinguishes from siblings like 'clear_range' (which clears content but doesn't delete structure) and 'delete_sheet' (which deletes entire sheets). However, it doesn't explicitly mention spreadsheets, which is implied but could be more specific.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'clear_range' (for clearing content without deletion) or 'delete_sheet' (for deleting entire sheets). It also doesn't mention prerequisites such as needing an existing spreadsheet file or sheet. Usage is implied by the action but not explicitly contextualized.

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

delete_sheetA

Delete a sheet by name from the workbook.

All data in the sheet is permanently removed. Not supported for CSV files.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
nameYesName of the sheet to delete

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden. It discloses critical behavioral traits: data is 'permanently removed' (destructive nature) and 'Not supported for CSV files' (limitation). However, it doesn't mention permissions needed, error conditions, or what happens if the sheet doesn't exist.

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 concise sentences with zero waste: first states purpose, second clarifies destructiveness, third specifies limitation. Each sentence earns its place by adding crucial information not obvious from the tool name alone.

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 this is a destructive operation with no annotations but an output schema exists, the description covers key aspects: purpose, permanent deletion, and CSV limitation. However, it could better address error scenarios or confirmations. The output schema reduces need for return value explanation.

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%, so parameters are well-documented in the schema. The description adds minimal value beyond schema, only implying that 'name' refers to a sheet name. Baseline 3 is appropriate when schema does the heavy lifting.

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 action ('Delete') and target resource ('a sheet by name from the workbook'), distinguishing it from sibling tools like delete_rows, delete_columns, or rename_sheet. It's specific about what gets removed and from where.

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

Usage Guidelines3/5

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

The description implies usage by specifying 'by name' and mentioning CSV file exclusion, but doesn't explicitly state when to use this versus alternatives like clear_range or delete_rows. No prerequisites or comparison to siblings are provided.

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

describe_tableA

Inspect the structure of a sheet treated as a database table.

Returns column names, inferred data types (text, integer, number, boolean, date), total row count, and sample values from the first 3 data rows. Use this before writing SQL queries to understand the available columns and their types.

When sheet is omitted, returns a list of descriptions for all sheets.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
sheetNoSheet name to describe. If omitted, describes all sheets in the workbook.
header_rowNo1-based row number containing column headers. Defaults to 1.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it inspects structure, returns specific metadata (column names, data types, row count, sample values), and has conditional behavior based on the sheet parameter. It doesn't mention permissions, rate limits, or side effects, but for a read-only inspection tool, the described behavior is sufficiently transparent.

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 efficiently structured in three sentences: the first states the core purpose and output, the second provides usage context, and the third explains the conditional behavior. Every sentence adds value without redundancy, 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 moderate complexity, 100% schema coverage, and the presence of an output schema (which handles return values), the description is complete. It covers purpose, usage guidelines, behavioral aspects, and parameter implications adequately without needing to duplicate structured data.

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%, so the schema already documents all three parameters thoroughly. The description adds minimal value beyond the schema by mentioning the sheet omission behavior and implying header_row usage, but doesn't provide additional syntax or format details. This meets the baseline for high schema coverage.

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 with specific verbs ('inspect the structure', 'returns column names, inferred data types...') and resources ('sheet treated as a database table'). It distinguishes itself from siblings like list_sheets, read_range, and sql_query by focusing on structural metadata rather than data retrieval or manipulation.

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 guidance on when to use this tool ('Use this before writing SQL queries to understand the available columns and their types') and distinguishes it from alternatives by specifying the fallback behavior ('When sheet is omitted, returns a list of descriptions for all sheets'), which differentiates it from list_sheets.

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

get_sheet_dimensionsA

Get the dimensions of the used range in a sheet.

Returns {"rows": N, "columns": M} where N is the number of the last used row and M is the number of the last used column. Both are 0 for an empty sheet.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
sheetNoSheet name. Defaults to the first sheet if omitted.

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the return format (JSON with rows and columns), defines the meaning of dimensions (last used row/column), and specifies edge-case behavior (0 for empty sheet). However, it lacks details on error conditions, performance, or authentication needs.

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 front-loaded with the core purpose in the first sentence, followed by essential return details and edge-case behavior in a compact format. Every sentence adds critical value without redundancy, making it highly efficient and well-structured.

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 read-only tool with no annotations and no output schema, the description provides strong completeness by detailing the return format and edge cases. It could improve by mentioning error handling or performance, but it adequately covers the tool's core functionality given its simplicity and clear 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 description coverage is 100%, so the schema fully documents both parameters (file and sheet). The description does not add any parameter-specific semantics beyond what the schema provides, such as file format expectations or sheet naming conventions, meeting the baseline for high schema coverage.

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

Purpose5/5

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

The description clearly states the specific action ('Get the dimensions of the used range') and resource ('in a sheet'), distinguishing it from siblings like read_range or describe_table. It precisely defines what constitutes 'dimensions' (rows and columns of the used range) and includes edge-case behavior for empty sheets.

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

Usage Guidelines3/5

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

The description implies usage for retrieving sheet dimensions but does not explicitly state when to use this tool versus alternatives like list_sheets (for sheet names) or read_range (for content). No guidance on prerequisites or exclusions is provided, leaving usage context inferred rather than stated.

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

insert_columnsB

Insert one or more blank columns, shifting existing columns right.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
columnYes1-based column index where new columns will be inserted (e.g. 1 = A, 2 = B). Existing columns at and to the right shift right.
countNoNumber of blank columns to insert
sheetNoSheet name. Defaults to the first sheet if omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the insertion action and column shifting, but omits critical details like whether this is a destructive mutation (implied by 'shifting'), error conditions (e.g., invalid column index), or side effects (e.g., formula references might break).

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core action ('insert one or more blank columns') and adds essential context ('shifting existing columns right'). There is zero wasted verbiage.

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 moderate complexity (mutation with 4 parameters), no annotations, but a rich input schema (100% coverage) and output schema (present), the description is minimally adequate. It covers the basic operation but lacks behavioral context that annotations would normally provide, leaving gaps in understanding error handling or side effects.

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%, so the schema fully documents all parameters. The description adds no additional parameter semantics beyond what's in the schema (e.g., it doesn't clarify 'column' index format or 'count' limits). Baseline 3 is appropriate when schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the action ('insert one or more blank columns') and the effect ('shifting existing columns right'), which distinguishes it from sibling tools like delete_columns or copy_range. However, it doesn't explicitly differentiate from insert_rows, which performs a similar operation on rows rather than columns.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like delete_columns, copy_range, or insert_rows. It lacks context about prerequisites (e.g., file must exist) or typical scenarios (e.g., adding space for new data).

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

insert_rowsA

Insert rows at a given position, shifting existing rows down.

If data is provided, the inserted rows are filled with those values (type-coerced). Otherwise the rows are left blank.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
rowYes1-based row index where new rows will be inserted. Existing rows at and below this index shift down.
countNoNumber of rows to insert. If data is provided and longer, enough rows are inserted to fit the data.
dataNoOptional 2D array of values to fill the inserted rows. Leave empty for blank rows.
sheetNoSheet name. Defaults to the first sheet if omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the shifting behavior and data handling (type coercion, blank rows if no data), which are useful. However, it omits critical details like permission requirements, error conditions (e.g., invalid row index), or side effects on formulas/formatting, leaving gaps for a mutation tool.

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 front-loaded with the core purpose in the first sentence, followed by a concise explanation of data handling. Every sentence earns its place with no wasted words, making it highly efficient and well-structured for quick comprehension.

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 (mutation with 5 parameters), no annotations, but a rich input schema (100% coverage) and an output schema (implied by 'Has output schema: true'), the description is reasonably complete. It covers key behaviors but could improve by addressing error cases or permissions, though the output schema reduces the need to explain return values.

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%, so the schema already documents all parameters thoroughly. The description adds minimal value by mentioning 'data' and 'count' interactions, but doesn't provide additional semantics beyond what the schema describes (e.g., format examples for 'data'). Baseline 3 is appropriate as the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the specific action ('Insert rows at a given position') and resource (spreadsheet rows), with explicit mention of 'shifting existing rows down' to distinguish it from sibling tools like 'append_rows' or 'write_range'. It precisely defines the tool's function without being tautological.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'append_rows' (for adding at the end) or 'write_range' (for overwriting). It mentions the tool's behavior but lacks explicit usage context or exclusions, leaving the agent to infer when this insertion method is appropriate.

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

list_sheetsA

List all sheet names in a workbook, in workbook order.

Returns a list of sheet name strings. CSV files always return a single sheet named 'default'.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden and does well: it discloses the return format ('list of sheet name strings'), ordering behavior ('in workbook order'), and special CSV handling. It doesn't mention error conditions, permissions, or performance limits, but covers core behavior adequately.

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 tightly focused sentences with zero waste: first states core purpose, second specifies return format, third covers edge case. Each sentence adds essential information, and the description is appropriately brief for a simple list operation.

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 read-only tool with one parameter (100% schema coverage) and an output schema (implied by 'Has output schema: true'), the description is complete: it explains what the tool does, what it returns, and special CSV behavior. No annotations exist to supplement, but the description stands adequately on its own.

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%, so the schema already documents the single 'file' parameter. The description adds no additional parameter details beyond what the schema provides (e.g., file format expectations or path examples), meeting the baseline for high schema coverage.

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

Purpose5/5

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

The description clearly states the specific action ('List all sheet names'), resource ('in a workbook'), and scope ('in workbook order'). It explicitly distinguishes from siblings like 'list_workbooks' (which lists files) and 'read_sheet' (which reads content). The CSV behavior note further clarifies scope.

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 implies usage context by specifying it returns sheet names 'in a workbook' and handles CSV files specially. However, it doesn't explicitly state when to use this versus alternatives like 'list_workbooks' (for files) or 'describe_table' (for metadata), nor does it mention prerequisites or exclusions.

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

list_workbooksA

List all spreadsheet files (.xlsx, .csv, .ods) in a directory (non-recursive).

Returns the full path of each file found, sorted alphabetically.

ParametersJSON Schema
NameRequiredDescriptionDefault
directoryYesAbsolute or relative path to the directory to scan

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it lists files (read-only operation implied), specifies file formats and directory scanning constraints, and states the return format (full paths, sorted alphabetically). However, it doesn't mention error handling, permissions, or performance aspects like 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.

Conciseness5/5

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

The description is highly concise and well-structured in two sentences: the first states the purpose and constraints, and the second specifies the return behavior. Every word adds value with zero waste, making it easy to parse and understand quickly.

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 low complexity (single parameter, read-only operation), 100% schema coverage, and the presence of an output schema (implied by 'Has output schema: true'), the description is complete enough. It covers purpose, scope, file types, and return format, leaving detailed output structure to the output schema as appropriate.

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?

The input schema has 100% description coverage, clearly documenting the single 'directory' parameter. The description adds no additional parameter semantics beyond what the schema provides, such as examples or constraints on path formats. The baseline score of 3 is appropriate since the schema adequately covers parameter information.

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

Purpose5/5

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

The description clearly states the specific action ('List all spreadsheet files'), resource types ('.xlsx, .csv, .ods'), and scope ('in a directory, non-recursive'). It distinguishes itself from sibling tools like 'list_sheets' (which lists sheets within a workbook) and 'search_sheet' (which searches within sheet content).

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

Usage Guidelines3/5

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

The description implies usage by specifying the scope ('non-recursive') and file types, but does not explicitly state when to use this tool versus alternatives like 'list_sheets' or 'search_sheet'. No exclusions or prerequisites are mentioned, leaving some ambiguity about its context relative to siblings.

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

read_cellA

Read the value of a single cell.

Returns the cell's value: numbers as int/float, text as string, and empty cells as null.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
cellYesCell reference in A1 notation, e.g. 'B3' or '$B$3'
sheetNoSheet name. Defaults to the first sheet if omitted.

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively explains the return value behavior (numbers as int/float, text as string, empty cells as null), which is crucial for understanding output. However, it lacks details on error handling (e.g., invalid file paths or cell references), performance characteristics, or any side effects like file locking.

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 extremely concise and well-structured, with two sentences that directly address the tool's purpose and return behavior. Every word earns its place, and it's front-loaded with the core action, making it easy to parse quickly without unnecessary elaboration.

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 moderate complexity (reading a single cell), lack of annotations, and no output schema, the description is partially complete. It covers the return value semantics well but misses contextual details like error conditions, performance limits, or comparisons to sibling tools. For a read operation with no annotations, it should ideally include more behavioral 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 description coverage is 100%, so the schema already fully documents all three parameters (file, cell, sheet). The description adds no additional parameter semantics beyond what's in the schema, such as examples for the 'sheet' parameter or constraints on 'file' paths. This meets the baseline for high schema coverage.

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

Purpose5/5

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

The description clearly states the specific action ('Read the value of a single cell') and resource ('cell'), distinguishing it from sibling tools like read_range or read_sheet that handle multiple cells or entire sheets. It provides a precise verb+resource combination that leaves no ambiguity about the tool's function.

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

Usage Guidelines2/5

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

The description offers no guidance on when to use this tool versus alternatives like read_range or read_sheet. It doesn't mention prerequisites, such as requiring an existing spreadsheet file, or compare it to sibling tools that might be more appropriate for different scenarios (e.g., reading multiple cells).

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

read_rangeA

Read a rectangular range of cells as a list of rows.

Returns a 2D array where each inner list is one row of values. Empty cells return null.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
range_strYesCell range in A1 notation, e.g. 'A1:D10' or '$A$1:$D$10'
sheetNoSheet name. Defaults to the first sheet if omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It effectively discloses key behavioral traits: the return format (2D array with rows as inner lists), handling of empty cells (null), and the rectangular nature of the range. However, it doesn't cover error conditions, permissions, or performance aspects.

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 front-loaded with the core purpose in the first sentence, followed by essential details about return format and empty cell handling. Every sentence earns its place with zero waste, making it highly efficient.

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 moderate complexity, 100% schema coverage, and the presence of an output schema (which handles return values), the description is complete enough. It covers purpose, behavior, and output structure without needing to duplicate schema information.

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%, so the schema already documents all parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema, meeting the baseline for high coverage without extra value.

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

Purpose5/5

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

The description clearly states the specific action ('Read a rectangular range of cells') and resource ('cells'), distinguishing it from siblings like read_cell (single cell) and read_sheet (entire sheet). It precisely defines the operation without being vague or tautological.

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

Usage Guidelines3/5

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

Usage is implied by the description's focus on reading cell ranges, but there's no explicit guidance on when to use this tool versus alternatives like read_cell (for single cells) or read_sheet (for entire sheets). It doesn't mention prerequisites or exclusions.

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

read_sheetA

Read an entire sheet (or a bounded sub-region) as a list of rows.

Each row is a list of cell values. Empty cells appear as null. Use the optional row/column bounds to limit output for large sheets.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
sheetNoSheet name. Defaults to the first sheet if omitted.
start_rowNoFirst row to include (1-based). Defaults to the first used row.
end_rowNoLast row to include (1-based). Defaults to the last used row.
start_columnNoFirst column to include (1-based, e.g. 1 = A). Defaults to the first used column.
end_columnNoLast column to include (1-based). Defaults to the last used column.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the output format ('Each row is a list of cell values. Empty cells appear as null') and performance considerations for large sheets, but doesn't mention permissions, rate limits, or error conditions. It adds useful context but isn't comprehensive.

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 perfectly concise with three sentences that each earn their place: stating the core functionality, describing the output format, and providing usage guidance. It's front-loaded with the main purpose and wastes no 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 the tool's moderate complexity, 6 parameters with full schema coverage, and the presence of an output schema, the description is reasonably complete. It explains what the tool does, the output format, and when to use bounds. However, without annotations, it could benefit from more behavioral context about limitations or edge 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 description coverage is 100%, so the schema already fully documents all 6 parameters. The description adds marginal value by mentioning the optional bounds for limiting output, but doesn't provide additional syntax or format details beyond what the schema provides. This meets the baseline for high schema coverage.

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 with specific verbs ('Read an entire sheet or a bounded sub-region') and resource ('sheet'), and distinguishes it from siblings like read_cell, read_range, and search_sheet by specifying it returns data as a list of rows rather than individual cells or filtered results.

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 provides clear context for when to use this tool ('Use the optional row/column bounds to limit output for large sheets'), which helps differentiate it from read_cell or read_range. However, it doesn't explicitly state when not to use it or name specific alternatives, preventing a perfect score.

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

rename_sheetB

Rename an existing sheet in the workbook.

Returns the new sheet name on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
old_nameYesCurrent name of the sheet to rename
new_nameYesNew name for the sheet

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions that the tool renames a sheet and returns the new name on success, but lacks critical details: it doesn't specify error conditions (e.g., if the sheet doesn't exist or the new name is invalid), permission requirements, or side effects (e.g., whether references to the old name break). This is inadequate for a mutation tool with zero annotation coverage.

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 extremely concise and front-loaded: the first sentence states the core action, and the second sentence adds the return value. There is zero waste or redundancy, and every sentence earns its place by providing essential information efficiently.

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 that there is an output schema (implied by 'Has output schema: true'), the description doesn't need to explain return values in detail. However, for a mutation tool with no annotations, the description should provide more behavioral context (e.g., error handling, prerequisites). It's minimally adequate but has clear gaps in completeness for safe and effective 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?

Schema description coverage is 100%, so the schema already documents all three parameters ('file', 'old_name', 'new_name') with clear descriptions. The description adds no additional meaning beyond what the schema provides, such as format examples or constraints (e.g., name length limits). With high schema coverage, the baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the verb ('Rename') and resource ('an existing sheet in the workbook'), making the purpose unambiguous. It distinguishes from siblings like 'copy_sheet' or 'delete_sheet' by specifying renaming rather than copying or deleting. However, it doesn't explicitly differentiate from tools like 'add_sheet' or 'list_sheets' beyond the action itself.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., the sheet must exist), exclusions (e.g., cannot rename to an existing name), or comparisons with sibling tools like 'copy_sheet' for creating renamed copies. Usage is implied by the action but not explicitly contextualized.

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

search_sheetA

Search all cells in a sheet for values matching a regex pattern.

Returns a list of matches, each with the cell reference and value, e.g. [{"cell": "B3", "value": "hello"}, ...]. Returns an empty list if no matches are found.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
patternYesRegular expression pattern to search for. Matched against the string representation of each cell value.
sheetNoSheet name. Defaults to the first sheet if omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it returns a list of matches with cell references and values, returns an empty list for no matches, and searches all cells (implying comprehensive scanning). However, it does not mention performance implications, rate limits, or authentication needs, leaving some gaps.

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 front-loaded with the core purpose in the first sentence, followed by concise details on return format and edge cases. Every sentence adds value without redundancy, making it efficient and well-structured for quick comprehension.

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 moderate complexity, 100% schema coverage, and presence of an output schema (implied by return format details), the description is complete enough. It covers purpose, behavior, and output, addressing key aspects without needing to reiterate schema details or explain return values extensively.

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%, so the schema already documents all parameters (file, pattern, sheet) thoroughly. The description does not add meaning beyond the schema, such as regex syntax details or file format constraints. Baseline 3 is appropriate as the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the specific action ('search all cells'), target resource ('in a sheet'), and method ('for values matching a regex pattern'), distinguishing it from sibling tools like read_cell, read_range, or read_sheet which retrieve data without pattern matching. It precisely defines the tool's function without ambiguity.

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

Usage Guidelines3/5

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

The description implies usage for regex-based searches across entire sheets, but does not explicitly state when to use this tool versus alternatives like read_sheet (for full data retrieval) or sql_query (for structured queries). It provides context but lacks explicit guidance on exclusions or comparisons with sibling tools.

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

sql_executeA

Execute a mutating SQL statement and write changes back to the file.

Supports INSERT INTO (adds rows), UPDATE (modifies cell values), and DELETE FROM (removes rows). The target sheet is determined from the SQL statement. After execution, the modified table is written back to the file atomically. Returns {"affected_rows": N}.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
sqlYesSQL mutation statement to execute: INSERT INTO, UPDATE, or DELETE FROM. Sheet names are table names. Example: UPDATE Sales SET status = 'Closed' WHERE quarter = 'Q1' AND revenue < 1000
header_rowNo1-based row number containing column headers. Defaults to 1.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does well by specifying that changes are written back 'atomically,' describing the return format ('Returns {"affected_rows": N}'), and clarifying that sheet names serve as table names in SQL. It could improve by mentioning potential side effects or error conditions.

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

Conciseness5/5

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

The description is efficiently structured with four sentences that each add value: states purpose, lists supported operations, explains execution behavior, and specifies return format. It's front-loaded with the core functionality and avoids any redundant information.

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

Completeness4/5

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

For a mutating tool with no annotations and no output schema, the description does well by explaining the atomic write-back and return format. However, it could provide more context about error handling, transaction behavior, or limitations (e.g., SQL dialect support). Given the complexity of SQL execution, there's room for slightly more completeness.

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%, so the schema already documents all parameters thoroughly. The description doesn't add significant meaning beyond what's in the schema descriptions (e.g., the sql parameter example is already in the schema). It meets the baseline for high schema coverage but doesn't enhance parameter understanding.

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 with specific verbs ('Execute a mutating SQL statement and write changes back to the file') and distinguishes it from sibling tools like sql_query (which presumably doesn't mutate) and other spreadsheet manipulation tools. It explicitly mentions the supported SQL operations (INSERT, UPDATE, DELETE).

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 provides clear context for when to use this tool ('Execute a mutating SQL statement') and implicitly distinguishes it from sql_query (which is likely for read-only queries). However, it doesn't explicitly state when NOT to use it or mention specific alternatives among the many sibling tools beyond the general distinction.

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

sql_queryA

Execute a read-only SQL SELECT query against the spreadsheet data.

Every sheet in the workbook is loaded as a database table, with the header row defining column names and data rows below it. Returns results as a list of {column: value} objects.

Only SELECT (and WITH ... SELECT) statements are accepted. Use sql_execute for INSERT, UPDATE, or DELETE.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
sqlYesSQL SELECT statement to execute. Each sheet is a table (quote names with double quotes if they contain spaces). Supports WHERE, ORDER BY, LIMIT, GROUP BY, HAVING, JOINs across sheets, DISTINCT, UNION, subqueries, and aggregates (COUNT, SUM, AVG, MIN, MAX). Example: SELECT name, revenue FROM Sales WHERE status = 'Active' ORDER BY revenue DESC LIMIT 20
header_rowNo1-based row number containing column headers. Defaults to 1.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively communicates key behaviors: the read-only nature, how spreadsheet data is structured (sheets as tables with headers), the return format (list of objects), and statement restrictions. It doesn't mention error handling, performance limits, or authentication needs, but covers the essential operational 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 efficiently structured with four sentences that each serve a distinct purpose: stating the core function, explaining data mapping, specifying return format, and providing usage boundaries. There is no wasted text, 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 complexity (SQL execution on spreadsheets), the description provides complete context: purpose, data model, return format, and usage boundaries. With an output schema present, it doesn't need to explain return values, and the 100% schema coverage handles parameters. The description fills all necessary gaps beyond structured fields.

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%, so the schema already documents all three parameters thoroughly. The description adds minimal parameter-specific information beyond the schema, mainly reinforcing that sheets become tables and headers define columns. It meets the baseline for high schema coverage without adding significant extra semantic value.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Execute a read-only SQL SELECT query against the spreadsheet data.' It specifies the verb ('execute'), resource ('SQL SELECT query'), and target ('spreadsheet data'), and distinguishes it from its sibling sql_execute by explicitly stating it's for SELECT queries 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?

The description provides explicit guidance on when to use this tool vs. alternatives: 'Only SELECT (and WITH ... SELECT) statements are accepted. Use sql_execute for INSERT, UPDATE, or DELETE.' This clearly defines the scope and names the alternative tool for other SQL operations.

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

write_cellA

Write a single value to a cell.

Overwrites any existing value. The value is type-coerced: numeric strings become numbers, all else is text.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
cellYesTarget cell in A1 notation, e.g. 'B3'
valueYesValue to write. Numeric strings are coerced to numbers, everything else is stored as text.
sheetNoSheet name. Defaults to the first sheet if omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states that the tool 'overwrites any existing value' (destructive behavior) and describes type coercion rules ('numeric strings become numbers, all else is text'), which are important behavioral traits not evident from the schema alone. However, it doesn't mention permissions, error conditions, or response 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?

The description is extremely concise - just three sentences with zero waste. The first sentence states the core purpose, the second describes the destructive behavior, and the third explains type coercion. Every sentence earns its place and the information is front-loaded appropriately.

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 that there's an output schema (though not shown here), the description doesn't need to explain return values. For a mutation tool with no annotations, it does a good job covering the key behavioral aspects (overwriting, type coercion) but could be more complete by mentioning permissions or error handling. The presence of sibling tools suggests more contextual guidance would be helpful.

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%, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema - it mentions type coercion for the 'value' parameter, but this is already covered in the schema's description for that parameter. The baseline of 3 is appropriate when the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the specific action ('Write a single value to a cell'), identifies the resource ('a cell'), and distinguishes it from siblings like 'write_range' by specifying it's for a single cell rather than a range. The verb 'write' is precise 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 Guidelines3/5

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

The description implies usage for writing to individual cells, but does not explicitly state when to use this tool versus alternatives like 'write_range' or 'append_rows'. It provides some context about type coercion and overwriting, but lacks explicit guidance on tool selection among siblings.

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

write_rangeA

Write a 2D array of values into a rectangular region.

Writing starts at start_cell and expands right and down to fit the data. Prefer this over multiple write_cell calls for efficiency.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath to the spreadsheet file
start_cellYesTop-left cell where writing begins, e.g. 'B2'
dataYes2D array of values (list of rows), e.g. [[1, 2, 3], ['a', 'b', 'c']]. Numeric strings are coerced to numbers.
sheetNoSheet name. Defaults to the first sheet if omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It mentions the tool is more efficient than multiple write_cell calls, which is useful behavioral context. However, it doesn't disclose critical details like whether this operation overwrites existing data, requires specific permissions, or has rate limits, leaving gaps for a mutation tool.

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 front-loaded with the core purpose in the first sentence, followed by essential usage guidance. Both sentences earn their place by clarifying the tool's behavior and efficiency advantage, with zero 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?

Given that there's an output schema (which handles return values), no annotations, and high schema coverage, the description is reasonably complete. It covers the core purpose and efficiency context well, though it could better address behavioral aspects like data overwriting or error conditions for a write operation.

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%, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema by mentioning the rectangular region expansion from start_cell, but doesn't provide additional syntax or format details. This meets the baseline for high schema coverage.

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

Purpose5/5

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

The description clearly states the specific action ('Write a 2D array of values into a rectangular region') and distinguishes it from sibling tools by explicitly mentioning 'Prefer this over multiple write_cell calls for efficiency.' It identifies both the verb (write) and resource (spreadsheet region) with precision.

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 guidance on when to use this tool ('Prefer this over multiple write_cell calls for efficiency') and implicitly suggests alternatives (write_cell). It also clarifies the scope by stating it writes to a 'rectangular region' starting at a specific cell, which helps differentiate it from other writing tools like append_rows.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 25 tool updatesv0.2.1
    • First observedadd_sheet
    • First observedappend_rows
    • First observedclear_range
    • First observedcopy_range
    • First observedcopy_sheet
    • First observedcopy_workbook
    • First observedcreate_workbook_file
    • First observeddelete_columns
    • First observeddelete_rows
    • First observeddelete_sheet
    • First observeddescribe_table
    • First observedget_sheet_dimensions
    • First observedinsert_columns
    • First observedinsert_rows
    • First observedlist_sheets
    • First observedlist_workbooks
    • First observedread_cell
    • First observedread_range
    • First observedread_sheet
    • First observedrename_sheet
    • First observedsearch_sheet
    • First observedsql_execute
    • First observedsql_query
    • First observedwrite_cell
    • First observedwrite_range

TDQS

A3.9/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no significant overlap. For example, read_cell, read_range, and read_sheet provide progressively broader reading capabilities, while write_cell and write_range mirror this for writing. SQL tools (sql_query, sql_execute) offer a distinct query-based interface separate from direct cell operations.

Naming Consistency5/5

Tool names follow a highly consistent verb_noun pattern throughout, such as add_sheet, clear_range, copy_sheet, delete_columns, list_sheets, read_cell, rename_sheet, and write_range. All tools use snake_case with clear, descriptive action-object pairs, making them predictable and easy to understand.

Tool Count3/5

With 25 tools, the count is borderline high for a spreadsheet server, potentially overwhelming for agents. While many tools are justified for comprehensive spreadsheet operations (e.g., cell, range, sheet, and workbook-level actions), it approaches the upper limit where usability might decline due to complexity.

Completeness5/5

The toolset provides complete coverage for spreadsheet manipulation, including CRUD operations at multiple levels (cell, range, sheet, workbook), file management, structural modifications, and advanced querying via SQL. There are no obvious gaps; agents can perform all typical spreadsheet tasks without dead ends.

Maintenance

ActivityMaintained
ResponsivenessSlow

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/marekrost/mcp-server-spreadsheet'

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