Skip to main content
Glama
This connector has been deprecated

Replaced by io.github.no-fait/infinite-audience

Match Records

match_records
Destructive

Perform real-time identity resolution on up to 100 records. Returns run_id, match_count, record_count, match_rate, and records[] — one output record per input record, matched or not (each with row_id, iag_person_id, match_level, match_type, match_confidence, enrichment fields, and the licensing labels below). iag_person_id is an org-scoped, non-reversible id: present on a real match, or a best-effort id derived from the row's own identity signals (or null) when unmatched — use match_count/record_count, not id-presence, to tell real matches from derived-only rows. Each record also carries resolution_action (resolved = organic PII match, refreshed = the row submitted a valid iag_person_id, unmatched = no real match, identity_unavailable = a previously valid id no longer resolves to deliverable data) and license_action (none, started, or renewed), plus license_expires_at (ISO-8601 or null) — these two fields are independent: a row can be resolution_action "resolved" and license_action "renewed" at once. The run_id can be passed immediately to get_match_run to retrieve or audit this call later. Matching consumes subscription capacity for real matches. Returned monetary consumption values are estimates in USD; final rated consumption may differ. A tier-01 Person ID from a prior real match or licensed audience delivery can go directly to Refresh; an audience-only ID has null match_level until a real match occurs. Include I in match_level for direct ID lookup, or omit the filter. Active identity licenses provide existing coverage for the identity component. For more than 100 records, use create_segment(subtype="matched") with a file upload instead. A subscription-capacity refusal may notify configured external webhooks. Requires 'creator' scope.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "records": "<records>"
    },
    "name": "match_records"
  }
}

Input Schema

NameRequiredDescriptionDefault
recordsYesArray of 1–100 records to match. Each record is a key-value object of identity fields: email, phone, full_name (or first_name/middle_name/last_name/name_suffix), address_1/address_2/city/state/zip, dob, iag_person_id. If full_name is provided without first_name/last_name, the engine parses it into components automatically. Pre-hashed clients may submit email_sha256/phone_sha256 (lowercase-hex SHA-256) instead of raw email/phone — do not submit an already-hashed value in the raw field, it will be hashed a second time and never match. Extra permutations beyond the primary identity fields may be supplied as emails[]/phones[]/addresses[]/emails_sha256[]/phones_sha256[] arrays. Each addresses[] entry is read by exact key: address_1, address_2, city, state, zip (zip5/postal_code/zip_code accepted as ZIP aliases); any other key is ignored.
field_listNoOptional list of output fields to include in matched records
match_levelNoRestrict identity resolution to these match levels (Individual/Household/Digital/Spatial/Address). Omit to use the platform default (all levels).
template_idNoOptional enrichment template ID to apply
spatial_modeNoSpatial trade-area mode. residential is the default; use work for workplace-oriented spatial matching, or auto for dynamic commercial workplace routing.residential

Output Schema

NameRequiredDescriptionDefault
run_idYes
recordsYes
guidanceNoInterpretation or recovery guidance for this result
count_unitNo
match_rateYes
page_countNoNumber of objects on this page, not the organization total
count_stateNoUnknown means no count; available does not guarantee freshness. Recount for a current value.
match_countYes
next_actionsNoSuggested next calls using returned IDs and available scopes. Not executed and not user consent.
record_countYes
amount_chargedYesEstimated subscription capacity consumed, denominated in USD; final rated consumption may differ
population_inputNoPopulation input used for the preview; IDs refer to their current saved definitions

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added
  2. Removed
  3. Added

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations: it discloses that matching consumes subscription capacity, that returned monetary values are USD estimates subject to final rating, that a capacity refusal may fire external webhooks, and that 'creator' scope is required. It also explains that iag_person_id presence is unreliable for detecting matches and that match_count/record_count is the correct signal — exactly the kind of behavioral nuance annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening sentence is well front-loaded, but the body then spends several sentences enumerating return fields (resolution_action values, license_action values, license_expires_at) that are already documented in the output schema, which exists for this tool. Field-by-field output commentary plus licensing digressions make a single dense block where multiple sentences do not earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, capacity-consuming, open-world matching operation, the description covers batch limits, the alternative path, capacity cost, scope requirement, audit follow-up, and id/level quirks. With 100% schema coverage and an output schema present, nothing an agent needs in order to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the records array is documented in exceptional detail in the schema itself, so the baseline is 3. The description adds only marginal meaning beyond it — the match_level hint about including 'I' for direct ID lookup — while saying nothing about field_list, template_id, or spatial_mode, which the schema already covers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: 'Perform real-time identity resolution on up to 100 records.' The hard 100-record cap plus the explicit pointer to create_segment(subtype="matched") for larger batches lets an agent separate this tool from the segment-building siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete routing rule ('For more than 100 records, use create_segment(subtype="matched") with a file upload instead') and a follow-up path ('run_id can be passed immediately to get_match_run'), which are real when-to-use/when-not signals. However, fragments like 'can go directly to Refresh' and 'Include I in match_level for direct ID lookup, or omit the filter' are terse and presuppose platform vocabulary, leaving some selection logic to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources