mcp代码安全分析器
一种MCP服务器,它为Semgrep提供了一个全面的接口,使用户能够通过模型上下文协议扫描代码以查找安全漏洞、创建自定义规则并分析扫描结果。
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"semgrep": {
"args": [
"semgrep-mcp"
],
"command": "uvx"
}
}
}
服务介绍
Semgrep MCP 服务器
一个用于通过 Semgrep 扫描代码中安全漏洞的MCP服务器。保护你的vibe coding! 😅
模型上下文协议 (MCP) 是一种标准化API,它允许LLMs、代理和像Cursor、VS Code、Windsurf等IDE或任何支持MCP的东西获得专门的帮助、上下文,并利用工具的力量。Semgrep是一种快速且确定性的静态分析工具,它可以语义理解许多语言,并自带超过5,000条规则。🛠️
[!NOTE]
此测试版项目正在积极开发中,我们非常希望得到您的反馈、错误报告、功能请求以及代码贡献。请加入#mcp社区Slack频道!
目录
开始使用
uvx semgrep-mcp # see --help for more options
或作为 docker 容器 运行:
docker run -i --rm ghcr.io/semgrep/mcp -t stdio
光标
示例 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
托管服务器
[!WARNING]
这是一个实验性服务器,可能会出现问题。一旦 MCP 规范在未来不久支持 HTTP 流式传输和 OAuth,它将获得新功能。 🚀
mcp.json
{
"mcpServers": {
"semgrep": {
"url": "https://mcp.semgrep.ai/sse"
}
}
}
演示
API
工具
使 LLM 能够执行操作、进行确定性计算并与外部服务交互。
代码扫描
security_check: 扫描代码中的安全漏洞semgrep_scan: 使用给定的配置字符串扫描代码文件中的安全漏洞semgrep_scan_with_custom_rule: 使用自定义 Semgrep 规则扫描代码文件
理解代码
get_abstract_syntax_tree: 输出代码的抽象语法树 (AST)
元数据
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 注册表中获取完整的 Semgrep 规则 YAML 格式
用法
此 Python 包发布为 semgrep-mcp,可以使用 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 选项运行,以便在交互模式下运行。
服务器发送事件 (SSE)
SSE 传输通过 HTTP POST 请求支持从服务器到客户端的流式传输以及客户端到服务器的通信。更多详情请参阅规范。
默认情况下,服务器将在 0.0.0.0:8000/sse 监听客户端连接。要更改这些设置,请设置 FASTMCP_* 环境变量。必须运行服务器才能让客户端连接到它。
Python
semgrep-mcp -t sse
默认情况下,Python 包将以 stdio 模式运行,因此你需要包含 -t sse。
Docker
docker run -p 8000:0000 ghcr.io/semgrep/mcp
Semgrep 应用安全平台
若要选择性地连接到 Semgrep 应用安全平台:
- 登录 或注册
- 从 设置 页面生成令牌
- 将其添加到你的环境变量中
-
CLI (
export SEMGREP_APP_TOKEN=<token>) -
Docker (
docker run -e SEMGREP_APP_TOKEN=<token>) -
MCP 配置 JSON
"env": { "SEMGREP_APP_TOKEN": "<token>" }
-
[!TIP]
如有需要,请联系 support@semgrep.com。☎️
集成
Cursor IDE
向你的全局或项目特定配置文件 ~/.cursor/mcp.json 或 .cursor/mcp.json 添加以下 JSON 块:
{
"mcpServers": {
"semgrep": {
"command": "uvx",
"args": ["semgrep-mcp"]
}
}
}

更多信息请参见cursor 文档。
VS Code / Copilot
点击此 README 顶部的安装按钮以进行最快速的安装。
手动配置
在 VS Code 中将以下 JSON 块添加到你的用户设置(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
向你的 ~/.codeium/windsurf/mcp_config.json 文件添加以下 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 文档。
OpenAI
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。
尝试在 Web 浏览器中打开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 团队 用 ❤️ 制作