使用说明
MCP扫描仪
MCP扫描仪项目的基础脚手架。当前存储库 包含共享配置、日志记录助手和抽象接口 图形、LLM和扫描组件。
先决条件
- Python 3.10+
pip
入门
-
创建虚拟环境
python -m venv .venv source .venv/bin/activate # On Windows use: .venv\\Scripts\\activate -
以可编辑模式安装项目
pip install --upgrade pip pip install -e .[dev]修复工作流程将发送到Git和Semgrep。安装它们 您的平台包管理器(如果尚未提供):
# macOS (Homebrew) brew install git semgrep # Debian/Ubuntu sudo apt-get update && sudo apt-get install -y git curl curl -sL https://semgrep.dev/install.sh | sudo bash -
提供配置(可选)
复制
.env.example到.env并根据需要调整任何值。cp .env.example .env环境变量前缀为
MCP_并且可以使用嵌套 双下划线。例如,MCP_LLM__API_KEY设置LLM提供程序 API密钥。
项目布局
src/
├── common/ # Shared helpers (config, logging, etc.)
├── graph/ # Graph provider abstractions
├── llm/ # LLM provider abstractions
└── scanners/ # Repository scanner interfaces
自动扫描流水线
HTTP服务驱动了一个旨在镜像的多阶段补救工作流 您描述的过程:
- 枚举存储库架构。 这
enumeration包裹行走 目标存储库,构建属性图,并具体化JSON 上下文文件和交互式HTML可视化。这些文物是 在扫描响应中发出enumeration.artifacts. - 将Semgrep的发现与RAG图相关联。 Semgrep与
捆绑的规则集及其JSON结果通过以下方式得到丰富
graph.enrichers.correlate_semgrep_findings,注入周围环境 来自RAG的节点元数据、代码片段和关系信息。 - 生成DSPy修复脚本。 丰富的发现为DSP提供了信息
补救驱动程序。司机写了一个Markdown剧本,总结了
针对每个漏洞提出补丁和持久性JSON有效载荷,其中包含
DSPy输出。扫描响应在以下位置显示这些文件的持久路径
remediation.artifacts(例如,dspy_summary.md和那个dspy_cases/目录)。 - 应用修复程序并创建提交。 补丁建议按以下方式分组
漏洞,一次应用一个提交。每个成功的提交都使用
描述性信息(
fix(<vulnerability_id>): ...).如果GitHub令牌是 配置后,服务推送补救分支并打开拉取 请求链接到每个提交。
每个阶段都会在响应有效载荷中留下稳定的伪影,以便 您可以查看RAG图、Semgrep JSON、DSPy脚本和修正分支 扫描完成后。
正在加载配置
Pydantic设置用于集中运行时配置:
from common.config import get_settings
settings = get_settings()
print(settings.llm.model)
加载器读取 .env 默认情况下,会回退到环境
变量。
使用捆绑的Hugging Face编码模型
通过启用本地
拥抱面部整合。设置以下环境变量以使
服务负载 ise-uiuc/Magicoder-S-DS-6.7B 型号(或其他兼容型号
编码模型)通过Transformers库:
export MCP_LLM__PROVIDER=huggingface
export MCP_LLM__MODEL=ise-uiuc/Magicoder-S-DS-6.7B
当这些设置处于活动状态时,补救建议流会提示
本地托管的模型,而不是依赖于远程API。您可以替换
MCP_LLM__MODEL 对于较小的CPU友好型模型(例如,
deepseek-ai/deepseek-coder-1.3b-instruct)如果内存受到限制。第一
run会将模型权重下载到本地Hugging Face缓存中。
通过Docker运行HTTP服务
该存储库现在包含一个轻量级的HTTP服务,该服务公开了 扫描仪工作流程。构建并运行容器,如下所示:
docker build -t mcp-scanner .
docker run --rm -p 8000:8000 mcp-scanner
通过发送 POST 请求 /scan 终点。提供
请求体中的Git URL(和可选分支)。您还可以切换
管道行为——例如禁用补救提交或拉取请求——通过
提供如下所示的可选布尔开关:
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"repo_url": "https://github.com/example/repo.git",
"branch": "main",
"quick": false,
"apply_commits": true,
"push": true,
"create_pr": true,
"base_branch": "main",
"pr_labels": ["automated", "security"]
}' \
http://localhost:8000/scan
响应包含Semgrep的发现和建议的补救补丁 由MCP管道生成。
当修复成功时,您会发现 pull_request JSON中的对象
响应谁 status 是 success 以及谁的 url 链接到创建的PR。
如果字段不存在或状态为 skipped,检查随附的
reason--例如,缺失 GITHUB_TOKEN 证书或缺失
Semgrep的发现将阻止打开拉取请求。
运行GitHub修复扫描
支持MCP扫描器的工作流假定Git和GitHub凭据为 可用,因此它可以提交修复程序并打开拉取请求。在触发之前 扫描设置以下环境变量:
export GIT_USER="Your Name"
export GIT_EMAIL="you@example.com"
export GITHUB_TOKEN="ghp_your_personal_access_token"
GitHub代币需要 repo 范围,以便扫描仪可以推动补救
分支并代表您创建pull请求。
配置后,启动HTTP服务(直接或在Docker中):
python -m service.http_server # binds to 0.0.0.0:8000 by default
通过POSTing直接触发对GitHub存储库的完整修复运行
到 /scan 终点。只要 GITHUB_TOKEN 在出口
服务运行的环境中,扫描仪将拾取它
automatics--不需要在请求有效负载中嵌入凭据:
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"repo_url": "https://github.com/rymarinelli/vulnerable_flask_SQL",
"branch": "main",
"quick": false,
"apply_commits": true,
"push": true,
"create_pr": true,
"pr_labels": ["automated", "security"]
}' \
http://localhost:8000/scan
响应捆绑了枚举工件、Semgrep发现、应用提交、,
以及(在启用时)补救拉取请求元数据。进行干扫描
无需提交或打开PR,设置 "apply_commits": false (以及
可选地 "quick": true)在请求有效载荷中。
使用mytunnel(localtunnel)公开服务
当您需要与远程客户端共享本地MCP Scanner实例时,
使用捆绑的测试部署助手。该脚本启动HTTP服务器,
确保 mytunnel CLI是
并打印隧道发出的公共URL:
python -m mcp_scanner.scripts.deploy_test_tunnel --install-lt --subdomain busy-papers-melt
关键标志:
--install-lt安装ltCLI与npm如果还没有 可用。在没有全局安装的环境中运行时忽略它 渴望的。--subdomain请求一个稳定的本地隧道子域。--host和--port控制嵌入式MCP服务器绑定(默认:0.0.0.0:8000).
该命令一直运行,直到被中断 Ctrl+C,同时关闭两者
退出时,服务器和隧道干净。一旦脚本打印
🌐 Public MCP URL,您可以调用 /scan 来自任何机器的端点,以及
通过以下方式驱动完整的修复(包括Git提交、推送和拉取请求)
curl:
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"repo_url": "https://github.com/rymarinelli/vulnerable_flask_SQL",
"apply_commits": true,
"push": true,
"create_pr": true
}' \
https://busy-papers-melt.loca.lt/scan
只要 GITHUB_TOKEN 在隧道所在的环境中导出
脚本正在运行,扫描程序向GitHub进行身份验证,推送修复
分支,并打开一个
pull请求。保持 GIT_USER 和 GIT_EMAIL 配置为控制提交
应用于生成的修复程序的作者信息。
