Threatcluster

io.github.Jam0k由 GitHub 账号 Jam0k 发布v0.2.3更新于 Oct 26, 2026

Live threat intel for agents: incidents, actors, CVEs with KEV/EPSS, ransomware leak-site victims.

已验证Streamable HTTP可网页运行网页搜索与抓取安全与监控

概览

AI 生成的概览

ThreatCluster MCP 为助手提供实时网络威胁情报:事件聚类、攻击者与恶意软件画像、含 KEV/EPSS 的 CVE,以及勒索软件泄露站点受害者。

可以做什么
  • 按关键词搜索事件聚类,或在一次调用中同时搜索聚类、实体画像与暗网命中
  • 查看 1 小时、24 小时、7 天或 30 天内的新增事件,并获取单个聚类的完整记录,含时间线、文章、实体及可选的有效指标
  • 查询攻击者、恶意软件、工具、厂商、产品、国家、行业与 CVE 的画像,并查看正在升温的实体
  • 查询单个 CVE 的 CVSS、EPSS、KEV 截止日期与利用情况,或按 KEV、公开利用、严重程度、厂商或产品筛选已遭利用漏洞
  • 按行业、组织、国家或受害者浏览勒索软件泄露站点条目,并获取该时间窗口的汇总统计
  • 在不发起调用的情况下查看剩余 API 额度与限流状态
适用场景
适合需要就突发安全事件、威胁行为者、已遭利用的 CVE 或勒索软件受害者获得最新且可引用答案的场景,例如安全研究、漏洞研判或情报简报。它是只读的情报查询工具,不是扫描器,也不提供原始指标订阅源。
运行要求
需要 ThreatCluster API 密钥,放在 THREATCLUSTER_API_KEY 中(或通过 X-API-Key 请求头发送),可申请免费密钥。可通过 npx(Node 18+)或 uvx(Python 3.10+)作为本地进程运行,也可使用托管远程端点。可选环境变量 THREATCLUSTER_API_BASE 与 THREATCLUSTER_SITE 用于覆盖 API 与站点地址。需要能访问 ThreatCluster API 的网络。
安装前请注意
API 密钥属于机密:它以 X-API-Key 请求头发送到所配置的 API 地址,因此修改 THREATCLUSTER_API_BASE 会把密钥发往别处。调用会消耗 API 额度(免费密钥每天 100 额度、每分钟 30 次请求、回溯 7 天),部分工具每次调用消耗多个额度。查询内容会发送给 ThreatCluster。泄露站点条目属于声称,并非已核实事实。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Threatcluster,将其添加到工作区。
  2. 连接 所需的 凭据。它们会被私密存储,绝不会在公开页面上展示。
  3. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.Jam0k%2Fthreatcluster/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。 客户端会在首次连接时完成 OAuth 登录。

{
  "mcpServers": {
    "threatcluster": {
      "type": "http",
      "url": "https://threatcluster.io/mcp"
    }
  }
}

README

ThreatCluster: free CTI API and MCP server

A free threat intelligence API (100 credits a day, no card) and an MCP server over it. Ask Claude, Cursor or any MCP client what is new, who was hit, whether a CVE is exploited, and get answers from a live corpus of deduplicated incident clusters, actor and malware profiles, CVEs with KEV and EPSS, and ransomware leak-site victims.

An MCP server that gives Claude, Cursor, VS Code, Windsurf, Zed and any other MCP client live threat intelligence from ThreatCluster (setup guide): 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.

Why this and not a feed aggregator

Most free CTI MCP servers wrap other people's indicator feeds (OTX, abuse.ch, AbuseIPDB). ThreatCluster is the corpus itself: every story is one cluster built from every source that covered it, with a threat score, a timeline and the entities extracted from the text, plus the leak-site victim list and CVE exploit status in the same API. The free key covers all of it with a 7-day lookback; paid plans extend the window. Details and the hosted endpoint (https://threatcluster.io/mcp) are at threatcluster.io/about/free-api.

Published twice from one tool spec, so both are identical:

RuntimeInstallPackage
Python 3.10+uvx threatcluster-mcp (or pipx run threatcluster-mcp)PyPI: threatcluster-mcp
Node 18+npx -y threatcluster-mcpnpm: threatcluster-mcp

1. Get a key

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.

2. Add the server

Claude Code

bash
claude mcp add threatcluster -e THREATCLUSTER_API_KEY=tc_live_... -- npx -y threatcluster-mcp# or the Python build:claude mcp add threatcluster -e THREATCLUSTER_API_KEY=tc_live_... -- uvx threatcluster-mcp

Claude Desktop (claude_desktop_config.json, Settings > Developer > Edit Config)

json
{  "mcpServers": {    "threatcluster": {      "command": "npx",      "args": ["-y", "threatcluster-mcp"],      "env": { "THREATCLUSTER_API_KEY": "tc_live_..." }    }  }}

Cursor — one-click: see listings/cursor-deeplink.md, or add to ~/.cursor/mcp.json / .cursor/mcp.json:

json
{ "mcpServers": { "threatcluster": { "command": "npx", "args": ["-y", "threatcluster-mcp"], "env": { "THREATCLUSTER_API_KEY": "tc_live_..." } } } }

VS Code (.vscode/mcp.json; the input prompts for the key instead of storing it in the file)

json
{  "inputs": [{ "type": "promptString", "id": "tc-key", "description": "ThreatCluster API key", "password": true }],  "servers": {    "threatcluster": { "type": "stdio", "command": "npx", "args": ["-y", "threatcluster-mcp"], "env": { "THREATCLUSTER_API_KEY": "${input:tc-key}" } }  }}

Windsurf (~/.codeium/windsurf/mcp_config.json) — same mcpServers block as Claude Desktop.

Zed (settings.json)

json
{ "context_servers": { "threatcluster": { "command": { "path": "npx", "args": ["-y", "threatcluster-mcp"], "env": { "THREATCLUSTER_API_KEY": "tc_live_..." } } } } }

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).

3. Tools

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.

ToolWhat it answersAPI endpoint(s)Credits
search_threatsKeyword search over incident clusters; phrase, then all words, then any word; matched_stage says whichGET /threats?keyword= per term1 per term (max 8 calls)
search_everythingClusters, entity profiles and dark-web hits in one callGET /search5
newest_threatsWhat is new in 1h / 24h / 7d / 30d, by first report or by momentumGET /threats1
get_threatFull record for one cluster: summary, timeline, articles, entities; include_iocs adds validated indicatorsGET /threats/{id} (+ /iocs)1 (+1)
leak_site_victimsRansomware leak-site listings by sector / group / country / victim, plus a tally of the whole windowGET /darkweb/ransomware/victims + /facets2
lookup_entityProfile of an actor, malware, tool, vendor, product, country, industry or CVEGET /entities/search + GET /entities/{type}/{value}2
get_vulnerabilityOne CVE: CVSS, EPSS, KEV with due date, exploits, vendors, productsGET /vulnerabilities/{cve_id}1
exploited_vulnerabilitiesCVEs in a window filtered to KEV / public exploit / severity / vendor / productGET /vulnerabilities1
trending_entitiesActors, malware, tools, vendors, CVEs, countries rising over a windowGET /entities/trending1
api_budgetRemaining 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.

More on threatcluster.io

Security

  • The key is read from 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.
  • It is never logged, never printed by --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.
  • stdio only. No outbound connection other than the API. No analytics.
  • All tools are read-only (readOnlyHint: true) and validate arguments against the spec before any request is made.

Environment

VariableDefaultPurpose
THREATCLUSTER_API_KEY—your key (tc_live_…, tc_agent_…) or a bearer from tc login
THREATCLUSTER_API_BASEhttps://threatcluster.io/api/public/v1API base (self-hosted or local test servers)
THREATCLUSTER_SITEhttps://threatcluster.iobase for the url fields in results

Repository layout

tools/tools.json   the single source of truth: tools, schemas, endpoint mapping, credits, promptpython/            PyPI package (hatchling; mcp + httpx)          -> console script threatcluster-mcpnode/              npm package (TypeScript; @modelcontextprotocol/sdk + zod) -> bin threatcluster-mcptests/fixtures/    recorded API responses and tool outputs; both packages must replay them identicallylistings/          directory manifests and submission copy (Smithery, MCP registry, Glama, mcp.so, Cursor, VS Code).github/workflows/ CI (both suites) and tag-triggered publishing (PyPI trusted publishing, npm provenance)

python3 tools/sync_tools.py copies the spec into both packages; CI fails if the copies drift.

Development

bash
pip install -e "python/[test]" && (cd python && pytest)cd node && npm install && npm test# live validation against a real API (spends ~30 credits, re-records tests/fixtures):THREATCLUSTER_LIVE=1 THREATCLUSTER_API_KEY=... THREATCLUSTER_API_BASE=... pytest python/tests/test_live.py

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.

来源:README.md,提交 f914fbb

工具

0
该服务器需要登录,因此 SourceWeft 无法在没有账号的情况下读取其工具,也未收录。已连接账号所能看到的内容可能因账号及其权限而异。

版本历史

1
  1. v0.2.3最新Sep 26, 2026

评分

已满足适用检查项的 85%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分