Model or dataset
haris-musa/excel-mcp-server avatar
haris-musa/excel-mcp-server

excel-mcp-server: An MCP Tool Server for Excel Workbooks Without Excel

A Model Context Protocol server for Excel file manipulation

4,186 stars465 forksPythonMIT

At a glance

What is it?
excel-mcp-server is a Python-based Model Context Protocol server that lets AI agents create, read, and modify Excel files over stdio or HTTP. It covers formatting, charts, pivot tables, and validation, but remote use requires careful path handling.
Who is it for?
Adopt excel-mcp-server if you need an LLM agent to manipulate .xlsx files programmatically without Microsoft Excel installed, especially in local stdio setups where you control file paths. Avoid it if your workflow depends on absolute paths or directory traversal over remote transports, since those are rejected unless files live under EXCEL_FILES_PATH.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 157 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What It Solves and Who It Is For

The project addresses a narrow but real gap: giving AI agents a way to work with Excel workbooks without requiring the desktop application. The README states it lets you manipulate Excel files without Microsoft Excel installed, and the feature list covers create, read, and update operations. The intended user is someone running an MCP client, such as Cursor or another agent host, who wants that agent to generate reports, edit spreadsheets, or build charts on demand. It is not a spreadsheet application itself. It is a server that exposes Excel operations as tools to an LLM. That makes it useful for automation pipelines where a human would otherwise have to open Excel, run a macro, or write a one-off Python script.

Transport Options and Their Trade-offs

The server supports three transports, and the choice matters more than the feature list. Stdio runs as a local subprocess, where each tool call carries the file path. This is the simplest model for desktop clients. SSE is marked as deprecated, which is a clear signal not to build new integrations on it. Streamable HTTP is recommended for remote connections, and it listens on a configurable port. The README shows FASTMCP_PORT defaults to 8017, while the example in the SSE section uses port 8000. That mismatch is easy to trip over. If you set up a remote server, you must know which port your client expects. The server is built on FastMCP, which is not stated explicitly but is implied by the FASTMCP_PORT variable name and the streamable HTTP support.

File Path Handling: The Critical Constraint

Remote transports enforce a strict file path rule. When you run the server with SSE or streamable HTTP, you must set EXCEL_FILES_PATH on the server side. The README says tool filepath values must be relative to that directory, and absolute paths and directory traversal are rejected. This is a security measure, but it also constrains how you structure your data. If your files live in scattered locations on the server, you cannot reach them unless you move them under the designated root. The default is ./excel_files, which means a remote server started without the environment variable will only see files in that subdirectory. For stdio, the path comes with each tool call, so no server-side variable is needed. That asymmetry is worth noting: local use is flexible, remote use is sandboxed by design.

Getting It Running

Installation is via uvx, the Python package runner. The README shows three commands: uvx excel-mcp-server stdio, uvx excel-mcp-server sse, and uvx excel-mcp-server streamable-http. For stdio, a client config JSON points to uvx with the stdio argument. For streamable HTTP, the client connects to a URL like http://localhost:8000/mcp, but you must set EXCEL_FILES_PATH first. The README gives PowerShell and Linux examples that set that variable and optionally FASTMCP_PORT before launching. If you skip the environment variable, the server still starts but defaults to ./excel_files. There is no mention of a configuration file or a setup script beyond these commands. The project is on PyPI, so uvx fetches the published package. Version 0.1.8 is the latest release as of the last push date.

What the Tools Cover

The feature list is broad. It includes formulas, formatting, charts, pivot tables, Excel tables, data validation, and sheet management such as copy, rename, and delete. The README points to TOOLS.md for the complete documentation. Based on the repository layout, that file exists, but the cleaned README does not enumerate every tool name. That is a documentation gap for potential adopters. You cannot tell from the README alone whether conditional formatting supports color scales or only icon sets, or whether pivot tables allow custom aggregations. The description says built-in validation for ranges, formulas, and data integrity, which suggests the server checks inputs before writing. But the exact behavior of that validation is not specified. If your use case depends on a specific Excel feature, you must read TOOLS.md or inspect the source code.

Limitations and Wrong-Tool Cases

The most obvious limitation is the remote path sandbox. If you need to process Excel files from multiple directories on a server, the relative-path requirement forces you to reorganize your storage or copy files into EXCEL_FILES_PATH. That is a real operational cost. Another limitation is that the server does not install Excel; it manipulates files directly. That means advanced Excel features that rely on the Excel engine, such as macros, external data connections, or certain recalculation behaviors, may not work as expected. The README does not claim support for VBA or external queries. Also, the SSE transport is deprecated, which reduces the options for older clients that only speak SSE. For an agent that needs to edit a password-protected workbook, the README does not mention encryption or password handling, so that is likely unsupported. This is the wrong tool for scenarios requiring fine-grained control over workbook internals that the tool set does not expose.

A Concrete Alternative

A direct alternative is to use the openpyxl or pandas libraries in a custom Python script that your agent executes. That approach differs in a fundamental way: instead of a generic MCP server exposing fixed tools, you write code that imports openpyxl and performs exactly the operations you need. The server abstracts those library calls into MCP tool calls, which is convenient but also constrains you to the operations the server author chose to expose. With openpyxl, you have full access to the library's API, including features that may not be in this server's tool list. The trade-off is that your agent must have a code execution environment, and you must handle file paths and security yourself. The MCP server centralizes that logic and provides a consistent interface, but it also adds a layer between your agent and the underlying library.

Maintenance and License Considerations

The project is under the MIT License, which permits commercial use, modification, and redistribution with attribution. That is permissive and unlikely to block adoption. The release history shows a gap: version 0.1.7 was pushed in August 2025, and version 0.1.8 came in April 2026. That is an eight-month interval, which suggests the project is not under heavy active development. The repository is not archived, and the last push is recent, so it is not abandoned. But a single maintainer or small team may not respond quickly to issues. The README does not list a changelog or migration guide. Upgrading from an older version may require checking the release notes on GitHub, which are not included in the material. For a production deployment, you should pin the version you use and test the specific tools you rely on after any upgrade.

Editorial conclusion

Adopt excel-mcp-server if you need an LLM agent to manipulate .xlsx files programmatically without Microsoft Excel installed, especially in local stdio setups where you control file paths. Avoid it if your workflow depends on absolute paths or directory traversal over remote transports, since those are rejected unless files live under EXCEL_FILES_PATH. Before deploying, verify that the tool set in TOOLS.md covers your required operations (charts, pivot tables, conditional formatting) and test the streamable HTTP transport with your client, because SSE is deprecated and the port default differs from what older examples assume.

Official sources

  1. haris-musa/excel-mcp-server on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
Community notes

Community notes