Labsco
nolenation04 logo

Anchord

from nolenation04

Hosted remote MCP server for identity resolution and write guardrails.

๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅโœ“ VerifiedAccount requiredAdvanced setup

Anchord MCP Server

Identity resolution and pre-write safety checks for AI agents.

An MCP server that gives AI agents access to the Anchord identity resolution API. Resolve companies and people to canonical AnchorIDs, run pre-write safety checks, and export golden records โ€” through the standard MCP tool interface.

Hosted API-backed. This MCP server is a thin proxy to the Anchord SaaS platform. All scoring, matching, validation, and data persistence happen server-side. No business logic runs locally.

Read-only by design. Anchord never writes to your external systems (CRMs, databases, etc.). guard_write evaluates a proposed write and returns allowed/blocked โ€” the caller decides whether to proceed.


Environment variables

VariableRequiredDefaultDescription
ANCHORD_API_KEYYesโ€”Your Anchord API key (Bearer token)
ANCHORD_API_BASE_URLNohttps://api.anchord.aiAPI base URL

See docs/auth.md for details on authentication and tenant scoping.


Available tools

ToolDescription
resolve_companyResolve a company to a canonical AnchorID
resolve_company_batchBatch company resolution (max 200)
resolve_personResolve a person to a canonical AnchorID
resolve_person_batchBatch person resolution (max 200)
get_entityFetch an AnchorID with optional linked records
get_entity_exportExport the golden record for an AnchorID
link_source_recordLink a source record to an AnchorID
unlink_source_recordSoft-delete a source record link
guard_writePre-write safety check (evaluation-only)
guard_write_batchBatch pre-write safety check (max 200)
ingest_recordIngest a source record into Anchord

Full parameter reference: docs/tools.md


Safe agent workflow

The recommended sequence for agents writing to external systems:

1. ingest_record        Push the source record into Anchord
                        (optional if using OAuth integrations)

2. resolve_company      Match to a canonical AnchorID
   or resolve_person    โ†’ status: resolved | not_found | needs_review

3. IF needs_review      STOP. Do not write.
                        Surface candidates to the user.
                        Direct them to the Review Queue.

4. guard_write          Evaluate the proposed write
                        โ†’ allowed: true | false (with block codes)

5. IF allowed           The agent performs the external write.
                        Anchord never writes.

6. Log request_id       Every response includes a request_id
                        for audit trail and debugging.

Use get_entity or get_entity_export at any point to inspect AnchorID details or retrieve the merged golden record.


Handling needs_review

Only resolve_* returns needs_review. It means Anchord found multiple plausible matches and cannot auto-resolve with confidence.

For agents:

  1. Do not write. The data is ambiguous.
  2. Surface the candidates to the user โ€” the response includes entity IDs and match scores.
  3. Direct the user to the Review Queue: https://app.anchord.ai/app/queues/needs-review
  4. Retry later. Once a human resolves the ambiguity, subsequent resolve calls return resolved.

Example agent message:

I tried to resolve "Acme Corp" but Anchord found multiple possible matches. A human needs to review this in the Review Queue. I'll retry after it's resolved.


Error handling

When the API returns 4xx/5xx, the MCP tool response is marked isError: true with a structured payload:

{
  "error": "[422] BATCH_TOO_LARGE: Batch size must not exceed 100 records. (request_id: req_01ABC123)",
  "status_code": 422,
  "request_id": "req_01ABC123",
  "details": { "records": ["Too many records."] }
}
  • request_id is always present โ€” from the API response body, x-request-id header, or a client-generated UUID.
  • details contains validation errors when available (null for non-JSON errors).
  • API keys are never included in error messages.

Architecture

Local (stdio)

MCP Client (Cursor / Claude Desktop / etc.)
    โ”‚  stdio (JSON-RPC)
    โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  MCP Server  โ”‚  Node.js + TypeScript
โ”‚  (this pkg)  โ”‚  Zod schemas ยท no business logic
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
       โ”‚  HTTPS + Bearer auth
       โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Anchord API โ”‚  Hosted SaaS โ€” scoring, matching,
โ”‚              โ”‚  persistence, tenant isolation
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Hosted remote (HTTP)

MCP Client
    โ”‚  HTTPS POST + Bearer token
    โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  mcp.anchord.ai        โ”‚  CloudFront (TLS, routing)
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
            โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Lambda (stateless)    โ”‚  Per-request MCP server
โ”‚  Bearer โ†’ ApiClient    โ”‚  No stored secrets
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
            โ”‚  HTTPS + Bearer auth
            โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Anchord API           โ”‚  Same hosted SaaS backend
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Both paths expose the same 11 MCP tools and connect to the same API.