Semgrep MCP Server
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' 代码注释。