mcpField
7
72hours security check

72hours security check

远程服务
github.com/maebsy安全02 天前更新
代码仓库

关于 72hours security check

72hours security check 通过 MCP 提供公开 GitHub 仓库的安全扫描结果、发现项、修复提示、报告和复扫。它既支持远程 HTTP 使用,也能将已有结果只读地交给编码 Agent;代码修改和验证仍由用户工作流完成。

主要功能

  1. 01扫描公开 GitHub 仓库
  2. 02获取发现项和修复提示
  3. 03复扫已发布的默认分支
  4. 04生成检查与事故报告
  5. 05只读传递已有检查结果

适用场景

  1. 01查看仓库扫描发现项
  2. 02将符合条件的修复建议交给编码 Agent
  3. 03比较复扫结果与先前结果
  4. 04起草安全事故报告

MCP 相关

服务通过远程 MCP 工具提供工作区创建、扫描、分析、修复提示、报告和复扫。独立的本地或远程 MCP 传递模式可提供已有发现项和修复建议,但不会修改代码。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://oboe-handiness-enroll.ngrok-free.dev/mcp/service/rpc
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;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。

  1. 在网页“④ MCP 集成”栏中,点击开启自动保存,选择一次结果文件(72hours-mcp-<owner>-<repo>.json)的位置。之后每次检查和分析结束时,都会保存到同一文件(Chrome、Edge)。其他浏览器请使用下载 MCP 结果,并保存为相同的文件名。
  2. 只需首次使用复制 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_promptfingerprint包含建议和验证说明的文本;已阻止或不存在的项目会返回 tool error
prompt fix_findingfingerprint将相同内容作为 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에 기록합니다.

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。