/ mcp-scan / README.md
README.md
  1  # MCP-Scan
  2  
  3  一个基于 AI Agent 的自动化代码扫描和漏洞检测工具,模仿 Claude Code / Gemini CLI 的工作方式。
  4  
  5  ## ✨ 特性
  6  
  7  - **🤖 智能 Agent 系统**: 多阶段自动化扫描流程(信息收集 → 代码审计 → 漏洞整理)
  8  - **🔍 深度代码分析**: 自动识别项目结构、技术栈和潜在安全漏洞
  9  - **🎯 专用模型配置**: 支持为不同任务配置专用 LLM(思考、编码、快速响应等)
 10  - **📊 安全评分系统**: 自动计算项目安全评分和风险等级
 11  - **🛠️ 可扩展工具系统**: 轻松添加自定义工具和功能
 12  - **📝 详细日志记录**: 使用 loguru 记录完整的执行过程
 13  - **🐛 Debug 模式**: 集成 Laminar 追踪功能,方便调试
 14  - **🕵️ Agent Skill 审计**: 自动识别并审计 Agent Skill 项目的一致性(SKILL.md vs 代码实现)
 15  
 16  ## 🚀 快速开始
 17  
 18  ### 1. 克隆项目
 19  
 20  ```bash
 21  git clone <your-repo>
 22  cd mcp-scan
 23  ```
 24  
 25  ### 2. 安装依赖
 26  
 27  推荐使用 `uv`(速度更快,自动管理虚拟环境):
 28  
 29  ```bash
 30  uv sync
 31  ```
 32  
 33  或使用 pip:
 34  
 35  ```bash
 36  pip install -r requirements.txt
 37  ```
 38  
 39  ### 3. 配置环境变量
 40  
 41  复制环境变量模板:
 42  
 43  ```bash
 44  cp env.example .env
 45  ```
 46  
 47  编辑 `.env` 文件,至少设置以下必需的环境变量:
 48  
 49  ```bash
 50  # 必需:OpenRouter API Key
 51  OPENROUTER_API_KEY=your-api-key-here
 52  
 53  # 可选:自定义默认模型和 URL
 54  DEFAULT_MODEL=deepseek/deepseek-v3.2-exp
 55  DEFAULT_BASE_URL=https://openrouter.ai/api/v1
 56  ```
 57  
 58  > **注意**: `.env` 文件会在程序启动时自动加载,无需手动 `source`。如果你使用系统环境变量,也会被自动识别。
 59  
 60  ### 4. 运行扫描
 61  
 62  扫描指定项目:
 63  
 64  ```bash
 65  python main.py --repo /path/to/your/project
 66  ```
 67  
 68  使用自定义提示词:
 69  
 70  ```bash
 71  python main.py --repo /path/to/your/project --prompt "重点检查 SQL 注入漏洞"
 72  ```
 73  
 74  ## 📖 使用方法
 75  
 76  ### 基本命令
 77  
 78  ```bash
 79  python main.py --repo <项目路径> [选项]
 80  ```
 81  
 82  ### 命令行参数
 83  
 84  | 参数 | 简写 | 说明 | 默认值 |
 85  |------|------|------|--------|
 86  | `--repo` | - | **必需**。要扫描的项目路径 | - |
 87  | `--prompt` | `-p` | 自定义扫描提示词 | "" |
 88  | `--model` | `-m` | LLM 模型名称 | `deepseek/deepseek-v3.2-exp` |
 89  | `--api_key` | `-k` | API Key | 从 `OPENROUTER_API_KEY` 读取 |
 90  | `--base_url` | `-u` | API 基础 URL | `https://openrouter.ai/api/v1` |
 91  | `--debug` | - | 启用 debug 模式(包括 Laminar 跟踪) | `False` |
 92  | `--server_url` | - | 远程 MCP server URL (启用动态分析模式) | `None` |
 93  | `--header` | - | 自定义 HTTP header (key:value),可多次使用 | `[]` |
 94  | `--language` | - | 输出语言 (zh/en) | `zh` |
 95  
 96  ### 使用示例
 97  
 98  ```bash
 99  # 基础扫描
100  python main.py --repo ./myproject
101  
102  # 使用特定模型
103  python main.py --repo ./myproject -m "anthropic/claude-3.5-sonnet"
104  
105  # 使用自定义 API Key
106  python main.py --repo ./myproject -k "sk-or-v1-xxxxx"
107  
108  # 启用 debug 模式
109  python main.py --repo ./myproject --debug
110  
111  # 组合使用
112  python main.py --repo ./myproject \
113    -m "google/gemini-2.5-pro" \
114    -p "重点检查认证和授权相关的安全问题" \
115    --debug
116  
117  # 动态分析 (针对运行中的 MCP Server)
118  python main.py \
119    --server_url "http://localhost:8000/sse" \
120    --prompt "测试工具投毒漏洞"
121  ```
122  
123  ## ⚙️ 配置说明
124  
125  ### 环境变量配置
126  
127  所有配置都可以通过环境变量设置。创建 `.env` 文件或在系统中设置环境变量:
128  
129  #### 主要 LLM 配置
130  
131  ```bash
132  # OpenRouter API Key(必需)
133  OPENROUTER_API_KEY=your-api-key-here
134  
135  # 默认模型
136  DEFAULT_MODEL=deepseek/deepseek-v3.2-exp
137  
138  # API 基础 URL
139  DEFAULT_BASE_URL=https://openrouter.ai/api/v1
140  ```
141  
142  #### 专用 LLM 配置
143  
144  为不同任务配置专用模型,每个模型可以有独立的 API Key 和 Base URL:
145  
146  ```bash
147  # Thinking 模型(用于深度推理)
148  THINKING_MODEL=google/gemini-2.5-pro
149  THINKING_BASE_URL=https://openrouter.ai/api/v1
150  THINKING_API_KEY=  # 可选,不设置则使用主 API Key
151  
152  # Coding 模型(用于代码生成和分析)
153  CODING_MODEL=anthropic/claude-sonnet-4.5
154  CODING_BASE_URL=https://openrouter.ai/api/v1
155  CODING_API_KEY=  # 可选,不设置则使用主 API Key
156  ```
157  
158  #### Debug 和日志配置
159  
160  ```bash
161  # Laminar API Key(用于 debug 模式的追踪)
162  LAMINAR_API_KEY=your-laminar-api-key
163  
164  # 日志级别
165  LOG_LEVEL=INFO  # DEBUG, INFO, WARNING, ERROR
166  ```
167  
168  ### 配置优先级
169  
170  配置的优先级从高到低:
171  
172  1. 命令行参数(如 `-m`, `-k`, `-u`)
173  2. 环境变量
174  3. 代码中的默认值
175  
176  ## 📁 项目结构
177  
178  ```
179  mcp-scan/
180  ├── agent/                  # Agent 核心实现
181  │   ├── agent.py           # 主 Agent(多阶段扫描流程)
182  │   └── base_agent.py      # 基础 Agent 类
183  ├── tools/                  # 工具模块
184  │   ├── registry.py        # 工具注册系统
185  │   ├── thinking/          # 思考工具
186  │   ├── finish/            # 完成工具
187  │   ├── file/              # 文件操作工具
188  │   └── execute/           # 代码执行工具
189  ├── utils/                  # 工具函数
190  │   ├── config.py          # 配置管理
191  │   ├── llm.py             # LLM 基础封装
192  │   ├── llm_manager.py     # LLM 管理器(多模型支持)
193  │   ├── loging.py          # 日志配置
194  │   ├── parse.py           # XML 解析
195  │   ├── project_analyzer.py # 项目分析工具
196  │   ├── extract_vuln.py    # 漏洞提取工具
197  │   ├── tool_context.py    # 工具上下文
198  │   └── aig_logger.py      # 结构化日志记录
199  ├── prompt/                 # 提示词模板
200  │   ├── system_prompt.md   # 系统提示词
201  │   ├── agents/            # 各阶段 Agent 提示词
202  │       ├── project_summary.md # 信息收集(含 Skill 识别)
203  │       ├── code_audit.md      # 代码审计(含 Skill 一致性审计)
204  │       └── vuln_review.md     # 漏洞整理
205  ├── main.py                 # 主入口
206  ├── requirements.txt        # 依赖列表
207  ├── env.example            # 环境变量模板
208  └── README.md              # 本文档
209  ```
210  
211  ## 🔧 工作原理
212  
213  ### 扫描流程
214  
215  MCP-Scan 采用多阶段自动化流程:
216  
217  ```
218  1. 信息收集 (Information Collection)
219     ├── 分析项目结构
220     ├── 识别技术栈
221     └── 识别项目类型 (普通项目 / Agent Skill)
222  
223  2. 代码审计 (Code Audit)
224     ├── 深度代码分析
225     ├── 识别安全问题
226     └── 若为 Agent Skill,执行一致性审计 (Intent Alignment Check)
227  
228  3. 漏洞整理 (Vulnerability Review)
229     ├── 整理发现的漏洞
230     ├── 评估风险等级
231     └── 生成详细报告
232  ```
233  
234  ### Agent Skill 审计
235  如果项目根目录下存在 `SKILL.md`,工具会自动触发 **Agent Skill 一致性审计**:
236  - **功能意图一致性**:对比 `SKILL.md` 的描述与 `scripts/` 下的代码实现。
237  - **隐形行为检测**:检查代码中是否存在未在描述中提及的隐藏功能。
238  - **输出格式验证**:验证代码输出是否符合描述的预期格式。
239  
240  ## 🤝 开发指南
241  
242  建议使用 `uv` 管理本地开发环境,并统一基于 Python 3.12 进行开发与验证。
243  初始化开发环境时,可执行:
244  
245  ```bash
246  uv sync --extra dev --extra test
247  ```
248  
249  提交代码前,建议至少完成以下检查:
250  
251  ```bash
252  uv run ruff check . --fix
253  uv run ruff format .
254  ```
255  
256  ### 运行测试
257  
258  ```bash
259  uv run pytest
260  ```
261  
262  ### 日志查看
263  
264  日志文件位于项目根目录,文件名格式为 `agent_YYYYMMDD_HHMMSS.log`。
265  
266  ## 📄 License
267  
268  MIT License
269  
270  ## 🙏 致谢
271  
272  本项目灵感来源于 Claude Code 和 Gemini CLI。
273  
274  ---
275  
276  **注意**: 本工具仅用于合法的安全测试和代码审计。请勿用于未授权的系统测试。