B2B company and contact data enrichment across 375M+ companies with corporate hierarchy mapping.
Do not connect
A critical issue was found. Do not connect this server as-is.
Scanned 8 days ago Due for re-check
A server can change after it's graded. Re-run the automated scan to refresh this report.
This grade is deterministic and reproducible: the same server surface always yields the same grade under a given algorithm version. It is a real automated assessment computed by the MCPGrade engine from what the probe actually observed — not a fabricated or opinion score. It is not a manual human pentest, so it can miss context-specific risks.
Every signal below was measured directly by the automated probe. The grade is derived only from evidence like this — nothing is assumed.
The datamerge-mcp MCP server exposes 23 tools, focused primarily on general-purpose capabilities. Its published description reads: "B2B company and contact data enrichment across 375M+ companies with corporate hierarchy mapping". It communicates over Streamable HTTP using the 2025-06-18 protocol revision, and does not require authorization to connect. MCPGrade currently rates datamerge-mcp F — a critical issue was found and the server should not be connected as-is. Its most notable findings include "Metadata dictates tool-call ordering" and "Tool input schema requests a secret". This report is a deterministic, reproducible automated assessment: the same observed surface always yields the same grade under a given algorithm version, and it is refreshed as new scans arrive and free to read — but it is not a substitute for a manual human security review. Always re-check datamerge-mcp's advertised tools, transport security, and authorization posture before connecting an autonomous agent or sharing sensitive context with it.
Add datamerge-mcp to an MCP client using the endpoint below. Review the grade and findings above before granting an autonomous agent access.
MCP endpoint
https://mcp.datamerge.aiStreamable HTTP transport. This is the MCP endpoint, not a website — paste it into your MCP client server list rather than a browser.
Captured passively during the read-only scan. Click any value to find servers that match it.
The tools this server advertises via tools/list — names, purposes, and the parameters each accepts, exactly as enumerated read-only.
Configure DataMerge API authentication (required before using other tools if DATAMERGE_API_KEY is not set).
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.
Sorted worst-first. Each finding shows its severity, what it means, its OWASP MCP Top-10 mapping, and a recommended fix — the check id links to the exact methodology row that produced it.
tool: configure_datamerge
The text tells the model WHEN to call this tool relative to others ("always call first", "before any other tool", "chain to X tool") — a toxic-flow injection that hijacks the agent’s orchestration rather than describing the tool.
ation (required before using other tools if DATAMERGE_API_KEY is not set). {"type":"objeRecommendationTool metadata must describe only the tool, never sequence the agent’s calls.
tool: configure_datamerge
The input schema declares a parameter that asks the caller to hand over a password, key, token, or other secret — a credential-harvest / token-passthrough risk. (Bare pagination `token` params are excluded.)
parameter "apiKey"RecommendationNever pass secrets as tool arguments; authenticate out-of-band and remove credential parameters from the schema.
tool: start_company_enrichment
A tool exposes a free-text/webhook/feedback parameter with no honest purpose — a classic exfil channel.
parameter "webhook_url"RecommendationRemove side-channel parameters; constrain tool inputs.
tool: start_company_enrichment_and_wait
A tool exposes a free-text/webhook/feedback parameter with no honest purpose — a classic exfil channel.
parameter "webhook_url"RecommendationRemove side-channel parameters; constrain tool inputs.
tool: start_company_enrichment_and_wait
A tool description tries to alter the model’s use of another tool.
Same params as start_company_enrichment plus poll_interval_seconds and timeout_seconds.RecommendationDescriptions must describe only their own tool.
tool: run_company_enrichment
A tool exposes a free-text/webhook/feedback parameter with no honest purpose — a classic exfil channel.
parameter "webhook_url"RecommendationRemove side-channel parameters; constrain tool inputs.
tool: run_contact_enrich
A tool exposes a free-text/webhook/feedback parameter with no honest purpose — a classic exfil channel.
iption":"Opaque token from a prior pending response. When set, all otRecommendationRemove side-channel parameters; constrain tool inputs.
tool: run_contact_search
A tool exposes a free-text/webhook/feedback parameter with no honest purpose — a classic exfil channel.
iption":"Opaque token from a prior pending response. When set, all otRecommendationRemove side-channel parameters; constrain tool inputs.
tool: contact_search
A tool exposes a free-text/webhook/feedback parameter with no honest purpose — a classic exfil channel.
parameter "webhook"RecommendationRemove side-channel parameters; constrain tool inputs.
tool: contact_search
A tool description tries to alter the model’s use of another tool.
ains to search a saved list.RecommendationDescriptions must describe only their own tool.
tool: contact_search_unenriched
A tool exposes a free-text/webhook/feedback parameter with no honest purpose — a classic exfil channel.
parameter "webhook"RecommendationRemove side-channel parameters; constrain tool inputs.
tool: run_contact_search_unenriched
A tool description tries to alter the model’s use of another tool.
. Requires the `contact_search_unenriched` beta flag. Limits: 10 domains and max_results_RecommendationDescriptions must describe only their own tool.
The server accepts tool enumeration (and likely invocation) with no authentication.
RecommendationRequire OAuth 2.1 authorization for any server exposing non-public tools.
tool: remove_list_item
The server advertises open-world / broadly-scoped capabilities.
annotations.destructiveHint = trueRecommendationScope tools to the minimum needed.
tool: delete_list
The server advertises open-world / broadly-scoped capabilities.
annotations.destructiveHint = trueRecommendationScope tools to the minimum needed.
Vantaj uptime monitoring via MCP — manage monitors, heartbeats, incidents, and status pages.
Unified gateway to Algeria's TKAWEN ecosystem: commerce, certification, and AI tools.
Provides access to the Cohereon Doctrine AI safety framework with governance components, tiered access, and agent onboarding.
Agentic rails for complex workflows with receipts, fees, and MCP tool access.
Structural TC39 spec lookup for ECMA-262 and ECMA-402 in AI agents, SHA-pinned and offline-first.
Structural TC39 spec lookup for ECMA-262 and ECMA-402 in AI agents, SHA-pinned and offline-first.
GET /v1/company/enrich/{job_id}/status. Poll until status is "completed" or "failed". Response includes record_ids. Status values: queued · processing · completed · failed.
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 time
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 th
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", con
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", continua
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
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 (boo
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) i
GET /v1/contact/search/{job_id}/status. Poll until status is "completed" or "failed". Response includes record_ids.
POST /v1/contact/enrich. Enrich specific contacts by LinkedIn URL or name+domain. Returns a job_id (async, 202).
GET /v1/contact/enrich/{job_id}/status. Poll until status is "completed" or "failed". Response includes record_ids.
GET /v1/contact/get?record_id={uuid}. Retrieve a specific contact by record UUID. Never charges credits.
GET /v1/lists. Optional: object_type=company or object_type=contact.
POST /v1/lists. Body: name, object_type (company or contact).
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).
DELETE /v1/lists/{object_type}/{list_slug}/{item_id}.
DELETE /v1/lists/{object_type}/{list_slug}. System lists cannot be deleted.
GET /v1/credits/balance. Returns credits_balance and balances (one_off, recurring, rollover, total).
Check if the DataMerge API client is configured and can connect. Uses /auth/info.
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_se
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_re