mcp-server-spreadsheet
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
fileandsheetexplicitly; 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
From PyPI (recommended)
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 syncUsage
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.pyRestricting 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 |
| Multiple | Preserved as strings | Native (int, float, date, bool) |
| Multiple | Not preserved | Native (int, float, date, bool) |
| Single ( | 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 all spreadsheet files in a directory (non-recursive) |
| Create a new empty spreadsheet file (format by extension) |
| Copy an existing file to a new path |
Sheet Operations
Tool | Description |
| List all sheet names in a workbook |
| Add a new sheet (optional name and position) |
| Rename an existing sheet |
| Delete a sheet by name |
| Duplicate a sheet within a workbook (optional new name and position) |
Reading Data
Tool | Description |
| Read entire sheet as rows (optional row/column bounds) |
| Read a single cell value, e.g. |
| Read a rectangular range, e.g. |
| Get row and column count of the used range |
Writing Data
Tool | Description |
| Write a value to a single cell |
| Write a 2D array starting at a given cell |
| Append rows after the last used row |
| Insert blank or pre-filled rows at a position (shifts rows down) |
| Delete rows by index (shifts rows up) |
| Clear values in a range without removing rows/columns |
| Copy a block of cells to another location (optionally to a different sheet) |
Column Operations
Tool | Description |
| Insert blank columns at a position |
| Delete columns by index |
Search
Tool | Description |
| Search for a value or regex pattern, returns matching cell references |
Table Mode (SQL)
Tool | Description |
| Inspect column names, inferred types, row count, and sample values |
| Execute a read-only SQL |
| Execute |
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 pytestEvery tool is exercised against .xlsx, .csv, and .ods fixtures generated into a temp directory.
Common Parameters
Every sheet-level tool accepts:
Parameter | Required | Description |
| yes | Path to the spreadsheet file (.xlsx, .csv, or .ods) |
| 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 toolsadd_sheetA
Add a new sheet to the workbook.
Returns the name of the newly created sheet. Not supported for CSV files.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| name | No | Name for the new sheet. Auto-generated if omitted. | |
| position | No | 1-based position to insert the sheet. Appended at the end if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| data | Yes | List of rows to append, e.g. [['Alice', 30], ['Bob', 25]]. Each inner list is one row. | |
| sheet | No | Sheet name. Defaults to the first sheet if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| range_str | Yes | Range to clear in A1 notation, e.g. 'A1:D10'. Only values are removed. | |
| sheet | No | Sheet name. Defaults to the first sheet if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| source_range | Yes | Range to copy from in A1 notation, e.g. 'A1:C5' | |
| dest_start | Yes | Top-left cell of the destination, e.g. 'E1'. The copied block expands right and down from here. | |
| sheet | No | Source sheet name. Defaults to the first sheet if omitted. | |
| dest_sheet | No | Destination sheet name. Defaults to the same sheet as the source if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| source_name | Yes | Name of the existing sheet to duplicate | |
| new_name | No | Name for the copy. Auto-generated if omitted. | |
| position | No | 1-based position for the copied sheet. Placed at the end if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | Path to the existing spreadsheet file to copy | |
| destination | Yes | Path for the new copy. Must not already exist. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path where the new file will be created (.csv, .ods, .xlsx). Must not already exist. | |
| sheet_name | No | Name for the initial sheet. Defaults to 'Sheet' for xlsx/ods, 'default' for csv. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| column | Yes | 1-based index of the first column to delete (e.g. 1 = A, 2 = B) | |
| count | No | Number of consecutive columns to delete starting from column | |
| sheet | No | Sheet name. Defaults to the first sheet if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| row | Yes | 1-based index of the first row to delete | |
| count | No | Number of consecutive rows to delete starting from row | |
| sheet | No | Sheet name. Defaults to the first sheet if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| name | Yes | Name of the sheet to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| sheet | No | Sheet name to describe. If omitted, describes all sheets in the workbook. | |
| header_row | No | 1-based row number containing column headers. Defaults to 1. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| sheet | No | Sheet name. Defaults to the first sheet if omitted. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| column | Yes | 1-based column index where new columns will be inserted (e.g. 1 = A, 2 = B). Existing columns at and to the right shift right. | |
| count | No | Number of blank columns to insert | |
| sheet | No | Sheet name. Defaults to the first sheet if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| row | Yes | 1-based row index where new rows will be inserted. Existing rows at and below this index shift down. | |
| count | No | Number of rows to insert. If data is provided and longer, enough rows are inserted to fit the data. | |
| data | No | Optional 2D array of values to fill the inserted rows. Leave empty for blank rows. | |
| sheet | No | Sheet name. Defaults to the first sheet if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | Yes | Absolute or relative path to the directory to scan |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| cell | Yes | Cell reference in A1 notation, e.g. 'B3' or '$B$3' | |
| sheet | No | Sheet name. Defaults to the first sheet if omitted. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| range_str | Yes | Cell range in A1 notation, e.g. 'A1:D10' or '$A$1:$D$10' | |
| sheet | No | Sheet name. Defaults to the first sheet if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| sheet | No | Sheet name. Defaults to the first sheet if omitted. | |
| start_row | No | First row to include (1-based). Defaults to the first used row. | |
| end_row | No | Last row to include (1-based). Defaults to the last used row. | |
| start_column | No | First column to include (1-based, e.g. 1 = A). Defaults to the first used column. | |
| end_column | No | Last column to include (1-based). Defaults to the last used column. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| old_name | Yes | Current name of the sheet to rename | |
| new_name | Yes | New name for the sheet |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| pattern | Yes | Regular expression pattern to search for. Matched against the string representation of each cell value. | |
| sheet | No | Sheet name. Defaults to the first sheet if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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}.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| sql | Yes | SQL 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_row | No | 1-based row number containing column headers. Defaults to 1. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| sql | Yes | SQL 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_row | No | 1-based row number containing column headers. Defaults to 1. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| cell | Yes | Target cell in A1 notation, e.g. 'B3' | |
| value | Yes | Value to write. Numeric strings are coerced to numbers, everything else is stored as text. | |
| sheet | No | Sheet name. Defaults to the first sheet if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path to the spreadsheet file | |
| start_cell | Yes | Top-left cell where writing begins, e.g. 'B2' | |
| data | Yes | 2D array of values (list of rows), e.g. [[1, 2, 3], ['a', 'b', 'c']]. Numeric strings are coerced to numbers. | |
| sheet | No | Sheet name. Defaults to the first sheet if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
25 tool updates
v0.2.1- First observed
add_sheet - First observed
append_rows - First observed
clear_range - First observed
copy_range - First observed
copy_sheet - First observed
copy_workbook - First observed
create_workbook_file - First observed
delete_columns - First observed
delete_rows - First observed
delete_sheet - First observed
describe_table - First observed
get_sheet_dimensions - First observed
insert_columns - First observed
insert_rows - First observed
list_sheets - First observed
list_workbooks - First observed
read_cell - First observed
read_range - First observed
read_sheet - First observed
rename_sheet - First observed
search_sheet - First observed
sql_execute - First observed
sql_query - First observed
write_cell - First observed
write_range
TDQS
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.
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.
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.
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
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
Query, join, profile, clean and convert CSV/JSON/Parquet with server-side DuckDB over MCP.
Hosted MCP server for AI-driven data ops. Create apps, manage schemas, and CRUD structured data.
MCP server for querying and analyzing data from ad platforms, analytics tools, and spreadsheets
An agent-first office suite Claude & ChatGPT read and write over one MCP URL.
Related MCP Servers
- AlicenseBqualityCmaintenanceMCP server for semantic spreadsheet operations that lets LLMs create and edit Excel workbooks by describing spreadsheet intent.42MIT
- AlicenseCqualityAmaintenanceLocal-first Excel MCP server for AI agents enabling structured reads, workbook introspection, and safer .xlsx mutation without Microsoft Excel or LibreOffice.782MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for Google Sheets - read, write, and query spreadsheet data.1782MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for sandboxed, read-only SQL queries on CSV/Parquet/JSON files via DuckDB, limited to a specified directory.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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