Excel MCP Server

Interact with Microsoft Excel to read data, edit cells, execute VBA code, and manage worksheets.

日本語 README

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

ToolworkbookpathRequired
get_excel_info--(none)
read_cellsOKOKrange
write_cellsOKOKrange, value
format_cellsOKOKrange, format
execute_vbaOK-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

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.):

{
  "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:

{
  "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

Related Servers