Excel MCP Server
*[日本語 README](README_ja.md)*
# Excel MCP Server
A cross-platform MCP server for reading, writing, and formatting Excel files. Works with both open Excel workbooks (live) and closed .xlsx files (no Excel needed).
## Two Modes
- **`workbook`** — Operate on an open Excel workbook in real-time via xlwings
- **`path`** — Edit closed .xlsx files directly using pure Python (preserves images, charts, and all embedded content)
## Tools
| Tool | workbook | path | Required |
|------|:--------:|:----:|----------|
| `get_excel_info` | - | - | (none) |
| `read_cells` | OK | OK | range |
| `write_cells` | OK | OK | range, value |
| `format_cells` | OK | OK | range, format |
| `execute_vba` | OK | - | workbook, code |
## Requirements
- **Node.js** 18+
- **Python** 3.8+
- **xlwings** (for live Excel mode — `pip install xlwings`)
- **Microsoft Excel** (only needed for `workbook` mode and `execute_vba`)
Works on **Windows** and **macOS**. The `path` mode also works on Linux.
## Installation
```bash
git clone https://github.com/kousunh/excel-mcp-server.git
cd excel-mcp-server
npm install
pip install -r scripts/requirements.txt
```
### Configure MCP Client
Add to your MCP client config (Claude Desktop, Cursor, etc.):
```json
{
"mcpServers": {
"excel-mcp": {
"command": "node",
"args": ["/path/to/excel-mcp-server/src/index.js"]
}
}
}
```
To use a specific Python executable, set the `EXCEL_MCP_PYTHON` environment variable:
```json
{
"mcpServers": {
"excel-mcp": {
"command": "node",
"args": ["/path/to/excel-mcp-server/src/index.js"],
"env": {
"EXCEL_MCP_PYTHON": "/path/to/python"
}
}
}
}
```
## Usage
### Closed files (path mode)
```
read_cells path="/data/report.xlsx" range="A1:D20" formats=true
write_cells path="/data/report.xlsx" range="A1:C3" value=[["Name","Age","City"],["Alice",30,"NYC"],["Bob",25,"LA"]]
format_cells path="/data/report.xlsx" range="A1:C1" format={"bold":true,"backgroundColor":"#4472C4","fontColor":"#FFFFFF"}
```
No Excel installation required. Images, charts, and shapes are preserved.
### Open workbooks (workbook mode)
```
get_excel_info
read_cells workbook="Sales.xlsx" range="B2:F10"
write_cells workbook="Sales.xlsx" range="G2" value="=SUM(B2:F2)"
execute_vba workbook="Sales.xlsx" code="Range(\"A1:G10\").AutoFilter"
```
Requires Excel to be running with the workbook open.
## License
MIT
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose with no overlap: execute_vba runs code, format_cells applies styling, get_excel_info retrieves metadata, read_cells extracts data, and write_cells inserts data. The descriptions explicitly differentiate between live Excel and file-based operations where applicable, eliminating ambiguity.
All tool names follow a consistent verb_noun pattern (execute_vba, format_cells, get_excel_info, read_cells, write_cells) with clear, descriptive verbs. There are no deviations in style or convention, making the set predictable and easy to understand.
With 5 tools, this server is well-scoped for basic Excel operations, covering execution, formatting, information retrieval, reading, and writing. Each tool earns its place without redundancy, and the count is appropriate for the domain, avoiding both excessive complexity and oversimplification.
The toolset provides solid coverage for core Excel workflows, including CRUD-like operations (read/write), formatting, and automation (VBA). Minor gaps exist, such as no explicit tools for managing sheets (e.g., create/delete sheets) or advanced features like charts, but agents can likely work around these with the available tools.