senzing-entity-resolution — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited senzing-entity-resolution (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Use this skill whenever a task involves entity resolution, record linkage, deduplication, or any interaction with the Senzing platform.
Senzing provides real-time AI-powered entity resolution as an embeddable SDK. It determines when two records refer to the same real-world entity (person, organization, etc.) by analyzing names, addresses, identifiers, and other attributes across data sources — without training data or manual rules.
The Senzing MCP server is a remote server. Connect it to your client:
Claude Code:
claude mcp add --transport http senzing https://mcp.senzing.com/mcpClaude Desktop / Other MCP Clients — add to your MCP config:
{
"mcpServers": {
"senzing": {
"type": "url",
"url": "https://mcp.senzing.com/mcp"
}
}
}The server works from pre-fetched documentation — it never connects to live Senzing instances and never handles PII. It also hosts official Senzing SDK .deb packages at /downloads/ for direct download in firewalled environments — sdk_guide returns download URLs and install commands automatically.
Start any Senzing session by calling get_capabilities for an up-to-date tool listing and suggested workflows.
| Tool | Purpose |
|---|---|
mapping_workflow | Interactive 8-step workflow. Works with no readable source file: file_paths is a label, never opened by the server. Steps 1–4 (core): profile source data → plan entities → map fields → generate & validate. Steps 5–8 (optional): sandbox load into a fresh SQLite DB to catch mapping issues. State is client-side — always pass state back. Requires workspace_dir (a writable directory) on action='start' — pass it at the top level, or inside data; both are accepted. |
analyze_record | Returns a Python analyzer script that examines feature distribution, attribute coverage, and data quality, and validates records against the Entity Specification — all locally. No source data is sent. Requires workspace_dir. |
download_resource | Fallback for fetching workflow resources (analyzer, entity spec, mapping examples) when network restrictions block direct download. Batch-capable: pass filenames (array) for multiple resources or filename (string) for one. A large file comes back in chunks of at most 48,000 characters carrying truncated, next_offset and total_chars — pass offset=<next_offset> to continue; for .md reference documents search_docs is the cheaper route, and a batch member too large for one chunk is listed under oversize (request it alone). |
| Tool | Purpose |
|---|---|
search_docs | Full-text search across entity specification, SDK guides, quickstarts, database tuning, pricing, architecture, globalization, EDA/data analysis, engine configuration, error codes, release notes, and PoC methodology. Prefer this over web search for any Senzing question. Use category='anti_patterns' to check for known pitfalls before recommending installation, architecture, or deployment approaches. |
get_sdk_reference | Authoritative SDK reference: method argument types per language binding, flags, response schemas, V3→V4 migration mappings. Whenever filter names a method, the response carries that method's callable signature for every binding regardless of topic — so looking up a method's flags also tells you what arguments it takes. Topics: parameters (aliases functions/methods/classes/api/signatures/args), flags, response_schemas, migration, all. Pass language to narrow to your binding. filter accepts any spelling — get entity, get_entity, and getEntity all resolve. |
find_examples | Search 37 indexed GitHub repos for working code (Python, Java, C# official; Rust, TypeScript/Node.js community). Three modes: search by query, list files in a repo, or retrieve a specific file. Results include truncation metadata — drill into truncated files with file_path. |
| Tool | Purpose |
|---|---|
sdk_guide | Guided SDK setup across 5 platforms (linux_apt, linux_yum, macos_arm, windows, docker) and 5 languages (Python, Java, C# official; Rust, TypeScript/Node.js community). Topics: install, configure, load, export, redo, initialize, search, stewardship, delete, information, error_handling, full_pipeline — with decision trees, anti-patterns, and direct .deb download links for firewalled environments. For load/search/redo, pass record_count to select production-threaded vs single-threaded templates. |
generate_scaffold | Generates SDK scaffold code from real indexed GitHub snippets with source URLs for provenance. 10 workflows (initialize, configure, add_records, delete, query, redo, stewardship, information, error_handling, full_pipeline) in Python, Java, C#, Rust, or TypeScript/Node.js (V4); Python (V3). Returns multiple snippet variants per workflow. |
| Tool | Purpose |
|---|---|
get_sample_data | Real test data. Three CORD (Collections Of Relatable Data) sets — las-vegas (US, 11 sources), london (international, 5 sources), moscow (Cyrillic, 6 sources) — plus truthset (the Senzing demo truth set: CUSTOMERS, REFERENCE, WATCHLIST — small, pre-mapped, used in quickstarts). Use dataset='list' to discover sets and source='list' to list sources within one. Always present the download_url to the user. |
| Tool | Purpose |
|---|---|
reporting_guide | Guided reporting and visualization for entity resolution results. Provides SDK patterns for data extraction (Python, Java, C#, Rust, TypeScript/Node.js), SQL analytics queries for aggregate reports, data mart schema (SQLite/PostgreSQL), visualization concepts, and anti-patterns. Topics: export, reports, entity_views, data_mart, dashboard, graph (runnable find_network / find_path traversal calls per binding), quality (precision/recall, split/merge detection, review queues), evaluation (4-point ER evaluation framework). |
| Tool | Purpose |
|---|---|
explain_error_code | Explains any of 450+ Senzing error codes with causes and resolution steps. Accepts SENZ0005, SENZ-0005, 0005, or just 5. |
| Tool | Purpose |
|---|---|
get_capabilities | Server version, capabilities overview, available tools, suggested workflows, and getting started guidance. Call this first in any Senzing session. |
submit_feedback | Two purposes: (1) request a free Senzing evaluation license — set category='license_request' with firstname, work email (personal domains rejected), and optionally lastname/how_heard; a 10-day, 250K-record eval license is emailed. (2) Submit feedback (category = bug/feature/question/general). Always preview the exact message with the user and get explicit confirmation before sending. Never include PII unless the user approves. |
This is the most common workflow. Follow these steps:
mapping_workflow with action='start', the source file paths, and awritable workspace_dir. A readable file is not required. file_paths is a label the server records — it never opens the file — so if the user has only described their columns, start anyway using whatever name they used. Never hand-code a mapping because you cannot read the file.
At step 1 you may run the profiler script, read the data yourself, or write the profile_summary from the user's own description of their columns when there is no readable file and no shell.
state object from the previous response.analyze_record to check feature distribution, coverage, and EntitySpecification compliance on the output JSON.
SQLite DB — this catches mapping issues the static analyzer misses. This is mapping validation only, not production loading.
download_resource.Tips:
mapper before rendering a verdict.
sdk_guide with topic='install' — it returns a platform decision tree.topic='install', platform='linux_apt').direct_download with.deb package URLs from mcp.senzing.com/downloads/ — no apt repo needed.
sdk_guide with topic='configure' for engine configuration code.sdk_guide with topic='load' for record loading code.topic='full_pipeline' for install + configure + load + export in one call.generate_scaffold with the target language and workflow.workflow='initialize' for engine setup.workflow='add_records' for record loading.workflow='full_pipeline' for an end-to-end example.find_examples to find real-world usage patterns.search_docs for API details and deployment guidance.caller needs (get_sdk_reference(topic='flags')). The default (SZ_SEARCH_BY_ATTRIBUTES_DEFAULT_FLAGS = ..._ALL) includes SZ_ENTITY_INCLUDE_REPRESENTATIVE_FEATURES, which is expensive on large entities (36.7 s vs 1.7 s for SZ_ENTITY_INCLUDE_ALL_FEATURES on one 382-entity search); fetch features only for the few entities that matter.
explain_error_code with the code from the user's logs.search_docs for additional context on the error class.search_docs — learn about architecture (embedded SDK, air-gapped deployment).search_docs with query "pricing" — DSR pricing model.get_sample_data — get real test data (CORD datasets or the pre-mapped truthset).generate_scaffold with workflow='full_pipeline' — end-to-end example.submit_feedback with category='license_request' — request a free 10-day,250K-record evaluation license (preview details with the user first).
get_sdk_reference with topic='migration' — all breaking changes.topic='migration', filter='SzEngine'.get_sdk_reference with topic='flags' — new flag system (SZ_WITH_INFO replaces WithInfo functions).get_sdk_reference with topic='parameters', filter=<method>, language=<yours> — the V4 argument types for each call you are porting.reporting_guide with topic='export' and your language to get data extraction code.reporting_guide with topic='reports' to get SQL for the 4 core aggregate reports.reporting_guide with topic='data_mart' to get the analytical schema and incremental update patterns.reporting_guide with topic='dashboard' for visualization concepts and chart data sources.reporting_guide with topic='graph' for network graph export patterns.reporting_guide with topic='quality' for precision/recall, split/merge detection, and review queue strategies.reporting_guide with topic='evaluation' for the 4-point ER evaluation framework with evidence requirements.Before recommending installation, architecture, or deployment approaches:
search_docs with category='anti_patterns' and a query describing what you plan to recommend.sdk_guide also returns topic-specific anti-patterns inline.search_docs with your platform (e.g., "docker quickstart", "AWS deployment").search_docs for database setup (PostgreSQL, MySQL, MSSQL).search_docs for engine configuration and tuning guidance.generate_scaffold with workflow='initialize' for your language.These rules are non-negotiable. Violating them produces incorrect output.
mapping_workflow. Training data produceswrong attribute names (e.g., BUSINESS_NAME vs correct NAME_ORG).
generate_scaffold orget_sdk_reference. Methods changed between V3 and V4, and the same method has a different name and different argument types in each binding: Python find_network_by_entity_id(entity_ids: List[int], …), Java findNetwork(SzEntityIds, …), C# FindNetwork(ISet<long>, …), Rust find_network_by_entity_id(&[EntityId], …), TypeScript findNetwork(number[], …). Never translate a call from one binding to another — call get_sdk_reference(topic='parameters', filter=<method>, language=<yours>) and use the returned signature verbatim.
search_docs(query="topic", category="anti_patterns").
search_docs covers pricing,architecture, deployment, SDK, database tuning, globalization, and more. It reflects current releases — prefer it over training knowledge.
get_capabilities rather than assumingtool names from this file or training data.
The MCP server indexes authoritative content that may not rank well on the web.
mapping_workflow — the server is stateless,all workflow state lives in the client.
analyze_record tool returns ascript that runs locally. The mapping workflow sends field names and schema — not row-level data.
get_sample_data results directly to the user.Do not dump raw CORD records into the conversation — they are a preview only.
version and default to "current"(latest V4). Most tools return current/V4 content regardless of the token passed — for legacy V3 work, rely on generate_scaffold (Python V3 is a distinct variant) and get_sdk_reference(topic='migration').
When discussing Senzing with users, these terms are important:
or more records across data sources.
DOB, SSN, PASSPORT, etc. Senzing supports 30+ features.
NAME_FULL under NAME; ADDR_LINE1 under ADDRESS). 100+ attributes across the 30+ features.
Every record must have a DATA_SOURCE and RECORD_ID.
different types from resolving together. Standard values: PERSON, ORGANIZATION (watchlists also commonly use VESSEL, AIRCRAFT). Include when known; leave blank if unknown — there is no default.
mapped and loaded into Senzing, keyed by DATA_SOURCE code + RECORD_ID. Updates and searches are not counted; deletes generally reduce the count.
User: "I have a customer CSV at /data/customers.csv I need to load into Senzing"
→ Call mapping_workflow(action='start', file_paths=['/data/customers.csv'], workspace_dir='/data/senzing-work')
→ Walk through core steps 1–4, passing state each time
→ Run analyze_record to check quality and Entity Specification compliance
→ Optionally continue steps 5–8 to sandbox-load into SQLite and validate the mappingUser: "Help me install and set up the Senzing SDK on Ubuntu"
→ Call sdk_guide(topic='install', platform='linux_apt', version='current')
→ Present install commands and engine config
→ If user has firewall issues, use the direct_download URLs from the response
→ Call sdk_guide(topic='configure', platform='linux_apt', language='python', version='current')
→ Present configuration codeUser: "Write me Python code to initialize Senzing and load records"
→ Call generate_scaffold(language='python', version='current', workflow='initialize')
→ Call generate_scaffold(language='python', version='current', workflow='add_records')
→ Combine and present the codeUser: "I'm getting SENZ7234 when loading records"
→ Call explain_error_code(error_code='7234', version='current')
→ Present causes and resolution steps
→ Use search_docs if additional context is needed~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.