Remote vs. Local
Remote Server (no install required)
GoldenMatch is available as a hosted remote MCP server on Smithery. Connect from Claude Desktop, Claude Code, or any MCP client without installing anything locally. Add to yourclaude_desktop_config.json:
Using local files with the remote server
The hosted server resolvesfile_path on the server’s filesystem, so your local paths (C:\Users\..., /home/...) aren’t visible to it. Feed it a local file two ways, neither of which hosts your data anywhere:
-
Inline
file_content— every file-taking tool (analyze_data,auto_configure,agent_deduplicate,scan_quality,schema_match,pprl_link, …) acceptsfile_contentas an alternative tofile_path. Send it base64-encoded (default), or setencoding: "text"for raw text (e.g. CSV/JSON). The server writes it to a temp file and runs the tool on it. -
upload_dataset— upload the bytes once and reuse the returned server path across many calls:Pass thatpathasfile_pathtoanalyze_data,agent_deduplicate, etc.
GOLDENMATCH_MCP_MAX_UPLOAD_BYTES), reaped after 24 h (GOLDENMATCH_MCP_UPLOAD_TTL), and written under the server’s GOLDENMATCH_ALLOWED_ROOT so the path sandbox still applies. For datasets larger than the cap, pass a public http(s):// URL as file_path — the server reads those directly.
Local Server
Start the server
Authentication (HTTP transport)
The HTTP server is fail-closed: binding to a non-loopback host (the default is0.0.0.0) refuses to start unless GOLDENMATCH_MCP_TOKEN is set. When the
token is set, every request to /mcp must carry it as a bearer token. The
/.well-known/mcp/server-card.json healthcheck stays public.
Local development on loopback runs token-free:
goldenmatch mcp-serve --transport http --host 127.0.0.1. The stdio transport
(Claude Desktop) is local-only and never requires a token.Path sandbox
For deployed or shared MCP servers, setGOLDENMATCH_ALLOWED_ROOT to
restrict every user-supplied file path to a specific directory tree. Any
path that resolves outside that root returns {"error": "..."} from the
tool rather than raising an unhandled exception.
claude_desktop_config.json):
Tools
The MCP server exposes the following tools to Claude Desktop:get_stats
Get dataset statistics: record count, cluster count, match rate, cluster sizes.find_duplicates
Search for duplicate records matching a query. Also answers todedupe (the TypeScript server’s name for this operation).
get_cluster
Get details of a specific cluster including all member records and pair scores.match_record
Match a new record against the loaded dataset. Also answers tomatch (the TypeScript server’s name for this operation).
explain_match
Explain why two specific records were matched or not matched. Also answers toexplain_pair (the TypeScript server’s name for this operation).
unmerge_record
Remove a record from its cluster. Re-clusters the remaining members.suggest_config
Analyze bad merges, identify which fields caused false matches, and suggest threshold/weight changes.list_domains
List all available domain packs (built-in and custom).create_domain
Create a new custom domain pack.test_domain
Test a domain pack against sample data to verify extraction quality.pprl_auto_config
Analyze data and recommend optimal PPRL parameters.pprl_link
Run privacy-preserving record linkage.scan_quality
Scan data for quality issues (encoding errors, Unicode problems, format violations) without applying fixes. Requirespip install goldenmatch[quality].
fix_quality
Scan and apply data quality fixes (safe or moderate mode). Optionally saves the fixed CSV.run_transforms
Normalize phone numbers (E.164), dates (ISO), categorical spelling, and Unicode. Requirespip install goldenmatch[transform].
evaluate
Score the loaded run against ground-truth pairs: precision, recall, and F1.analyze_blocking
Diagnose blocking on the loaded dataset: ranked key candidates with block counts, max block size, candidate-pair totals, and estimated recall.compare_clusters
Compare two ER clustering outcomes without ground truth (CCMS): unchanged / merged / partitioned / overlapping, plus the Talburt-Wang Index. Takes two cluster JSON files.schema_match
Auto-map columns between two files with different schemas (synonym + name similarity), with a confidence score per mapping.lineage
Field-level provenance for the loaded run: the per-field score breakdown behind each scored pair, plus cluster id. When the run’s config uses survivorshipfield_groups, the result also includes a top-level golden_records section whose entries carry a groups array — recording which columns were promoted together, the winning source record, and the strategy used.
list_runs
List previous dedupe/match runs from the run log (for rollback).rollback
Undo a previous run by deleting its output files (looked up by run_id). Destructive.AutoConfigController telemetry (v1.7-v1.12)
auto_configure was rewired in PR #161 to invoke the v1.7+ AutoConfigController instead of the legacy select_strategy heuristic. It now returns:
agent_deduplicate and agent_match_sources both include a telemetry field in their result dict so the host LLM can see stop_reason, refit decisions, and Path Y negative-evidence without a second call.
The standalone controller_telemetry tool surfaces a per-session limitation note (MCP dispatch is stateless, so it can’t recall a prior call’s telemetry — use the inline telemetry from auto_configure / agent_deduplicate instead).
Learning Memory tools (v1.6.0)
Seven tools surface the persistent corrections store. See Learning Memory for the full feature.
Natural-language workflow:
“Show me uncertain pairs from the last goldenmatch run on customers.csv, then mark rows 17 and 23 as not-a-match because they have different EINs.”
list_corrections -> add_correction -> learn_thresholds.
Identity Graph tools (v2.0)
Fifteen tools expose the durable identity layer above run-local clusters. See Identity Graph for the full feature.Routing tools
Three tools plan and validate distributed execution routing for a run.Tool count breakdown
The 69 distinct tools reconcile as: 18 agent-level + 7 Learning Memory + 15 Identity Graph + 3 routing + 26 base data/inspection tools. The server additionally advertises 5 cross-language naming aliases —dedupe, match, explain_pair, profile, and explain_cluster — alternate names that match the TypeScript server’s tool names, so an agent trained against either server can call the other. They forward to the canonical handlers above (find_duplicates, match_record, explain_match, profile_data, agent_explain_cluster), bringing the advertised total to 74. The TypeScript server mirrors this: it also answers to the Python names (find_duplicates, match_record, explain_match, profile_data).
How it works
When the MCP server starts, it:- Loads data from the specified file(s)
- Loads or auto-generates a matching configuration
- Runs the full matching pipeline
- Caches results in memory
- Exposes tools via the MCP protocol over stdio
MatchEngine from goldenmatch.tui.engine (which has no Textual dependency) for matching operations.
Example conversation
With Claude Desktop connected to the GoldenMatch MCP server: You: “How many duplicates are in my customer data?” Claude: Usesget_stats tool. “Your dataset has 5,000 records with 847 duplicate clusters. The match rate is 12%, meaning about 600 records are duplicates.”
You: “Show me the biggest cluster”
Claude: Uses get_cluster tool. “Cluster 14 has 8 members. Here are the records: [table of members with field values and pairwise scores]”
You: “Record 215 doesn’t belong there, remove it”
Claude: Uses unmerge_record tool. “Done. Record 215 has been removed from cluster 14. The remaining 7 records have been re-clustered.”
You: “The name matching is too aggressive. What should I change?”
Claude: Uses suggest_config tool. “The jaro_winkler threshold for first_name is 0.80, which is catching partial matches like ‘John’ and ‘Jonathan’. I suggest raising it to 0.88 and adding a last_name exact match as a secondary check.”
Auto-config mode
If no config file is specified, the MCP server auto-configures matching rules:suggest_config tool can then help refine the auto-generated config based on observed results.