WhisperGraph
NPM · @WHISPER-SECURITY/WHISPER-GRAPH-MCP · 2 COMPONENTS · SCANNED SEP 20
The internet's infrastructure graph for AI agents - 46B nodes and edges, free trial via 2 HTTP calls
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 31 of 96 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to whisper-sec/whisper-graph-mcp). View diagnostics → Pass
- Clear OSI-approved license (Apache-2.0).Pass
- Actively maintained (last published 63 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability73
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 7451 tokens (~532/item across 14 items; 8 tools + 6 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management90
- Stability observed for 27 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "query" implies "execute" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Fail
- An AI judge read all 10 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the WhisperGraph MCP server?
WhisperGraph runs locally as an npm package, launched with npx -y @whisper-security/whisper-graph-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · @whisper-security/whisper-graph-mcp
claude mcp add whisper-sec-whisper-graph -- npx -y @whisper-security/whisper-graph-mcp
{
"mcpServers": {
"whisper-sec-whisper-graph": {
"command": "npx",
"args": [
"-y",
"@whisper-security/whisper-graph-mcp"
]
}
}
} {
"servers": {
"whisper-sec-whisper-graph": {
"command": "npx",
"args": [
"-y",
"@whisper-security/whisper-graph-mcp"
]
}
}
} codex mcp add whisper-sec-whisper-graph -- npx -y @whisper-security/whisper-graph-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"whisper-sec-whisper-graph": {
"type": "local",
"command": [
"npx",
"-y",
"@whisper-security/whisper-graph-mcp"
],
"enabled": true
}
}
} openclaw mcp add whisper-sec-whisper-graph --command npx --arg -y --arg @whisper-security/whisper-graph-mcp
mcp_servers:
whisper-sec-whisper-graph:
command: "npx"
args: ["-y", "@whisper-security/whisper-graph-mcp"] {
"McpServers": {
"whisper-sec-whisper-graph": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"@whisper-security/whisper-graph-mcp"
]
}
}
} assistant mcp add whisper-sec-whisper-graph -t stdio -c npx -a -y @whisper-security/whisper-graph-mcp
{
"mcpServers": {
"whisper-sec-whisper-graph": {
"command": "npx",
"args": [
"-y",
"@whisper-security/whisper-graph-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 20 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.
- 17 Sept 26 −3
- Stability: pass → 0.80 functional
- 16 Sept 26 0
- Stability: 0.97 → pass security
- 15 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 13 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.
- 11 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.
- 10 Sept 26 −3
- Stability: pass → 0.80 functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed npm/@whisper-security/whisper-graph-mcp@0.2.0
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | whisper-sec/whisper-graph-mcp |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/whisper-sec/whisper-graph-mcp/.github/workflows/release.yml@refs/heads/main |
| Rekor log index | 2195433163 |
| Predicate type | https://slsa.dev/provenance/v1 |
| Subject digest | sha512:c5c7cb82da0efc6d1e22ab44c8115f44119620278b7a5d40e8b1856484cf1ca6a91d41a2b49f93048c8d4ad6bfb50352c3fd4f56a9427e76d8eb1f53c |
Background: How many MCP packages publish verified provenance →
Dependencies 96 packages
| Packages resolved | 96 |
|---|---|
| Stale | 31 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
describe_label Describe WhisperGraph Label ~179
Describe a single label: confirm it exists, get its node count, and enumerate the property keys observed on that label. Use this BEFORE writing a query that filters on a specific property. If you write WHERE h.fqdn = "..." but describe_label("HOSTNAME") returns properties = ["name", "threatScore", ...], your query will silently scan the entire label. Verify first. Argument: label (string, required) - uppercase letters, digits, and underscores only. Returns: {name, exists, count, properties[], edgesDoc}. Cached 5 minutes. Tip: edge types are NOT in the response - see the whisper://schema/relationships resource for which edges connect this label to others.
| Name | Type | Req | Description |
|---|---|---|---|
| label | string | yes | Label name. Uppercase letters, digits, underscores. Examples: HOSTNAME, IPV4, ASN. |
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | – | – |
| edgesDoc | string | – | – |
| error | string | – | – |
| exists | boolean | yes | – |
| name | string | yes | – |
| properties | array | – | – |
| propertiesError | string | – | – |
| suggestion | string | – | – |
No examples provided.
domain_variants Typosquat / Brand-Protection Variants ~392
Generate typosquatting / brand-protection variants of a domain or brand name and check which ones actually exist in WhisperGraph. Runs 14 mutation algorithms - character omission, repetition, transposition, QWERTY-adjacent replacement/insertion, vowel-swap, bitsquatting, homoglyph / Unicode confusables, hyphenation, dot insertion/omission, TLD-swap, TLD-addition, and subdomain-add. Unicode input is accepted (and expected) so IDN homoglyph lookalikes resolve correctly. Returns { rows: [...] }. Each row: { variant, method, exists, nodeId, label, confidence (0.3-0.9), confidenceLabel (low/medium/high) }. By default only variants that EXIST as nodes are returned - the registered lookalikes worth investigating. Note that "exists" means registered/observed, NOT malicious: pivot each hit through explain_indicator for a threat verdict. Arguments: - name (string, required) - the domain or brand to mutate, e.g. "google.com". Allowed characters: letters (including Unicode), digits, '.', '-', '_'. - label (string, optional, default HOSTNAME) - node label to check existence against. - includeNonExistent (boolean, optional, default false) - when true, also return generated variants that do NOT exist in the graph (larger, noisier result set). Performance: typically <150ms. Results are capped at 500 rows.
| Name | Type | Req | Description |
|---|---|---|---|
| includeNonExistent | boolean | – | Optional. When true, also return generated variants that do not exist in the graph. Default: false. |
| label | string | – | Optional node label to check existence against. Default: HOSTNAME. |
| name | string | yes | Domain or brand to generate variants for. Examples: "google.com", "paypal.com". Unicode allowed. |
| Name | Type | Req | Description |
|---|---|---|---|
| rows | array | yes | – |
No examples provided.
explain_indicator Threat Assessment for an Indicator ~276
Run a comprehensive threat assessment on a single indicator. The indicator can be an IPv4, IPv6, hostname, CIDR network, or ASN - the procedure auto-detects the type. Returns a single structured row: { indicator, type, available, cached, found, score, level (NONE/INFO/LOW/MEDIUM/HIGH/CRITICAL), explanation, factors[], sources[] }. For ASN inputs the row also includes a `breakdown` object with composite sub-scores (threatDensityScore, graphMetricsScore, historicalScore, prefixAgeScore). For CIDR inputs the explanation field carries threat-density stats (listed IPs, density %). Prefer this tool over manual ASN→PREFIX→IP→LISTED_IN walks - those time out on large ASNs (AWS, GCP, Azure, Cloudflare). Performance: 3-25ms for IP/domain/network, up to ~80ms for ASN. Argument: indicator (string, required). Allowed characters: letters, digits, '.', '-', ':', '/', '_'. Cypher-special characters are rejected.
| Name | Type | Req | Description |
|---|---|---|---|
| indicator | string | yes | IPv4 / IPv6 / hostname / CIDR / ASN. Examples: "185.220.101.1", "google.com", "3.64.0.0/12", "AS13335". |
| Name | Type | Req | Description |
|---|---|---|---|
| rows | array | yes | – |
No examples provided.
list_labels List WhisperGraph Labels ~121
List all node labels in WhisperGraph with their counts. Use this BEFORE writing a query when you're not sure which label to anchor on. It rules out hallucinated labels (e.g. there is no DOMAIN or FQDN - only HOSTNAME) and tells you which labels are large (HOSTNAME, IPV4) vs small (RIR, COUNTRY). Returns: an array of {label, count} rows. Cached server-side for 5 minutes. Tip: pair with describe_label to verify which properties exist on a label before referencing them in WHERE clauses.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| labels | array | yes | – |
No examples provided.
list_recipes List WhisperGraph Catalog Recipes ~358
List the whisper.security catalog of ready-made recipes - the full set exposed by this server. Two kinds: - `direct` recipes (keyless) are a single graph procedure: whisper.assess (threat posture), whisper.identify (vendor/operator), whisper.explain, whisper.variants (typosquats), whisper.origins (CDN de-cloak), whisper.history / whisper.history.whois (WHOIS timeline), whisper.walk, whisper.psl.*, whisper.asSet, whisper.lookupTorRelay, db.schema. These run WITHOUT an API key (rate-limited). - `flow` recipes (keyed) are curated multi-step investigations: attack-path, attack-surface, indicator-enrichment, infrastructure-mapping, subdomain-takeover, bgp-hijack-exposure, blast-radius, route-health, typosquat, nameserver-hijack-dns-consistency, map-supply-chain-concentration, discover-ai-agent-infrastructure, build-takedown-evidence-package, indicator, anycast-dns-root-sovereignty. These need a WhisperGraph API key. Each entry returns { slug, title, purpose, category, mode, access, requiresKey, inputs[], params[], columns[], docsUrl }. Run any of them with run_recipe(recipe=<slug>, ...). Optional filters: - mode ("direct" | "flow") - access ("keyless" | "keyed") The catalog is generated from the canonical whisper.security catalog, so this list stays in sync with what the platform ships.
| Name | Type | Req | Description |
|---|---|---|---|
| access | string | – | Filter to keyless (no API key) or keyed (API key required) recipes. |
| mode | string | – | Filter to only direct or only flow recipes. |
| Name | Type | Req | Description |
|---|---|---|---|
| recipes | array | yes | – |
No examples provided.
query WhisperGraph Cypher Query ~1,391
Execute a Cypher query against WhisperGraph - the internet's largest infrastructure graph database (7.39B nodes, 39B edges, 5.6M threat intel edges). Returns JSON with columns, rows, and statistics. Use this tool for any question involving domains, hostnames, IPs, DNS, BGP, GeoIP, web links, email infrastructure, WHOIS, DNSSEC, or threat intelligence. NODE LABELS (20): HOSTNAME (2.6B), IPV4 (619M), IPV6 (820K), PREFIX (2.5M), ASN (116K), ASN_NAME (108K), ORGANIZATION (119M), CITY (54K), TLD (1.7K), COUNTRY (424), RIR (5), DNSSEC_ALGORITHM (8), TLD_OPERATOR (737), REGISTRAR (51K), EMAIL (237M), PHONE (60M), REGISTERED_PREFIX (326K, virtual), ANNOUNCED_PREFIX (1.4M, virtual), FEED_SOURCE (40, virtual), CATEGORY (18, virtual). All nodes have a "name" property. Threat-listed IPV4/IPV6/HOSTNAME nodes also carry: threatScore (Double), threatLevel (NONE/INFO/LOW/MEDIUM/HIGH/CRITICAL), threatSources, threatFirstSeen/threatLastSeen (epoch ms), and 13 boolean flags: isThreat, isAnonymizer, isC2, isMalware, isPhishing, isSpam, isBruteforce, isScanner, isBlacklist, isTor, isProxy, isVpn, isWhitelist. ANNOUNCED_PREFIX adds BGP-enrichment: isMoas, isAnycast, isWithdrawn, wasMoas, hasOriginChanged, threatScore, threatLevel, threatSourceCount, firstSeen, lastSeen. LISTED_IN edges carry firstSeen, lastSeen, weight. KEY EDGES: RESOLVES_TO (HOSTNAME→IPV4/IPV6, forward only), CHILD_OF (child→parent: HOSTNAME→HOSTNAME→TLD), ALIAS_OF (CNAME), NAMESERVER_FOR / MAIL_FOR (NS/MX → domain - to list a domain's MX use (domain)<-[:MAIL_FOR]-(mx)), SPF_INCLUDE/SPF_IP/SPF_A/SPF_MX/SPF_EXISTS/SPF_REDIRECT (SPF policy; SPF_IP targets IPV4|IPV6|PREFIX), LINKS_TO (web hyperlinks, 10.8B), BELONGS_TO (3 semantics: IPV4/IPV6→PREFIX, PREFIX→RIR, FEED_SOURCE→CATEGORY), LOCATED_IN (IPV4/IPV6→CITY only - for country, chain through HAS_COUNTRY), HAS_COUNTRY (ASN/CITY/IPV4/HOSTNAME/PHONE/ANNOUNCED_PREFIX/REGISTERED_PREFIX→COUNTRY), ANNOUNCED_BY (IPV4/IPV6→ANNOUNCED_PREFIX, then ROUTES→ASN), ROUTES (ASN/ANN…
| Name | Type | Req | Description |
|---|---|---|---|
| cypher | string | yes | Cypher query string. Must include LIMIT for exploration queries. Use {name: "value"} property syntax for lookups. |
| Name | Type | Req | Description |
|---|---|---|---|
| columns | array | yes | – |
| error | string | – | – |
| errorCode | string | – | – |
| retryable | boolean | – | – |
| rows | array | yes | – |
| statistics | object | – | – |
| success | boolean | yes | – |
| suggestion | string | – | – |
No examples provided.
run_recipe Run a WhisperGraph Catalog Recipe ~526
Run a named whisper.security catalog recipe by its slug (see list_recipes for the full set). This is the highest-leverage tool for infrastructure & threat questions: instead of hand-writing Cypher, run the curated recipe. Arguments: - recipe (string, required) - the recipe slug, e.g. "assess", "identify", "indicator-enrichment", "infrastructure-mapping", "attack-path", "subdomain-takeover", "typosquat", "bgp-hijack-exposure". - inputs (object, optional) - the recipe's inputs keyed by name (see the recipe's inputs[] in list_recipes). Examples: {"v":"8.8.8.8"} for assess/identify; {"value":"github.com"} for indicator-enrichment / infrastructure-mapping; {"domain":"paypal.com"} for typosquat; {"country":"BR"} for anycast-dns-root-sovereignty; {"value":"paypal.com","other":"paypa1.com"} for attack-path. Omit to use the recipe's built-in example. - params (object, optional) - flow tuning params, e.g. {"level":"deep"} for attack-surface / infrastructure-mapping / attack-path, {"depth":3} for blast-radius, {"instanceType":"Global"} for anycast-dns-root-sovereignty. Behaviour: - `direct` recipes run keyless and return { success, recipe, mode:"direct", columns[], rows[], statistics }. - `flow` recipes need an API key (WHISPER_API_KEY over stdio, or the relayed X-API-Key / Authorization header over HTTP) and return { success, recipe, mode:"flow", steps[], totalLatencyMs } where each step carries { id, title, columns, rows }. - On an unknown slug or a keyless call to a keyed flow, returns { success:false, error, suggestion } - never throws. Prefer run_recipe over hand-written Cypher whenever a recipe fits the question; fall back to the query tool for bespoke traversals.
| Name | Type | Req | Description |
|---|---|---|---|
| inputs | object | – | The recipe's inputs keyed by name, e.g. {"v":"8.8.8.8"} or {"value":"github.com"}. |
| params | object | – | Optional flow tuning params, e.g. {"level":"deep"} or {"depth":3}. |
| recipe | string | yes | Recipe slug from list_recipes, e.g. "assess", "indicator-enrichment", "attack-path". |
| Name | Type | Req | Description |
|---|---|---|---|
| columns | array | – | – |
| error | string | – | – |
| mode | string | – | – |
| recipe | string | – | – |
| rows | array | – | – |
| statistics | object | – | – |
| steps | array | – | – |
| success | boolean | yes | – |
| suggestion | string | – | – |
| totalLatencyMs | number | – | – |
No examples provided.
whisper_history Historical WHOIS / BGP for an Indicator ~259
Retrieve historical WHOIS or BGP data for a single indicator. The indicator can be an IPv4, IPv6, hostname, CIDR, or ASN - the procedure auto-detects the type. Returns shape varies by indicator type: - IP / prefix (type=routing): { origin, prefix, startTime, endTime, peersSeing } - Domain (type=domain): WHOIS snapshots - { queryTime, createDate, updateDate, expiryDate, registrar, nameServers } - ASN (type=asn): prefix announcement history (slow, ~9s for large ASNs) On upstream failure (the data source is rate-limiting or temporarily down), the row shape is: { available: false, error: "timeout" | ..., retryAfter: <seconds> }. Surface the retryAfter to the user - DO NOT loop on retry. Argument: indicator (string, required). Allowed characters: letters, digits, '.', '-', ':', '/', '_'.
| Name | Type | Req | Description |
|---|---|---|---|
| indicator | string | yes | IPv4 / IPv6 / hostname / CIDR / ASN. Examples: "8.8.8.8", "google.com", "8.8.8.0/24", "AS15169". |
| Name | Type | Req | Description |
|---|---|---|---|
| rows | array | yes | – |
No examples provided.
What is the WhisperGraph MCP server?
WhisperGraph is an MCP server listed in the public MCP registry as io.github.whisper-sec/whisper-graph. The internet's infrastructure graph for AI agents - 46B nodes and edges, free trial via 2 HTTP calls. This page covers its npm package (@whisper-security/whisper-graph-mcp).
Is the WhisperGraph MCP server safe to use?
WhisperGraph scores 92 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the WhisperGraph MCP server expose?
WhisperGraph exposes 8 tools: query, list_labels, describe_label, explain_indicator, whisper_history, and 3 more. Their descriptions and schemas cost roughly 3,502 tokens of context every time the server is loaded.
Is the WhisperGraph MCP server still maintained?
WhisperGraph is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the WhisperGraph MCP server under?
WhisperGraph declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.