Every capability, from the command line.
The threat graph, IOCs, dark web feeds, ransomware tracking and CVE enrichment, reachable as a REST API, a tc command, or a tool an AI agent can call. Everything the UI does, scriptable.
macOS, Linux and Windows · Python 3.10+ · CLI and API keys included on every plan, Free included (read-only scopes).
Three ways to reach the same platform.
The threat graph, the entity engine, the scoring and the dark-web feeds are reachable wherever your team builds, over the same data the web app runs on. CTI teams build the tools. We do the data.
Build whatever you need.
29 public endpoints under /api/public/v1/*. Search, cluster detail, IOC export, entity graph, ransomware victims, CVE enrichment. Same data the website renders, in your stack, your shape, your tools.
Script and compose.
The full read surface as commands. Clean JSON to stdout, NDJSON via --watch, stdin chaining with -. Drop-in for cron, CI, and shell pipelines. pipx install threatcluster-cli.
Inside the conversation.
Claude Code, Cursor, Aider, and any agent that runs a shell can call tc directly. For typed tool calls (Claude API, OpenAI function calls, LangChain), wrap a command in a Python adapter. Scoped credentials, request budgets, 15-min bearer TTL.
Or skip the shell: the MCP server gives Claude Desktop, Claude Code, Cursor and VS Code the same ten tools, with the credit cost of every call reported back to the model.
All three surfaces share the same authentication, scopes, and audit trail. The ThreatCluster web app isn't going anywhere. It's still the place to triage, tag, and brief. These are just the other ways in.
How agents actually use it.
Pick a tool to see the conversation: what the agent says, what command it runs, what it gets back.
A credential model built for when a model holds the key.
Everyone is shipping agent access this year. The hard part is the case where an LLM invokes the tool and might do something it shouldn't. The tc agent surface is designed for exactly that.
Short-lived bearer tokens
Agents never hold a long-lived secret. A 15-minute bearer JWT is minted from your API key at /api/auth/agent/token and expires on its own.
Scoped, and downgraded further
A key carries only the scopes its tier allows, and a sub-process gets a strictly narrower scope than its parent. A spawned tool can never widen its own access.
Per-session request budgets
TC_MAX_REQUESTS caps how much a single session can read, so a runaway loop hits a ceiling instead of your rate limit or your bill.
Keyring storage, no plaintext HTTP
Credentials live in the OS keyring, not a dotfile. The client refuses to send them over plaintext HTTP, so a misconfigured endpoint fails closed.
Why a programmable surface matters.
The website is great for triage and briefing. It's not designed to be part of someone else's workflow. tc, and the API beneath it, give you the same threat data the UI renders, in a shape you can wire into your SIEM, your detection rules, your weekly report, or your agent loop.
JSON on stdout, errors on stderr
Every command emits clean structured output. jq-friendly, agent-friendly, grep-friendly. No ASCII tables, no spinners, no surprises.
Live feeds with --watch
--watch turns any list endpoint into a deduplicating live stream. New items only, NDJSON, ready to send straight to Slack, a SIEM, or a workflow.
Stdin chaining
Pipe IDs into the next command with -. Compose a hundred-line workflow in three commands and a jq selector.
Hardened for agents
Scoped credentials, per-session request budgets, scope-downgrade for sub-processes, keyring storage, plaintext-HTTP refusal. Built for the case where a model invokes it.
Same data the UI uses
One stable URL prefix (/api/public/v1/*). The clusters, entities, IOCs, ransomware feed, and CVE data the website shows, exposed identically.
SIEM-ready exports
tc iocs feed emits one IOC per line. tc threats stix emits valid STIX 2.1 bundles. Drop them straight into a blocklist, MISP, or a case file.
Built for the people who use it.
Same platform, four very different jobs. Pick a role to see how the data fits.
The command set.
The command groups mirror the platform's read surface end-to-end. Click any command to see the call and what comes back. Same shape on the underlying REST API.
Full reference at /docs/cli. Every command takes --help.
Build with the platform.
Mint a key, pick a surface, and start wiring threat intelligence into the tools your team already uses.