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 分