DataMerge MCP
B2B data enrichment for 375M+ companies: legal entities, corporate hierarchies, and contacts.
사용해야 할까요
품질 및 안전성
발견 사항 (1)
- LOWstart_company_enrichment_and_wait에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"mcp": {
"url": "https://mcp.datamerge.ai"
}
}
}원격 엔드포인트
https://mcp.datamerge.aistreamable-http할 수 있는 일
도구 목록
도구 (23)
⚪configure_datamerge(apiKey, baseUrl)
Configure DataMerge API authentication (required before using other tools if DATAMERGE_API_KEY is not set).
입력 스키마
{
"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.
입력 스키마
{
"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.
입력 스키마
{
"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.
입력 스키마
{
"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.
입력 스키마
{
"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.
입력 스키마
{
"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.
입력 스키마
{
"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).
입력 스키마
{
"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).
입력 스키마
{
"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.
입력 스키마
{
"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.
입력 스키마
{
"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).
입력 스키마
{
"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.
입력 스키마
{
"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.
입력 스키마
{
"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.
입력 스키마
{
"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).
입력 스키마
{
"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).
입력 스키마
{
"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}.
입력 스키마
{
"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.
입력 스키마
{
"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).
입력 스키마
{
"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.
입력 스키마
{
"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.
입력 스키마
{
"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).
입력 스키마
{
"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#"
}권장 프롬프트
run_contact_searchrun_contact_searchget_company_enrichment_resultget_company_enrichment_resultlist_lists커뮤니티
증거