Map messy columns to a known schema β 7 scorers, domain dictionaries, F1 0.84. Zero config.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Moved. This repo has moved into the
benzsevern/goldenmatchmonorepo atpackages/python/infermap (and packages/typescript/infermap)/. This repo is archived; new development happens in the monorepo.
Inference-driven schema mapping engine.
Map messy source columns to a known target schema β accurately, explainably, with zero config.
Built by Ben Severn.
π Wiki Β· π Docs Β· π§ͺ Examples Β· π¬ Discussions Β· π Issues
infermap is a schema-mapping engine. Give it any two field collections (CSVs, DataFrames, database tables, in-memory records) and it figures out which source field corresponds to which target field, with confidence scores and human-readable reasoning. Available as a Python package on PyPI and a TypeScript package on npm, with mapping decisions verified bit-for-bit by a shared golden-test parity suite.
Optional database extras:
Zero runtime dependencies in the core entrypoint. Compatible with Next.js Server Components, Route Handlers, Server Actions, and the Edge Runtime out of the box. See the package README for the full reference.
For Next.js, drop it directly into a Route Handler β works on Edge Runtime with zero config:
Each field pair runs through a pipeline of 7 scorers. Each scorer returns a score in [0.0, 1.0] or abstains (None/null). The engine combines scores via weighted average (requiring at least 2 contributors), then uses the Hungarian algorithm for optimal one-to-one assignment.
| Scorer | Weight | What it detects |
|---|---|---|
| ExactScorer | 1.0 | Case-insensitive exact name match |
| AliasScorer | 0.95 | Known field aliases (fname β first_name, tel β phone) + domain dictionaries |
| InitialismScorer | 0.75 | Abbreviation-style names (assay_id β ASSI, confidence_score β CONSC) |
| PatternTypeScorer | 0.7 | Semantic type from sample values β email, date_iso, phone, uuid, url, zip, currency |
| ProfileScorer | 0.5 | Statistical profile similarity β dtype, null rate, unique rate, length, cardinality |
| FuzzyNameScorer | 0.4 | Jaro-Winkler similarity on normalized field names (with common-prefix canonicalization) |
| LLMScorer | 0.8 | Pluggable LLM-backed scorer (stubbed by default) |
The engine also applies common-prefix canonicalization β automatically stripping schema-wide prefixes like prospect_ so that City vs prospect_City is compared as City vs City. And optional confidence calibration transforms raw scores into calibrated probabilities post-assignment (ECE from 0.46 to 0.005 on real-world data).
Read the full architecture β
| Python | TypeScript | |
|---|---|---|
| 7 built-in scorers | β | β |
| Hungarian assignment | β (scipy) | β (vendored) |
| Custom scorers | @infermap.scorer | defineScorer() |
| Domain dictionaries | β (YAML) | β (inlined) |
| Confidence calibration | β (Identity/Isotonic/Platt) | β |
| Score matrix inspection | β | β |
| In-memory data | Polars, Pandas, list[dict] | Array<Record> |
| File providers | CSV, Parquet, XLSX | CSV, JSON |
| Schema definition files | YAML + JSON | JSON |
| Database providers | SQLite, Postgres, DuckDB | SQLite, Postgres, DuckDB |
| Engine config | YAML | JSON |
| Saved mapping format | YAML | JSON |
| CLI | β (Typer) | β
(node:util) |
| Apply to DataFrame | β | β (CSV rewrite via CLI) |
| Edge-runtime compatible | β | β |
| Zero runtime deps | n/a | β |
| Accuracy benchmark | β (162 cases, F1 0.84) | β (parity within 0.0005) |
Full feature parity matrix β
| If you are⦠| Use |
|---|---|
| Building a Python data pipeline or notebook | Python |
| Building a Next.js app, Node service, or browser tool | TypeScript |
| Running mapping in a serverless edge function | TypeScript (zero Node built-ins) |
| Doing ad-hoc CSV exploration on the command line | Python CLI has more features; TS CLI is leaner |
| Both β Python backend + Next.js admin UI | Both β outputs are interoperable via the JSON config format |
+18.3pp F1 on real-world data from four compounding improvements:
New features:
MapEngine(domains=["healthcare"]) loads curated aliases for your domain. Ships: generic (default), healthcare, finance, ecommerce. See examples/09_domain_dictionaries.py.MapEngine(calibrator=cal) transforms raw scores into calibrated probabilities. Ships: IsotonicCalibrator, PlattCalibrator. Valentine ECE: 0.46 β 0.005. See examples/10_calibration.py.assay_id β ASSI). ChEMBL F1: 0.524 β 0.819.prospect_, assays_, etc. before fuzzy matching.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/infermap)<a href="https://allmcps.com/mcp/infermap"><img src="https://allmcps.com/api/badge/infermap?style=directory" alt="InferMap on AllMCPs" /></a>