DataMerge MCP
by datamerge.ai · remote · no sign-in to list tools · v1.0.0 · published by ai.datamerge
B2B data enrichment for 375M+ companies: legal entities, corporate hierarchies, and contacts.
23 tools: 2 can delete or cancel things, 12 change things and 9 only read.
Scanned Oct 21, 2026
- Deletes or cancels2Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things12Claude Code: ask: see these tools
- Only reads9Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http datamerge https://mcp.datamerge.ai --header 'Authorization: <your-authorization>'Findings
Matches of fixed checks, with the text they matched.
The description contains "any other tool", wording about other tools or servers.
What this check looks forMatched text
description: "...set — do not ask the user, do not call any other tool first. Typical jobs finish within 5 att..."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
23 tools
Deletes or cancels 2Claude Code: deny
delete_listDELETE /v1/lists/{object_type}/{list_slug}.No findings
Why it is in this group
- The name "delete_list" says "delete": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it DELETE /v1/lists/{object_type}/{list_slug}. System lists cannot be deleted.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
remove_list_itemDELETE /v1/lists/{object_type}/{list_slug}/{item_id}.No findings
Why it is in this group
- The name "remove_list_item" says "remove": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it DELETE /v1/lists/{object_type}/{list_slug}/{item_id}.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
Changes things 12Claude Code: ask
configure_datamergeConfigure DataMerge API authentication (required before using other tools if DATAMERGE_API_KEY is not set).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Configure DataMerge API authentication (required before using other tools if DATAMERGE_API_KEY is not set).
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
contact_enrichPOST /v1/contact/enrich.No findings
Why it is in this group
- The description's first verb is "post": a word for a change.
Description, as the server wrote it POST /v1/contact/enrich. Enrich specific contacts by LinkedIn URL or name+domain. Returns a job_id (async, 202).
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
contact_searchPOST /v1/contact/search.No findings
Why it is in this group
- The name "contact_search" says "search": a word for reading.
- The description's first verb is "post": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
contact_search_unenrichedPOST /v1/contact/search/unenriched.No findings
Why it is in this group
- The name "contact_search_unenriched" says "search": a word for reading.
- The description's first verb is "post": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: false
- idempotentHint: false
create_listPOST /v1/lists.No findings
Why it is in this group
- The name "create_list" says "create": a word for a change.
Description, as the server wrote it POST /v1/lists. Body: name, object_type (company or contact).
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
health_checkCheck if the DataMerge API client is configured and can connect.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Check if the DataMerge API client is configured and can connect. Uses /auth/info.
Annotations the server declares
- readOnlyHint: true
run_company_enrichmentAgent-friendly company enrichment.1 finding
Why it is in this group
- The name "run_company_enrichment" says "run": a word for a change.
Findings
- Warn
The description contains "any other tool", wording about other tools or servers.
What this check looks forMatched text
description: "...set — do not ask the user, do not call any other tool first. Typical jobs finish within 5 att..."
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
run_contact_enrichAgent-friendly contact enrichment.No findings
Why it is in this group
- The name "run_contact_enrich" says "run": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
run_contact_searchAgent-friendly contact search.No findings
Why it is in this group
- The name "run_contact_search" says "run": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
run_contact_search_unenrichedPOST /v1/contact/search/unenriched/sync.No findings
Why it is in this group
- The name "run_contact_search_unenriched" says "run": a word for a change.
Description, as the server wrote it 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).
Annotations the server declares
- readOnlyHint: false
- idempotentHint: false
start_company_enrichmentPOST /v1/company/enrich.No findings
Why it is in this group
- The name "start_company_enrichment" says "start": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
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.No findings
Why it is in this group
- The name "start_company_enrichment_and_wait" says "start": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
Only reads 9Claude Code: allow
get_companyGet a single company record.No findings
Why it is in this group
- The name "get_company" says "get": a word for reading.
Description, as the server wrote it 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).
Annotations the server declares
- readOnlyHint: true
get_company_enrichment_resultGET /v1/company/enrich/{job_id}/status.No findings
Why it is in this group
- The name "get_company_enrichment_result" says "get": a word for reading.
Description, as the server wrote it GET /v1/company/enrich/{job_id}/status. Poll until status is "completed" or "failed". Response includes record_ids. Status values: queued · processing · completed · failed.
Annotations the server declares
- readOnlyHint: true
get_company_hierarchyGet all entities in the same global ultimate hierarchy.No findings
Why it is in this group
- The name "get_company_hierarchy" says "get": a word for reading.
Description, as the server wrote it 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).
Annotations the server declares
- readOnlyHint: true
get_contactGET /v1/contact/get?record_id={uuid}.No findings
Why it is in this group
- The name "get_contact" says "get": a word for reading.
Description, as the server wrote it GET /v1/contact/get?record_id={uuid}. Retrieve a specific contact by record UUID. Never charges credits.
Annotations the server declares
- readOnlyHint: true
get_contact_enrich_statusGET /v1/contact/enrich/{job_id}/status.No findings
Why it is in this group
- The name "get_contact_enrich_status" says "get": a word for reading.
Description, as the server wrote it GET /v1/contact/enrich/{job_id}/status. Poll until status is "completed" or "failed". Response includes record_ids.
Annotations the server declares
- readOnlyHint: true
get_contact_search_statusGET /v1/contact/search/{job_id}/status.No findings
Why it is in this group
- The name "get_contact_search_status" says "get": a word for reading.
Description, as the server wrote it GET /v1/contact/search/{job_id}/status. Poll until status is "completed" or "failed". Response includes record_ids.
Annotations the server declares
- readOnlyHint: true
get_credits_balanceGET /v1/credits/balance.No findings
Why it is in this group
- The name "get_credits_balance" says "get": a word for reading.
Description, as the server wrote it GET /v1/credits/balance. Returns credits_balance and balances (one_off, recurring, rollover, total).
Annotations the server declares
- readOnlyHint: true
get_list_itemsGET /v1/lists/{object_type}/{list_slug}.No findings
Why it is in this group
- The name "get_list_items" says "get": a word for reading.
Description, as the server wrote it 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).
Annotations the server declares
- readOnlyHint: true
list_listsGET /v1/lists.No findings
Why it is in this group
- The name "list_lists" says "list": a word for reading.
Description, as the server wrote it GET /v1/lists. Optional: object_type=company or object_type=contact.
Annotations the server declares
- readOnlyHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http datamerge https://mcp.datamerge.ai --header 'Authorization: <your-authorization>'Run in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__datamerge__get_company_enrichment_result",
"mcp__datamerge__get_company",
"mcp__datamerge__get_company_hierarchy",
"mcp__datamerge__get_contact_search_status",
"mcp__datamerge__get_contact_enrich_status",
"mcp__datamerge__get_contact",
"mcp__datamerge__list_lists",
"mcp__datamerge__get_list_items",
"mcp__datamerge__get_credits_balance"
],
"ask": [
"mcp__datamerge__configure_datamerge",
"mcp__datamerge__start_company_enrichment",
"mcp__datamerge__start_company_enrichment_and_wait",
"mcp__datamerge__run_company_enrichment",
"mcp__datamerge__run_contact_enrich",
"mcp__datamerge__run_contact_search",
"mcp__datamerge__contact_search",
"mcp__datamerge__contact_enrich",
"mcp__datamerge__create_list",
"mcp__datamerge__health_check",
"mcp__datamerge__contact_search_unenriched",
"mcp__datamerge__run_contact_search_unenriched"
],
"deny": [
"mcp__datamerge__remove_list_item",
"mcp__datamerge__delete_list"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as datamerge. Review it before you use it.