DataMerge MCP
B2B data enrichment for 375M+ companies: legal entities, corporate hierarchies, and contacts.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (1)
- LOWen start_company_enrichment_and_wait
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"mcp": {
"url": "https://mcp.datamerge.ai"
}
}
}Puntos de conexión remotos
https://mcp.datamerge.aistreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (23)
⚪configure_datamerge(apiKey, baseUrl)
Configure DataMerge API authentication (required before using other tools if DATAMERGE_API_KEY is not set).
Esquema de entrada
{
"type": "object",
"properties": {
"apiKey": {
"type": "string",
"description": "DataMerge API key. Get one at https://app.datamerge.ai (20 free credits)."
},
"baseUrl": {
"type": "string",
"description": "Optional custom API base URL (default: https://api.datamerge.ai)."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡start_company_enrichment(domain, company_name, country_code, strict_match, global_ultimate, ...)
POST /v1/company/enrich. Enrich one or more companies by domain. Returns a job_id (async). Single: domain. Batch: domains, country_code, global_ultimate, list, skip_if_exists.
Esquema de entrada
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Company website domain (e.g. example.com)."
},
"company_name": {
"type": "string",
"description": "Company name (used when domain is not available)."
},
"country_code": {
"type": "string",
"description": "Optional ISO 2-letter country code to improve matching."
},
"strict_match": {
"type": "boolean",
"description": "When true, require a strict match for enrichment."
},
"global_ultimate": {
"type": "boolean",
"description": "When true, always return the global ultimate parent."
},
"webhook_url": {
"type": "string",
"description": "Optional webhook URL to receive job completion notifications."
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Batch: multiple domains to enrich."
},
"list": {
"type": "string",
"description": "List slug to add enriched companies to."
},
"skip_if_exists": {
"type": "boolean",
"description": "When true, skip domains that are already in the list."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_company_enrichment_result(job_id)
GET /v1/company/enrich/{job_id}/status. Poll until status is "completed" or "failed". Response includes record_ids. Status values: queued · processing · completed · failed.
Esquema de entrada
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"description": "The enrichment job ID returned by start_company_enrichment. Poll until status is \"completed\" or \"failed\"."
}
},
"required": [
"job_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡start_company_enrichment_and_wait(domain, company_name, country_code, strict_match, global_ultimate, ...)
POST /v1/company/enrich then poll GET /v1/company/enrich/{job_id}/status until status is "completed" or "failed" or timeout. Same params as start_company_enrichment plus poll_interval_seconds and timeout_seconds.
Esquema de entrada
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Company website domain (e.g. example.com)."
},
"company_name": {
"type": "string",
"description": "Company name (used when domain is not available)."
},
"country_code": {
"type": "string",
"description": "Optional ISO 2-letter country code to improve matching."
},
"strict_match": {
"type": "boolean",
"description": "When true, require a strict match for enrichment."
},
"global_ultimate": {
"type": "boolean",
"description": "When true, always return the global ultimate parent."
},
"webhook_url": {
"type": "string",
"description": "Optional webhook URL to receive job completion notifications."
},
"poll_interval_seconds": {
"type": "number",
"description": "How often to poll the job status (in seconds). Defaults to 5 seconds."
},
"timeout_seconds": {
"type": "number",
"description": "Maximum time to wait for completion (in seconds). Defaults to 60 seconds."
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Batch: multiple domains to enrich in one job."
},
"list": {
"type": "string",
"description": "List slug to add enriched companies to."
},
"skip_if_exists": {
"type": "boolean",
"description": "When true, skip domains already in the list."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡run_company_enrichment(continuation_token, domain, company_name, country_code, strict_match, ...)
Agent-friendly company enrichment. On the first call provide enrichment params (domain, domains, company_name, country_code, etc.); the server starts the job and polls internally for up to ~25s. If the job is still running, the response will be {status:"pending", continuation_token, attempt, elapsed_seconds}. When you see status "pending" you MUST immediately call run_company_enrichment again with only continuation_token set — do not ask the user, do not call any other tool first. Typical jobs finish within 5 attempts (~125s). On completion the response contains record_ids and full company records.
Esquema de entrada
{
"type": "object",
"properties": {
"continuation_token": {
"type": "string",
"description": "Opaque token from a prior pending response. When set, all other params are ignored."
},
"domain": {
"type": "string",
"description": "Company website domain."
},
"company_name": {
"type": "string"
},
"country_code": {
"type": "string"
},
"strict_match": {
"type": "boolean"
},
"global_ultimate": {
"type": "boolean"
},
"webhook_url": {
"type": "string"
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Batch: multiple domains in one job."
},
"list": {
"type": "string",
"description": "List slug to add enriched companies to."
},
"skip_if_exists": {
"type": "boolean"
},
"refresh": {
"type": "boolean",
"description": "When true, bypass DataMerge dedup: always re-enrich and charge credits even if the domain is already on a list. Use for multi-tenant resellers (e.g. Faro)."
},
"max_wait_seconds": {
"type": "number",
"description": "Server-side wait budget per call. Default 25, hard-capped to stay under 30s timeouts."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪run_contact_enrich(continuation_token, contacts, enrich_fields, refresh, return_any_domain, ...)
Agent-friendly contact enrichment. On the first call provide contacts and enrich_fields; the server starts the job and polls internally for up to ~25s. If still running, returns {status:"pending", continuation_token, attempt, elapsed_seconds} — you MUST immediately call run_contact_enrich again with only continuation_token set. Do not ask the user. Typical jobs finish within 5 attempts. On completion the response contains record_ids and full contact records.
Esquema de entrada
{
"type": "object",
"properties": {
"continuation_token": {
"type": "string",
"description": "Opaque token from a prior pending response. When set, all other params are ignored."
},
"contacts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
},
"description": "Array of contacts. Identify each with `linkedin_url` and/or (`firstname`+`lastname`). ALWAYS include `domain` (company website) when you know it — FullEnrich's email accuracy drops sharply without a domain hint."
},
"enrich_fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "e.g. [\"contact.emails\",\"contact.phones\"]."
},
"refresh": {
"type": "boolean",
"description": "When true, bypass DataMerge dedup: always re-enrich every contact and charge credits, even if the same contact was enriched in the last 30 days. Use for multi-tenant resellers (e.g. Faro)."
},
"return_any_domain": {
"type": "boolean",
"description": "Set to true to allow enrichment for contacts that have no `domain`. FullEnrich will pick whichever current employer it considers most probable, which may not match what you expect for people with multiple plausible affiliations. Default false: server returns `status: \"domain_required\"` if any contact lacks `domain`."
},
"max_wait_seconds": {
"type": "number",
"description": "Server-side wait budget per call. Default 25, hard-capped to stay under 30s timeouts."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢run_contact_search(continuation_token, domains, company_list, max_results_per_company, job_titles, ...)
Agent-friendly contact search. On the first call provide domains and enrich_fields; the server starts the job and polls internally for up to ~25s. If still running, returns {status:"pending", continuation_token, attempt, elapsed_seconds} — you MUST immediately call run_contact_search again with only continuation_token set. Do not ask the user. On completion the response contains record_ids, full contact records, and credits_consumed.
Esquema de entrada
{
"type": "object",
"properties": {
"continuation_token": {
"type": "string",
"description": "Opaque token from a prior pending response. When set, all other params are ignored."
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Company domains to search for contacts at."
},
"company_list": {
"type": "string",
"description": "Alternative to `domains`: company list slug."
},
"max_results_per_company": {
"type": "integer",
"description": "Max contacts to return per company."
},
"job_titles": {
"type": "object",
"properties": {
"include": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
},
"exclude": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false,
"description": "Optional include/exclude job title filters."
},
"location": {
"type": "object",
"properties": {
"include": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"type",
"value"
],
"additionalProperties": false
}
},
"exclude": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"type",
"value"
],
"additionalProperties": false
}
}
},
"additionalProperties": false,
"description": "Optional include/exclude location filters."
},
"enrich_fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "At least one of \"contact.work_emails\", \"contact.emails\", \"contact.phones\"."
},
"list": {
"type": "string",
"description": "Target contact list slug for results."
},
"refresh": {
"type": "boolean",
"description": "When true, downstream enrichment bypasses dedup and always charges credits for each contact. Use for multi-tenant resellers (e.g. Faro)."
},
"max_wait_seconds": {
"type": "number",
"description": "Server-side wait budget per call. Default 25, hard-capped to stay under 30s timeouts."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_company(datamerge_id, record_id, add_to_list)
Get a single company record. GET /v1/company/get?datamerge_id={id} or ?record_id={uuid}. Provide either datamerge_id (charges 1 credit) or record_id (free). Not both. Optional: add_to_list — list slug to add the company to (only with datamerge_id).
Esquema de entrada
{
"type": "object",
"properties": {
"datamerge_id": {
"type": "string",
"description": "DataMerge company ID. Charges 1 credit."
},
"record_id": {
"type": "string",
"description": "Your record UUID from a previous enrichment. Does not consume credits."
},
"add_to_list": {
"type": "string",
"description": "List slug to add the company to. Only valid when using datamerge_id."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_company_hierarchy(datamerge_id, include_names, include_branches, only_subsidiaries, max_level, ...)
Get all entities in the same global ultimate hierarchy. GET /v1/company/hierarchy?datamerge_id={id}. Parameters: include_names (bool, charges 1 credit), include_branches (bool), only_subsidiaries (bool), max_level (int), country_code (array), page (int).
Esquema de entrada
{
"type": "object",
"properties": {
"datamerge_id": {
"type": "string",
"minLength": 1,
"description": "DataMerge company ID. Required."
},
"include_names": {
"type": "boolean",
"description": "Include entity names. Charges 1 credit."
},
"include_branches": {
"type": "boolean",
"description": "Include branch entities."
},
"only_subsidiaries": {
"type": "boolean",
"description": "Return only subsidiaries."
},
"max_level": {
"type": "integer",
"description": "Maximum hierarchy depth."
},
"country_code": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter entities by ISO 2-letter country code(s)."
},
"page": {
"type": "integer",
"description": "Page number for paginated results (1-based)."
}
},
"required": [
"datamerge_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡contact_search(domains, company_list, max_results_per_company, job_titles, location, ...)
POST /v1/contact/search. Search for contacts at specified companies. Returns a job_id (async, 202). enrich_fields required (at least one of contact.emails or contact.phones). Use company_list (slug) instead of domains to search a saved list.
Esquema de entrada
{
"type": "object",
"properties": {
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Company domains to search."
},
"company_list": {
"type": "string",
"description": "List slug instead of domains."
},
"max_results_per_company": {
"type": "number",
"description": "Max contacts per company."
},
"job_titles": {
"type": "object",
"properties": {
"include": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
},
"description": "Priority-keyed: {\"1\": [\"CEO\"], \"2\": [\"VP Sales\"]} — priority \"1\" is highest."
},
"exclude": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false,
"description": "Optional include/exclude job title filters."
},
"location": {
"type": "object",
"additionalProperties": {},
"description": "Location filters: include/exclude with type and value (country, region, city)."
},
"enrich_fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "At least one of \"contact.emails\" or \"contact.phones\". Each email costs 1 credit; phone 4 credits."
},
"webhook": {
"type": "string",
"description": "Optional webhook URL to notify when the job completes."
}
},
"required": [
"enrich_fields"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_contact_search_status(job_id)
GET /v1/contact/search/{job_id}/status. Poll until status is "completed" or "failed". Response includes record_ids.
Esquema de entrada
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"description": "The contact search job ID returned by contact_search. Poll until status is \"completed\" or \"failed\"."
}
},
"required": [
"job_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡contact_enrich(contacts, enrich_fields)
POST /v1/contact/enrich. Enrich specific contacts by LinkedIn URL or name+domain. Returns a job_id (async, 202).
Esquema de entrada
{
"type": "object",
"properties": {
"contacts": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {}
},
"description": "Array of contacts: either { linkedin_url } or { firstname, lastname, domain }."
},
"enrich_fields": {
"type": "array",
"items": {
"type": "string"
},
"description": "Fields to enrich, e.g. [\"contact.emails\", \"contact.phones\"]."
}
},
"required": [
"contacts",
"enrich_fields"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_contact_enrich_status(job_id)
GET /v1/contact/enrich/{job_id}/status. Poll until status is "completed" or "failed". Response includes record_ids.
Esquema de entrada
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"description": "The contact enrich job ID returned by contact_enrich. Poll until status is \"completed\" or \"failed\"."
}
},
"required": [
"job_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_contact(record_id)
GET /v1/contact/get?record_id={uuid}. Retrieve a specific contact by record UUID. Never charges credits.
Esquema de entrada
{
"type": "object",
"properties": {
"record_id": {
"type": "string",
"description": "Contact record UUID from a previous contact_search or contact_enrich job. Does not consume credits."
}
},
"required": [
"record_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_lists(object_type)
GET /v1/lists. Optional: object_type=company or object_type=contact.
Esquema de entrada
{
"type": "object",
"properties": {
"object_type": {
"type": "string",
"enum": [
"company",
"contact"
],
"description": "Filter lists by object type: company or contact."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_list(name, object_type)
POST /v1/lists. Body: name, object_type (company or contact).
Esquema de entrada
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Display name for the new list."
},
"object_type": {
"type": "string",
"enum": [
"company",
"contact"
],
"description": "Whether the list holds company or contact records."
}
},
"required": [
"name",
"object_type"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_list_items(object_type, list_slug, page, page_size, sort_by, ...)
GET /v1/lists/{object_type}/{list_slug}. object_type: company or contact. list_slug: e.g. target-accounts. Parameters: page, page_size (max 100), sort_by, sort_order (asc/desc).
Esquema de entrada
{
"type": "object",
"properties": {
"object_type": {
"type": "string",
"enum": [
"company",
"contact"
],
"description": "Type of list: company or contact."
},
"list_slug": {
"type": "string",
"description": "URL-safe list identifier (e.g. target-accounts)."
},
"page": {
"type": "number",
"description": "Page number for pagination (1-based)."
},
"page_size": {
"type": "number",
"description": "Items per page (max 100)."
},
"sort_by": {
"type": "string",
"description": "Field name to sort by."
},
"sort_order": {
"type": "string",
"enum": [
"asc",
"desc"
],
"description": "Sort direction: asc or desc."
}
},
"required": [
"object_type",
"list_slug"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴remove_list_item(object_type, list_slug, item_id)
DELETE /v1/lists/{object_type}/{list_slug}/{item_id}.
Esquema de entrada
{
"type": "object",
"properties": {
"object_type": {
"type": "string",
"enum": [
"company",
"contact"
],
"description": "Type of list: company or contact."
},
"list_slug": {
"type": "string",
"description": "List slug containing the item."
},
"item_id": {
"type": "string",
"description": "Record UUID of the company or contact to remove from the list."
}
},
"required": [
"object_type",
"list_slug",
"item_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴delete_list(object_type, list_slug)
DELETE /v1/lists/{object_type}/{list_slug}. System lists cannot be deleted.
Esquema de entrada
{
"type": "object",
"properties": {
"object_type": {
"type": "string",
"enum": [
"company",
"contact"
],
"description": "Type of list: company or contact."
},
"list_slug": {
"type": "string",
"description": "List slug of the list to delete. System lists cannot be deleted."
}
},
"required": [
"object_type",
"list_slug"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_credits_balance(_)
GET /v1/credits/balance. Returns credits_balance and balances (one_off, recurring, rollover, total).
Esquema de entrada
{
"type": "object",
"properties": {
"_": {
"type": "string",
"description": "This tool takes no required parameters. Call with no arguments."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢health_check(_)
Check if the DataMerge API client is configured and can connect. Uses /auth/info.
Esquema de entrada
{
"type": "object",
"properties": {
"_": {
"type": "string",
"description": "This tool takes no required parameters. Call with no arguments."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡contact_search_unenriched(domains, company_list, max_results_per_company, job_titles, location, ...)
POST /v1/contact/search/unenriched. Find contacts without running email/phone enrichment. Returns a job_id; contacts are created in `unconfirmed` status with stable ids. BETA: requires the `contact_search_unenriched` flag on the account.
Esquema de entrada
{
"type": "object",
"properties": {
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Company domains to search."
},
"company_list": {
"type": "string",
"description": "Alternative to domains: list slug to search across."
},
"max_results_per_company": {
"type": "integer"
},
"job_titles": {
"type": "object",
"properties": {
"include": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
},
"description": "Priority-keyed: {\"1\": [\"CEO\"], \"2\": [\"VP\"]} — priority \"1\" is highest."
},
"exclude": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false,
"description": "Optional include/exclude job title filters (priority-keyed include)."
},
"location": {
"type": "object",
"additionalProperties": {}
},
"webhook": {
"type": "string"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡run_contact_search_unenriched(domains, max_results_per_company, job_titles, location, list)
POST /v1/contact/search/unenriched/sync. Synchronous unenriched contact search — returns contacts inline (no polling). Requires the `contact_search_unenriched` beta flag. Limits: 10 domains and max_results_per_company ≤ 10. Response includes credits_consumed computed as 0.5 × len(contacts).
Esquema de entrada
{
"type": "object",
"properties": {
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Up to 10 company domains."
},
"max_results_per_company": {
"type": "integer",
"description": "Max contacts per company (1–10)."
},
"job_titles": {
"type": "object",
"properties": {
"include": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
},
"description": "Priority-keyed: {\"1\": [\"CEO\"], \"2\": [\"VP\"]} — priority \"1\" is highest. The API flattens this to a single array for the sync endpoint."
},
"exclude": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false,
"description": "Optional include/exclude job title filters."
},
"location": {
"type": "object",
"additionalProperties": {},
"description": "Optional include/exclude locations."
},
"list": {
"type": "string",
"description": "Target contact list slug."
}
},
"required": [
"domains"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Prompts recomendados
run_contact_searchrun_contact_searchget_company_enrichment_resultget_company_enrichment_resultlist_listsComunidad
Evidencia