# Connect over MCP

Wire Whisper into your IDE or AI client over MCP, or call the graph directly with an API key. Most clients connect with just the URL.

## Start with no account at all

`https://whisper.online/mcp` is the same plane over MCP with no credential. It answers
`initialize` and `tools/list` anonymously, and the 17 tools in that list really work anonymously:
assess a domain, IP, ASN or file hash, verify whether an address belongs to a Whisper agent and
whose, read any address's RDAP record, and query the infrastructure graph in Cypher.

```
claude mcp add --transport http whisper https://whisper.online/mcp
```

Any client that takes a bare URL needs nothing else. Send your key as the `X-API-Key` header and
the 22 provisioning and governance tools appear in the same list. There is a local form too, if
you would rather run the server yourself: `npx -y @whisper-security/whisper-mcp`.

## 1. Connect your client

Point your MCP client at `https://mcp.whisper.security`. The server supports OAuth (dynamic registration and PKCE), so most clients need only the URL.

![The Connect over MCP page: point your MCP client at the Whisper MCP URL, with a per-client tab strip (Claude Code, Claude Desktop, Cursor, VS Code, Windsurf, OpenAI Codex, ChatGPT, and a generic STDIO bridge) and the terminal command Claude Code's tab hands you.](/docs/shots/connect-mcp.png)

*One page to wire any MCP client to the graph. Most clients need only the URL; OAuth handles the rest.*

Claude Code:

```
claude mcp add --transport http whisper-graph https://mcp.whisper.security
```

Claude Desktop (Settings → Connectors → Add custom connector → enter the URL → Connect, OAuth runs on first use):

```
https://mcp.whisper.security
```

Cursor (`.cursor/mcp.json`):

```
{
  "mcpServers": {
    "whisper-graph": { "url": "https://mcp.whisper.security" }
  }
}
```

VS Code (`.vscode/mcp.json`, Copilot):

```
{
  "servers": {
    "whisper-graph": { "type": "http", "url": "https://mcp.whisper.security" }
  }
}
```

Windsurf:

```
{
  "mcpServers": {
    "whisper-graph": { "serverUrl": "https://mcp.whisper.security" }
  }
}
```

OpenAI Codex (`~/.codex/config.toml`):

```
[mcp_servers.whisper-graph]
url = "https://mcp.whisper.security"
# then: codex mcp login whisper-graph
```

ChatGPT (Settings → Apps & Connectors, Developer mode on a Plus/Pro/Business/Enterprise/Edu account → Create → enter the URL; OAuth runs on first use, no key ever touches the ChatGPT UI):

```
https://mcp.whisper.security
```

Any STDIO-only client, bridged over HTTP with `mcp-remote`:

```
npx mcp-remote https://mcp.whisper.security
```

## 2. What your client gets

Seven read-only tools, four resources, and ten prebuilt prompts. Clients read the graph but never mutate it - there is no write or admin path through any of them. The tools are `query` (raw Cypher), `explain_indicator` (a coverage-qualified threat verdict for an IP, hostname, ASN or CIDR), `explain_schema` (the label catalog, or one label's properties and edges), `identify` (who runs a host), `list_workflows` / `run_workflow` (prepared multi-step investigations), and `read_docs`. The resources are `whisper://quota`, `whisper://server`, `whisper://schema/full`, and `whisper://stats`.

Ask `explain_schema` for the label catalog and it returns all 41 labels, live. Your client's MCP/tools panel should show seven tools, four resources, ten prompts - that's a complete connection.

## 3. Static key or call the graph directly

Add a Bearer header with a key from [your API keys](/docs/account-and-keys):

```
{
  "mcpServers": {
    "whisper-graph": {
      "url": "https://mcp.whisper.security",
      "headers": { "Authorization": "Bearer $WHISPER_API_KEY" }
    }
  }
}
```

Or call the query endpoint directly with a Bearer token or an `X-API-Key` header:

```
curl -X POST https://graph.whisper.online/api/query \
  -H "Authorization: Bearer $WHISPER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "CALL explain(\"google.com\")"}'
```

## 4. Three ways to authenticate

Anonymous needs no signup and answers for real. An API key attributes the read to you and applies your PLAN's limits, and it is the agent path; measured 2026-09-28 on an agent-plan key, the same call returns identically with and without it, so the key is about attribution rather than headroom. Signed-in is the full console in the browser. No code changes between them beyond the auth header.
