ThreatCluster
Inteligência de ameaças ao vivo para agentes: clusters de incidentes, perfis de atores de ameaças e malwares, CVEs com status KEV/EPSS/exploração, e vítimas de sites de vazamento de ransomware. Dez ferramentas somente leitura sobre a API ThreatCluster com chave gratuita (100 créditos por dia). Cada resultado traz URLs de citação.
Servidor MCP hospedado
npx add-mcp 'https://threatcluster.io/mcp'Instala no Claude Code, Codex, Cursor e outros
Documentação
Servidor MCP de Inteligência de Ameaças
Um servidor MCP que fornece ao Claude, Cursor, VS Code, Windsurf, Zed e qualquer outro cliente MCP inteligência de ameaças em tempo real do ThreatCluster: clusters de incidentes (uma história deduplicada por incidente, com pontuação de ameaça, linha do tempo e entidades extraídas), perfis de entidades (atores, malwares, ferramentas, fornecedores, CVEs), registros de CVE com status KEV / EPSS / exploit e vítimas de sites de vazamento de ransomware.
É um wrapper fino e auditável sobre a API REST pública. Cada chamada de ferramenta é um ou dois GETs para https://threatcluster.io/api/public/v1 com sua chave de API; nada mais sai da sua máquina e não há telemetria.
Publicado duas vezes a partir de uma única especificação de ferramenta, portanto ambos são idênticos:
| Runtime | Instalação | Pacote |
|---|---|---|
| Python 3.10+ | uvx threatcluster-mcp (ou pipx run threatcluster-mcp) | PyPI: threatcluster-mcp |
| Node 18+ | npx -y threatcluster-mcp | npm: threatcluster-mcp |
1. Obtenha uma chave
Chaves gratuitas possuem os cinco escopos de leitura, 100 créditos por dia, 30 requisições por minuto e um período de consulta de 7 dias: https://threatcluster.io/api. Coloque-a em THREATCLUSTER_API_KEY. Se você usar o CLI tc e tiver executado tc auth login, o servidor Python captura essa credencial automaticamente (keyring ou o arquivo ~/.config/tc-cli/credentials); o servidor Node lê apenas o arquivo.
2. Adicione o servidor
Claude Code
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, Configurações > Desenvolvedor > Editar Configuração)
{
"mcpServers": {
"threatcluster": {
"command": "npx",
"args": ["-y", "threatcluster-mcp"],
"env": { "THREATCLUSTER_API_KEY": "tc_live_..." }
}
}
}
Cursor — com um clique: veja listings/cursor-deeplink.md, ou adicione a ~/.cursor/mcp.json / .cursor/mcp.json:
{ "mcpServers": { "threatcluster": { "command": "npx", "args": ["-y", "threatcluster-mcp"], "env": { "THREATCLUSTER_API_KEY": "tc_live_..." } } } }
VS Code (.vscode/mcp.json; a entrada solicita a chave em vez de armazená-la no arquivo)
{
"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) — mesmo bloco mcpServers do Claude Desktop.
Zed (settings.json)
{ "context_servers": { "threatcluster": { "command": { "path": "npx", "args": ["-y", "threatcluster-mcp"], "env": { "THREATCLUSTER_API_KEY": "tc_live_..." } } } } }
Verifique uma configuração sem iniciar um cliente: THREATCLUSTER_API_KEY=... npx -y threatcluster-mcp --check (imprime de onde a chave veio e para onde será enviada — nunca a chave).
3. Ferramentas
Os custos são créditos da API do ThreatCluster (chaves gratuitas: 100 por dia). Cada resultado carrega campos cost (créditos gastos nesta chamada), budget (restantes hoje, dos cabeçalhos de resposta), as_of e url em cada cluster, entidade, vítima e CVE para citação.
| Ferramenta | O que responde | Endpoint(s) da API | Créditos |
|---|---|---|---|
search_threats | Pesquisa por palavras-chave em clusters de incidentes; frase, depois todas as palavras, depois qualquer palavra; matched_stage indica qual | GET /threats?keyword= por termo | 1 por termo (máx. 8 chamadas) |
search_everything | Clusters, perfis de entidades e ocorrências na dark web em uma única chamada | GET /search | 5 |
newest_threats | O que há de novo em 1h / 24h / 7d / 30d, por primeiro relato ou por momentum | GET /threats | 1 |
get_threat | Registro completo de um cluster: resumo, linha do tempo, artigos, entidades; include_iocs adiciona indicadores validados | GET /threats/{id} (+ /iocs) | 1 (+1) |
leak_site_victims | Listagens de sites de vazamento de ransomware por setor / grupo / país / vítima, além de um total de todo o período | GET /darkweb/ransomware/victims + /facets | 2 |
lookup_entity | Perfil de um ator, malware, ferramenta, fornecedor, produto, país, setor ou CVE | GET /entities/search + GET /entities/{type}/{value} | 2 |
get_vulnerability | Um CVE: CVSS, EPSS, KEV com data de vencimento, exploits, fornecedores, produtos | GET /vulnerabilities/{cve_id} | 1 |
exploited_vulnerabilities | CVEs em um período filtrado por KEV / exploit público / severidade / fornecedor / produto | GET /vulnerabilities | 1 |
trending_entities | Atores, malwares, ferramentas, fornecedores, CVEs, países em ascensão em um período | GET /entities/trending | 1 |
api_budget | Créditos restantes e estado de taxa das últimas respostas — sem chamada de API | — | 0 |
Um prompt, threatcluster_analyst, carrega as regras do analista (ferramentas primeiro, cite cada fato com o url retornado, diga qual período você pesquisou, listagens de sites de vazamento são alegações).
Erros retornam como erros de ferramenta MCP com a mensagem da própria API: 401 informa ao agente para definir THREATCLUSTER_API_KEY e de onde vem uma chave gratuita, 429 carrega o Retry-After, 403 nomeia o escopo ausente ou o período de consulta e o plano que o eleva.
Segurança
- A chave é lida de
THREATCLUSTER_API_KEY(depoisTC_REFRESH_TOKEN, depois o armazenamento do tc-cli) e enviada apenas como cabeçalhoX-API-Key(ouAuthorization: Bearerpara um JWT cunhado portc login) paraTHREATCLUSTER_API_BASE. - Ela nunca é registrada, nunca impressa por
--check, nunca gravada em disco e removida de toda string de erro; as suítes de teste afirmam que a chave está ausente de todos os bytes de stdout e stderr, inclusive em um 401 cujo corpo a cita. - Apenas stdio. Nenhuma conexão de saída além da API. Sem analytics.
- Todas as ferramentas são somente leitura (
readOnlyHint: true) e validam argumentos contra a especificação antes de qualquer requisição ser feita.
Ambiente
| Variável | Padrão | Finalidade |
|---|---|---|
THREATCLUSTER_API_KEY | — | sua chave (tc_live_…, tc_agent_…) ou um bearer de tc login |
THREATCLUSTER_API_BASE | https://threatcluster.io/api/public/v1 | base da API (servidores auto-hospedados ou de teste local) |
THREATCLUSTER_SITE | https://threatcluster.io | base para os campos url nos resultados |
Estrutura do repositório
tools/tools.json the single source of truth: tools, schemas, endpoint mapping, credits, prompt
python/ PyPI package (hatchling; mcp + httpx) -> console script threatcluster-mcp
node/ npm package (TypeScript; @modelcontextprotocol/sdk + zod) -> bin threatcluster-mcp
tests/fixtures/ recorded API responses and tool outputs; both packages must replay them identically
listings/ 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 copia a especificação para ambos os pacotes; o CI falha se as cópias divergirem.
Desenvolvimento
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
Relacionados: o CLI tc, a referência da API, a receita de ferramenta de agente para uma função simples de chamada de ferramenta e o guia de integração.
GPL-3.0-or-later © ThreatCluster Ltd.