excel-normalizer
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@excel-normalizerNormalize this Excel file with mixed headers into canonical JSON"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Standardize, reshape, and normalize messy data â CSV, Excel, Parquet, S3, databases.
An agent-first office suite Claude & ChatGPT read and write over one MCP URL.
- SnipgetOAuthai.snipget
300+ deterministic data utilities for AI agents: validate, normalize, parse, match, redact.
Generate PDFs from templates via AI chat. Works with Claude, ChatGPT, Cursor, and any MCP client.
Related MCP Servers
- AlicenseBqualityCmaintenanceMCP 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.694MIT

flexorch-mcpofficial
AlicenseAqualityAmaintenanceEnables Claude and other MCP-compatible agents to process documents, extract structured data, detect PII, and export LLM-ready datasets through natural language tool calls.81MIT- FlicenseNot gradedqualityBmaintenanceEnables reading, normalizing, validating, merging, and exporting data from Excel, CSV, JSON, and SQLite sources into a unified schema, with tools exposed via FastMCP.1-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/climik/excel-normalizer'
If you have feedback or need assistance with the MCP directory API, please join our Discord server