Semgrep MCP Server
官方使AI代理能够使用Semgrep保护代码安全。
文档
⚠️ Semgrep MCP 服务器已从独立仓库迁移至 主 semgrep 仓库! ⚠️
此仓库已弃用,Semgrep MCP 服务器的后续更新将通过官方 semgrep 二进制文件进行。
Semgrep MCP 服务器
一个模型上下文协议 (MCP) 服务器,用于使用 Semgrep 扫描代码中的安全漏洞。保护你的 氛围编程!😅
模型上下文协议 (MCP) 是一个标准化的 API,供 LLM、Agent 以及 Cursor、VS Code、Windsurf 等 IDE 或任何支持 MCP 的工具获取专业帮助、上下文并利用工具的力量。Semgrep 是一款快速、确定性的静态分析工具,能够语义化地理解多种 语言,并内置超过 5000 条规则。🛠️
[!NOTE] 此测试项目正在积极开发中。我们期待你的反馈、错误报告、功能请求和代码。加入
#mcp社区 Slack 频道!
目录
快速开始
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
- 前往 连接器设置 页面(直接链接)
- 将连接 名称 设为
Semgrep - 将 MCP 服务器 URL 设为
https://mcp.semgrep.ai/sse - 将 认证方式 设为
No authentication - 勾选 我信任此应用程序 复选框
- 点击 创建
更多详情请参阅 官方文档。
托管服务器
[!WARNING] mcp.semgrep.ai 是一个实验性服务器,可能会意外中断。它将快速获得新功能。🚀
Cursor
- Cmd + Shift + J 打开 Cursor 设置
- 选择 MCP 工具
- 点击 新建 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 上,可以使用 pip、pipx、uv、poetry 或任何 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 平台:
- 登录 或注册
- 从 设置 生成一个令牌
- 将令牌添加到你的环境变量中:
-
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 文档。
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] 某些客户端库需要
URL:http://localhost:8000/sse 而其他客户端只需要HOST:localhost:8000。 在网页浏览器中尝试URL,以确认服务器正在运行且没有网络问题。
更多信息请参阅 官方 SDK 文档。
贡献、社区和从源码运行
[!NOTE] 我们期待你的反馈、错误报告、功能请求和代码。加入
#mcp社区 Slack 频道!
更多信息以及如何从源码运行 MCP 服务器的详细信息,请参阅 CONTRIBUTING.md。
类似工具 🔍
- semgrep-vscode - 官方 VS Code 扩展
- semgrep-intellij - IntelliJ 插件
社区项目 🌟
- semgrep-rules - Semgrep 规则的官方集合
- mcp-server-semgrep - 由 Szowesgad 和 stefanskiasan 编写的原始灵感来源
MCP 服务器注册表
由 Semgrep 团队 用 ❤️ 制作