configure_datamerge
Configure DataMerge API authentication (required before using other tools if DATAMERGE_API_KEY is not set).
Enriches companies and contacts asynchronously, walks corporate hierarchies, and charges per lookup — with agent-friendly tools that handle the polling.
LABSCO SUMMARY
Polling loops are where agents waste turns — call, wait, call again, lose track. The run_* tools fold that into a single conversation with a continuation token, while the raw tools stay available for anything that needs control. get_contact is worth noting separately: the description says it never charges, which is exactly the kind of thing a credit-metered API should tell a model before it calls in a loop. Corporate hierarchy is the differentiator against cheaper enrichment: knowing a domain's global ultimate parent is what makes account mapping possible.
DataMerge's endpoint, which lists 23 tools. Nearly every operation exists twice: a raw pair that returns a job id you poll, and a run_* variant that manages the waiting for you.
An API key as Authorization: Token. Credit-based and pay-per-lookup: one credit for a company record or a validated email, four for a mobile number, nothing upfront.
Paste a URL with a key — add the endpoint to your client
USE CASES
Use the agent-friendly tool so the polling is handled and the conversation is not a loop.
Pull every entity under the same global ultimate parent rather than treating one domain as the company.
Search contacts by domain and job title, then enrich the ones that matter.
Re-reading a record by id is documented as free; a mobile number costs four credits.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
configure_datamergeConfigure DataMerge API authentication (required before using other tools if DATAMERGE_API_KEY is not set).
contact_enrichPOST /v1/contact/enrich. Enrich specific contacts by LinkedIn URL or name+domain. Returns a job_id (async, 202).
contact_searchPOST /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.
contact_search_unenrichedPOST /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.
create_listPOST /v1/lists. Body: name, object_type (company or contact).
delete_listDELETE /v1/lists/{object_type}/{list_slug}. System lists cannot be deleted.
get_companyGet 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).
get_company_enrichment_resultGET /v1/company/enrich/{job_id}/status. Poll until status is "completed" or "failed". Response includes record_ids. Status values: queued · processing · completed · failed.
get_company_hierarchyGet 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).
get_contactGET /v1/contact/get?record_id={uuid}. Retrieve a specific contact by record UUID. Never charges credits.
get_contact_enrich_statusGET /v1/contact/enrich/{job_id}/status. Poll until status is "completed" or "failed". Response includes record_ids.
get_contact_search_statusGET /v1/contact/search/{job_id}/status. Poll until status is "completed" or "failed". Response includes record_ids.
get_credits_balanceGET /v1/credits/balance. Returns credits_balance and balances (one_off, recurring, rollover, total).
get_list_itemsGET /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).
health_checkCheck if the DataMerge API client is configured and can connect. Uses /auth/info.
list_listsGET /v1/lists. Optional: object_type=company or object_type=contact.
remove_list_itemDELETE /v1/lists/{object_type}/{list_slug}/{item_id}.
run_company_enrichmentAgent-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.
run_contact_enrichAgent-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.
run_contact_searchAgent-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.
run_contact_search_unenrichedPOST /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).
start_company_enrichmentPOST /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.
start_company_enrichment_and_waitPOST /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.
BEFORE YOU INSTALL
23 tools when we connected.
CONTEXT COST
Rated by the size of the 23 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
Add the endpoint to your client.
https://mcp.datamerge.ai