Semgrep MCP Server

官方

使AI代理能够使用Semgrep保护代码安全。

文档

⚠️ Semgrep MCP 服务器已从独立仓库迁移至 semgrep 仓库! ⚠️

此仓库已弃用,Semgrep MCP 服务器的后续更新将通过官方 semgrep 二进制文件进行。

Semgrep logo

Documentation Join Semgrep community Slack Follow on LinkedIn Follow @semgrep on X

Semgrep MCP 服务器

Add MCP Server semgrep to LM Studio Install in Cursor Install in VS Code UV Install in VS Code Docker Install in VS Code semgrep.ai PyPI Docker Install in VS Code Insiders Install in VS Code Insiders

一个模型上下文协议 (MCP) 服务器,用于使用 Semgrep 扫描代码中的安全漏洞。保护你的 氛围编程!😅

模型上下文协议 (MCP) 是一个标准化的 API,供 LLM、Agent 以及 Cursor、VS Code、Windsurf 等 IDE 或任何支持 MCP 的工具获取专业帮助、上下文并利用工具的力量。Semgrep 是一款快速、确定性的静态分析工具,能够语义化地理解多种 语言,并内置超过 5000 条规则。🛠️

[!NOTE] 此测试项目正在积极开发中。我们期待你的反馈、错误报告、功能请求和代码。加入 #mcp 社区 Slack 频道!

目录

快速开始

使用 uvPython 包 作为 CLI 命令运行:

uvx semgrep-mcp # see --help for more options

或者,作为 Docker 容器 运行:

docker run -i --rm ghcr.io/semgrep/mcp -t stdio

Cursor

示例 mcp.json

{
  "mcpServers": {
    "semgrep": {
      "command": "uvx",
      "args": ["semgrep-mcp"],
      "env": {
        "SEMGREP_APP_TOKEN": "<token>"
      }
    }
  }
}

在你的 .cursor/rules 中添加一条指令以自动使用:

Always scan code generated using Semgrep for security vulnerabilities

ChatGPT

  1. 前往 连接器设置 页面(直接链接
  2. 将连接 名称 设为 Semgrep
  3. MCP 服务器 URL 设为 https://mcp.semgrep.ai/sse
  4. 认证方式 设为 No authentication
  5. 勾选 我信任此应用程序 复选框
  6. 点击 创建

更多详情请参阅 官方文档

托管服务器

[!WARNING] mcp.semgrep.ai 是一个实验性服务器,可能会意外中断。它将快速获得新功能。🚀

Cursor

  1. Cmd + Shift + J 打开 Cursor 设置
  2. 选择 MCP 工具
  3. 点击 新建 MCP 服务器
{
  "mcpServers": {
    "semgrep": {
      "type": "streamable-http",
      "url": "https://mcp.semgrep.ai/mcp"
    }
  }
}

演示

API

工具

使 LLM 能够执行操作、进行确定性计算并与外部服务交互。

扫描代码

  • security_check:扫描代码中的安全漏洞
  • semgrep_scan:使用给定的配置字符串扫描代码文件中的安全漏洞
  • semgrep_scan_with_custom_rule:使用自定义 Semgrep 规则扫描代码文件

理解代码

  • get_abstract_syntax_tree:输出代码的抽象语法树 (AST)

云平台(需要登录和 Semgrep 令牌)

  • semgrep_findings:从 Semgrep AppSec 平台 API 获取 Semgrep 发现结果

元信息

  • supported_languages:返回 Semgrep 支持的语言列表
  • semgrep_rule_schema:获取最新的 Semgrep 规则 JSON Schema

提示词

可复用的提示词,用于标准化常见的 LLM 交互。

  • write_custom_semgrep_rule:返回一个提示词,帮助编写 Semgrep 规则

资源

向 LLM 公开数据和内容

  • semgrep://rule/schema:使用 JSON Schema 描述的 Semgrep 规则 YAML 语法规范
  • semgrep://rule/{rule_id}/yaml:来自 Semgrep 注册表的完整 YAML 格式 Semgrep 规则

使用方式

此 Python 包以 semgrep-mcp 的名称发布在 PyPI 上,可以使用 pippipxuvpoetry 或任何 Python 包管理器进行安装和运行。

$ pipx install semgrep-mcp
$ semgrep-mcp --help

Usage: semgrep-mcp [OPTIONS]

  Entry point for the MCP server

  Supports both stdio and sse transports. For stdio, it will read from stdin
  and write to stdout. For sse, it will start an HTTP server on port 8000.

Options:
  -v, --version                Show version and exit.
  -t, --transport [stdio|sse]  Transport protocol to use (stdio or sse)
  -h, --help                   Show this message and exit.

标准输入/输出 (stdio)

stdio 传输方式通过标准输入和输出流实现通信。这对于本地集成和命令行工具特别有用。更多详情请参阅 规范

Python

semgrep-mcp

默认情况下,Python 包将以 stdio 模式运行。由于它使用标准输入和输出流,工具看起来会像挂起一样没有任何输出,但这是预期行为。

Docker

此服务器发布在 Github 容器注册表 (ghcr.io/semgrep/mcp)

docker run -i --rm ghcr.io/semgrep/mcp -t stdio

默认情况下,Docker 容器处于 SSE 模式,因此你需要在镜像名称后包含 -t stdio,并使用 -i交互式 模式运行。

可流式 HTTP

可流式 HTTP 通过 HTTP POST 请求在 JSON RPC 上启用流式响应。更多详情请参阅 规范

默认情况下,服务器在 127.0.0.1:8000/mcp 上监听客户端连接。要更改这些设置,请设置 FASTMCP_* 环境变量。服务器必须处于运行状态,客户端才能连接。

Python

semgrep-mcp -t streamable-http

默认情况下,Python 包将以 stdio 模式运行,因此你需要包含 -t streamable-http

Docker

docker run -p 8000:0000 ghcr.io/semgrep/mcp

服务器发送事件 (SSE)

[!WARNING] MCP 社区认为这是一种传统的传输协议,实际上仅用于向后兼容。可流式 HTTP 是推荐的替代方案。

SSE 传输方式使用服务器发送事件实现服务器到客户端的流式传输,用于客户端到服务器和服务器到客户端的通信。更多详情请参阅 规范

默认情况下,服务器在 127.0.0.1:8000/sse 上监听客户端连接。要更改这些设置,请设置 FASTMCP_* 环境变量。服务器必须处于运行状态,客户端才能连接。

Python

semgrep-mcp -t sse

默认情况下,Python 包将以 stdio 模式运行,因此你需要包含 -t sse

Docker

docker run -p 8000:0000 ghcr.io/semgrep/mcp -t sse

Semgrep AppSec 平台

可选地,连接到 Semgrep AppSec 平台:

  1. 登录 或注册
  2. 设置 生成一个令牌
  3. 将令牌添加到你的环境变量中:
    • CLI (export SEMGREP_APP_TOKEN=<token>)

    • Docker (docker run -e SEMGREP_APP_TOKEN=<token>)

    • MCP 配置 JSON

    "env": {
      "SEMGREP_APP_TOKEN": "<token>"
    }

[!TIP] 如有需要,请 联系支持。☎️

集成

Cursor IDE

将以下 JSON 块添加到你的 ~/.cursor/mcp.json 全局或 .cursor/mcp.json 项目特定配置文件中:

{
  "mcpServers": {
    "semgrep": {
      "command": "uvx",
      "args": ["semgrep-mcp"]
    }
  }
}

cursor MCP settings

更多信息请参阅 Cursor 文档

VS Code / Copilot

点击本 README 顶部的安装按钮,即可快速安装。

手动配置

将以下 JSON 块添加到 VS Code 的用户设置 (JSON) 文件中。你可以通过按 Ctrl + Shift + P 并输入 Preferences: Open User Settings (JSON) 来完成此操作。

{
  "mcp": {
    "servers": {
      "semgrep": {
        "command": "uvx",
        "args": ["semgrep-mcp"]
      }
    }
  }
}

可选地,你可以将其添加到工作区中名为 .vscode/mcp.json 的文件中:

{
  "servers": {
    "semgrep": {
      "command": "uvx",
        "args": ["semgrep-mcp"]
    }
  }
}

使用 Docker

{
  "mcp": {
    "servers": {
      "semgrep": {
        "command": "docker",
        "args": [
          "run",
          "-i",
          "--rm",
          "ghcr.io/semgrep/mcp",
          "-t",
          "stdio"
        ]
      }
    }
  }
}

更多信息请参阅 VS Code 文档

Windsurf

将以下 JSON 块添加到你的 ~/.codeium/windsurf/mcp_config.json 文件中:

{
  "mcpServers": {
    "semgrep": {
      "command": "uvx",
      "args": ["semgrep-mcp"]
    }
  }
}

更多信息请参阅 Windsurf 文档

Claude Desktop

这是一个 简短视频,展示了 Claude Desktop 使用此服务器编写自定义规则。

将以下 JSON 块添加到你的 claude_desktop_config.json 文件中:

{
  "mcpServers": {
    "semgrep": {
      "command": "uvx",
      "args": ["semgrep-mcp"]
    }
  }
}

更多信息请参阅 Anthropic 文档

Claude Code

claude mcp add semgrep uvx semgrep-mcp

更多信息请参阅 Claude Code 文档

OpenAI

请参阅官方文档:

Agents SDK

async with MCPServerStdio(
    params={
        "command": "uvx",
        "args": ["semgrep-mcp"],
    }
) as server:
    tools = await server.list_tools()

更多信息请参阅 OpenAI Agents SDK 文档

自定义客户端

Python SSE 客户端示例

examples/sse_client.py 中查看完整示例

from mcp.client.session import ClientSession
from mcp.client.sse import sse_client


async def main():
    async with sse_client("http://localhost:8000/sse") as (read_stream, write_stream):
        async with ClientSession(read_stream, write_stream) as session:
            await session.initialize()
            results = await session.call_tool(
                "semgrep_scan",
                {
                    "code_files": [
                        {
                            "path": "hello_world.py",
                            "content": "def hello(): print('Hello, World!')",
                        }
                    ]
                },
            )
            print(results)

[!TIP] 某些客户端库需要 URLhttp://localhost:8000/sse 而其他客户端只需要 HOSTlocalhost:8000。 在网页浏览器中尝试 URL,以确认服务器正在运行且没有网络问题。

更多信息请参阅 官方 SDK 文档

贡献、社区和从源码运行

[!NOTE] 我们期待你的反馈、错误报告、功能请求和代码。加入 #mcp 社区 Slack 频道!

更多信息以及如何从源码运行 MCP 服务器的详细信息,请参阅 CONTRIBUTING.md

类似工具 🔍

社区项目 🌟

MCP 服务器注册表

Semgrep Server MCP server

Semgrep 团队 用 ❤️ 制作