Skip to main content
GoldenMatch provides an MCP (Model Context Protocol) server for integration with Claude Desktop, Claude Code, and other MCP-compatible AI assistants. 82 tools total, spanning agent-level tools for autonomous ER, data tools for inspection and management, config-suggestion and PPRL tools, Learning Memory tools for persisting steward decisions, and Identity Graph tools.
Looking for AI-to-AI autonomy? See the ER Agent (A2A) page for agent framework integration (LangChain, CrewAI, AutoGen).

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 your claude_desktop_config.json:
Or browse on Smithery: https://smithery.ai/servers/benzsevern/goldenmatch

Using local files with the remote server

The hosted server resolves file_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, …) accepts file_content as an alternative to file_path. Send it base64-encoded (default), or set encoding: "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 that path as file_path to analyze_data, agent_deduplicate, etc.
Uploads are ephemeral scratch: capped at 64 MB (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 is 0.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, set GOLDENMATCH_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.
Unset (the default) means no containment — any path accessible to the server process is valid. This is the correct default for local stdio usage (Claude Desktop). See Configuration for the full variable reference. Or add to your Claude Desktop configuration (claude_desktop_config.json):
With a config file:

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 to dedupe (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 to match (the TypeScript server’s name for this operation).

explain_match

Explain why two specific records were matched or not matched. Also answers to explain_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.
Run privacy-preserving record linkage.

scan_quality

Scan data for quality issues (encoding errors, Unicode problems, format violations) without applying fixes. Requires pip 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. Requires pip 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 survivorship field_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.
In addition, 18 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). 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.”
The host LLM calls 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:
  1. Loads data from the specified file(s)
  2. Loads or auto-generates a matching configuration
  3. Runs the full matching pipeline
  4. Caches results in memory
  5. Exposes tools via the MCP protocol over stdio
The server uses the 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: Uses get_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:
Auto-config detects column types, assigns appropriate scorers, and picks a blocking strategy. The suggest_config tool can then help refine the auto-generated config based on observed results.

See also