Live threat intel for agents: incidents, actors, CVEs with KEV/EPSS, ransomware leak-site victims.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
One-click editor setup isnβt available for this listing yet β we donβt have a confirmed install command, and weβd rather show nothing than point your editor at the wrong package or host. Follow the projectβs own setup instructions, linked above.
An MCP server that gives Claude, Cursor, VS Code, Windsurf, Zed and any other MCP client live threat intelligence from ThreatCluster: incident clusters (one deduplicated story per incident, with a threat score, timeline and extracted entities), entity profiles (actors, malware, tools, vendors, CVEs), CVE records with KEV / EPSS / exploit status, and ransomware leak-site victims.
It is a thin, auditable wrapper over the public REST API. Every tool call is one or two GETs to https://threatcluster.io/api/public/v1 with your API key; nothing else leaves your machine, and there is no telemetry.
Published twice from one tool spec, so both are identical:
| Runtime | Install | Package |
|---|---|---|
| Python 3.10+ | uvx threatcluster-mcp (or pipx run threatcluster-mcp) | PyPI: threatcluster-mcp |
| Node 18+ | npx -y threatcluster-mcp | npm: threatcluster-mcp |
Free keys carry the five read scopes, 100 credits a day, 30 requests a minute and a 7-day lookback: https://threatcluster.io/api. Put it in THREATCLUSTER_API_KEY. If you use the tc CLI and have run tc auth login, the Python server picks that credential up automatically (keyring or the ~/.config/tc-cli/credentials file); the Node server reads the file only.
Claude Code
Claude Desktop (claude_desktop_config.json, Settings > Developer > Edit Config)
Cursor β one-click: see listings/cursor-deeplink.md, or add to ~/.cursor/mcp.json / .cursor/mcp.json:
VS Code (.vscode/mcp.json; the input prompts for the key instead of storing it in the file)
Windsurf (~/.codeium/windsurf/mcp_config.json) β same mcpServers block as Claude Desktop.
Zed (settings.json)
Check a configuration without starting a client: THREATCLUSTER_API_KEY=... npx -y threatcluster-mcp --check (prints where the key came from and where it will be sent β never the key).
Costs are ThreatCluster API credits (free keys: 100 a day). Every result carries cost (credits this call spent), budget (remaining today, from the response headers), as_of, and url fields on every cluster, entity, victim and CVE for citation.
| Tool | What it answers | API endpoint(s) | Credits |
|---|---|---|---|
search_threats | Keyword search over incident clusters; phrase, then all words, then any word; matched_stage says which | GET /threats?keyword= per term | 1 per term (max 8 calls) |
search_everything | Clusters, entity profiles and dark-web hits in one call | GET /search | 5 |
newest_threats | What is new in 1h / 24h / 7d / 30d, by first report or by momentum | GET /threats | 1 |
get_threat | Full record for one cluster: summary, timeline, articles, entities; include_iocs adds validated indicators | GET /threats/{id} (+ /iocs) | 1 (+1) |
leak_site_victims | Ransomware leak-site listings by sector / group / country / victim, plus a tally of the whole window | GET /darkweb/ransomware/victims + /facets | 2 |
lookup_entity | Profile of an actor, malware, tool, vendor, product, country, industry or CVE | GET /entities/search + GET /entities/{type}/{value} | 2 |
get_vulnerability | One CVE: CVSS, EPSS, KEV with due date, exploits, vendors, products | GET /vulnerabilities/{cve_id} | 1 |
exploited_vulnerabilities | CVEs in a window filtered to KEV / public exploit / severity / vendor / product | GET /vulnerabilities | 1 |
trending_entities | Actors, malware, tools, vendors, CVEs, countries rising over a window | GET /entities/trending | 1 |
api_budget | Remaining credits and rate state from the last responses β no API call | β | 0 |
One prompt, threatcluster_analyst, carries the analyst rules (tools first, cite every fact with the returned url, say what period you searched, leak-site listings are claims).
Errors come back as MCP tool errors with the API's own message: 401 tells the agent to set THREATCLUSTER_API_KEY and where a free key comes from, 429 carries the Retry-After, 403 names the missing scope or the lookback window and the plan that lifts it.
THREATCLUSTER_API_KEY (then TC_REFRESH_TOKEN, then the tc-cli store) and sent only as the X-API-Key header (or Authorization: Bearer for a JWT minted by tc login) to THREATCLUSTER_API_BASE.--check, never written to disk, and scrubbed from every error string; the test suites assert the key is absent from all stdout and stderr bytes, including on a 401 whose body quotes it.readOnlyHint: true) and validate arguments against the spec before any request is made.| Variable | Default | Purpose |
|---|---|---|
THREATCLUSTER_API_KEY | β | your key (tc_live_β¦, tc_agent_β¦) or a bearer from tc login |
THREATCLUSTER_API_BASE | https://threatcluster.io/api/public/v1 | API base (self-hosted or local test servers) |
THREATCLUSTER_SITE | https://threatcluster.io | base for the url fields in results |
python3 tools/sync_tools.py copies the spec into both packages; CI fails if the copies drift.
Related: the tc CLI, the API reference, the agent-tool recipe for a bare tool-calling function, and the integration guide.
GPL-3.0-or-later Β© ThreatCluster Ltd.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/threatcluster)<a href="https://allmcps.com/mcp/threatcluster"><img src="https://allmcps.com/api/badge/threatcluster?style=directory" alt="Threatcluster on AllMCPs" /></a>