io.github.wesseltl/excel-mcp
Enables AI agents to read real Excel files with messy layouts, auto-detecting header rows and handling merged cells to extract clean tabular data via MCP tools.
README
<!-- mcp-name: io.github.wesseltl/excel-mcp -->
excel-mcp
Let your AI agent read real, messy Excel files. An MCP server that handles the things LLMs choke on: multiple sheets, title rows sitting above the actual table, and merged cells.
If you paste a spreadsheet into a prompt, the model has to guess where the data starts and what the merged cells mean, and it often gets it wrong. This reads the file properly with deterministic code, so the values are exact and the model never invents cell contents.
The problem it solves
A real spreadsheet almost never starts cleanly at cell A1:
A1: Quarterly Sales Report 2024 <- title, not data
A2: Generated by finance <- note, not data
A3: (blank)
A4: Region | Product | Units <- the actual header
A5: North | Widget | 120
...
Ask an LLM to read that and it'll often treat the title as a column. read_table auto-detects that
the header is on row 4 and returns clean records. Merged cells (a value spanning several rows) get
forward-filled, so rows don't lose their category.
The tools it gives an agent
| Tool | What it does |
|---|---|
list_sheets(path) |
Every sheet in the workbook, with its size |
preview_sheet(path, sheet, rows) |
Top rows as a grid, so the agent can see the layout |
read_table(path, sheet) |
The actual data table as records. Reports the decisions that could be wrong: header_source (explicit / auto-detected), header_confidence, and forward_filled_columns (values inferred from merged cells, not read) |
sheet_to_csv(path, sheet) |
The table as clean CSV text |
Quickstart
pip install "excel-agent-mcp[mcp]"
Add it to your MCP client (e.g. Claude Desktop):
{
"mcpServers": {
"excel": { "command": "excel-agent-mcp" }
}
}
Now your agent can answer "what's in this spreadsheet?" or "pull the sales table out of sheet 2" by reading the file, not guessing.
Also usable from plain Python
from excel_mcp import reader
reader.list_sheets("report.xlsx")
reader.read_table("report.xlsx", "Sales") # {'columns': [...], 'rows': [...], 'header_row': 3}
reader.sheet_to_csv("report.xlsx", "Sales")
Tests
python -m unittest discover -s tests # builds its own messy xlsx, runs anywhere
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.