|
|
6 месяцев назад | |
|---|---|---|
| .. | ||
| README.cn.md | 6 месяцев назад | |
| README.md | 6 месяцев назад | |
| init.go | 6 месяцев назад | |
| main.go | 6 месяцев назад | |
一个用于使用 Semgrep 扫描代码安全漏洞的模型上下文协议 (MCP) 服务器。保护您的氛围编程!😅
模型上下文协议 (MCP) 是一个标准化的 API,用于 LLM、代理和 IDE(如 Cursor、VS Code、Windsurf 或任何支持 MCP 的工具)获取专业帮助、获取上下文和利用工具的力量。Semgrep 是一个快速、确定性的静态分析工具,能够语义理解多种语言,并提供超过 5,000 条规则。🛠️
[!NOTE] 这个测试版项目正在积极开发中。我们希望得到您的反馈、错误报告、功能请求和代码贡献。加入
#mcp社区 Slack 频道!
uvx semgrep-mcp # 查看 --help 获取更多选项
或者,作为 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 中添加指令以自动使用:
始终使用 Semgrep 扫描生成的代码以查找安全漏洞
Semgrephttps://mcp.semgrep.ai/sse无身份验证更多详细信息请参阅官方文档。
[!WARNING] mcp.semgrep.ai 是一个实验性服务器,可能会意外中断。它将快速获得新功能。🚀
点击 新建 MCP 服务器 1.
{
"mcpServers": {
"semgrep": {
"type": "streamable-http",
"url": "https://mcp.semgrep.ai/mcp"
}
}
}
使 LLM 能够执行操作、进行确定性计算并与外部服务交互。
security_check: 扫描代码以查找安全漏洞semgrep_scan: 使用给定的配置字符串扫描代码文件以查找安全漏洞semgrep_scan_with_custom_rule: 使用自定义 Semgrep 规则扫描代码文件get_abstract_syntax_tree: 输出代码的抽象语法树 (AST)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,可以使用 pip、pipx、uv、poetry 或任何 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 传输通过标准输入和输出流实现通信。这对于本地集成和命令行工具特别有用。更多详细信息请参阅规范。
semgrep-mcp
默认情况下,Python 包将在 stdio 模式下运行。因为它使用标准输入和输出流,看起来工具会挂起而没有任何输出,但这是正常的。
此服务器发布到 Github 的容器注册表(ghcr.io/semgrep/mcp)
docker run -i --rm ghcr.io/semgrep/mcp -t stdio
默认情况下,Docker 容器处于 SSE 模式,因此您必须在镜像名称后包含 -t stdio 并使用 -i 以交互模式运行。
可流式 HTTP 通过 HTTP POST 请求在 JSON RPC 上启用流式响应。更多详细信息请参阅规范。
默认情况下,服务器在 127.0.0.1:8000/mcp 上监听客户端连接。要更改任何设置,请设置 FASTMCP_* 环境变量。服务器必须运行才能让客户端连接到它。
semgrep-mcp -t streamable-http
默认情况下,Python 包将在 stdio 模式下运行,因此您必须包含 -t streamable-http。
docker run -p 8000:0000 ghcr.io/semgrep/mcp
[!WARNING] MCP 社区认为这是一个遗留传输协议,实际上是为了向后兼容而设计的。可流式 HTTP 是推荐的替代方案。
SSE 传输通过服务器发送事件为客户端到服务器和服务器到客户端的通信启用服务器到客户端流式传输。更多详细信息请参阅规范。
默认情况下,服务器在 127.0.0.1:8000/sse 上监听客户端连接。要更改任何设置,请设置 FASTMCP_* 环境变量。服务器必须运行才能让客户端连接到它。
semgrep-mcp -t sse
默认情况下,Python 包将在 stdio 模式下运行,因此您必须包含 -t sse。
docker run -p 8000:0000 ghcr.io/semgrep/mcp -t sse
可选地,要连接到 Semgrep AppSec 平台:
将令牌添加到您的环境变量中:
export SEMGREP_APP_TOKEN=<token>)docker run -e SEMGREP_APP_TOKEN=<token>)MCP 配置 JSON
"env": {
"SEMGREP_APP_TOKEN": "<token>"
}
[!TIP] 如需支持,请联系我们。☎️
将以下 JSON 块添加到您的 ~/.cursor/mcp.json 全局或 .cursor/mcp.json 项目特定配置文件中:
{
"mcpServers": {
"semgrep": {
"command": "uvx",
"args": ["semgrep-mcp"]
}
}
}

更多信息请参阅 cursor 文档。
点击本 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"]
}
}
}
{
"mcp": {
"servers": {
"semgrep": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/semgrep/mcp",
"-t",
"stdio"
]
}
}
}
}
更多信息请参阅 VS Code 文档。
将以下 JSON 块添加到您的 ~/.codeium/windsurf/mcp_config.json 文件中:
{
"mcpServers": {
"semgrep": {
"command": "uvx",
"args": ["semgrep-mcp"]
}
}
}
更多信息请参阅 Windsurf 文档。
这里有一个短视频展示了 Claude Desktop 使用此服务器编写自定义规则。
将以下 JSON 块添加到您的 claude_desktop_config.json 文件中:
{
"mcpServers": {
"semgrep": {
"command": "uvx",
"args": ["semgrep-mcp"]
}
}
}
更多信息请参阅 Anthropic 文档。
claude mcp add semgrep uvx semgrep-mcp
更多信息请参阅 Claude Code 文档。
请参阅官方文档:
async with MCPServerStdio(
params={
"command": "uvx",
"args": ["semgrep-mcp"],
}
) as server:
tools = await server.list_tools()
更多信息请参阅 OpenAI Agents SDK 文档。
在 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。
由 Semgrep 团队 用 ❤️ 制作