关于 Pentest MCP: Professional Penetration Testing Toolkit
Pentest MCP 是面向人工研究人员和工具型 Agent 的 TypeScript 服务,用于经授权的安全评估。它按评估范围和时间限制调用操作,持久记录证据,并支持基于证据编写报告。
主要功能
- 01登记评估项目与计划
- 02限制目标、时间和可用工具
- 03运行安全评估工具
- 04存储并检索证据记录
- 05根据选定证据准备报告
适用场景
- 01开展范围明确的授权安全评估
- 02审查和调查扫描记录
- 03由 Agent 执行计划内的评估
- 04依据分析人员核验的发现准备报告
MCP 相关
向 MCP 客户端提供范围受控的评估、证据、项目管理和报告工具。活动调用会依据项目目标、时间窗口及适用的工具许可清单进行检查。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Pentest MCP
Pentest MCP 是一个用于授权安全评估的 TypeScript MCP 服务。它为人工研究人员或使用工具的评估 Agent 提供统一且范围受限的接口,用于信息发现、验证、捕获、凭据检查、本地审计、证据检索和报告准备。每次主动工具调用都与一个评估项目及一条持久化记录关联。服务会检查声明的目标和时间窗口;研究人员则负责在发布前核实发现。
2026 年 10 月工作流
- 根据已签署的授权文件和交战规则创建评估项目,然后保存评估计划。操作者选择一个稳定的
engagementId。 - 研究人员或全新的 Codex 进程在受管理的评估容器中连接到 Pentest MCP 服务。它可以看到完整的工具目录,但只有计划中精确列出的
allowedToolNames才允许调用。主动工具调用还必须通过评估项目目标和时间限制检查。 - 使用
listEngagementRecords和getEngagementRecord查看recordId值及关联的范围判定。记录会在重启后保留。使用recordResearchActivity导入外部研究;导入不能替代 MCP 工具调用。 - 根据完整的证据台账起草报告,依据源记录检查候选发现,并且仅发布经分析人员核实的发现。之后可通过
getClientReport获取 Markdown 或 JSON 格式的报告。
声明目标检查是一项操作性防护措施,并非完整的网络边界。DNS 变更、重定向、Nmap 脚本、Nuclei 模板及其他第三方工具行为都可能产生次级流量。请检查工具配置,并确保网络控制与评估项目的交战规则保持一致。
Agentic 评估使用 MCP 工具
评估阶段是一个使用工具的 Agent 会话。runAgentAssessment 支持在专用账号配置文件中运行本地 Codex 或 Claude、在固定容器中运行 Codex、运行兼容 OpenAI 的环回服务器(例如 llama.cpp 或 Ollama),以及 OpenRouter。CLI 工作进程会接收一个锁定的、仅限单次委托的 Pentest MCP 服务,并发现完整目录。受保护的 API 模型只会获得计划允许列表与工作进程目录的交集。每个请求的操作在处理程序启动前,仍会经过同一套工作进程端计划、目标、父级状态和时间检查。可选的 hostileModelProtection 会添加重复操作、令牌计数和结束原因断路器,默认值为 false。如果运行中断,且已有持久化的启动回执但没有终止回执,则会阻止重放;reconcileAgentAssessment 要求操作员确认先前进程已停止,记录审核人和理由,并在先前工作进程的权限范围仍然可用时予以撤销。返回的 toolCounts、importedRecordIds 和 importMapRecordId 用于标识已记录的操作和导入的证据。未成功调用任何评估工具的运行将失败。
draftAssessmentReport 是后续的上下文隔离报告撰写步骤;仅有草稿并不能证明 Pentest MCP 帮助了评估。OpenAI、Anthropic、OpenRouter、兼容 OpenAI 的服务、本地 Codex、本地 Claude、容器 Codex 以及已配置的 SSH 配置文件,都可以根据有界证据包撰写报告草稿,且不使用扫描器工具。local-agent 接受可自托管的 CLI 配置文件和环回兼容 OpenAI 的配置文件,并会在发送上下文前拒绝托管服务提供商。受保护模型指南介绍了 llama.cpp 和 OpenRouter 配置文件、强制停止条件、审计字段以及恶意模型的部署边界。容器评估指南介绍了 CLI 配置文件字段、实际验收命令和隔离限制。Agentic 工作流涵盖范围、证据审查、Daybreak/Glasswing 访问权限以及 Faxbot 规划。
发布验收使用 scripts/run-real-acceptance.mjs。该脚本没有默认目标或授权,并且只有在已安装的 Nmap 和 ProjectDiscovery HTTPX 创建成功的证据记录后才会通过。使用 --profile 时,受管理的 Agent 必须通过 Pentest MCP 调用两者。使用 --report-profile 时,必须由独立的报告上下文生成并保存草稿。测试替身仅用于自动化测试,不会作为验收回执发布。
快速开始
需要 Node.js 22.19.0 或更高版本,以及你打算使用的工具所需的主机二进制文件。Docker 镜像包含列出的工具;原生安装必须确保这些工具位于 PATH 中。
npm install -g pentest-mcp
pentest-mcp
Stdio 是本地 MCP 客户端的默认方式。pentest-mcp inspector 会通过 stdio 启动捆绑的 MCP Inspector 并连接此服务;可以转发 Inspector 标志,例如 pentest-mcp inspector --help。
设置 PENTEST_DATA_DIR 可选择本地证据目录。否则,如果设置了该变量,服务会使用 $XDG_DATA_HOME/pentest-mcp;若未设置,则使用 ~/.pentest-mcp。证据和报告文件会以私有目录和文件权限存储。请将原始输出、哈希、捕获的流量和报告视为客户端敏感数据,并据此控制访问、保留期限和备份。
注册委托
扫描前先调用 createEngagement。请使用实际签署的授权文件中的日期、目标和引用。以下值仅作示例。
{
"tool": "createEngagement",
"arguments": {
"engagementId": "client-2026-10",
"authorizationReference": "Signed SoW section 4, approved 2026-10-24",
"notBefore": "2026-10-25T09:00:00-06:00",
"expiresAt": "2026-10-26T18:00:00-06:00",
"allowedTargets": ["app.example.com", "192.0.2.0/28"],
"excludedTargets": ["192.0.2.7"],
"testingWindows": [
{
"start": "2026-10-25T09:00:00-06:00",
"end": "2026-10-25T17:00:00-06:00"
}
]
}
}
允许的目标可以是精确主机、CIDR、通配符子域和 HTTP(S) URL 前缀。排除项优先。所有时间戳都必须明确指定时区。getEngagement 和 listEngagements 用于检查已存储的注册信息。closeEngagement 会撤销后续执行,中止同一服务进程中正在运行的受管理评估,并使独立的受管理运行器在检测到父级注册表已关闭时停止。
运行和审查
对活动工具使用相同的 engagementId。默认的非 root 容器支持 TCP 连接扫描;SYN 和操作系统检测需要额外权限,而默认情况下不会授予这些权限。
{
"tool": "nmapScan",
"arguments": {
"engagementId": "client-2026-10",
"target": "app.example.com",
"scanTechnique": "Connect",
"serviceVersionDetection": true
}
}
成功的工具响应会包含其已存储证据的 recordId。只检索所需的记录:
{
"tool": "listEngagementRecords",
"arguments": {
"engagementId": "client-2026-10",
"limit": 50
}
}
listEngagementRecords 返回摘要,并接受 limit 和 offset,用于分页浏览较早的记录。getEngagementRecord 同时需要 engagementId 和 recordId,并会在获得许可时返回已存储的证据。凭据工具会返回计数和输出摘要。新的未认证 Gobuster/Nikto 记录会保留私有扫描器输出和发现结果,供所有者范围内的读取;较早的扫描器记录仍会经过脱敏。Nmap XML 和经过限制的 ffuf/Nuclei 机器输出会与摘要一同保留。记录的 outcome 为 succeeded、failed 或 cancelled;如有跟踪,还会包含开始时间和持续时间。子进程失败会生成审计记录,而不会生成成功的扫描结果。预检范围拒绝不会启动任何命令。对于经过身份验证的 HTTP,engagement 和证据访问范围限定为已验证的令牌所有者;stdio 数据仅在服务器安装实例本地保存。
为 Agent 提供针对客户端的计划
saveAssessmentPlan 会将目标、人类可读的允许和禁止方法、精确的 allowedToolNames、数据处理方式、停止条件、报告受众、工作归属以及模型数据政策存储为带版本的证据记录。getAssessmentPlan 会读取最新版本。受管理的工作器会收到完整目录,但服务器会在处理器运行前拒绝任何未列入 allowedToolNames 的调用,并留下失败的审计回执。如果存在计划,其允许列表也会限制对 14 个评估方法的直接手动 MCP 调用。拒绝会在处理器或命令运行前记录到审计中。对于没有计划的旧版 engagement,直接调用会沿用之前的行为,但仍需通过 engagement 范围检查。此计划无法扩展 createEngagement 的目标或时间范围。外部客户端计划需要在模型起草前提供服务商的客户端工作批准参考;no-model 仅允许生成确定性草稿。请参阅计划架构和示例。
记录包含 modelDataPolicy: "local-agent" 或 "approved-provider" 且 allowedToolNames 非空的计划后,启动工具调用运行:
{
"tool": "runAgentAssessment",
"arguments": {
"engagementId": "client-2026-10",
"profileId": "daybreak-cli-assessment",
"timeoutSeconds": 900
}
}
响应包含运行 ID、状态、模型、toolCounts、导入的证据 ID、importMapRecordId,以及未审查模型输出的 ID。如果模型、MCP 子进程或评估工具失败,请检查保留的失败信息和任何已导入记录,然后再重试。如果进程中断后只留下启动回执,请确认旧进程已停止,然后使用该运行 ID、审查者身份和决策原因调用 reconcileAgentAssessment。服务器不会静默地重放运行。若进程结束时没有成功调用评估工具,系统会拒绝该进程;其经过限制的输出会以失败结果私密保留,并关联哈希以供诊断,绝不会作为已验证的发现证据。Agent 进程完成并不意味着其观察结果已成为确认的发现。工作器会阻止创建或关闭 engagement、更改计划、递归启动评估、协调处理以及发布报告。
请求提供有用的字典线索
在 MCP 客户端支持表单收集时,调用 generateWordlist 并提供 engagementId,省略 baseWords。服务端会询问获授权的操作人员已知姓名和别名、组织或产品术语、日期、地点或地址相关词语,以及前缀或后缀模式。他们可以跳过未知类别或拒绝回答。提示词不会询问当前密码和患者数据。如果客户端不支持表单收集,该工具会返回问题,供助手提问并在重试时显式提供 baseWords、dates、locationWords 和 customPatterns。私有字典记录会保留输入数量和 SHA-256 摘要,而不会保留提供的词语或列表样本。创建字典并不授权尝试密码;hydraBruteforce、runJohnTheRipper 和 runHashcat 也必须符合本次评估约定的方法范围。
生成有证据支持的报告
createClientReport 需要已注册的评估约定、客户、标题、评估类型、摘要,以及显式指定的 recordIds。只有在不应附加工具证据时才使用 []。应仔细选择每份报告的证据记录;服务端绝不会擅自选择有限子集。审计、范围门控和报告工作流记录不能作为漏洞证据附加。请提供经分析人员确认的发现,并注明严重性、影响、修复建议、验证者、时间戳和证据引用。扫描器输出在研究人员验证前仍只是观察结果。若 findings 数组为空,报告会明确说明其中不包含经分析人员验证的漏洞发现。
{
"tool": "createClientReport",
"arguments": {
"engagementId": "client-2026-10",
"client": "Example Client",
"title": "External Assessment",
"assessmentType": "External network",
"summary": "Assessment activity and verified outcomes are summarized below.",
"recordIds": [],
"findings": [],
"recommendations": ["Review the evidence index and validate remediation with a retest."],
"methodology": "Authorized, scoped enumeration and manual verification.",
"limitations": ["The example has no attached scan records."]
}
}
将 recordIds 替换为本次评估约定中的 ID,并且仅在人工审查后添加已验证的发现。每项发现都可以包含 evidenceRecordIds、externalEvidence、受影响资产、复现步骤、参考资料、CWE、CVSS 向量和复测状态。可选的 scopeOfWork 文本可补充报告背景,但不会改变可执行范围。报告包含已注册评估约定中的范围详情、已验证的严重性计数、完整性检查清单、带有原始输出 SHA-256 哈希的证据索引,以及限制说明。原始扫描器输出保存在私有证据记录中,不会复制到面向客户的 Markdown 中。
listClientReports 接受 engagementId。getClientReport 接受 engagementId 和 reportId,其中 format 设为 markdown 或 json。Markdown 报告也可通过 mcp://pentest/clientReport/{reportId} 资源获取。
对于 AI Agent 辅助的报告,在评估记录存在后调用 draftAssessmentReport。省略 profileId 可生成确定性证据清单,也可以选择已配置的草稿配置来生成模型撰写的观察结果。local-agent 允许使用 CLI 配置和环回 openai-compatible 配置;approved-provider 允许使用已配置的 API 或 CLI 配置,包括 OpenRouter。两者都会接收范围、计划和证据摘要,且内容有明确限制,并可能提出未经验证的候选项。在 metadata-only 模式下,模型只会收到结构化计数、工具名称、证据 ID 和摘要,不会收到客户或计划正文、目标名称、授权引用、证据摘要或观察结果;候选漏洞会被拒绝。publishAgentReport 需要审查者以及带有证据 ID 的显式已验证发现,并且绝不会自动将候选项升级为已验证发现。
工具清单
| 工作 | 工具 |
|---|---|
| 交互全生命周期 | createEngagement、getEngagement、listEngagements、closeEngagement |
| 发现与验证 | nmapScan、gobuster、nikto、subfinderEnum、httpxProbe、ffufScan、nucleiScan |
| 流量捕获与凭据检查 | trafficCapture、hydraBruteforce、runJohnTheRipper、runHashcat、generateWordlist |
| 本地审计与提取 | privEscAudit、extractionSweep |
| 范围、Agent 与报告工作流 | saveAssessmentPlan、getAssessmentPlan、listAgentProfiles、runAgentAssessment、reconcileAgentAssessment、recordResearchActivity、draftAssessmentReport、listAgentReportDrafts、getAgentReportDraft、publishAgentReport |
| 证据与直接报告 | listEngagementRecords、getEngagementRecord、createClientReport、listClientReports、getClientReport |
| 运行时与扫描控制 | getRuntimeStatus、listActiveScans、cancelScan |
在已安装的 CLI 版本中,Gobuster 和 Nikto 仅将 Basic Auth 和 Cookie 值作为字面命令参数接受,因此 MCP 工具会拒绝这些字段、URL 用户信息和查询字符串。它们的即时响应和报告草稿包含计数,但不包含扫描器文本;新生成的成功记录会为交互所有者保留私有原始输出和发现详情。失败运行会保留输出摘要。如需进行经过身份验证的扫描,请在这些工具之外使用经操作人员审核的执行方式。通过 MCP 读取和起草报告时,历史 Gobuster/Nikto 记录会经过脱敏;之前存储的文件应按交互的保留政策处理。
trafficCapture 需要网络能力以及对所捕获接口的访问权限。在 Docker 中,请使用下方明确指定的 Linux 捕获配置。privEscAudit 仅支持本地 stdio;在容器内运行时,它会审计该容器,因此,如果授权目标是主机本身,请在主机上原生运行服务。Hashcat 的 GPU 加速也取决于主机硬件和设备直通,而默认容器未对此进行配置。
如果执行主机上安装了 Hashcat 8,runHashcat 可使用 Hashcat 8 内置的 PCFG 攻击和自定义哈希配方;在较旧的运行时上会拒绝仅限 v8 的请求。它还接受 OpenCL/后端设备 ID;FPGA bcrypt 需要 Hashcat 8、Linux、兼容的桥接器和受支持的板卡。Dockerfile 会构建经签名的 8.0.0 源代码发行版并包含 CPU OpenCL,但默认容器不会直通 GPU 或 FPGA 硬件。有关输入、版本检查和证据处理,请参阅 Hashcat 用法。
getRuntimeStatus 会报告当前传输方式、远程执行开关、命令限制、Nuclei 模板就绪情况以及预期二进制文件的可用性。listActiveScans 会列出某个交互的 Nmap 扫描;cancelScan 需要该交互 ID 和返回的扫描 ID。如果预期的主机命令缺失,服务也会在启动时发出警告。二进制文件缺失或命令失败属于工具错误,不能作为目标安全无虞的证据。请将工具输出和测试限制一并保存在交互记录中。
Nuclei 需要一个绝对路径的 MCP_NUCLEI_TEMPLATES_DIR,其中包含经过操作人员审核的已签名 HTTP 模板。服务不接受调用方选择的模板路径。它会选择 HTTP 模板,排除 Interactsh 模板,并禁用重定向、无头执行、自动探测、stdin 目标和更新检查。目标还需要获得主机范围内的授权,因为模板可能会连接该主机上的其他端口。仍需审核模板并制定网络出口策略:HTTP 模板可以指定其他目的地。随附的模板库可供审核,但不会自动选用。
传输与身份验证
stdio是默认的本地传输方式。http在/mcp使用 Streamable HTTP,并提供/health端点。直接在本地使用时,默认绑定到127.0.0.1。- 由于共享会话无法隔离客户端,旧版
sse已禁用。
直接在本地使用 HTTP 时:
MCP_TRANSPORT=http MCP_SERVER_HOST=127.0.0.1 MCP_SERVER_PORT=8000 pentest-mcp
非环回 HTTP 监听器需要设置 MCP_AUTH_ENABLED=true、精确的
MCP_ALLOWED_ORIGINS 列表、MCP_OIDC_ISSUER、MCP_AUTH_AUDIENCE 和 HTTPS
MCP_PUBLIC_BASE_URL。即使反向代理发布的是绑定到环回地址的监听器,经过身份验证的 HTTP
仍必须设置颁发者和受众。必须通过 OIDC JWKS URL 或内省端点验证 Bearer 令牌。
除非请求中的 Origin 标头与允许列表匹配,否则该请求会被拒绝。远程访问应置于 TLS
和明确的网络策略保护之下。
经过身份验证的 HTTP 扫描器执行有单独的默认关闭开关:
MCP_REMOTE_EXECUTION_ENABLED=true。只有在专用、可信的部署中,并已落实本次测试的授权和访问策略时,才启用此开关。
此开关为 false 时,经过身份验证的客户端无法启动评估命令。
Bearer 令牌需要具备 read 范围才能发现工具和检索证据,具备 write 范围才能更改测试和报告,具备 execute 范围才能运行扫描器和取消命令。每个工具都会检查自身所需的范围;批量调用需要具备其使用的所有范围。
可以使用 MCP_AUTH_READ_SCOPE、MCP_AUTH_WRITE_SCOPE 和
MCP_AUTH_EXECUTE_SCOPE 将这些范围名称映射到提供商专用令牌。旧设置 MCP_AUTH_SCOPES 会被忽略。
远程 gobuster、ffufScan 和 Hydra 列表输入只能读取为该令牌所有者生成的字典文件,或操作员配置的绝对路径
MCP_SHARED_WORDLIST_DIR 下的文件。在 Docker 中以只读方式挂载共享目录。
哈希破解、主机数据包捕获和主机权限审计仍是本地 stdio 工具。
MCP_TRANSPORT=http
MCP_SERVER_HOST=127.0.0.1
MCP_SERVER_PORT=8000
MCP_AUTH_ENABLED=true
MCP_AUTH_MODE=bearer
MCP_ALLOWED_ORIGINS=https://research.example.com
MCP_PUBLIC_BASE_URL=https://research.example.com
MCP_OIDC_ISSUER=https://issuer.example.com
MCP_OIDC_JWKS_URL=https://issuer.example.com/.well-known/jwks.json
MCP_AUTH_AUDIENCE=pentest-mcp
MCP_AUTH_READ_SCOPE=read
MCP_AUTH_WRITE_SCOPE=write
MCP_AUTH_EXECUTE_SCOPE=execute
MCP_REMOTE_EXECUTION_ENABLED=true
可以使用 MCP_OIDC_INTROSPECTION_URL 代替 JWKS;如果提供商要求,还需设置 MCP_OAUTH_CLIENT_ID 和 MCP_OAUTH_CLIENT_SECRET。旧版 MCP_OAUTH_* 别名仍受支持,但应迁移到新设置。Docker HTTP 配置始终启用身份验证,即使它仅发布到环回地址也不例外。
运行限制
MCP_COMMAND_TIMEOUT_MS和MCP_COMMAND_OUTPUT_LIMIT_BYTES限制命令执行时间和捕获的输出。命令超时、退出码非零或输出被截断时,必须将其视为未完成并进行审核。已跟踪的子进程故障会记录为失败或已取消的outcome,并在报告证据索引中显示相应状态。- MCP 请求取消以及关闭测试都会中止正在运行的已跟踪命令。托管评估也会在每次 MCP 工具调度前检查权威的父级测试,并在 Codex 运行期间轮询该测试;测试关闭时,会取消容器运行并关闭其工作线程范围。扫描器子进程使用捕获的范围期限(包括 Nmap),并在启动前再次检查测试状态。
rawOptions和可能覆盖已声明目标的扫描器功能受到限制,但外部维护的模板和脚本仍需由操作员审核。- 报告由分析师撰写;服务不会根据开放端口或扫描器模板匹配结果推断漏洞严重性。
- 不提供自动工单同步、云端上传,也不验证所声明的授权参考是否有效。
Docker
下面的 Compose 镜像运行 Pentest MCP 服务。受管的 Codex 评估使用不同的固定镜像和 Docker 上下文;请参阅容器评估指南,了解该工作器。其 Codex 容器使用桥接网络访问模型,而扫描器 MCP 子进程在主机上运行。此处双方都没有针对目的地的出站流量允许列表,因此请在客户端测试前应用主机和虚拟机网络策略。
Docker Compose 默认使用本地 stdio 服务,不发布端口。它以非特权用户身份运行,会移除 Linux 功能,并在主机数据目录中持久保存扫描记录、报告和扫描日志。启动容器前,请准备好这个私有目录:
cp .env.example .env
mkdir -p .pentest-data
chmod 700 .pentest-data
docker compose run --build --rm -T pentest-mcp
主机目录为 PENTEST_DATA_HOST_DIR(默认值为 ./.pentest-data),挂载到容器内的 PENTEST_DATA_DIR=/var/lib/pentest-mcp。在 Linux 上,首次运行前,请确保容器 UID 1000 对主机目录具有写入权限(例如,sudo chown 1000:1000 .pentest-data)。Compose 不会自动创建缺失的绑定挂载路径。请妥善保护并备份此目录,将其作为客户证据;该目录已从 Git 和 Docker 构建上下文中排除。
HTTP 访问
HTTP 配置文件默认不启用,启用后默认发布到 127.0.0.1。它始终启用 Bearer 身份验证。在 .env 中配置准确的 MCP_ALLOWED_ORIGINS、MCP_OIDC_ISSUER、MCP_AUTH_AUDIENCE、HTTPS MCP_PUBLIC_BASE_URL,以及 MCP_OIDC_JWKS_URL 或 MCP_OIDC_INTROSPECTION_URL。如果内省需要 OAuth 客户端凭据,请设置这些凭据。如果缺少这些监听器和验证器的必需配置,服务将无法启动。在这是专用的可信扫描器部署之前,请保持 MCP_REMOTE_EXECUTION_ENABLED=false;之后显式将其设为 true,以允许经过身份验证的扫描器调用。
chmod 600 .env
docker compose --profile http up --build pentest-mcp-http
除非更改 MCP_SERVER_PORT,否则端点为 http://127.0.0.1:8000/mcp。Compose 在容器内外使用相同的端口。Compose 会将服务绑定到其网络命名空间内的 0.0.0.0,因此即使发布的主机端口仍绑定到回环地址,也必须设置 HTTPS 公共基础 URL 和身份配置。对于远程客户端,请让 Compose 监听器保持绑定到回环地址,并在其前方部署带访问控制的 TLS 反向代理。只有在明确需要使用该地址及其防火墙策略时,才将 MCP_BIND_ADDRESS 设为非回环地址;Bearer 令牌必须通过 TLS 传输。
网络捕获和自定义字典
默认容器可以扫描 Docker 网络上的目标,但无法捕获主机接口流量。在 Linux 主机上,单独的捕获配置文件可选择启用主机网络,以及供 tcpdump 使用的 NET_RAW 和 NET_ADMIN:
docker compose --profile capture run --build --rm -T pentest-mcp-capture
该配置文件可以观察主机网络命名空间,仅应在项目允许数据包捕获时使用。Docker Desktop 不提供相同的主机接口访问能力。若要使用私有字典而不将其添加到镜像中,请将只读主机目录挂载到一次性运行中:
docker compose run --rm -T --volume /absolute/wordlists:/app/custom-wordlists:ro pentest-mcp
若要在 Compose 中启用经过审核且已签名的 Nuclei HTTP 模板,请在 .env 中将 MCP_NUCLEI_TEMPLATES_HOST_DIR 设为绝对主机目录,并使用选择性启用的覆盖文件。该文件会将此目录以只读方式挂载到 /reviewed-nuclei:
docker compose -f docker-compose.yml -f docker-compose.nuclei.yml run --build --rm -T pentest-mcp
Docker 镜像会安装:
nmap、john、hashcat、gobuster、nikto、ffuf、hydra、sqlmap、tcpdumpsubfinder、httpx+httpx-toolkit别名、nuclei
必需的主机工具(非 Docker 运行)
确保这些二进制文件位于 PATH 中:
which nmap john hashcat gobuster nikto subfinder httpx-toolkit ffuf nuclei hydra sqlmap tcpdump
如果未安装 httpx-toolkit,则可使用经过验证的 ProjectDiscovery httpx 二进制文件作为备用方案。
MCP 评估约定
2026 年 10 月的服务器声明使用 @modelcontextprotocol/sdk@^1.32.2,并通过 stdio 或经过身份验证的 Streamable HTTP 暴露上述工具清单。工具使用 Zod 模式和 MCP 注解。评估 CLI 应加载完整目录,然后根据参与计划、可用二进制文件和观察到的结果选择方法。必须将工具输出和目标内容视为不可信数据。MCP 传输连接本身并不能作为已进行测试的证据:持久记录和匹配的范围决策才是验收证据。
服务器的目标门控会在执行前检查已声明的输入,但无法证明第三方工具绝不会发起次级请求。应确保 Agent 的操作系统身份、文件系统挂载、凭证、出站网络策略以及扫描器自身配置都符合已签署的范围。对于客户项目,应将范围作者、评估 Agent 和报告审阅者分开,避免 Agent 继承构建仓库的对话或其他客户的上下文。
客户专属的部署清单、授权缺口、主机详情和证据位置应保存在私密项目存储中,并置于公共仓库和模型构建上下文之外。Daybreak 和 Glasswing 说明列出了当前计划和客户项目的访问要求。仅有 API 密钥或 CLI 模型标签,并不代表获准执行客户评估。
安全声明
仅在获得明确书面授权的系统上使用此服务器。妥善保护证据和客户数据,并在报告发现前进行验证。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。