Anchord MCP
Servidor MCP de Anchord
Resolución de identidad y comprobaciones de seguridad previas a la escritura para agentes de IA.
Un servidor MCP que proporciona a los agentes de IA acceso a la API de resolución de identidad de Anchord. Resuelva empresas y personas a AnchorIDs canónicos, ejecute comprobaciones de seguridad previas a la escritura y exporte registros maestros (golden records), todo a través de la interfaz de herramientas estándar de MCP.
Respaldado por API alojada. Este servidor MCP es un proxy ligero para la plataforma SaaS de Anchord. Toda la puntuación, coincidencia, validación y persistencia de datos ocurren en el lado del servidor. No se ejecuta lógica de negocio localmente.
Diseñado para ser de solo lectura. Anchord nunca escribe en sus sistemas externos (CRM, bases de datos, etc.). guard_write evalúa una escritura propuesta y devuelve si está permitida o bloqueada; el llamador decide si proceder.
Inicio rápido
1. Obtenga una clave de API
Regístrese en app.anchord.ai/signup y cree una clave de API en Settings > API Keys.
2. Ejecute con npx (sin instalación)
ANCHORD_API_KEY=<YOUR_ANCHORD_API_KEY> npx -y @anchord/mcp-serverEso es todo. El servidor se inicia a través de stdio y está listo para los clientes MCP.
3. O conéctese al remoto alojado (instalación cero)
No se necesita instalación local. Apunte cualquier cliente MCP que admita transporte HTTP remoto al endpoint alojado:
{
"mcpServers": {
"anchord": {
"url": "https://mcp.anchord.ai/mcp",
"headers": {
"Authorization": "Bearer <YOUR_ANCHORD_API_KEY>"
}
}
}
}Consulte docs/remote.md para obtener detalles completos, notas de compatibilidad del cliente y una alternativa local si su cliente aún no admite MCP remoto.
Related MCP server: datavessel
Configuración del cliente MCP
Cursor (stdio local)
Agréguelo a .cursor/mcp.json (espacio de trabajo) o ~/.cursor/mcp.json (global):
{
"mcpServers": {
"anchord": {
"command": "npx",
"args": ["-y", "@anchord/mcp-server"],
"env": {
"ANCHORD_API_KEY": "<YOUR_ANCHORD_API_KEY>"
}
}
}
}Consulte examples/cursor-mcp.json.
Claude Desktop
Agréguelo a su configuración de Claude Desktop
(~/Library/Application Support/Claude/claude_desktop_config.json en macOS,
%APPDATA%\Claude\claude_desktop_config.json en Windows):
{
"mcpServers": {
"anchord": {
"command": "npx",
"args": ["-y", "@anchord/mcp-server"],
"env": {
"ANCHORD_API_KEY": "<YOUR_ANCHORD_API_KEY>"
}
}
}
}Consulte examples/claude-desktop-config.json.
MCP remoto (para clientes que admiten transporte HTTP)
Para acceso remoto sin instalación, utilice el endpoint alojado en lugar de un proceso stdio local. Esto funciona con cualquier cliente MCP que admita el formato de configuración url + headers:
{
"mcpServers": {
"anchord": {
"url": "https://mcp.anchord.ai/mcp",
"headers": {
"Authorization": "Bearer <YOUR_ANCHORD_API_KEY>"
}
}
}
}No se requiere Node.js, ni npx, ni Docker. Si su cliente aún no admite MCP remoto, utilice la configuración stdio local anterior. Consulte docs/remote.md para obtener detalles completos.
Docker
docker build -t anchord-mcp .
echo '{"jsonrpc":"2.0","id":1,"method":"initialize",...}' | \
docker run --rm -i -e ANCHORD_API_KEY=<YOUR_ANCHORD_API_KEY> anchord-mcpO utilice el archivo compose para pruebas locales:
cp examples/env.example .env
# Edit .env with your API key
docker compose upVariables de entorno
Variable | Requerido | Predeterminado | Descripción |
| Sí | — | Su clave de API de Anchord (token Bearer) |
| No |
| URL base de la API |
Consulte docs/auth.md para obtener detalles sobre la autenticación y el alcance del inquilino.
Herramientas disponibles
Herramienta | Descripción |
| Resuelve una empresa a un AnchorID canónico |
| Resolución de empresas por lotes (máx. 200) |
| Resuelve una persona a un AnchorID canónico |
| Resolución de personas por lotes (máx. 200) |
| Obtiene un AnchorID con registros vinculados opcionales |
| Exporta el registro maestro (golden record) para un AnchorID |
| Vincula un registro de origen a un AnchorID |
| Elimina de forma lógica un vínculo de registro de origen |
| Comprobación de seguridad previa a la escritura (solo evaluación) |
| Comprobación de seguridad previa a la escritura por lotes (máx. 200) |
| Ingiere un registro de origen en Anchord |
Referencia completa de parámetros: docs/tools.md
Flujo de trabajo seguro para agentes
La secuencia recomendada para agentes que escriben en sistemas externos:
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.Utilice get_entity o get_entity_export en cualquier momento para inspeccionar los detalles del AnchorID o recuperar el registro maestro fusionado.
Manejo de needs_review
Solo resolve_* devuelve needs_review. Significa que Anchord encontró múltiples coincidencias plausibles y no puede resolver automáticamente con confianza.
Para agentes:
No escriba. Los datos son ambiguos.
Muestre los candidatos al usuario: la respuesta incluye IDs de entidad y puntuaciones de coincidencia.
Dirija al usuario a la Cola de Revisión:
https://app.anchord.ai/app/queues/needs-reviewReintente más tarde. Una vez que un humano resuelve la ambigüedad, las llamadas de resolución posteriores devuelven
resolved.
Ejemplo de mensaje del agente:
Intenté resolver "Acme Corp" pero Anchord encontró múltiples coincidencias posibles. Un humano necesita revisar esto en la Cola de Revisión. Reintentaré después de que se resuelva.
Manejo de errores
Cuando la API devuelve 4xx/5xx, la respuesta de la herramienta MCP se marca como isError: true con una carga útil estructurada:
{
"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_idsiempre está presente: del cuerpo de la respuesta de la API, el encabezadox-request-ido un UUID generado por el cliente.detailscontiene errores de validación cuando están disponibles (nulo para errores que no son JSON).Las claves de API nunca se incluyen en los mensajes de error.
Arquitectura
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
└──────────────┘Remoto alojado (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
└────────────────────────┘Ambas rutas exponen las mismas 11 herramientas MCP y se conectan a la misma API.
Preguntas frecuentes
¿Anchord es autohospedado?
No. Anchord es una plataforma SaaS alojada. Este servidor MCP es un cliente ligero que llama a la API de Anchord. Necesita una clave de API de app.anchord.ai/signup.
¿Anchord escribe en mis CRM?
No. Anchord es estrictamente de solo lectura. Lee datos de sistemas conectados (Salesforce, HubSpot, Stripe) para construir grafos de identidad, pero nunca escribe de vuelta. guard_write devuelve una decisión: el llamador realiza cualquier escritura real.
¿Con qué sistemas funciona Anchord?
Anchord tiene integraciones OAuth para Salesforce, HubSpot y Stripe. También puede enviar registros desde cualquier sistema a través de la herramienta ingest_record o la API REST.
¿Qué sucede cuando hay ambigüedad?
Cuando resolve_* devuelve needs_review, significa que múltiples AnchorIDs candidatos coincidieron con una confianza similar. El agente debe detenerse, mostrar los candidatos a un humano y dirigirlos a la Cola de Revisión de Anchord. Una vez resuelto, las llamadas posteriores devuelven resolved.
¿Cuáles son los límites de tasa?
120 solicitudes/minuto por inquilino. Los endpoints por lotes aceptan hasta 200 elementos (resolver, proteger) o 100 registros (ingerir). Se aplican cuotas mensuales y diarias según el plan. Consulte docs/auth.md.
Enlaces
Licencia
Available Tools
11 toolsget_entityB
Fetch an AnchorID (canonical entity) by UUID. Optionally include linked source records via the include parameter (links, source_records, or both).
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes | UUID of the AnchorID to retrieve | |
| include | No | Comma-separated relations to include: "links", "source_records", or both |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It implies a read operation (fetch) and explains the optional inclusion of linked records, but does not disclose any behavioral traits such as permissions, side effects, or response details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words. The purpose is front-loaded, and the optional behavior is immediately specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers the basic functionality, it lacks details about the return format (e.g., structure of the fetched entity) and does not reference output schema. For a simple fetch, it is adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value by clarifying the valid values for the 'include' parameter ('links', 'source_records', or both'), going beyond the schema's generic 'Comma-separated relations'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Fetch') and the resource ('AnchorID by UUID'), with an optional parameter to include linked records. While it doesn't explicitly differentiate from siblings like 'get_entity_export', the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidelines are provided. The description does not indicate when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entity_exportB
Export the golden record for an AnchorID. Returns the merged/canonical view of all linked source records as a single JSON object.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes | UUID of the AnchorID to export |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosure. It correctly implies a read-only operation ('Export'), but does not explicitly state safety or permissions. It describes the output format, but lacks details on side effects, performance, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences that cover the action and the output. No unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description is adequate but lacks completeness regarding error handling, input validation, or relationship to sibling tools. It does not mention what happens if the AnchorID does not exist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with entity_id described as 'UUID of the AnchorID to export'. The description adds that the export is for the golden record, but does not provide additional constraints or format details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool exports the golden record for an AnchorID and returns a merged view. It specifies the verb 'Export' and the resource 'golden record for an AnchorID'. However, it does not explicitly distinguish it from the sibling 'get_entity' tool, which may perform a similar function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., 'get_entity'). There is no mention of prerequisites, limitations, or scenarios where this tool should be avoided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
guard_writeA
Evaluation-only pre-write safety check. Verifies the AnchorID exists, confidence meets threshold, no unresolved conflicts, and at least one canonical link is present. Returns allowed/blocked with reasons. This tool does NOT perform any write — the caller decides whether to proceed.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes | UUID of the AnchorID to evaluate | |
| min_confidence | No | Minimum confidence threshold (default: 0.70) | |
| require_no_conflicts | No | Block if unresolved conflicts exist (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully bears the burden of behavioral disclosure. It explicitly states the tool is evaluation-only and does not perform writes, lists the checks performed, and mentions it returns allowed/blocked with reasons. All key behavioral aspects are transparently communicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no superfluous information. It first states the purpose and checks, then clarifies the evaluation-only nature. Every sentence is essential and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's function, inputs, and output ('Returns allowed/blocked with reasons') adequately for a simple check tool. Minor omission: it does not describe error handling or the exact return structure, but given the lack of output schema, the description is sufficiently complete for effective agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description adds value beyond the schema by explaining how the parameters (entity_id, min_confidence, require_no_conflicts) are used in the evaluation logic. It contextualizes the parameters within the safety check process, improving agent understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is an 'Evaluation-only pre-write safety check' and lists specific checks (AnchorID existence, confidence threshold, conflicts, canonical links). It explicitly distinguishes from write operations by stating it does NOT perform any write, and the sibling tool guard_write_batch implies batch usage. This aligns with a specific verb-resource pair and differentiates from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (before a write) and that the caller decides whether to proceed. It implies that guard_write_batch is for batch use, but does not explicitly state when not to use it or name alternatives. The guidance is clear but lacks explicit exclusion statements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
guard_write_batchA
Batch pre-write safety check for multiple AnchorIDs (max 200). Each item needs a client_ref for correlation. Returns per-item allowed/blocked decisions with reasons. Evaluation-only — never writes.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Array of guard/write requests |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Explicitly states 'Evaluation-only — never writes' and max 200 limit, but lacks details on permissions, error handling, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with core purpose and constraints. No wasted words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description adequately describes return value ('per-item allowed/blocked decisions with reasons'). Covers inputs, constraints, and behavior sufficiently for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. Description adds minor reinforcement ('each item needs a client_ref') but does not significantly extend meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb ('pre-write safety check'), resource ('multiple AnchorIDs'), and scope ('batch', max 200). Distinguished from sibling 'guard_write' by 'batch' and 'max 200'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies use when checking multiple items and mentions evaluation-only nature. No explicit when-not or alternatives, but sibling context and batch specificity provide adequate guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ingest_recordA
Ingest a single source record into Anchord. The record is matched to an AnchorID automatically. Requires a registered source (system). Wraps POST /ingest/batch with a single-item array.
| Name | Required | Description | Default |
|---|---|---|---|
| system | Yes | Source system key (e.g. hubspot, salesforce, stripe, or a custom source) | |
| object_type | Yes | Object type within the source (e.g. company, contact, customer) | |
| object_id | Yes | Unique ID of the record in the source system | |
| payload | Yes | Record payload — key/value fields (e.g. name, domain, email) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must carry full burden. It discloses that it is a write operation, requires a registered source, automatically matches to AnchorID, and wraps a batch endpoint. However, it lacks details on idempotency, error handling, or response behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action, and every statement contributes to understanding without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core operation and prerequisite but omits return value details (e.g., the resulting AnchorID). Given no output schema, this information would be valuable for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value by explaining that the system must be registered and that payload is sent as a single-item array to a batch endpoint, which clarifies usage beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs and resources: 'Ingest a single source record into Anchord', clearly stating the action and target. It distinguishes from siblings by explaining the automatic AnchorID matching and requirement for a registered source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a prerequisite (requires a registered source) but does not explicitly compare to sibling tools like guard_write or guard_write_batch. The usage context is implied but not fully delineated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_source_recordB
Create or reactivate a link between an AnchorID and a source record. Idempotent — calling twice returns the existing link.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes | UUID of the AnchorID to link to | |
| source_record_id | Yes | UUID of the source record to link | |
| confidence | No | Confidence score for this link (0-1) | |
| linked_by | No | Who/what created this link (default: "api") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses idempotency but fails to mention side effects, authorization requirements, error conditions, or what happens on conflict. For a mutation tool, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, concise and front-loaded. It conveys the essential action immediately. No wasted words, though it lacks structural elements like bullet points or sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, and no annotations, the description is minimal. It does not cover return values, error handling, or use case scenarios. More context is needed for a tool that creates links.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%—all parameters have descriptions in the input schema. The description adds idempotency context but does not enhance parameter meaning beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: creating or reactivating a link between an AnchorID and a source record. It uses specific verbs ('Create or reactivate') and resources ('AnchorID', 'source record'), and distinctly differentiates from the sibling tool 'unlink_source_record'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions idempotency, which provides usage guidance (safe to call multiple times), but lacks explicit when-to-use vs alternatives, prerequisites, or when not to use this tool. No comparison with sibling tools like 'ingest_record' or 'resolve_*'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_companyA
Resolve a company to an AnchorID using domain, name, city/state, or external identifiers. Returns status (resolved | needs_review | not_found), confidence score, the canonical AnchorID, match reasons, and any ambiguous candidates.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | Company domain (e.g. acme.com) | |
| name | No | Company name | |
| city | No | City for geo-matching | |
| state | No | State for geo-matching | |
| identifiers | No | External system identifiers | |
| min_confidence | No | Minimum confidence threshold (0-1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral cues. It discloses that the tool returns status, confidence, and potential ambiguous candidates, but omits whether the operation is read-only, requires authentication, or has side effects. The behavioral disclosure is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently conveys purpose and outputs, though the list of output fields makes it slightly dense. It is front-loaded with the core action, but could benefit from structured formatting for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description compensates by listing return values (status, confidence, AnchorID, etc.). It covers the key aspects of input and output, though it does not address error handling or edge cases. The nested identifiers object is documented in the schema, so the description is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter is already documented in the schema. The description groups input types (domain, name, city/state, identifiers) but does not add meaningful details beyond what the schema provides. It offers a high-level summary but no additional syntax or format guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Resolve') and resource ('company to AnchorID'), clearly listing input types and outputs. It distinguishes itself from sibling tools like resolve_company_batch and resolve_person by focusing on single company resolution with multiple input options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what inputs are accepted and what outputs are produced, but does not explicitly state when to use this tool versus its batch counterpart or other resolution tools. No exclusions or alternatives are mentioned, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_company_batchA
Resolve multiple companies to AnchorIDs in a single call (max 200). Each item needs a client_ref for correlation and at least one identifying field. Ambiguous matches return status needs_review with candidate AnchorIDs.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Array of company resolution requests |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses batch size limit (max 200), required fields (client_ref, at least one identifying field), and behavior on ambiguity (needs_review status). However, it omits error handling, authentication needs, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences pack purpose, limits, requirements, and behavior. No redundant words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batch tool with nested fields and no output schema, the description covers input requirements and response status. It lacks output structure details (e.g., how client_ref maps to results), but given schema coverage and parameter descriptions, it is nearly sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds crucial meaning beyond the schema: it clarifies that 'at least one identifying field' is required, and mentions the min_confidence parameter implicitly. This helps agents understand valid usage patterns.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Resolve multiple companies to AnchorIDs in a single call (max 200).' It specifies the verb 'resolve', the resource 'companies to AnchorIDs', and distinguishes from sibling tools like resolve_company (single) and resolve_person_batch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance: 'Each item needs a client_ref for correlation and at least one identifying field. Ambiguous matches return status needs_review with candidate AnchorIDs.' It implies when to use the tool (multiple companies) but lacks explicit when-not or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_personA
Resolve a person to an AnchorID using email, name, company domain, or external identifiers (Slack/Google user IDs). Returns status (resolved | needs_review | not_found), confidence score, the canonical AnchorID, match reasons, and any ambiguous candidates.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Person's email address | ||
| name | No | Person's full name | |
| company_entity_id | No | Resolved company AnchorID (UUID) for name+company matching | |
| company_domain | No | Company domain for name+company matching | |
| identifiers | No | External system identifiers | |
| min_confidence | No | Minimum confidence threshold (0-1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It explains the resolution process, possible statuses (resolved, needs_review, not_found), confidence score, and output fields. It does not mention side effects or idempotency, but for a query-like tool this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that front-loads the action and lists key inputs and outputs. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all input fields except min_confidence, but includes all important output fields (status, confidence, AnchorID, match reasons, ambiguous candidates). Given the lack of output schema, it provides sufficient context for agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds general context about how parameters are used (e.g., email, name, company info) but does not provide additional per-parameter semantics beyond what the schema already contains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the tool resolves a person to an AnchorID using multiple identifiers (email, name, company domain, external IDs). It distinguishes from sibling tools like resolve_person_batch (batch variant) and resolve_company (different entity type).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states what the tool does but does not explicitly guide when to use it vs. alternatives like batch or other resolution tools. The context from sibling names provides some differentiation, but no direct when-not-to-use or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_person_batchA
Resolve multiple people to AnchorIDs in a single call (max 200). Each item needs a client_ref for correlation and at least one identifying field. Ambiguous matches return status needs_review with candidate AnchorIDs.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Array of person resolution requests |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that ambiguous matches return a 'needs_review' status with candidate AnchorIDs and imposes a 200-item limit. However, it does not mention potential side effects, authorization needs, or error handling, leaving gaps for a batch mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with zero redundancy. The key constraints (batch, max 200, client_ref, identifying field, ambiguous match behavior) are front-loaded, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex batch tool with nested objects and no output schema, the description covers essentials (batch size, field requirements, ambiguous match handling) but lacks details on success response format, error cases, or prerequisites. It is adequate but leaves some completeness gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3). The description adds value by stating 'at least one identifying field' and explaining the client_ref's purpose for correlation, which goes beyond the schema's property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool resolves multiple people to AnchorIDs in a single call, distinguishing it from the singular resolve_person sibling. It specifies 'max 200' and uses the verb 'resolve' with an explicit resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this batch tool (for multiple people, max 200) and outlines requirements (client_ref, at least one identifying field). It implies the singular alternative for single requests but does not explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unlink_source_recordA
Soft-delete the link between an AnchorID and a source record. Idempotent — calling on an already-unlinked pair returns 200.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes | UUID of the AnchorID to unlink from | |
| source_record_id | Yes | UUID of the source record to unlink |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses soft-delete (non-destructive) and idempotent behavior in absence of annotations. No mention of permissions, rate limits, or other side effects, leaving gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences, front-loaded with action. No unnecessary words, though could be slightly more structured with bullet points.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers main purpose and idempotency for a simple tool with 2 params and no output schema. Missing details on return value beyond status code, but acceptable given simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions. Description repeats UUID identifiers without adding new meaning, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it soft-deletes a link between an AnchorID and a source record, distinguishing it from 'link_source_record'. Verb and resource are specific, and idempotency is noted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies use for unlinking without permanent deletion, and mentions idempotency, but lacks explicit when-to-use or when-not-to-use guidance compared to siblings like 'guard_write'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v1.1.1- First observed
get_entity - First observed
get_entity_export - First observed
guard_write - First observed
guard_write_batch - First observed
ingest_record - First observed
link_source_record - First observed
resolve_company - First observed
resolve_company_batch - First observed
resolve_person - First observed
resolve_person_batch - First observed
unlink_source_record
TDQS
Scored across 11 tools
Each tool targets a distinct operation: entity retrieval, export, pre-write guards, ingest, linking/unlinking, and resolution for persons and companies. Batch variants are clearly separated from single-item counterparts, with no overlapping purposes.
All tools follow a consistent verb_noun pattern in snake_case (e.g., get_entity, guard_write, resolve_company_batch). The naming is predictable and easy to navigate.
With 11 tools, the set is well-scoped for an entity resolution and management server. Each tool serves a clear purpose, covering core workflows without unnecessary bloat or deficit.
The tool surface covers the essential lifecycle: resolution, ingestion, linking, pre-write guards, and retrieval. Minor gaps exist (no listing/search, no direct source record fetch, no entity update/delete), but the core functionality is well-supported.
Maintenance
Related MCP Connectors
Unified MCP Server is a remote MCP connector for AI agents and vertical AI products that provides access to 22,000+ authorized SaaS tools across 400+ integrations and 24 categories directly inside LLMs (Claude, GPT, Gemini, Cohere). Tools operate only on explicitly authorized customer connections, enabling agents to safely read and write against live third-party systems.
Remote MCP server to enrich company profiles with structured B2B data and confidence scores.
Let AI agents query data and act across all your business apps via MCP.
- GentkeyOAuthcom.gentkey
One MCP URL for all your connectors — scoped writes, enforced constraints, and a full audit trail.
Related MCP Servers
AlicenseNot gradedqualityDmaintenanceMCP server providing managed persistent memory for AI agents. Read and write structured state across sessions, tools, and restarts at 1000+ requests per second, with no infrastructure to self-host or operate.2Apache 2.0- FlicenseNot gradedqualityDmaintenanceHosted MCP server that gives AI agents read and write access to your full marketing & ecommerce stack — Google Analytics, Search Console, Google & Meta Ads, Shopify, WooCommerce, Shopware, Slack and LinkedIn. 100+ tools across 10 connectors. BYOK, OAuth 2.1.-
- AlicenseNot gradedqualityBmaintenanceProvides a context graph for GTM teams, centralizing data from multiple tools into unified person and company records, and offers MCP tools to retrieve account context, full entity details, and filtered queries.14 npm10AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceA hosted remote MCP server for C2PA disclosure policy, enabling AI governance teams to check disclosure policies, validate C2PA status, issue AI media receipts, explain region rules, and export disclosure logs.MIT