
You already know the pain of deduping customer lists or merging datasets from three acquisitions. This server exposes the GoldenMatch entity resolution engine over MCP, giving Claude direct access to fuzzy matching, clustering, and survivorship rules without you writing glue code. It's part of a larger data quality suite (GoldenCheck profiles, GoldenFlow standardizes, GoldenMatch dedupes, GoldenPipe orchestrates), but the MCP layer focuses on the dedupe step. Expect tools for configuring match thresholds, inspecting candidate pairs, and applying Learning Memory so corrections stick across runs. The underlying engine ships 97.2% F1 on DBLP-ACM out of the box and handles 5M records on a single node. Reach for it when you need Claude to reason about record linkage interactively instead of exporting to a notebook.
$ npx add-mcp https://goldenmatch-mcp-production.up.railway.app/mcp/ --name goldenmatchRun in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.
Review the command, arguments and environment values before installing. MCP servers run with your local permissions.
Claude Code
$ claude mcp add --transport http goldenmatch https://goldenmatch-mcp-production.up.railway.app/mcp/Run in your terminal. Add --scope user to make it available in every project.
Verified live against the running server on Jun 10, 2026.
analyze_dataProfile data, detect domain, recommend ER strategy1 paramsProfile data, detect domain, recommend ER strategy
file_path*stringauto_configureRun AutoConfigController on a CSV; return the committed GoldenMatchConfig (incl. negative_evidence / Path Y when chosen) plus telemetry — stop_reason, health, decision trace, indicator column priors. Programmatic equivalent of `goldenmatch autoconfig`.2 paramsRun AutoConfigController on a CSV; return the committed GoldenMatchConfig (incl. negative_evidence / Path Y when chosen) plus telemetry — stop_reason, health, decision trace, indicator column priors. Programmatic equivalent of `goldenmatch autoconfig`.
constraintsobjectfile_path*stringcontroller_telemetryReturn the AutoConfigController telemetry from the most recent `auto_configure` or `agent_deduplicate` call in this MCP session. Same JSON shape as the web /api/v1/controller/telemetry endpoint.Return the AutoConfigController telemetry from the most recent `auto_configure` or `agent_deduplicate` call in this MCP session. Same JSON shape as the web /api/v1/controller/telemetry endpoint.
No parameters. Call it with no arguments.
agent_deduplicateRun full ER pipeline with confidence gating and reasoning2 paramsRun full ER pipeline with confidence gating and reasoning
configobjectfile_path*stringagent_match_sourcesMatch two files with intelligent strategy selection3 paramsMatch two files with intelligent strategy selection
configobjectfile_a*stringfile_b*stringagent_explain_pairNatural language explanation for a record pair4 paramsNatural language explanation for a record pair
exactarrayfuzzyobjectrecord_a*objectrecord_b*objectagent_explain_clusterExplain why records are in the same cluster1 paramsExplain why records are in the same cluster
cluster_id*integeragent_review_queueGet borderline pairs awaiting approval1 paramsGet borderline pairs awaiting approval
job_name*stringagent_approve_rejectApprove or reject a review queue pair6 paramsApprove or reject a review queue pair
decided_by*stringdecision*stringid_a*integerid_b*integerjob_name*stringreasonstringagent_compare_strategiesCompare ER strategies on your data2 paramsCompare ER strategies on your data
file_path*stringground_truthstringsuggest_pprlCheck if data needs privacy-preserving matching1 paramsCheck if data needs privacy-preserving matching
file_path*stringscan_qualityRun GoldenCheck data quality scan on a CSV file. Returns issues found (encoding errors, Unicode problems, format violations) without applying fixes. Requires goldencheck: pip install goldenmatch[quality]2 paramsRun GoldenCheck data quality scan on a CSV file. Returns issues found (encoding errors, Unicode problems, format violations) without applying fixes. Requires goldencheck: pip install goldenmatch[quality]
domainstringfile_path*stringfix_qualityRun GoldenCheck scan and apply fixes to a CSV file. Returns the fixed data summary and a manifest of all fixes applied. Requires goldencheck: pip install goldenmatch[quality]4 paramsRun GoldenCheck scan and apply fixes to a CSV file. Returns the fixed data summary and a manifest of all fixes applied. Requires goldencheck: pip install goldenmatch[quality]
domainstringfile_path*stringfix_modestringsafe · moderatedefault: safeoutput_pathstringrun_transformsRun GoldenFlow data transforms on a CSV file. Normalizes phone numbers (E.164), dates (ISO), categorical spelling, and Unicode issues. Returns a manifest of transforms applied. Requires goldenflow: pip install goldenmatch[transform]2 paramsRun GoldenFlow data transforms on a CSV file. Normalizes phone numbers (E.164), dates (ISO), categorical spelling, and Unicode issues. Returns a manifest of transforms applied. Requires goldenflow: pip install goldenmatch[transform]
file_path*stringoutput_pathstringlist_correctionsList stored Learning Memory corrections, optionally filtered by dataset. Returns id_a, id_b, decision, source, trust, reason, matchkey_name, dataset, original_score, created_at.2 paramsList stored Learning Memory corrections, optionally filtered by dataset. Returns id_a, id_b, decision, source, trust, reason, matchkey_name, dataset, original_score, created_at.
datasetstringpathstringadd_correctionAdd a pair correction to Learning Memory. Source is set to 'agent' with trust=0.5 (lower than human steward decisions which are 1.0). Pair (id_a, id_b) is canonicalized to (min, max) before storage.7 paramsAdd a pair correction to Learning Memory. Source is set to 'agent' with trust=0.5 (lower than human steward decisions which are 1.0). Pair (id_a, id_b) is canonicalized to (min, max) before storage.
dataset*stringdecision*stringapprove · rejectid_a*integerid_b*integermatchkey_namestringpathstringreasonstringlearn_thresholdsForce a MemoryLearner pass over accumulated corrections. Returns the list of LearnedAdjustments produced (matchkey_name, threshold, sample_size, learned_at). Requires >= 10 corrections per matchkey before threshold tuning fires; otherwise returns an empty list.2 paramsForce a MemoryLearner pass over accumulated corrections. Returns the list of LearnedAdjustments produced (matchkey_name, threshold, sample_size, learned_at). Requires >= 10 corrections per matchkey before threshold tuning fires; otherwise returns an empty list.
matchkey_namestringpathstringmemory_statsReturn Learning Memory status: total correction count, last learn time, and current learned adjustments. Cheap; safe for status checks.1 paramsReturn Learning Memory status: total correction count, last learn time, and current learned adjustments. Cheap; safe for status checks.
pathstringmemory_exportReturn all corrections as a list of dicts (CSV-shaped). Caller is responsible for writing the file. Optionally filter by dataset.2 paramsReturn all corrections as a list of dicts (CSV-shaped). Caller is responsible for writing the file. Optionally filter by dataset.
datasetstringpathstringidentity_resolveResolve a record_id to its durable identity. Returns the full identity view (members, evidence edges, recent events) or null when no identity exists for that record.2 paramsResolve a record_id to its durable identity. Returns the full identity view (members, evidence edges, recent events) or null when no identity exists for that record.
pathstringrecord_id*stringidentity_listList identities, optionally filtered by dataset/status.5 paramsList identities, optionally filtered by dataset/status.
datasetstringlimitintegeroffsetintegerpathstringstatusstringidentity_historyReturn the temporal event log for an identity.3 paramsReturn the temporal event log for an identity.
entity_id*stringlimitintegerpathstringidentity_conflictsList evidence edges marked `conflicts_with`.2 paramsList evidence edges marked `conflicts_with`.
datasetstringpathstringidentity_mergeManually merge two identities. All records from `absorb_entity_id` are reassigned to `keep_entity_id`.4 paramsManually merge two identities. All records from `absorb_entity_id` are reassigned to `keep_entity_id`.
absorb_entity_id*stringkeep_entity_id*stringpathstringreasonstringidentity_splitSplit a subset of records off an identity into a brand-new identity. The original keeps the remaining records.4 paramsSplit a subset of records off an identity into a brand-new identity. The original keeps the remaining records.
entity_id*stringpathstringreasonstringrecord_ids*arrayget_statsGet dataset statistics: record count, cluster count, match rate, cluster sizes.Get dataset statistics: record count, cluster count, match rate, cluster sizes.
No parameters. Call it with no arguments.
find_duplicatesFind duplicate matches for a record. Provide field values to search against the loaded dataset.2 paramsFind duplicate matches for a record. Provide field values to search against the loaded dataset.
record*objecttop_kintegerexplain_matchExplain why two records match or don't match. Shows per-field score breakdown.2 paramsExplain why two records match or don't match. Shows per-field score breakdown.
record_a*objectrecord_b*objectlist_clustersList duplicate clusters found in the dataset. Returns cluster IDs, sizes, and member counts.2 paramsList duplicate clusters found in the dataset. Returns cluster IDs, sizes, and member counts.
limitintegermin_sizeintegerget_clusterGet details of a specific cluster: all member records and their field values.1 paramsGet details of a specific cluster: all member records and their field values.
cluster_id*integerget_golden_recordGet the merged golden (canonical) record for a cluster.1 paramsGet the merged golden (canonical) record for a cluster.
cluster_id*integermatch_recordMatch a single record against the loaded dataset in real-time. Paste a record's fields and instantly see if it matches any existing record. Uses the configured matchkeys, scorers, and thresholds. Example: {"name": "John Smith", "email": "john@test.com", "zip": "10001"}3 paramsMatch a single record against the loaded dataset in real-time. Paste a record's fields and instantly see if it matches any existing record. Uses the configured matchkeys, scorers, and thresholds. Example: {"name": "John Smith", "email": "john@test.com", "zip": "10001"}
record*objectthresholdnumbertop_kintegerunmerge_recordRemove a record from its cluster. The record becomes a singleton. Remaining cluster members are re-clustered using stored pair scores. Use this to fix bad merges.1 paramsRemove a record from its cluster. The record becomes a singleton. Remaining cluster members are re-clustered using stored pair scores. Use this to fix bad merges.
record_id*integershatter_clusterBreak an entire cluster into individual records. All members become singletons. Use when a cluster is completely wrong.1 paramsBreak an entire cluster into individual records. All members become singletons. Use when a cluster is completely wrong.
cluster_id*integersuggest_configAnalyze bad merges and suggest config changes. Provide examples of incorrect merges (pairs that should NOT have matched) and GoldenMatch will identify which fields/thresholds to tighten. Example: [{"record_a": {...}, "record_b": {...}, "reason": "different people"}]1 paramsAnalyze bad merges and suggest config changes. Provide examples of incorrect merges (pairs that should NOT have matched) and GoldenMatch will identify which fields/thresholds to tighten. Example: [{"record_a": {...}, "record_b": {...}, "reason": "different people"}]
bad_merges*arrayprofile_dataGet data quality profile: column types, null rates, unique counts, sample values.Get data quality profile: column types, null rates, unique counts, sample values.
No parameters. Call it with no arguments.
export_resultsExport matching results to a file (CSV or JSON).2 paramsExport matching results to a file (CSV or JSON).
formatstringcsv · jsondefault: csvoutput_path*stringlist_domainsList available domain extraction rulebooks (built-in + user-defined).List available domain extraction rulebooks (built-in + user-defined).
No parameters. Call it with no arguments.
create_domainCreate a custom domain extraction rulebook. Define patterns for a specific data domain (medical devices, automotive parts, real estate, etc.).7 paramsCreate a custom domain extraction rulebook. Define patterns for a specific data domain (medical devices, automotive parts, real estate, etc.).
attribute_patternsobjectbrand_patternsarrayidentifier_patternsobjectname*stringscopestringlocal · globaldefault: localsignals*arraystop_wordsarraytest_domainTest a domain extraction rulebook against sample records. Shows what features would be extracted from the loaded data.2 paramsTest a domain extraction rulebook against sample records. Shows what features would be extracted from the loaded data.
domain_name*stringsample_sizeintegerpprl_auto_configAnalyze the loaded dataset and recommend optimal PPRL (privacy-preserving record linkage) configuration. Returns recommended fields, bloom filter parameters, threshold, and explanation.2 paramsAnalyze the loaded dataset and recommend optimal PPRL (privacy-preserving record linkage) configuration. Returns recommended fields, bloom filter parameters, threshold, and explanation.
security_levelstringstandard · high · paranoiddefault: highuse_llmbooleanpprl_linkRun privacy-preserving record linkage between two parties' data. Computes bloom filters, matches records without sharing raw data. Specify fields, threshold, and security level.5 paramsRun privacy-preserving record linkage between two parties' data. Computes bloom filters, matches records without sharing raw data. Specify fields, threshold, and security level.
fields*arrayfile_a*stringfile_b*stringsecurity_levelstringstandard · high · paranoiddefault: highthresholdnumberSponsors
Find the rows in your data that are the same person, company or product. No rules to write, no labelled pairs, no model to train.
Zero-config entity resolution for Python. Point it at a CSV or a table: it chooses how to match, shows you what it chose, and merges each group of duplicates into one golden record.
goldenmatch