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': 比较两次扫描结果,识别新增和已修复的问题。

安装步骤

  1. 安装 uv: 根据 uv 官方安装指南 安装 uv 包管理器。
  2. 安装 Python 3.13+: 确保你的系统安装了 Python 3.13 或更高版本。
  3. 克隆仓库: 使用 'git clone https://github.com/semgrep/mcp' 命令克隆 Semgrep MCP Server 仓库到本地。
  4. 安装 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 为例):

  1. 打开 Cursor 编辑器,进入 'Settings' (设置) -> 'Cursor Settings' (Cursor 设置)。
  2. 选择 'MCP' 选项卡。
  3. 点击 "Add new MCP server" (添加新的 MCP 服务器)。
  4. 填写以下信息:
    • 'Name': 'Semgrep' (可以自定义名称)
    • 'Type': 'sse'
    • 'Server URL': 'http://127.0.0.1:8000/sse' (如果服务器运行在本地默认端口)
  5. 确保新添加的 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' 代码注释。

信息

分类

开发者工具