Nessus MCP Server
Um servidor MCP para interagir com o scanner de vulnerabilidades Tenable Nessus.
Documentação
Servidor MCP Nessus
Um servidor Model Context Protocol (MCP) para interagir com o scanner de vulnerabilidades Tenable Nessus. Este servidor permite que assistentes de IA realizem varreduras e análises de vulnerabilidades por meio do protocolo MCP.
Ele se comunica com uma instância real do Nessus por meio de sua API REST usando autenticação por chave de API. Se nenhum NESSUS_URL/NESSUS_ACCESS_KEY/NESSUS_SECRET_KEY estiver definido, ele usa um modo simulado autocontido para desenvolvimento e testes locais.
Recursos
- Varredura de Vulnerabilidades: Inicie e monitore varreduras de vulnerabilidades em alvos especificados
- Gerenciamento de Varreduras: Liste, acompanhe e recupere resultados de varreduras de vulnerabilidades
- Análise de Vulnerabilidades: Pesquise e obtenha informações detalhadas sobre vulnerabilidades específicas
- Modo Simulado: Modo simulado totalmente funcional para testes sem uma chave de API do Nessus
Ferramentas
O servidor fornece as seguintes ferramentas:
| Nome da Ferramenta | Descrição |
|---|---|
list_scan_templates | Lista os modelos de varredura disponíveis no Nessus |
start_scan | Inicia uma nova varredura de vulnerabilidades em um alvo |
get_scan_status | Verifica o status de uma varredura em execução |
get_scan_results | Obtém os resultados de uma varredura concluída |
list_scans | Lista todas as varreduras e seus status |
get_vulnerability_details | Obtém informações detalhadas sobre uma vulnerabilidade específica |
search_vulnerabilities | Pesquisa vulnerabilidades por palavra-chave |
Instalação
Pré-requisitos
- Node.js 20 ou superior
- TypeScript (para desenvolvimento)
Compilando a partir do código-fonte
-
Clone o repositório:
git clone https://github.com/Cyreslab-AI/nessus-mcp-server.git cd nessus-mcp-server -
Instale as dependências:
npm install -
Compile o servidor:
npm run build
Uso
Executando em Modo Simulado
Por padrão, o servidor executa em modo simulado, que não requer uma chave de API do Nessus:
node build/index.js
Executando com uma instância real do Nessus
Para conectar a uma instância real do Nessus, defina as seguintes variáveis de ambiente:
NESSUS_URL=https://your-nessus-instance:8834
NESSUS_ACCESS_KEY=your-access-key
NESSUS_SECRET_KEY=your-secret-key
O servidor é alternado para o modo real assim que todas as três estiverem definidas; caso contrário, ele executa em modo simulado.
Em seguida, execute o servidor:
node build/index.js
Gerando um par de chaves de API
Na interface web do Nessus: Configurações > Minha Conta > Chaves de API > Gerar. O Nessus mostra a chave de acesso e a chave secreta apenas uma vez no momento da geração, então armazene-as em um local seguro (por exemplo, um gerenciador de segredos ou a configuração de ambiente do seu cliente MCP) — o próprio Nessus não pode mostrá-las novamente.
As solicitações são autenticadas com o cabeçalho HTTP X-ApiKeys: accessKey=<key>; secretKey=<key> em cada chamada. Não há etapa separada de login/sessão, nem cookie ou token para renovar.
Certificados autoassinados
O Nessus é muito comumente implantado com um certificado TLS autoassinado. Por padrão, este servidor verifica certificados rigorosamente e falhará contra uma instância autoassinada. Para aceitar explicitamente a omissão da verificação de certificado (por exemplo, para uma instância interna em que você confia), defina:
NESSUS_ALLOW_SELF_SIGNED=true
Deixe isso não definido (ou false) sempre que a instância tiver um certificado emitido por uma CA confiável. O servidor registra um aviso no stderr na inicialização sempre que isso estiver habilitado.
Notas de design sobre o mapeamento do modo real
Algumas ferramentas deste servidor não têm equivalente exato 1:1 na API REST do Nessus, então as seguintes decisões foram tomadas:
start_scan:scan_type(basic-network-scan/web-app-scan/compliance-scan) é um nome lógico, não um UUID de modelo do Nessus (esses são específicos da instância e retornados porGET /editor/scan/templates). Este servidor resolve o nome lógico para um modelo correspondendo primeiro aos valores conhecidos denamedo modelo, recorrendo a uma correspondência difusa com o nome/título do modelo.start_scanentão cria a varredura (POST /scans) e imediatamente a inicia (POST /scans/{id}/launch), já que a ferramenta é chamada de "iniciar", não "criar".get_scan_results: os resultados reais da varredura são agregados por plugin em toda a varredura (do resumovulnerabilitiesdeGET /scans/{id}), não os registros totalmente enriquecidos e por vulnerabilidade que os dados simulados retornam. Buscar texto completo de CVSS/descrição/remediação para cada plugin significaria uma chamada extra à API do Nessus por descoberta, o que não escala para varreduras com muitas descobertas. Useget_vulnerability_detailscom umplugin_idespecífico dos resultados para detalhar informações completas de uma única descoberta.get_vulnerability_details: no modo simulado, isso aceita um ID de CVE. Contra uma instância real do Nessus, deve ser um ID de plugin do Nessus numérico (por exemplo,156327), porque a API REST do Nessus local não tem endpoint que resolva um CVE ou palavra-chave arbitrária para um plugin — apenasGET /plugins/plugin/{id}(consulta por ID de plugin numérico) existe. Uma entrada em formato de CVE no modo real retorna um erro claro e documentado em vez de falhar silenciosamente.search_vulnerabilities: o Nessus não tem um único endpoint de "pesquisar todas as vulnerabilidades" — as descobertas só existem no contexto dos resultados de uma varredura. No modo real, esta ferramenta aceita umscan_idopcional para limitar a pesquisa a uma varredura; sem ele, a pesquisa cobre as varreduras concluídas mais recentemente atualizadas (limitadas a 10, para limitar o número de chamadas de API em instâncias com muitas varreduras). Esta é uma decisão deliberada de escopo, documentada na própria descrição da ferramenta.
Usando com Claude for Desktop
Para usar este servidor com Claude for Desktop:
-
Edite seu arquivo de configuração do Claude for Desktop:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
-
Adicione a configuração do servidor:
{
"mcpServers": {
"nessus": {
"command": "node",
"args": ["/path/to/nessus-mcp-server/build/index.js"],
"env": {
"NESSUS_URL": "https://your-nessus-instance:8834",
"NESSUS_ACCESS_KEY": "your-access-key",
"NESSUS_SECRET_KEY": "your-secret-key",
"NESSUS_ALLOW_SELF_SIGNED": "false"
}
}
}
}
Para o modo simulado, você pode omitir a seção env.
Exemplos de Interação
Iniciando uma Varredura
start_scan:
target: 192.168.1.1
scan_type: basic-network-scan
Obtendo Resultados de Varredura
get_scan_results:
scan_id: scan-1234567890
Pesquisando Vulnerabilidades
search_vulnerabilities:
keyword: log4j
Contra uma instância real do Nessus, opcionalmente limite a pesquisa a uma varredura:
search_vulnerabilities:
keyword: log4j
scan_id: 42
Desenvolvimento
Estrutura do Projeto
src/index.ts: Ponto de entrada principal do servidorsrc/nessus-api.ts: Cliente da API do Nessus com fallback simuladosrc/mock-data.ts: Dados simulados de vulnerabilidades para testessrc/tools/: Implementações das ferramentassrc/utils/: Funções utilitárias
Adicionando Novas Ferramentas
- Defina o esquema da ferramenta e o manipulador no arquivo apropriado em
src/tools/ - Importe e registre a ferramenta em
src/index.ts
Status de verificação
As solicitações em modo real são implementadas diretamente contra o contrato documentado da API REST do Tenable Nessus (endpoints, corpos de solicitação e formatos de resposta). Elas foram verificadas por:
- Uma compilação TypeScript limpa (
npm run build). - Exercitar cada ferramenta via stdio em modo real contra um
NESSUS_URLinacessível (por exemplo,https://localhost:1), confirmando que o servidor inicia, aceita solicitações e retorna uma respostaisErrorlimpa com uma mensagem descritiva (conexão recusada, TLS, tempo limite, etc.) em vez de travar ou recorrer silenciosamente a dados simulados.
Elas não foram verificadas contra uma instância real do Nessus, pois nenhuma estava disponível no ambiente em que foi construído. Se você conectar isso a uma instância real e algo não corresponder (por exemplo, um nome de modelo que sua instância não tem, ou um campo de resposta que difere por versão do Nessus), abra uma issue.
Licença
MIT
Aviso Legal
Este servidor não é afiliado ou endossado pela Tenable. Nessus é uma marca registrada da Tenable, Inc.