关于 72hours security check
72hours security check 通过 MCP 提供公开 GitHub 仓库的安全扫描结果、发现项、修复提示、报告和复扫。它既支持远程 HTTP 使用,也能将已有结果只读地交给编码 Agent;代码修改和验证仍由用户工作流完成。
主要功能
- 01扫描公开 GitHub 仓库
- 02获取发现项和修复提示
- 03复扫已发布的默认分支
- 04生成检查与事故报告
- 05只读传递已有检查结果
适用场景
- 01查看仓库扫描发现项
- 02将符合条件的修复建议交给编码 Agent
- 03比较复扫结果与先前结果
- 04起草安全事故报告
MCP 相关
服务通过远程 MCP 工具提供工作区创建、扫描、分析、修复提示、报告和复扫。独立的本地或远程 MCP 传递模式可提供已有发现项和修复建议,但不会修改代码。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://oboe-handiness-enroll.ngrok-free.dev/mcp/service/rpcclaude mcp add --transport http maebsy-72hours https://oboe-handiness-enroll.ngrok-free.dev/mcp/service/rpc{"mcpServers":{"maebsy-72hours":{"type":"http","url":"https://oboe-handiness-enroll.ngrok-free.dev/mcp/service/rpc"}}}在 Cursor 中打开{"servers":{"maebsy-72hours":{"type":"http","url":"https://oboe-handiness-enroll.ngrok-free.dev/mcp/service/rpc"}}}在 VS Code 中打开{"mcpServers":{"maebsy-72hours":{"type":"http","url":"https://oboe-handiness-enroll.ngrok-free.dev/mcp/service/rpc"}}}{"mcpServers":{"maebsy-72hours":{"serverUrl":"https://oboe-handiness-enroll.ngrok-free.dev/mcp/service/rpc"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
72hours MCP — 通过 AI 对话使用服务
复制运行中服务的 /mcp/service 中的服务器 URL,并将其注册到 Claude 的 custom connector、
ChatGPT 的 custom MCP server 或其他 AI 的远程 MCP 设置中。当前演示认证为 None。
Cursor·VS Code 也可以使用同一页面中的连接按钮。注册后,调用 service_info 确认连接。
网页聊天通过仓库 URL 使用服务;直接修改代码则由拥有文件访问权限的编码 Agent 执行。
远程地址为 /mcp/service/rpc,面向 Agent 的说明为 /mcp/service/agent.txt。
可在支持远程 HTTP MCP 的客户端中使用,无需安装 Python·CMD·结果文件。
客户端本身可能需要批准连接并重新连接;仅支持 stdio 的应用则需要单独的桥接程序。
create_workspace → start_scan → get_scan → start_analysis → get_analysis → get_fix_prompt
start_analysis 仅接收 workspace_token·scan_id·fingerprint。分析 API 无需用户 OS·托管环境输入,即可生成适用于三种 OS 的命令,包管理器会自动判定。
依次调用实际服务器 API。修改由用户 AI 在其工作副本中执行。
rescan 会将同一仓库的已发布默认分支与之前的结果进行比较。它无法检查未发布的本地修改或
PR 分支,因此如果提交相同,不应标记为修改验证完成。
generate_report 和 incident_report 提供现有服务的检查报告·事故评估·举报表单草稿。
不提供自动提交举报·账户管理·计费·任意 Shell 执行·部署工具。
现有 /mcp/connect 保留为专用连接功能,用于连接已在网页上检查的结果。
整个服务 MCP 不信任或接收浏览器结果,而是连接由它自身接收的服务器任务所对应的
实际仓库·提交·FindingInput。不会传递 GPU 密钥。
生产环境运行时使用现有命令 live_server.py --database /absolute/private/links.sqlite3 --public-origin https://HOST。
--public-origin 可接收多个以逗号分隔的地址;连接地址·说明文档会使用第一个地址(主地址,固定地址)生成,其他地址的请求也会被接收。只在同一目录的 workspaces.sqlite3 中
保存过期时间·capability 哈希·接收 ID,不保存原始代码·完整分析内容·密钥。backend 会调用固定的 loopback 127.0.0.1:8000,并遵循现有的认证·allowlist·queue 策略。需要认证的环境会
返回策略错误,不会绕过。此配置用于已经允许无认证公开演示 API 的部署。
capability 有效期为 24 小时,最多 128 个工作空间、256 个接收任务、每个空间 16 个任务
(WorkspaceStore 生产配置)。相同的 scan request_id 和相同的分析输入不会重复接收。
响应不明确的 POST 会保留为 not_confirmed,以防止自动重复接收。服务器可能已经接收任务,
因此在运营人员确认之前,不要随意使用新的 request_id 重复提交。
撤销会移除 MCP 访问权限,但不会取消已经由 backend 接收的任务。
保留 DB 并重启进程后,ID 仍会保留;但 backend 结果的保留期过后,需要重新检查。
验证:python -m unittest discover -s integrations/mcp-handoff/tests -v。
通过合成测试检查 HTTP MCP 初始化·完整 API 契约·两个工作空间隔离·并发重复请求·过期/撤销·认证/错误·Red 门禁;部署后,再通过公开 HTTPS 单独确认实际检查→GPU 分析→报告→重新检查。
现有本地结果传递模式
这是一个在现有服务旁边以独立进程运行的只读 MCP 服务。它会在本地 LLM 已生成的 ai_fix_prompt 中附加仓库检查·最小修改·测试·重新检查的指引,并提供给用户的 AI 编码 Agent。它不会导入 backend,也不会更改 API·DB·GPU·compose·服务依赖项。
기존 로컬 LLM → 결과 JSON 저장 → 이 MCP 서버 (stdio)
↑ 사용자 AI 에이전트가 조회
↓ 수정 제안 + 실제 검증 지침
사용자 저장소에서 수정·테스트·재검사
MCP 不会主动向用户的 Agent 推送内容,也不会自动让其修改。用户连接 MCP 并请求执行任务后,Agent 才会调用工具。它提供官方 SDK 文档中的 tools 和 prompts;在受支持客户端的用户菜单中,也可以直接选择 fix_finding prompt。它使用 SDK v1 维护 API,并固定为 mcp==1.30.0。
安装与验证
在仓库根目录中通过 PowerShell 运行。不要安装到现有的 backend/.venv 中。
python -m venv integrations/mcp-handoff/.venv
integrations/mcp-handoff/.venv/Scripts/python.exe -m pip install -r integrations/mcp-handoff/requirements.txt
integrations/mcp-handoff/.venv/Scripts/python.exe -m unittest discover -s integrations/mcp-handoff/tests -v
在 macOS/Linux 上,将 .venv/Scripts/python.exe 替换为 .venv/bin/python。测试通过合成结果和实际 stdio 客户端运行,不需要 GPU·网络或运行服务。被阻止的 prompt 请求所产生的错误日志属于预期的拒绝路径。
连接结果
输入支持正在进行的 #16 的以下两种输出契约。即使相关功能尚未合并到 main,MCP 本身的安装和合成数据测试也可以独立进行。
| 输入 | 结构 | 运行参数 |
|---|---|---|
保存 /api/llm/explain 响应的 JSON | {"mode":"red_blue","results":[...]} | --results |
python -m app.llm.check 保存的 JSON | {"model":"...","runs":[{"mode":"red_blue","results":[...]}]} | --results 和明确指定的 --run-index |
--run-index 从 0 开始。如果实测报告同时包含 Blue 和 Red–Blue,请检查实际的 runs 后再选择。不会自动选择最新文件或之前 pass 的结果。每次 1~50 条,文件最大 2 MiB。启动时只读取运营人员指定的文件一次,并仅在内存中保留所需字段,因此若要连接新结果,必须重启 MCP 进程。请在文件写入完成后再连接。
integrations/mcp-handoff/.venv/Scripts/python.exe integrations/mcp-handoff/server.py `
--results C:/private/scan-results.json `
--repository owner/scanned-app `
--revision <검사한_사용자_저장소의_40자리_SHA>
repository 和 revision 指的是被检查的用户仓库,而不是 72hours 服务仓库。当前上游输出不包含这些信息,因此由运营人员指定。MCP 不会验证这种关联关系或文件的真实性。LLM 实测 fixture 并非实际用户仓库的检查结果,不要将其作为生产结果连接。
直接运行时等待输入是正常的。stdout 专用于 MCP JSON-RPC。通常由客户端启动服务器进程。
网页自动保存,以读取最新结果(#65)
在网页(仪表板)中执行检查时,结果文件会自动覆盖;MCP 不带 --revision 运行,每次调用时都会读取最新文件。即使重新检查后提交发生变化,也无需修改配置或重启 MCP。
- 在网页“④ MCP 集成”栏中,点击开启自动保存,选择一次结果文件(
72hours-mcp-<owner>-<repo>.json)的位置。之后每次检查和分析结束时,都会保存到同一文件(Chrome、Edge)。其他浏览器请使用下载 MCP 结果,并保存为相同的文件名。 - 只需首次使用复制 MCP 配置获得的配置,并粘贴到客户端。格式如下。
server.py --results <결과 파일 절대 경로> --repository <owner/repo>
--repository 可以省略,但建议一并提供。省略后,该路径下保存的任何仓库结果文件都会原样传递。网页的配置复制始终会加入 --repository。
| 操作 | 内容 |
|---|---|
| 最新结果 | 调用时如果文件内容(sha256)发生变化,就会重新读取。即使覆盖后的时间和大小相同,也会反映变更 |
| 仓库与提交 | 使用文件中的 source.repository、source.revision、source.generated_at。这些信息会显示在 list_findings 的 source 中 |
| 固定仓库 | 如果 --repository 与文件中的仓库不同,则不会接收该文件,并保留上一次的结果 |
| 文件损坏 | 如果文件在写入过程中损坏或格式错误,则保留上一次的正常结果,并通过 notice 通知 |
| 文件不存在 | 服务会启动,list_findings 会返回空列表和“请开启自动保存”的提示 |
| 文件被删除 | 文件读取一次后若被删除,则保留上一次的结果,并通过 notice 通知 |
如果提供 --revision,则采用原有的固定方式,仅在启动时读取一次。此时,如果文件中的 source.revision 不同,则会拒绝读取。
连接到用户 Agent
连接实际网页检查(#71)
在 live_server.py 部署中,/mcp/connect 会读取同一浏览器中的实际检查结果。
用户确认后创建专用连接,并将复制修改请求中的句子发送给自己的 AI Agent。
无需安装文件,仅连接到该次检查;支持 24 小时过期和手动撤销。
不会自动替换公共示例。系统会注明这是浏览器导出的结果,并由 Agent 核实仓库、提交和代码依据。
有关数据边界、部署和验证的详细信息,请参阅实际检查 MCP 指南。
无需安装的远程连接(#68)
运营者通过 http_server.py 部署已获公开许可的结果后,用户无需安装 ZIP/Python,
只需将 https://<공개호스트>/mcp/connect 中的句子发送给 AI Agent。
Agent 会读取 /mcp/agent.txt,并按照主机支持的方式注册 /mcp。
如果主机未授予修改配置的权限,用户必须在 MCP 添加界面中注册 URL。
这不会绕过执行权限、连接审批或客户端重新连接。
- 使用标准 Streamable HTTP 和无状态 JSON 响应,不依赖 Quick Tunnel 不支持的 SSE。
- 提供适用于 Claude Code、Codex、Cursor、VS Code 及支持远程 HTTP 的主机的说明。
- 现有
list_findings、get_fix_prompt、fix_finding的传递条件不变。 - 仅绑定到 127.0.0.1,只允许明确指定的公开 Host/Origin,并将请求正文限制为 64 KiB。
- 仅适用于无需身份验证的公开固定快照。不得将个人检查文件上传到此端点。
部署时必须通过
--publish-approved-snapshot明确声明已获公开许可。 - 不支持自动查询新网页检查、个人项目、启动扫描或上传。要集成多用户 服务,必须另行实现用户/项目权限及结果 ID 的关联。
一般服务部署请遵循远程 MCP 部署指南。 实际公开结果不会提交到仓库。测试仅使用合成结果。
本地 stdio 连接(现有方式)
client.example.json 是面向使用 mcpServers 格式的客户端的 Windows 配置示例。请将可执行文件、服务文件和结果文件路径全部改为绝对路径,并填写检查目标仓库和提交。实测报告需在 args 中添加 "--run-index", "0" 等内容。此文件不会自动应用,也不会更改现有客户端配置或正在运行的 Claude 会话。对于使用其他配置格式的主机,注册相同的 command 和 args 即可。
连接后发送给用户 Agent 的请求:
请使用 72hours-handoff 的 list_findings 检查当前连接的检查结果。获取 ready=true 项目的 get_fix_prompt,并确认目标仓库和检查提交是否与当前工作目标一致。在保留现有更改的同时,只修复相关漏洞,并告知我正常功能测试和安全复查的结果。请勿擅自修改已阻止的项目,并说明需要确认的原因。
| MCP 功能 | 输入 | 输出 |
|---|---|---|
tool list_findings | 无 | 仓库、提交、文件 SHA-256、run index,以及各 fingerprint 的 ready 状态和阻止原因 |
tool get_fix_prompt | fingerprint | 包含建议和验证说明的文本;已阻止或不存在的项目会返回 tool error |
prompt fix_finding | fingerprint | 将相同内容作为 user 消息提供;同样适用阻止规则 |
전달 조건과 경계
status=done,variant=D,red_verdict=pass, 마지막red_rounds의 판정도 pass이며 issues가 비어 있어야 합니다.needs_manual_review=false,false_positive_suspect=false가 명시적 boolean이어야 합니다. 누락·문자열·실패·오탐 의심 결과의 수정 지시는 전달하지 않습니다.- fingerprint 일치, 비어 있지 않은 ai_fix_prompt, 모델과 프롬프트 버전을 확인합니다. 중복 fingerprint·중복 JSON 키는 거부합니다.
- 소스 코드 조각, context, 모델의 원본 오류, 공격 시나리오는 전달하지 않습니다. 허용 필드만 사용하고 알려진 키 패턴을 다시 가립니다. 임의 형식의 비밀값까지 완전하게 탐지하지는 못하므로 생산 단계에서도 비밀값과 코드 원문을 제거해야 합니다.
- 프롬프트의 LLM 결과는 이스케이프한 JSON 데이터입니다. 이는 주입 방어의 한 층이지 모델이 악성 제안을 절대 따르지 않는다는 보장은 아닙니다. 수신 에이전트가 사용자 권한·코드 근거·작업 범위를 확인해야 합니다.
- Red pass는 LLM의 제안 검토이며 실제 공격 실행, 코드 수정 성공, 취약점 해결 확인이 아닙니다. 완료 판정은 사용자 측 테스트와 원래 탐지기의 재검사가 필요합니다.
- 기본 실행은 읽기 전용 로컬 stdio입니다. 별도
http_server.py는 공개 허용된 고정 스냅샷만 원격으로 제공합니다. 파일 내용은 연결한 AI 클라이언트에 전달되므로 클라우드 모델을 쓰는 호스트에서는 외부로 전달될 수 있습니다. 결과 파일 접근 권한은 운영자가 관리합니다.
이후 서비스 연동 시 필요한 작업
현재 범위는 파일 기반 전달입니다. 실시간 대시보드/DB 조회나 다중 사용자 원격 MCP는 구현하지 않았습니다. 그 단계에서는 기존 인증 경계 안에서 사용자·프로젝트별 읽기 전용 조회, 검사 대상 커밋·scan ID의 서버 측 결합, 최신 상태 및 재검사 이력 확인을 먼저 추가해야 합니다. 지금 서버를 그대로 공개 HTTP 서비스로 노출하면 안 됩니다.
새 검사 결과에는 사용자 저장소·검사 커밋·검사 시각을 상위 시스템에서 함께 기록하는 것이 좋습니다. 이 PR은 그 계약을 강제로 바꾸지 않고 운영자 인자로 연결합니다. 외부 자원은 저장소 규칙에 따라 docs/external-resources.md에 기록합니다.
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。