НЕ для образовательных целей: MCP-сервер для профессиональных пентестеров, включающий поддержку STDIO/HTTP/SSE, а также nmap, go/dirbuster, nikto, JtR, hashcat, создание wordlist и многое другое.
Профессиональный MCP-сервер для пентеста с поддержкой современных транспортных протоколов и аутентификации, а также расширенным набором инструментов разведки.
@modelcontextprotocol/sdk@^1.26.0@modelcontextprotocol/inspector@^0.20.0) со встроенным лаунчеромMCP_TRANSPORT=http)subfinderEnum, httpxProbe, ffufScan, nucleiScan, trafficCapture, hydraBruteforce, privEscAudit, extractionSweeplistEngagementRecords, getEngagementRecordscopeMode=ask) и безопасным запасным шаблономhttpx-toolkit (предпочтительно) или проверенный ProjectDiscovery httpx, что позволяет избежать коллизий с Python-клиентом httpxpentest-mcp inspector)nmapScanrunJohnTheRipperrunHashcatgobusterniktosubfinderEnumhttpxProbeffufScannucleiScantrafficCapturehydraBruteforceprivEscAuditextractionSweepgenerateWordlistlistEngagementRecordsgetEngagementRecordcreateClientReportcancelScannpm install -g pentest-mcp
pentest-mcp
pentest-mcp inspector
Вы можете передавать флаги Inspector напрямую:
pentest-mcp inspector --help
MCP_TRANSPORT=http MCP_SERVER_HOST=0.0.0.0 MCP_SERVER_PORT=8000 pentest-mcp
MCP_TRANSPORT=sse MCP_SERVER_PORT=8001 pentest-mcp
stdio: по умолчанию для локальных MCP-клиентов.http: современный сетевой транспорт. Рекомендуется.sse: только совместимость. Устарел и будет удалён в одном из будущих мажорных релизов.pentest-mcp inspector запускает встроенный CLI @modelcontextprotocol/inspector.node <this-package-entrypoint> stdioЗадайте эти переменные окружения при использовании MCP_TRANSPORT=http (или sse, если необходимо):
MCP_AUTH_ENABLED=true
MCP_AUTH_MODE=bearer
MCP_AUTH_SCOPES=read,write
MCP_AUTH_AUDIENCE=
MCP_OIDC_ISSUER=https://issuer.example.com
MCP_OIDC_JWKS_URL=https://issuer.example.com/.well-known/jwks.json
# optional alternative/backup validation mode:
MCP_OIDC_INTROSPECTION_URL=https://issuer.example.com/oauth/introspect
MCP_OAUTH_CLIENT_ID=...
MCP_OAUTH_CLIENT_SECRET=...
Устаревшие псевдонимы по-прежнему временно принимаются:
MCP_OAUTH_ENABLEDMCP_OAUTH_PROVIDER_URLMCP_OAUTH_SCOPEScreateClientReport теперь поддерживает режимы обработки SoW:
scopeMode=ask: запросить ввод у пользователя через MCP-элиситацию (рекомендуется)scopeMode=provided: использовать значение scopeOfWork напрямуюscopeMode=template: использовать встроенный общий шаблон авторизованного тестированияЕсли элиситация отклонена или недоступна, отчёт автоматически переключается на шаблон.
Отдельного API для загрузки файлов пока нет. Текущие варианты:
{
"tool": "createClientReport",
"arguments": {
"title": "Q1 External Pentest",
"assessmentType": "external-network",
"scopeMode": "ask"
}
}
scopeOfWork{
"tool": "createClientReport",
"arguments": {
"title": "Q1 External Pentest",
"assessmentType": "external-network",
"scopeMode": "provided",
"scopeOfWork": "Authorized targets: ...\nOut-of-scope: ...\nTesting window: ...\nRules of engagement: ..."
}
}
{
"tool": "createClientReport",
"arguments": {
"title": "Q1 External Pentest",
"assessmentType": "external-network",
"scopeMode": "template"
}
}
recordId=...) с контекстом вызова.listEngagementRecords, чтобы быстро получить все артефакты работы.recordIds (или по умолчанию из последних записей) вместо ручного копирования и вставки.ask)provided)template)Ниже запланировано специально для снижения административной нагрузки при пентестах.
scopeFilePath (загрузка SoW из локального пути к файлу на хосте MCP)scopeDocument (отправка содержимого SoW напрямую через MCP для удалённых клиентов)recordId) к находкам и разделам отчётаnuclei, nikto и т. д.)Примечание о внедрении:
scopeFilePath и scopeDocument, поскольку большинство команд уже ведут SoW в документах/PDF и хотят избежать повторяющихся шагов по копированию и переформатированию.{
"tool": "subfinderEnum",
"arguments": {
"domain": "example.com",
"recursive": true,
"allSources": true
}
}
{
"tool": "httpxProbe",
"arguments": {
"targets": ["example.com", "api.example.com"],
"includeTitle": true,
"includeStatusCode": true
}
}
{
"tool": "ffufScan",
"arguments": {
"targetUrl": "https://example.com/FUZZ",
"wordlist": "/usr/share/seclists/Discovery/Web-Content/common.txt",
"threads": 40
}
}
{
"tool": "nucleiScan",
"arguments": {
"targets": ["https://example.com"],
"severities": ["medium", "high", "critical"]
}
}
{
"tool": "trafficCapture",
"arguments": {
"networkInterface": "eth0",
"packetCount": 200,
"bpfFilter": "tcp port 80"
}
}