MCP server for production-grade Excel/.xlsx tooling. Read, write, diff, redact. Free tier.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Short name: xfa β a real CLI command (xfa <file>, xfa samples, xfa --version) and the prompt shorthand (e.g. "use xfa to read this file"). Same entrypoint as xlsx-for-ai; matches the internal xfa_* / XFA_* brand surface.
Verified values, preserved structure, up to 100MB
The missing reliability layer for spreadsheet work in LLM agents. Read, write, diff, validate, and analyze .xlsx files end-to-end β with merged cells, formulas, named ranges, conditional formatting, pivots, and charts preserved.
xlsx-for-ai makes Claude reliable on real-world Excel files. Forty-plus tools cover the structural surface that pandas-style sandboxes drop on the floor: merged cells, named ranges, formulas with results, conditional formatting, pivots, slicers, charts, comments, data validations, hyperlinks, cross-sheet topology, external links, form controls, VBA macros, document properties, and protection settings. Cross-engine validation catches the corruption other readers silently mask. A hosted recalc engine computes served values in-house β no third-party formula engine in the serve path.
The global install puts the xlsx-for-ai-mcp binary on your PATH β that's what the canonical configs below point at. A pinned global install launches fast and works offline; upgrade with npm install -g xlsx-for-ai@latest when a new version ships.
Upgrading from 1.5.x? This is a re-architecture, not a feature bump: the heavy local engine is gone from the npm package. All rendering happens server-side. The
cursor-reads-xlsxalias still works. See Migration below.
Add the server to your agent runtime under the name xfa (so "use xfa to read this" resolves). First invocation auto-registers an anonymous client UUID β no email, no signup, no friction.
The global install auto-registers the xfa MCP server in ~/.claude.json β no extra step:
If your environment skips install scripts (--ignore-scripts, CI, or a sudo install), register it manually:
Verify: in a new Claude Code session, ask "what MCP tools do you have?" β 50 xlsx_* tools should appear, including xlsx_doctor (one-call health report β try it first on any unknown workbook).
Then run xfa samples (shorthand for xlsx-for-ai samples) to drop two demo workbooks in your working directory and get paste-ready prompts to try.
Config file: ~/.cursor/mcp.json
Verify: open Cursor settings β MCP β confirm xfa shows 50 xlsx_* tools.
Config file: ~/.continue/config.json
Verify: restart VS Code, open the Continue panel, and check the MCP server list.
Pass --mcp-server on the command line, or add to your Codex config:
Verify: run codex --list-tools and confirm 50 xlsx_* tools are listed.
Config file: ~/.config/zed/settings.json
Verify: open Zed's assistant panel β the xlsx tools should appear in the tool picker.
Config file: ~/.codeium/windsurf/mcp_config.json
Verify: open Windsurf β Cascade β settings, confirm xfa is listed as an active MCP server.
For custom MCP clients, the binary is xlsx-for-ai-mcp (stdio transport). Override the API base URL with the XLSX_FOR_AI_API env var for local dev against http://localhost:3000.
The MCP client is the easy path, but every tool is also a plain HTTP endpoint you can call from any language β no SDK required. Registration is anonymous and keyless: POST https://api.xlsx-for-ai.dev/api/v1/clients (no auth) returns { client_id, api_key }, then call any tool with Authorization: Bearer <api_key>. The free tier is 10,000 calls/month, 10 MB per file β no billing, no email, no signup.
The free tier caps files at 10 MB; larger workbooks and higher volume come back as a typed JSON error with an upgrade field (see below).
Beyond the free tier, rate-limited and oversize requests come back as a typed JSON error ({ "error": { "code", "message" } }) carrying an upgrade field with your options β see GET /api/v1/reference for the full contract.
The same governed contract is served read-only from two routes β discover the whole API without a key:
GET /api/v1/reference β a self-contained human HTML reference for all 50 public-stable tools, including the on-ramp above.GET /api/v1/openapi.json β the versioned OpenAPI 3.1 contract, verbatim. Point codegen, Postman, or Scalar/Redoc at it.50 tools registered in tools/list. Descriptions are intentionally rich β an agent reading a transcript can tell what each tool does and when to reach for it, without extra docs.
| Tool | What it does |
|---|---|
xlsx_doctor | One-call workbook health report. HIGH/MEDIUM/LOW findings (macros, external links, hidden sheets, missing metadata, large images) + quick facts + feature flags. The first call to make on an unknown workbook. |
xlsx_topology | One-call workbook orientation: sheets Γ dimensions Γ formulas Γ named ranges Γ tables Γ validations Γ hyperlinks Γ merges in one shot. |
xlsx_list_sheets | List all sheet names and metadata. Fast first-call before reading. |
xlsx_schema | Infer column types, nullable flags, header row, and sample values per sheet. |
xlsx_describe | Pandas-style .describe() on every numeric column β count, mean, std, min, max, quartiles. |
xlsx_workbook_views | UI state β frozen panes, zoom, active cell, hidden / veryHidden sheets, tab colors, active tab. |
xlsx_properties | Workbook metadata β creator, modified, company, title, custom doc properties. |
| Tool | What it does |
|---|---|
xlsx_read | Read a workbook β text, JSON, or markdown. Formulas, named ranges, layout, and data types preserved. |
xlsx_read_handle | Read by server-side handle instead of bytes β for session flows where the workbook has already been uploaded and shouldn't be transferred again. |
xlsx_write | Create or update a workbook from a structured spec. Multi-sheet, formulas, named ranges, table definitions. |
xlsx_data_clean | Normalize messy data in place β trim whitespace, coerce types, dedupe rows, fix obvious encoding artifacts. Returns a cleaned copy + a change log. Save-As shape; never mutates the input. |
xlsx_diff | Semantic diff between two workbooks β cell-level deltas, formula changes, structural shifts. Deterministic output. |
xlsx_redact | Redact PII from a workbook before sharing. Server-side detection; returns redacted copy plus audit manifest. |
xlsx_convert | 25+ in / 16 out formats (csv, tsv, html, ods, xls, xlsb, dif, sylk, prn, txt, dbf, eth, json, markdown, xlsx, etc.). |
xlsx_validate | Cross-engine consistency check β runs the workbook through TWO independent renderers and reports cell-level divergences. |
xlsx_session_set_validations | Configure per-session validation rules the server will apply to subsequent calls in the same session (e.g., reject rows missing required columns). Stateful β affects this session only. |
| Tool | What it does |
|---|---|
xlsx_filter | Filter rows by predicate (column op value). Returns matched rows with optional projection. |
xlsx_aggregate | Group-by + aggregate (sum / count / mean / min / max / median / std). |
xlsx_sort | Multi-column sort with ascending / descending per column. |
xlsx_value_counts | Frequency table for a column (pandas .value_counts()). |
xlsx_pivot | Compute a fresh pivot table from raw data β pandas pivot_table() shape. |
xlsx_eval | Evaluate freeform formulas or recompute cell refs with our own recalc engine β no third-party formula engine. A formula using a function we haven't implemented yet returns an honest "not supported yet" error, never a wrong value. |
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/xlsx-for-ai)<a href="https://allmcps.com/mcp/xlsx-for-ai"><img src="https://allmcps.com/api/badge/xlsx-for-ai?style=directory" alt="Xlsx For AI on AllMCPs" /></a>