Semgrep MCP Server 使用说明
项目简介
Semgrep MCP Server 是一个基于 Model Context Protocol (MCP) 构建的后端服务,它将强大的静态代码分析工具 Semgrep 的功能以标准化的 MCP 协议接口暴露出来,使得 LLM 客户端(如 Cursor 编辑器)能够方便地调用 Semgrep 进行代码安全扫描。通过此服务器,你可以利用 Semgrep 强大的规则引擎检测代码中的安全漏洞和质量问题,并以结构化的方式将结果返回给 LLM 应用,实现智能化的代码分析和辅助编程。
主要功能点
- 代码扫描: 提供多种代码扫描工具,包括:
- 'semgrep_scan': 扫描代码片段,快速检测代码安全问题。
- 'scan_directory': 扫描整个目录,进行全面的代码安全审计。
- 规则管理: 支持自定义 Semgrep 规则,并能够列出和创建规则,以满足特定的扫描需求。
- 'list_rules': 列出可用的 Semgrep 规则,可以按语言过滤。
- 'create_rule': 创建自定义 Semgrep 规则,扩展扫描能力。
- 结果分析: 提供丰富的扫描结果分析和处理工具,方便用户理解和利用扫描结果。
- 'analyze_results': 分析扫描结果,包括严重程度统计和受影响文件排名。
- 'filter_results': 根据严重程度、规则 ID、文件路径等条件过滤扫描结果。
- 'export_results': 将扫描结果导出为 JSON、SARIF、文本等多种格式。
- 'compare_results': 比较两次扫描结果,识别新增和已修复的问题。
安装步骤
- 安装 uv: 根据 uv 官方安装指南 安装 uv 包管理器。
- 安装 Python 3.13+: 确保你的系统安装了 Python 3.13 或更高版本。
- 克隆仓库: 使用 'git clone https://github.com/semgrep/mcp' 命令克隆 Semgrep MCP Server 仓库到本地。
- 安装 Semgrep: 根据 Semgrep 官方文档 安装 Semgrep 工具。推荐使用 pip 安装:
pip install semgrep
服务器配置
Semgrep MCP Server 可以通过 Docker 或 CLI 方式启动。
启动命令 (command) 及参数 (args):
-
Docker 启动:
- 命令 (command): 'docker run'
- 参数 (args): '["-p", "8000:8000", "mcp-server"]'
- 说明: 此命令会构建并运行 Docker 镜像 'mcp-server',并将容器的 8000 端口映射到主机的 8000 端口。
-
CLI 启动:
- 命令 (command): 'uv run'
- 参数 (args): '["mcp", "run", "server.py"]'
- 说明: 此命令使用 uv 运行 'server.py' 文件,启动 Semgrep MCP Server。
MCP 客户端配置 (以 Cursor 为例):
- 打开 Cursor 编辑器,进入 'Settings' (设置) -> 'Cursor Settings' (Cursor 设置)。
- 选择 'MCP' 选项卡。
- 点击 "Add new MCP server" (添加新的 MCP 服务器)。
- 填写以下信息:
- 'Name': 'Semgrep' (可以自定义名称)
- 'Type': 'sse'
- 'Server URL': 'http://127.0.0.1:8000/sse' (如果服务器运行在本地默认端口)
- 确保新添加的 Semgrep MCP Server 已启用。
基本使用方法
1. 启动 Semgrep MCP Server: 根据上述服务器配置选择 Docker 或 CLI 方式启动服务器。
2. 在 MCP 客户端 (如 Cursor) 中调用工具:
-
代码片段扫描 (semgrep_scan): 在 Cursor 中,你可以通过 MCP 协议调用 'semgrep_scan' 工具来扫描当前代码片段。例如,在 Python 客户端中可以这样调用:
from mcp.client import Client client = Client() client.connect("localhost:8000") results = client.call_tool("semgrep_scan", { "code_files": [{"filename": "test.py", "content": "def hello(): print('world')"}], "config": "auto" # 或指定规则配置文件路径 }) print(results) -
目录扫描 (scan_directory): 调用 'scan_directory' 工具扫描指定目录:
results = client.call_tool("scan_directory", { "path": "/path/to/your/code", "config": "p/security-audit" # 使用 Semgrep 官方 security-audit 规则集 }) print(results)
3. 查看扫描结果: 扫描结果将以 JSON 格式返回,你可以根据需要解析和处理这些结果。在 Cursor 等集成 MCP 客户端中,扫描结果通常会以用户友好的方式展示。
更多高级用法 请参考仓库 README 文件和 'server.py' 代码注释。
信息
分类
开发者工具