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.More base tools (introspection, scoring, I/O)
Beyond the sections above, the base surface exposes these tools. They round out the 39 base tools and are mostly leaf primitives an agent composes.Document extraction tools
Two tools extract structured records from unstructured documents (PDF / image). See Documents.
In addition, 19 agent-level tools are available for autonomous operation (analyze_data, auto_configure, controller_telemetry, agent_deduplicate, agent_match_sources, agent_explain_pair, agent_explain_cluster, agent_review_queue, agent_approve_reject, agent_compare_strategies, suggest_pprl, scan_quality, fix_quality, run_transforms, sensitivity, incremental, certify_recall, retrieve_similar, upload_dataset). See ER Agent for details.
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 85 distinct tools reconcile as: 19 agent-level + 7 Learning Memory + 15 Identity Graph + 3 routing + 39 base data/inspection + 2 document-extraction 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 90. 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.