excel-normalizer
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
English | 简体中文
📊 Excel Semantic Normalizer
Any Excel, any headers, any column order → canonical fields → Canonical JSON → template export
Maps columns by meaning, not position. Hybrid retrieval, LLM adjudication, template export, and a human-feedback loop — with graceful offline fallback.

✨ Why this exists
Procurement / supply-chain spreadsheets in the wild use whatever headers each vendor likes: 品名 / 货物名称 / Product / Name all mean the same thing, and column order changes per file. This service parses any .xlsx, resolves each column to one of 19 canonical fields (product, price, supplier, material, …), and outputs clean, typed, validated Canonical JSON — plus it can render results back into your own Excel templates.
Related MCP server: Excel MCP Server
🚀 Quick start
Requirements: Python ≥ 3.10. API keys optional — the service runs fully offline.
git clone <repo-url>
cd excel-normalizer
pip install -r requirements.txt # or: pip install -e ".[dev]"
cp .env.example .env # optional: add API keys for higher accuracy
uvicorn app.main:app --reload --port 8000Then:
Interactive API docs: http://127.0.0.1:8000/docs
Health check: http://127.0.0.1:8000/health
Live dashboard: http://127.0.0.1:8000/dashboard
One-call example
curl -X POST "http://127.0.0.1:8000/v1/table/normalize" \
-F "file=@tests/sample_采购明细.xlsx"import requests
resp = requests.post(
"http://127.0.0.1:8000/v1/table/normalize",
files={"file": open("tests/sample_采购明细.xlsx", "rb")},
)
data = resp.json()
# data["columns"] → per-column canonical field mapping + confidence
# data["records"] → normalized, typed records with _meta.issues traceability🧭 How it works
Phase | What it does | Status |
P1 Rule engine | Header exact/fuzzy alias matching + Hungarian assignment + row alignment + type coercion | ✅ |
P2 Hybrid retrieval | Dense + BM25 + rule recall → RRF fusion → reranker (remote bge-m3 or local fallback) | ✅ |
P3 LLM adjudication | Strict-JSON LLM verdict on low-confidence columns, with conservative overturn guard | ✅ |
P4 Template export | Parse | ✅ |
P5 Feedback loop | Human corrections → SQLite → auto-reflow into knowledge base with regression gate + auto-rollback | ✅ |
MCP server | 9 tools for Claude / Cursor / Windsurf integration | ✅ |
Accuracy (130 unseen-header eval set, anti-cheat verified zero overlap): offline 96.2% → remote reranker 96.9% → with LLM adjudication 98.5%.
Graceful degradation: no API keys → local char-ngram + rapidfuzz. Keys configured → remote embeddings/rerank with retry-then-fallback. LLM never overrides a confident mapping unless strictly more confident.
🗂 Canonical fields (19)
product_name* · origin · price · quantity · spec · delivery_date · supplier · sku · unit · amount · material · weight · tax_rate · delivery_location · payment_method · remark · freight · vessel · warehouse
* required. Full dictionary with 500+ aliases: docs/SCHEMA_DICTIONARY.md
🔌 API overview
Group | Endpoints |
Normalize |
|
Schema |
|
Export |
|
Feedback |
|
Observability |
|
Rules |
|
Full examples: docs/USAGE.md (Chinese).
🧪 Testing & evaluation
pytest tests/ -v # 146 tests, fully offline
pytest tests/eval/test_p2_accuracy.py # regression gate: ≥85% + anti-cheat
python -m tests.eval.run_p2_eval # per-field accuracy report
python -m tests.eval.kb_expand_llm --dry-run --llm # LLM alias expansion with 4-gate safety🐳 Docker
docker compose up --build🤝 Contributing
PRs welcome. Requirements: tests for new features, full pytest green, and knowledge-base additions must pass the anti-cheat (zero eval overlap) + no-accuracy-regression gates.
Fork → branch (
feat/xxx) → commit → PR
📄 License
📚 More
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
Let AI agents read, check and edit Excel models. Open a workbook or drop in one MCP config. Either way: typed cells, a formula dependency graph, and a verification certificate. Deterministic — no OCR, no model guessing at your numbers.
Read-only MCP over your Excel or Airtable plus the PDFs beside it, joined as one relational dataset.
41Standardize, reshape, and normalize messy data — CSV, Excel, Parquet, S3, databases.
Convert PDF, Word, Excel, PowerPoint, e-mails and web pages to clean Markdown for LLMs.
Related MCP Servers
- AlicenseBqualityDmaintenanceMCP server for semantic spreadsheet operations that lets LLMs create and edit Excel workbooks by describing spreadsheet intent.42MIT
- AlicenseBqualityCmaintenanceEnables LLMs to work with Excel and CSV files through structured tools for workbook operations, formatting, charts, ETL, analysis, and more.695MIT
- FlicenseNot gradedqualityCmaintenanceEnables reading, normalizing, validating, merging, and exporting data from Excel, CSV, JSON, and SQLite sources into a unified schema, with tools exposed via FastMCP.1-
- FlicenseNot gradedqualityCmaintenanceExposes Excel operations (open/close files, read/write cells, create sheets, apply formulas, and run existing VBA macros by name) to AI agents like Claude Desktop or Claude Code via MCP.-