zijiren 826677ff89 feat: add some mcp server (#315) 6 месяцев назад
..
README.cn.md 826677ff89 feat: add some mcp server (#315) 6 месяцев назад
README.md 826677ff89 feat: add some mcp server (#315) 6 месяцев назад
init.go 826677ff89 feat: add some mcp server (#315) 6 месяцев назад
main.go 826677ff89 feat: add some mcp server (#315) 6 месяцев назад

README.cn.md

Semgrep MCP 服务器

Semgrep logo

Documentation Join Semgrep community Slack Follow on LinkedIn

在 Cursor 中安装 在 VS Code UV 中安装 在 VS Code Docker 中安装 在 VS Code semgrep.ai 中安装 PyPI Docker 在 VS Code Insiders 中安装 在 VS Code Insiders 中安装

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

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

[!NOTE] 这个测试版项目正在积极开发中。我们希望得到您的反馈、错误报告、功能请求和代码贡献。加入 #mcp 社区 Slack 频道!

目录

快速开始

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

uvx semgrep-mcp # 查看 --help 获取更多选项

或者,作为 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 中添加指令以自动使用:

始终使用 Semgrep 扫描生成的代码以查找安全漏洞

ChatGPT

  1. 转到 连接器设置 页面(直接链接
  2. 将连接命名Semgrep
  3. MCP 服务器 URL 设置为 https://mcp.semgrep.ai/sse
  4. 身份验证 设置为 无身份验证
  5. 选中 我信任此应用程序 复选框
  6. 点击 创建

更多详细信息请参阅官方文档

托管服务器

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

Cursor

  1. Cmd + Shift + J 打开 Cursor 设置
  2. 选择 MCP 工具
  3. 点击 新建 MCP 服务器 1.

    {
    "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 包发布到 PyPI 作为 semgrep-mcp,可以使用 pippipxuvpoetry 或任何 Python 包管理器安装和运行。

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

Usage: semgrep-mcp [OPTIONS]

  MCP 服务器的入口点

  支持 stdio 和 sse 传输。对于 stdio,它将从 stdin 读取并写入 stdout。
  对于 sse,它将在端口 8000 上启动 HTTP 服务器。

Options:
  -v, --version                显示版本并退出。
  -t, --transport [stdio|sse]  要使用的传输协议(stdio 或 sse)
  -h, --help                   显示此消息并退出。

标准输入/输出 (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 设置

更多信息请参阅 cursor 文档

VS Code / Copilot

点击本 README 顶部的安装按钮进行最快安装。

手动配置

将以下 JSON 块添加到 VS Code 中的用户设置 (JSON) 文件。您可以通过按 Ctrl + Shift + P 并输入 首选项:打开用户设置 (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": [
                        {
                            "filename": "hello_world.py",
                            "content": "def hello(): print('Hello, World!')",
                        }
                    ]
                },
            )
            print(results)

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

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

贡献、社区和从源码运行

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

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

类似工具 🔍

社区项目 🌟

MCP 服务器注册表

Semgrep Server MCP server


Semgrep 团队 用 ❤️ 制作