# Whisper

> One routable IPv6 per AI agent, verifiable from the DNS root. Keyless tools need no signup.

- name: io.github.whisper-sec/whisper
- version: 0.222.0
- connection class: R0 (autonomous)
- trust: 96/100
- quality: 80/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.whisper-sec%2Fwhisper
- tools: https://api.protogrid.dev/v1/servers/io.github.whisper-sec%2Fwhisper/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "whisper": {
      "type": "http",
      "url": "https://whisper.online/mcp"
    }
  }
}
```


## Trust

- hygiene: 95
- liveness: 100
- freshness: 100
- provenance: 90
- drivers: +repository +namespace-matches-repo +website +reachable +uptime-100% +updated-8d-ago -unpinned-packages(1)
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 80/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-06-18; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 17 of 17 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: whisper_history (idempotentHint); whisper_verify (idempotentHint); whisper_assess (idempotentHint); …
- pass `tools.token_cost`: about 2,133 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 75 (weight 15)

- warn `stability.changes`: 26 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: deps.dev does not know @whisper-security/whisper-mcp@0.222.0

- tools: 17, about 2,133 tokens to load them all
- tool set hash: ecc8163487761bc9039c6fef451b7b14
- tools last changed: 2026-09-25T19:37:41.698Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.whisper-sec/whisper.svg)](https://protogrid.dev/servers/io.github.whisper-sec/whisper)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-09-25 `whisper_verify` changed (annotations)
- 2026-09-25 `whisper_topAsnsByPrefixCount` changed (outputSchema)
- 2026-09-25 `whisper_psl` changed (outputSchema)
- 2026-09-25 `whisper_threatintel` changed (outputSchema)
- 2026-09-25 `whisper_asset` changed (outputSchema)
- 2026-09-25 `whisper_lookupTorRelay` changed (outputSchema)
- 2026-09-25 `whisper_lookupTlsFingerprint` changed (outputSchema)
- 2026-09-25 `whisper_history` changed (outputSchema)
- 2026-09-25 `whisper_origins` changed (outputSchema)
- 2026-09-25 `whisper_variants` changed (outputSchema)

Full history: https://api.protogrid.dev/v1/servers/io.github.whisper-sec%2Fwhisper/changes

## Dependencies

- npm @whisper-security/whisper-mcp@0.222.0: unknown

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0.

## Remotes

- https://whisper.online/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

- npm @whisper-security/whisper-mcp@0.222.0
- oci ghcr.io/whisper-sec/whisper:0.222.0

## Tools (17)

- `whisper_assess`: Assess the risk/policy posture of one or more indicators. Answers without an API key. Example call: {"skill":"assess","input":"example.com"}
- `whisper_asset`: Resolve an asset and its catalog of attributes. Answers without an API key. Example call: {"skill":"asset","input":"example.com"}
- `whisper_explain`: Explain a verdict - the evidence and reasoning behind it. Answers without an API key. Example call: {"skill":"explain","input":"example.com"}
- `whisper_history`: Historical records for an indicator (incl. whois/bgp history). Answers without an API key. Example call: {"skill":"history","input":"example.com"}
- `whisper_identify`: Identify an indicator (domain, IP, hash, …) against the graph. Answers without an API key. Example call: {"skill":"identify","input":"example.com"}
- `whisper_lookupTlsFingerprint`: Look up a TLS (JA3/JA4) fingerprint in the graph. Answers without an API key. Example call: {"skill":"lookupTlsFingerprint","input":"ja3:771,4865-4866-4867"}
- `whisper_lookupTorRelay`: Look up Tor relay metadata for an address. Answers without an API key. Example call: {"skill":"lookupTorRelay","input":"185.220.101.1"}
- `whisper_origins`: Trace the origins/provenance of an indicator. Answers without an API key. Example call: {"skill":"origins","input":"example.com"}
- `whisper_psl`: Public-suffix-list family (tld-plus-one, is-public-suffix, affiliation). A family verb: name the sub-verb as "sub" alongside the input. Sub-verbs: tldPlusOne, isPublicSuffix, affiliation.. Answers without an API key. Example call: {"skill":"psl","sub":"tldPlusOne","input":"a.b.example.co.uk"}
- `whisper_rdap`: The public registration record for any address in Whisper's space, in RFC 9083 form: the handle, the agent's label, its country, and the entities behind it. The same document the RDAP service serves at /ip/{address}, which any RDAP client can already read. Answers without an API key. Example call: {"skill":"rdap","input":"2a04:2a01:b69a:6717:e3b0:51ff:3bf7:f478"}
- `whisper_signup`: Start or complete Whisper signup from an email address alone, and receive an API key that unlocks the provisioning and governance skills on this card. Send {"email":"..."} to start; a six-digit code arrives by email; send {"signup_id":"...","code":"123456"} to complete. No human step, no account needed first. Example call: {"skill":"signup","input":{"email":"agent@example.com"}}
- `whisper_threatintel`: Threat-intelligence indicator family (candidate apex/CDN/hosting). A family verb: name the sub-verb as "sub" alongside the input. Sub-verbs: candidateCdnApex, candidateMultiTenantApex, candidateSharedHostingIp.. Answers without an API key. Example call: {"skill":"threatintel","sub":"candidateCdnApex","input":5}
- `whisper_topAsnsByPrefixCount`: Top ASNs ranked by announced-prefix count. Answers without an API key. Example call: {"skill":"topAsnsByPrefixCount","input":10}
- `whisper_variants`: Enumerate variants/permutations of an indicator. Answers without an API key. Example call: {"skill":"variants","input":"example.com"}
- `whisper_verify`: Is this IPv6 address or hostname a real Whisper agent, and whose? Grades the full keyless trust chain: the reverse DNS record, the forward AAAA confirming it back to the same address, and the DANE-EE certificate pin published in DNSSEC-signed DNS. Returns is_whisper_agent with the evidence for the verdict either way, so a negative answer is an answer and not an error. Answers without an API key, and every leg of it is independently checkable from the DNS root with dig. Example call: {"skill":"verify","input":"2a04:2a01:b69a:6717:e3b0:51ff:3bf7:f478"}
- `whisper_walk`: Walk the graph from an indicator across its relationships. Answers without an API key. Example call: {"skill":"walk","input":"example.com"}
- `whisper_watch`: Watch an indicator for change/activity over time. Answers without an API key. Example call: {"skill":"watch","input":{"action":"list"}}
