excel-tools-mcp
Click on "Deploy 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-tools-mcpprofile structure of report.xlsx on Sheet1"
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 Tools MCP
Excel Tools MCP is a standalone Model Context Protocol server for reading and inspecting local Excel files. It is designed for AI assistants that need a compact, structured view of spreadsheets without loading an entire workbook into context.
The project supports two distribution paths:
npm / npx: a Node.js launcher starts the Python MCP server.
PyPI / uvx / pip: run the Python MCP server directly.
Only local file paths are supported.
Version Status
Published v0.1.0
The first published release supports .xlsx files through openpyxl.
Available tools:
excel_inspect: inspect workbook metadata and sheet dimensions.excel_read_range: read a rectangular cell range.excel_profile_structure: summarize row structure patterns.
Known boundary:
.xlsis not supported in v0.1.0.
Published v0.1.1
New and changed behavior:
Read-only tools support
.xlsx,.xlsm,.xls,.xlsb, and.ods..xlsxand.xlsmare read withopenpyxl..xls,.xlsb, and.odsare read withpython-calamine.excel_read_range_normalizedreads a range and virtually fills merged cells from their anchor values without modifying the file.
Available tools in v0.1.1:
excel_inspect: inspect workbook metadata and sheet dimensions.excel_read_range_normalized: read a rectangular range, analyze merged cells, and optionally return anchor-filled data.excel_profile_structure: summarize row structure patterns and merged-cell structure.
Related MCP server: xls-mcp-servers
Run With npx
This is the easiest route for MCP clients that already support Node-based server launch commands.
{
"mcpServers": {
"excel-tools-mcp": {
"type": "stdio",
"command": "npx",
"args": ["--yes", "@wasziyang/excel-tools-mcp"]
}
}
}Requirements:
Node.js 20+
Python 3.10+
The npm package is a launcher. It creates or reuses a cached Python environment, installs the Python MCP server, and starts it over stdio.
Terminal test:
npx --yes @wasziyang/excel-tools-mcpThe command may appear to do nothing. That is normal for an MCP stdio server: it waits for the MCP host to send JSON-RPC messages over stdin.
Custom Python Path
By default, the launcher searches for python3, then python.
Set EXCEL_TOOLS_MCP_PYTHON only when Python is installed somewhere unusual:
{
"mcpServers": {
"excel-tools-mcp": {
"type": "stdio",
"command": "npx",
"args": ["--yes", "@wasziyang/excel-tools-mcp"],
"env": {
"EXCEL_TOOLS_MCP_PYTHON": "/absolute/path/to/python"
}
}
}
}Run With PyPI / uvx
Users with uv can run the PyPI package directly:
{
"mcpServers": {
"excel-tools-mcp": {
"type": "stdio",
"command": "uvx",
"args": [
"--from",
"excel-tools-mcp",
"excel-tools-mcp"
]
}
}
}Terminal test:
uvx --from excel-tools-mcp excel-tools-mcpYou can also install it with pip:
pip install excel-tools-mcp
excel-tools-mcpRuntime difference:
npx -> npm package -> Node launcher -> Python MCP server
uvx -> PyPI package -> Python MCP server
pip -> PyPI package -> Python MCP serverLocal Development
Install from the local checkout:
pip install -e .
excel-tools-mcpOr run the module directly:
python3 -m excel_tools.serverFor a local npx-style test:
npm startTool Arguments Example
{
"file_path": "/absolute/path/to/report.xlsx",
"sheet": "Sheet1",
"start_cell": "A1",
"end_cell": "D20"
}For Windows paths:
{
"file_path": "C:\\Users\\Alice\\Documents\\report.xlsx",
"sheet": "Sheet1",
"start_cell": "A1",
"end_cell": "D20"
}Windows, WSL, and VS Code
If your mcp.json lives under a Windows path such as:
C:\Users\<you>\AppData\Roaming\Code\User\mcp.jsonVS Code usually starts the MCP server from Windows, not from WSL. In that case Windows must have Node.js and Python installed, and Excel file paths should be Windows paths.
If you want VS Code on Windows to run the server inside WSL, call wsl explicitly:
{
"mcpServers": {
"excel-tools-mcp": {
"type": "stdio",
"command": "wsl",
"args": [
"bash",
"-lc",
"npx --yes @wasziyang/excel-tools-mcp"
]
}
}
}When the server runs in WSL, use Linux/WSL paths:
{
"file_path": "/mnt/c/Users/Alice/Documents/report.xlsx",
"sheet": "Sheet1",
"start_cell": "A1",
"end_cell": "D20"
}Docker
Build locally:
docker build -t excel-tools-mcp .MCP client config example:
{
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"/absolute/path/to/excel/files:/workspace",
"excel-tools-mcp"
]
}Inside Docker, pass file paths under /workspace, for example /workspace/report.xlsx.
Docker images are not published yet.
Publishing Notes
Release checklist:
Update versions in
pyproject.toml,package.json, and the npm launcher cache directory.Build and publish the Python package to PyPI.
Publish the npm launcher if the npx route should install the new version.
Basic npm publish flow:
npm login
npm publish --access publicBasic PyPI publish flow:
uv build
python3 -m twine upload dist/*Available Tools
3 toolsexcel_inspectA
检查Excel文件的基本信息,包括表单数量、每个表单的行列数等。
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | 调用状态,成功为True,失败为False |
| tool_result | No | 业务数据,失败时可为None |
| status_message | No | 调用状态描述信息,失败时为错误信息 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden. It states the tool inspects basic info but does not explicitly declare it is read-only or describe any side effects. The behavior is implied but not fully 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 a single, concise sentence that conveys the tool's purpose without extraneous information. Every part is necessary.
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 is simple and has an output schema, the description covers the essential purpose. It does not mention edge cases or output format, but with the output schema present, it is sufficiently 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?
The schema provides a description for file_path, but overall schema description coverage is 0% (likely due to nested defs not counted). The description adds value by specifying what information is retrieved (sheets, rows, columns) beyond the parameter 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 clearly states the tool inspects basic Excel file information including number of sheets and rows/columns. It distinguishes from sibling tools like excel_profile_structure and excel_read_range_normalized, which likely have different scopes.
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 use for initial overview of Excel files but lacks explicit guidance on when to use or when to use alternatives. No exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
excel_profile_structureB
分析工作表的结构签名(数据类型 + 合并状态)。
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | 调用状态,成功为True,失败为False |
| tool_result | No | 业务数据,失败时可为None |
| status_message | No | 调用状态描述信息,失败时为错误信息 |
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 mentions analyzing data types and merge status but omits important traits such as whether the operation is read-only, performance implications, error conditions, or if it modifies the file. This leaves the agent with significant uncertainty.
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 that conveys the core purpose without filler. It is efficiently front-loaded and 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 description provides the essential purpose but lacks context on the return value format (even though an output schema exists, the description could hint at what 'structural signature' entails). Given the presence of sibling tools and an output schema, the description is minimally complete but could be more informative.
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 already provides descriptions for all parameters (file_path, sheet, max_cols_to_scan, max_rows_to_scan), so schema description coverage is effectively high. The tool description adds no extra parameter semantics. Baseline 3 is appropriate as the description does not compensate or add value beyond the 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 clearly states the tool's purpose: analyzing the structural signature of a worksheet, including data types and merge status. It uses a specific verb ('analyze') and resource ('worksheet structure signature'), but does not explicitly differentiate from sibling tools like excel_inspect or excel_read_range_normalized.
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 usage guidelines are provided. The description does not indicate when to use this tool versus alternatives, nor does it mention prerequisites or exclusions. The agent receives no guidance on context of use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
excel_read_range_normalizedB
读取指定区域,并在返回数据中虚拟反填合并单元格,不修改源文件。
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | 调用状态,成功为True,失败为False |
| tool_result | No | 业务数据,失败时可为None |
| status_message | No | 调用状态描述信息,失败时为错误信息 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses two key behaviors: it reads data and virtually backfills merged cells, and it does not modify the source file. With no annotations, this provides minimal behavioral context. However, it omits details like handling of errors, empty ranges, or the structure of returned 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 that front-loads the action and purpose. Every word earns its place without 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 has five parameters and an output schema, the description covers the core functionality but lacks detail on parameter usage, output format, and edge cases. The presence of an output schema means return values need not be explained, but behavioral context remains incomplete.
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 tool description does not mention any parameters, even though the input schema has five properties. Schema description coverage is 0% as per context, meaning the description should compensate but does not. The schema itself has parameter descriptions in Chinese, but the tool description adds no value beyond that.
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 reads a specified area from an Excel file and virtually backfills merged cells without modifying the source. It uses a specific verb and resource, and distinguishes from sibling tools (excel_inspect, excel_profile_structure) which focus on structure/profile rather than data reading.
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. Sibling tools exist but there is no mention of trade-offs or conditions. The agent is left to infer usage solely from the tool name and description.
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.
3 tool updates
v0.1.2- First observed
excel_inspect - First observed
excel_profile_structure - First observed
excel_read_range_normalized
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: inspection, structure profiling, and reading with merged cell handling. No overlap in functionality.
All tools follow a consistent 'excel_verb_noun' pattern (inspect, profile_structure, read_range_normalized), making the intent clear.
With only 3 tools, the set is small but focused. It covers essential read/inspect operations, though a few more tools for writing or editing would be more comprehensive.
The set is missing any write or modification capabilities (create, update, delete), which are common in Excel workflows. Significant gaps remain.
Maintenance
Related MCP Connectors
MCP server for querying and analyzing data from ad platforms, analytics tools, and spreadsheets
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
MCP server for detecting and redacting PII (Personally Identifiable Information) in PDF documents.
2,000+ MCP servers read at source level. Know what one does before you connect. Free, no key.
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol (MCP) server that provides tools for reading Excel (xlsx) files, enabling extraction of data from entire workbooks or specific sheets with results returned in structured JSON format.36Apache 2.0
- AlicenseNot gradedqualityDmaintenanceMCP server for reading and writing .xls (Excel 97-2003) files, enabling data manipulation, sheet listing, and metadata retrieval.MIT
- 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.513MIT
- FlicenseCqualityBmaintenanceAn MCP server for safe .xlsx inspection and controlled workbook writes, enabling spreadsheet reads, search, filtering, aggregation, and preview-based writes with workspace confinement and audit logging.12-