excel-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@excel-mcpList all sheets in sales_report.xlsx"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
excel-mcp
An MCP (Model Context Protocol) server for reading Excel workbooks (.xlsx). Built with FastMCP and openpyxl.
Features
List all sheets in a workbook
List all named tables across sheets
List all pivot tables with source range info
Read raw cell data from any sheet or optional cell range
Read structured data (headers + rows) from named Excel tables
Export any sheet to CSV, plain-text (delimited), or Markdown — save to file or return inline
Related MCP server: Excel MCP Server
Usage with Claude Desktop
No installation required. Add the following to your claude_desktop_config.json:
{
"mcpServers": {
"excel-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/urjeetpatel/excel_mcp_server",
"excel-mcp"
]
}
}
}uvx will pull the package directly from GitHub and run it in an isolated environment — no pip install or virtual environment setup needed.
Running manually
uvx --from git+https://github.com/urjeetpatel/excel_mcp_server excel-mcpTools
All tools accept a file_path parameter — the full path to the .xlsx file.
Tool | Description |
| Returns the names of all sheets in the workbook |
| Returns all named tables with name, sheet, and cell range |
| Returns all pivot tables with location and source range info |
| Returns cell data from a sheet; optionally scoped to a range (e.g. |
| Returns headers and row data from a named Excel table |
| Exports a sheet to a CSV file with configurable delimiter; supports inline return |
| Exports a sheet to a plain-text delimited file; supports inline return |
| Exports a sheet to a padded Markdown table; supports inline return |
| Creates a new blank Excel file at the given path |
| Adds a new sheet to an existing Excel file |
| Adds a 2D array of data to a sheet, starting at a specified cell |
| Adds a table to a sheet over a given cell range |
| Sets the value of a single cell in a sheet |
| Sets a formula in a single cell in a sheet |
Write tool details
create_blank_file(file_path)
Creates a new blank Excel file at the specified path.
add_sheet(file_path, sheet_name)
Adds a new sheet to the Excel file. Fails if the sheet already exists.
add_data_to_sheet(file_path, sheet_name, data, start_cell="A1")
Adds a 2D array of data to the specified sheet, starting at the given cell (default A1).
add_table_to_sheet(file_path, sheet_name, table_name, ref)
Adds a table to the specified sheet, covering the given cell range (e.g. "A1:D10").
set_cell_value(file_path, sheet_name, cell, value)
Sets the value of a single cell (e.g. C5) in the specified sheet.
set_cell_formula(file_path, sheet_name, cell, formula)
Sets a formula (e.g. "=SUM(A1:A10)") in a single cell in the specified sheet.
Tool details
list_sheets(file_path)
["Sheet1", "Sheet2"]list_tables(file_path)
[{ "name": "SalesTable", "sheet": "Sheet1", "ref": "A1:D20" }]list_pivot_tables(file_path)
[{
"name": "PivotTable1",
"sheet": "Summary",
"ref": "A1:C10",
"source_sheet": "RawData",
"source_ref": "A1:F500"
}]get_sheet_data(file_path, sheet_name, cell_range?)
{
"sheet": "Sheet1",
"range": "A1:D10",
"rows": [["Name", "Age", "City"], ["Alice", 30, "New York"]]
}cell_rangeis optional. When omitted, the full used range is returned.Range strings are case-insensitive (
a1:d10==A1:D10).
get_table_data(file_path, table_name)
{
"table": "PeopleTable",
"sheet": "Sheet1",
"ref": "A1:C4",
"headers": ["Name", "Age", "City"],
"rows": [["Alice", 30, "New York"], ["Bob", 25, "Chicago"]]
}Export tools
All three export tools share a common pattern:
output_path— path to write the output file, or"return inline"to skip writing and return the content directly in the response.cell_range— optional Excel range string (e.g.A1:D10). When omitted, the full used range is exported.
When saving to a file the response contains output_path. When returning inline, output_path is replaced by content.
export_sheet_to_csv(file_path, sheet_name, output_path, delimiter?, cell_range?)
Exports a sheet using Python's csv module (values containing the delimiter or newlines are properly quoted).
delimiter options: "comma" (default), "pipe", "tab".
{ "output_path": "/tmp/data.csv", "sheet": "Sheet1", "range": "A1:C4", "rows_written": 4 }Inline variant (output_path = "return inline"):
{ "content": "Name,Age,City\r\nAlice,30,New York\r\n...", "sheet": "Sheet1", "range": "A1:C4", "rows_written": 4 }export_sheet_to_text(file_path, sheet_name, output_path, delimiter?, cell_range?)
Exports a sheet as a plain delimited text file — values are joined with the delimiter with no CSV quoting, making output easy to read or pipe into other tools.
delimiter options: "pipe" (default), "comma", "tab".
{ "output_path": "/tmp/data.txt", "sheet": "Sheet1", "range": "A1:C4", "rows_written": 4 }Inline variant:
{ "content": "Name|Age|City\nAlice|30|New York\n...", "sheet": "Sheet1", "range": "A1:C4", "rows_written": 4 }export_sheet_to_markdown(file_path, sheet_name, output_path, cell_range?)
Exports a sheet as a padded Markdown table. The first row is used as the header; a separator line is inserted beneath it. All columns are padded to align.
{ "output_path": "/tmp/data.md", "sheet": "Sheet1", "range": "A1:C4", "rows_written": 4 }Inline variant:
{ "content": "| Name | Age | City |\n| ----- | --- | -------- |\n| Alice | 30 | New York |\n...", "sheet": "Sheet1", "range": "A1:C4", "rows_written": 4 }Local development
Requires Python >= 3.14 and uv.
git clone https://github.com/urjeetpatel/excel_mcp_server
cd excel_mcp_server
uv sync --group dev
# Run tests
uv run pytest
# Type check
uv run mypy srcProject Structure
src/excel_mcp/
├── __init__.py # Exposes main() entry point
├── server.py # FastMCP server and tool registration
├── workbook.py # Workbook loading helpers
└── tools/
├── __init__.py
├── read.py # Read tool implementations
└── export.py # Export tool implementations (CSV, text, Markdown)
tests/
├── conftest.py # pytest fixtures (builds workbooks programmatically)
├── test_read.py # Tests for read tools
├── test_export.py # Tests for export tools
└── test_workbook.py # Tests for workbook helpersNotes
Workbooks are opened in
data_only=Truemode — formula results are read, not formula strings.Export tools support
"return inline"asoutput_pathto return content directly to the agent without touching the filesystem.
License
GPL-3.0-or-later
Available Tools
14 toolsadd_data_to_sheetC
Add data to a sheet starting at the given cell.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | ||
| file_path | Yes | ||
| sheet_name | Yes | ||
| start_cell | No | A1 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, and the description only states that data is added starting at a cell. It does not disclose whether existing cells are overwritten, whether data is appended/inserted, whether the sheet and file must already exist, or what happens with invalid or non-rectangular data.
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 concise sentence with no filler and starts with the primary action. However, the brevity contributes to missing behavioral detail, so it is good but not exceptional.
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 mutation tool with no annotations and four parameters, the description is too thin to fully support correct invocation. It omits prerequisites, overwrite/append behavior, and how this tool differs from nearby siblings. The presence of an output schema does not make up for the missing operational 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 0%, so the description should compensate by explaining each parameter. It adds some meaning for start_cell ('given cell') and data ('data to add'), but it does not explain the nested-array structure of data (rows/columns), the role of file_path, or the sheet_name relationship.
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 names a specific action ('add data') and resource ('sheet'), and clarifies that writing starts at a given cell. It is broadly distinguishable from siblings like add_sheet, get_sheet_data, and set_cell_value, though it does not explicitly contrast with add_table_to_sheet or set_cell_formula.
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 guidance is provided on when to use this tool versus alternatives such as set_cell_value or add_table_to_sheet. It also doesn't mention prerequisites like the sheet needing to exist or how this relates to the file_path/sheet_name parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_sheetB
Add a new sheet to the Excel file.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| sheet_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It only states the action and does not mention side effects such as writing to disk, failure behavior when the sheet already exists, or requirements on the target file. For a mutating tool this is a notable gap.
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 concise sentence with no waste, and the core action is front-loaded. Every word earns its place.
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?
The tool has only two simple parameters and an output schema exists, so return-value documentation is not required from the description. However, for a mutation tool with no annotations, the description omits important context such as error conditions and whether the file must already exist, leaving the definition merely adequate.
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 0%, and the description adds no extra meaning beyond the parameter names. The names file_path and sheet_name are self-explanatory, but the description does not compensate for the lack of schema documentation, nor does it clarify any format or constraints.
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 states a clear verb and resource: 'Add a new sheet to the Excel file.' It is distinguishable enough from siblings like add_data_to_sheet and add_table_to_sheet because it specifically mentions a new sheet, but it does not explicitly name or contrast any sibling, so it lacks that extra differentiation.
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 context is implied rather than stated. An agent can infer from the name and description that this tool is for creating a new sheet, but there is no explicit guidance about when not to use it or whether create_blank_file or add_data_to_sheet might be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_table_to_sheetC
Add a table to a sheet over the given cell range (ref).
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | ||
| file_path | Yes | ||
| sheet_name | Yes | ||
| table_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, but it only states the operation and location. It does not mention side effects such as overwriting existing content, whether the table must have a unique name, whether the sheet must already exist, or failure behavior.
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 concise sentence with no filler or repeated information. It is front-loaded with the main action, though it could have used the brevity to include more meaningful parameter or behavior details.
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 mutation tool with four required parameters and no annotations, the description is too minimal. An agent would not know whether the sheet must pre-exist, whether an existing table at ref will be replaced, or what constraints apply to table_name and ref.
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 0%, so the description should compensate for the lack of parameter documentation. It clarifies that ref is a cell range and implies the sheet target, but file_path and table_name are left entirely unexplained beyond their parameter names.
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 states a specific action ('Add a table to a sheet') and identifies the target resource and placement ('over the given cell range (ref)'). It is reasonably clear, though it does not explicitly differentiate itself from sibling add_data_to_sheet or other table-related 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 gives no guidance on when to use this tool versus alternatives such as add_data_to_sheet, export_sheet_to_csv, or list_tables. No context about prerequisites, preferred scenarios, or exclusions is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_blank_fileC
Create a new blank Excel file at the given path.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 discloses the core behavior (creates a blank Excel file) but does not state whether the tool overwrites existing files, whether it creates parent directories, what happens if the file already exists, or what the output schema represents. For a creation tool with no annotation support, this is a notable gap.
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 short sentence, front-loading the action and resource. It is concise and to the point, though it could add a bit more detail without becoming bloated.
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?
The tool is simple (one required parameter) and has an output schema, so the description is close to sufficient. However, the absence of any overwrite/conflict behavior or path details means an agent might make incorrect assumptions when calling it. It is adequate but not complete for a creation tool with no annotations.
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 0%, so the schema provides no meaning beyond the parameter name and type. The description adds that the parameter is a 'path' for the new file, which adds context. However, it does not specify path format (absolute vs relative), file extension handling, or whether the path should include .xlsx/.xls. Baseline is 3 due to low coverage, and the description does add some but not full 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 states a specific verb ('Create') and resource ('a new blank Excel file') and includes the key parameter ('at the given path'). It clearly distinguishes from siblings like list_sheets or set_cell_value, though it doesn't explicitly name an alternative.
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 a use case: creating a new blank Excel file. It doesn't specify when to use this tool versus add_sheet or add_data_to_sheet, nor does it mention any prerequisites (e.g., the file must not already exist, or parent directory requirements). No exclusion or alternative guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_sheet_to_csvA
Export a single Excel sheet to a CSV file.
file_path: path to the source .xlsx workbook
sheet_name: name of the sheet to export
output_path: destination file path (e.g. "/tmp/data.csv"), or "return inline" to return the content directly without saving
delimiter: column separator — "comma" (default), "pipe", or "tab"
cell_range: optional Excel range string (e.g. "A1:D10"). When omitted the entire used range is exported.
Returns a dict with:
output_path: path of the file written (omitted when returning inline)
content: CSV text (only present when returning inline)
sheet: sheet name
range: the range that was exported
rows_written: number of rows written
| Name | Required | Description | Default |
|---|---|---|---|
| delimiter | No | comma | |
| file_path | Yes | ||
| cell_range | No | ||
| sheet_name | Yes | ||
| output_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 that content can be returned inline or written to a file, and it fully documents the return dict fields. It does not discuss overwrite behavior or auth expectations, but for a simple export tool the behavioral contract is well covered.
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 well-structured: a one-line purpose, a bullet list of parameters, and a bullet list of return fields. Each item adds necessary information and none is redundant or filler. It is longer than usual but earns its length given the zero schema coverage.
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 five parameters, no annotations, and no schema-level descriptions, this description covers everything an agent needs: required arguments, optional behavior, output path semantics, delimiter options, range handling, and return contract. Nothing critical is missing for correct invocation.
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 0%, but the description meaningfully explains every parameter: file_path, sheet_name, output_path including the special 'return inline' value, delimiter with its allowed values and default, and cell_range with its default behavior. This fully compensates for the missing 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 opens with a specific verb and resource: 'Export a single Excel sheet to a CSV file.' It also says 'single', which distinguishes it from multi-sheet export tools, and the CSV target clearly differentiates it from siblings like export_sheet_to_text and export_sheet_to_markdown.
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 gives clear context for when to use the tool: whenever a single Excel sheet must be converted to CSV. It explains the inline return mode and optional range behavior, though it does not explicitly name alternative tools or state when not to use this tool. That prevents a 5 but the context is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_sheet_to_markdownA
Export a single Excel sheet to a Markdown table.
The first row is treated as the header row and a separator line is inserted beneath it. All column widths are padded to align the table.
file_path: path to the source .xlsx workbook
sheet_name: name of the sheet to export
output_path: destination file path (e.g. "/tmp/data.md"), or "return inline" to return the content directly without saving
cell_range: optional Excel range string (e.g. "A1:D10"). When omitted the entire used range is exported.
Returns a dict with:
output_path: path of the file written (omitted when returning inline)
content: markdown text (only present when returning inline)
sheet: sheet name
range: the range that was exported
rows_written: number of rows written (including header)
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| cell_range | No | ||
| sheet_name | Yes | ||
| output_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral burden and does so thoroughly: it discloses header-row handling, separator insertion, column padding, optional cell-range behavior, and the exact return dict structure including inline vs file-saving differences. This is exemplary transparency for a tool without annotations.
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 well-structured and front-loaded with a clear purpose statement, followed by concise parameter bullets and a compact return-value list. Every sentence adds useful information, with no filler or repetition.
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 tool with 4 parameters, no annotations, and no explicit parameter descriptions in the schema, the description is complete: it covers all inputs, edge cases like inline return, and the return contract. An agent has everything it needs to invoke the tool correctly.
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 0%, but the description fully compensates by explaining every parameter: file_path, sheet_name, output_path (including the special 'return inline' value), and cell_range (including the default behavior of exporting the used range). This adds substantial meaning beyond the bare schema.
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 states a specific verb ('Export'), a specific resource ('a single Excel sheet'), and the output format ('Markdown table'). It clearly distinguishes this from sibling exporters like export_sheet_to_csv and export_sheet_to_text by its format and 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 makes it clear what the tool does and mentions the important 'return inline' behavior, but it does not explicitly state when to prefer this tool over alternatives like export_sheet_to_csv or get_sheet_data. Usage context is implied rather than explicitly scoped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_sheet_to_textA
Export a single Excel sheet to a plain-text delimited file.
Values are joined with the chosen delimiter with no CSV quoting applied, making output easy to read as a flat text file.
file_path: path to the source .xlsx workbook
sheet_name: name of the sheet to export
output_path: destination file path (e.g. "/tmp/data.txt"), or "return inline" to return the content directly without saving
delimiter: column separator — "pipe" (default), "comma", or "tab"
cell_range: optional Excel range string (e.g. "A1:D10"). When omitted the entire used range is exported.
Returns a dict with:
output_path: path of the file written (omitted when returning inline)
content: text content (only present when returning inline)
sheet: sheet name
range: the range that was exported
rows_written: number of rows written
| Name | Required | Description | Default |
|---|---|---|---|
| delimiter | No | pipe | |
| file_path | Yes | ||
| cell_range | No | ||
| sheet_name | Yes | ||
| output_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it discloses delimiter joining behavior, absence of CSV quoting, inline vs file-writing output modes, default cell_range behavior, and the exact return dict. It omits minor details like overwrite behavior or error handling, but the core behavioral traits are clearly disclosed.
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 well-structured: a one-sentence summary up front, a key behavioral note, a clear bullet list mapping to parameters, and a return-value list. Every sentence adds information, and no redundant or filler content is present.
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 5-parameter tool with no annotations, the description is nearly complete: it covers all parameters, return values, and key behavioral options. Minor gaps remain around when to prefer this over sibling export tools and what happens on overwrite or error, but the essential calling context is well covered.
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 0%, so the description must compensate for all five parameters. It does so thoroughly, explaining file_path, sheet_name, output_path including the special 'return inline' value, delimiter choices with default, and cell_range with example and default behavior.
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 states a specific action and resource: 'Export a single Excel sheet to a plain-text delimited file.' It further distinguishes itself from likely siblings by emphasizing 'no CSV quoting applied' and a plain text format, differentiating it from export_sheet_to_csv and export_sheet_to_markdown.
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 gives clear context for when the tool is useful: generating flat, human-readable text output without CSV quoting, and supporting inline return for direct content access. It does not explicitly name alternative tools or state when NOT to use it, but the behavior described implies the selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sheet_dataB
Return cell data from a sheet.
sheet_name: name of the sheet to read
cell_range: optional Excel range string (e.g. "A1:D10"). When omitted the entire used range is returned.
Returns a dict with:
sheet: sheet name
range: the range that was read
rows: list of rows; each row is a list of cell values
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| cell_range | No | ||
| sheet_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the read behavior, the optional range behavior including the full-used-range fallback, and the exact return dict keys. This is reasonably transparent for a read-only retrieval tool, though it does not mention failure behavior.
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 compact, front-loaded with the purpose, and uses a scannable bullet structure for parameters and return values. Every line adds useful information, though the missing file_path note prevents a perfect score.
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?
The description covers the main read behavior and return shape, and an output schema exists, so return-value explanation is less critical. However, it fails to describe a required parameter and gives no selection guidance against sibling tools. This leaves the agent with an incomplete picture for reliable tool invocation.
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 0%, so the description must compensate. It documents sheet_name and cell_range well, including the Excel range format and default behavior, but it omits file_path entirely even though file_path is a required parameter. This is a significant gap.
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 opens with a specific verb and resource: 'Return cell data from a sheet.' This clearly identifies the tool's core function, though it does not explicitly distinguish it from the sibling get_table_data or the export variants.
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?
There is no guidance on when to use this tool versus get_table_data, list_sheets, or the export tools. The only usage-related detail is the optional cell_range behavior, which is parameter-level rather than tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_table_dataB
Return data from a named Excel table.
table_name: the display name of the table (from list_tables)
Returns a dict with:
table: table name
sheet: sheet the table lives on
ref: cell range
headers: first row (column headers)
rows: remaining rows as list of lists
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| table_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden of behavioral disclosure. It clearly communicates a read-only operation by saying 'Return data' and enumerates the full return structure, but it does not mention side effects, error behavior, or file-related assumptions.
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 concise, front-loaded with a clear purpose, and uses a readable bulleted return format. The return-field list may overlap with the output schema, but it is still well organized and economical.
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 tool with an output schema, the description is mostly adequate: it states the resource, key parameter usage, and return shape. The missing file_path semantics and lack of sibling differentiation leave some gaps for an agent selecting this tool.
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 0%, so the description must compensate. It adds meaning to table_name by explaining it is a display name from list_tables, but the required file_path parameter is completely undocumented.
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 returns data from a named Excel table, identifying the specific resource and operation. It is distinct from sibling get_sheet_data by referring to 'named Excel table', though it does not explicitly differentiate from alternatives.
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 a workflow by saying table_name comes from list_tables, giving useful context for when this tool applies. However, it does not contrast with get_sheet_data or other siblings, so an agent receives no explicit selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pivot_tablesA
Return every pivot table in the workbook.
Each entry contains:
name: pivot table name
sheet: sheet the pivot table is rendered on
ref: cell range of the pivot table output
source_sheet: data source sheet (if determinable, else null)
source_ref: data source range (if determinable, else null)
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of explaining behavior. It clearly specifies the output contract, including each returned field and the nullable source fields. It does not explicitly state that the operation is read-only or describe error behavior, but the listing behavior is well-specified.
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 main directive is front-loaded in one sentence, followed by a scannable bullet list of output fields. There is no fluff; every sentence contributes useful 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 straightforward list operation with one obvious parameter, the description is nearly complete. It enumerates the return fields and handles edge cases like undeterminable source data. The only missing detail is the semantics of file_path, which is largely self-explanatory.
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 0%, and the description does not explain file_path beyond what the input schema already shows. The parameter name is self-evident, but the description does not compensate for the lack of schema-level description.
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 uses the specific verb 'Return' with a specific resource, 'every pivot table in the workbook,' and clearly distinguishes this from sibling tools like list_sheets and list_tables. The scope and resource are 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 use case is implied: call this when you need all pivot tables in a workbook. However, there is no explicit guidance about when not to use it or when to prefer sibling tools such as list_sheets or list_tables.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sheetsA
Return the names of all sheets in the workbook.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
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 behavioral disclosure burden. The word 'Return' makes clear this is a read-only retrieval operation, and 'all sheets' discloses the scope of the result. Minor details such as hidden-sheet handling or ordering are omitted, but for a simple listing tool this is acceptable, especially since an output schema exists for the return shape.
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 one compact sentence with no filler. The action and result are front-loaded, and every word contributes to the meaning.
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 one-parameter listing tool, the description plus the input schema and output schema provides enough for an agent to invoke the tool correctly. It could be slightly richer by mentioning hidden-sheet behavior or explicitly excluding tables/pivot tables, but these are minor for this level of complexity.
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 0%, so the description must help with parameter meaning. It does not explicitly discuss file_path, but 'in the workbook' implicitly identifies file_path as the workbook to inspect, and the parameter name itself is self-descriptive. No format or validation details are added, but the single required parameter is straightforward.
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 states a specific verb ('Return') and a clear resource ('the names of all sheets in the workbook'). This is specific enough to distinguish the tool from sibling tools such as list_tables and list_pivot_tables, which operate on different object types. There is no vagueness or tautology.
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 this tool is for retrieving sheet names, but it does not explicitly explain when to choose it over siblings like list_tables or list_pivot_tables. There are no direct exclusions or alternative routing hints; an agent must infer usage from the resource noun and the sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tablesA
Return every named table in the workbook.
Each entry contains:
name: display name of the table
sheet: sheet the table lives on
ref: cell range (e.g. "A1:D20")
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
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 behavioral disclosure burden. It is transparent about the return structure by listing each entry's fields: name, sheet, and ref. The verb 'Return' implies a read-only operation with no side effects, and the scope 'every named table' discloses that no filtering occurs.
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 concise and front-loaded with the core purpose in the first sentence. The bullet list cleanly presents the return entry structure without unnecessary words or repetition. Every sentence contributes meaningful 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 simple listing tool with one parameter and an output schema, the description is nearly complete: it states what is returned and the fields of each entry. The only notable omission is parameter semantics for file_path, which is somewhat mitigated by the self-explanatory parameter name. Overall, an agent has enough information to call this tool correctly in most 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 0%, so the description must compensate for documenting the file_path parameter, but it does not mention file_path at all. The schema only states that file_path is a required string, and the description adds no semantic value such as path format, workbook context, or example. This is a significant gap for the only parameter.
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 uses a specific verb and resource: 'Return every named table in the workbook.' It clearly distinguishes itself from siblings like list_sheets and list_pivot_tables by focusing on named tables rather than sheets or pivot tables. The scope 'every named table' removes ambiguity about filtering.
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 purpose statement itself provides clear context for when to use this tool: whenever the agent needs to enumerate all named tables in a workbook. It does not explicitly name alternatives or state when not to use it, but the resource term 'named table' implicitly disambiguates from list_sheets and list_pivot_tables. No exclusion conditions are needed for such a straightforward listing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_cell_formulaC
Set a formula in a single cell in a sheet (formula should start with '=').
| Name | Required | Description | Default |
|---|---|---|---|
| cell | Yes | ||
| formula | Yes | ||
| file_path | Yes | ||
| sheet_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description must carry the full behavioral burden. It only says the formula should start with '='; it does not clarify whether existing cell content is overwritten, whether permissions are needed, how invalid formulas are handled, or what effects occur in the sheet.
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 sentence with no filler or redundancy, and the important formula-prefix rule is included up front. It is concise without being bloated.
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?
Even though an output schema exists, the description still lacks key invocation context: no usage alternatives, no side-effect disclosure, and no parameter format details. For a four-required-parameter mutation tool with no annotations and no schema descriptions, this is not complete enough.
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 0%, so the description must add meaning to the four required parameters. It adds a useful constraint for 'formula' and implies a single cell, but it does not explain the expected cell reference format, sheet identification, or file_path expectations.
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 ('Set a formula'), the resource ('a single cell in a sheet'), and a concrete rule (formula must start with '='). It is specific enough to distinguish from set_cell_value by topic, though it does not explicitly name that sibling.
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 guidance is given about when to choose this tool over siblings such as set_cell_value or add_data_to_sheet. An agent must infer from the tool name and context which operation fits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_cell_valueC
Set the value of a single cell in a sheet.
| Name | Required | Description | Default |
|---|---|---|---|
| cell | Yes | ||
| value | Yes | ||
| file_path | Yes | ||
| sheet_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description bears the full burden of behavioral disclosure. It only states the action and does not explain whether the cell overwrites existing content, whether a formula in the cell is replaced, whether the cell must already exist, or how value types are handled. The mutating nature is implied but not elaborated.
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 concise sentence with no filler words. The action and object are front-loaded, and every word contributes to the core meaning. It is appropriately sized for a simple setter tool.
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?
Despite having an output schema, the description lacks essential context for correct invocation: how to reference a cell, what value types are accepted, and what happens to existing cell content. For a tool with four required parameters and zero schema descriptions, this is a meaningful gap in guidance.
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 0%, so the description must compensate for the lack of parameter documentation. The phrase 'value of a single cell' hints that 'cell' is a cell reference and 'value' is the new value, but no detail is given on cell notation (e.g., 'A1'), file_path meaning, or sheet_name scope. This is insufficient compensation.
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 uses a specific verb ('Set') and identifies the resource ('value of a single cell in a sheet'), making the primary action clear. It is implicitly distinguishable from sibling tool set_cell_formula, which sets a formula rather than a literal value, and from add_data_to_sheet, which operates on multiple cells. However, it does not explicitly name these alternatives.
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 guidance is given about when to use this tool versus alternatives. It does not mention that set_cell_formula is the appropriate tool for formulas, or that add_data_to_sheet should be used for batch writes. The description leaves all usage decisions to the agent without any contextual direction.
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.
14 tool updates
v0.1.0- First observed
add_data_to_sheet - First observed
add_sheet - First observed
add_table_to_sheet - First observed
create_blank_file - First observed
export_sheet_to_csv - First observed
export_sheet_to_markdown - First observed
export_sheet_to_text - First observed
get_sheet_data - First observed
get_table_data - First observed
list_pivot_tables - First observed
list_sheets - First observed
list_tables - First observed
set_cell_formula - First observed
set_cell_value
TDQS
Each tool targets a distinct resource or action: listing vs reading vs exporting vs writing are clearly separated, and the three export tools differ by output format. Even the similar get_sheet_data and get_table_data are unambiguous because one returns raw sheet cells and the other returns a named table with headers.
Tool names follow a consistent verb_noun pattern: list_*, get_*, export_sheet_to_*, add_*, and set_cell_*. The naming style is uniform and predictable across the entire set.
14 tools is well within the ideal range for an Excel-focused MCP server. Each tool covers a distinct operation and the set feels appropriately scoped without unnecessary duplication.
The server covers the core Excel lifecycle: discovering structure, reading data, exporting, creating files, adding sheets/data/tables, and setting cell values or formulas. Minor gaps exist—such as no delete/rename/clear operations or updating existing tables—but agents can accomplish most common workflows.
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
Excel analytics: inspect, query (JSON rows), charts, and JSON-to-xlsx workbook writing.
Query, join, profile, clean and convert CSV/JSON/Parquet with server-side DuckDB over MCP.
Open, inspect, filter, edit and convert xlsx and csv files from your AI chat. Processing is local.
Generate, edit, merge, translate and PDF-convert PowerPoint (.pptx) over MCP. 8 tools.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables reading and searching Excel files through MCP-compatible clients. Provides tools to retrieve workbook metadata, read sheet contents, and search across all sheets using absolute file paths.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables reading and writing Excel files (text, formulas, and images on Windows) via MCP tools with pagination support.3MIT
- AlicenseAqualityDmaintenanceMCP server for reading and writing Excel (xlsx) files using SheetJS, providing tools to list sheets, read data, create files, add sheets, and update cells.516MIT
- AlicenseNot gradedqualityBmaintenanceProvides full read and write access to Excel workbooks (sheets, cell ranges, tables, formulas, formatting, and cross-workbook references) via MCP, running locally or as an HTTP/SSE service.70MIT
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/urjeetpatel/excel_mcp_server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server