Skip to content

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.

Deletes · 2Changes · 12

23 tools: 2 can delete or cancel things, 12 change things and 9 only read.

Scanned Oct 21, 2026

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.

1 warn
  • The description contains "any other tool", wording about other tools or servers.

    Matched text

    description: "...set — do not ask the user, do not call any other tool first. Typical jobs finish within 5 att..."

    What this check looks for

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_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.

      Matched text

      description: "...set — do not ask the user, do not call any other tool first. Typical jobs finish within 5 att..."

      What this check looks for
    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_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.

.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.