Semgrep MCP Server
공식AI 에이전트가 Semgrep으로 코드를 보호할 수 있도록 지원합니다.
문서
⚠️ Semgrep MCP 서버가 독립 저장소에서 메인 semgrep 저장소로 이동되었습니다! ⚠️
이 저장소는 더 이상 사용되지 않으며, Semgrep MCP 서버에 대한 추가 업데이트는 공식 semgrep 바이너리를 통해 이루어집니다.
Semgrep MCP 서버
Semgrep을 사용하여 코드의 보안 취약점을 스캔하기 위한 MCP(Model Context Protocol) 서버입니다. 여러분의 바이브 코딩을 안전하게 지키세요! 😅
MCP(Model Context Protocol)는 LLM, 에이전트, 그리고 Cursor, VS Code, Windsurf 또는 MCP를 지원하는 모든 IDE가 전문적인 도움을 받고, 컨텍스트를 얻고, 도구의 힘을 활용할 수 있도록 하는 표준화된 API입니다. Semgrep은 다양한 언어를 의미론적으로 이해하고 5,000개 이상의 규칙을 제공하는 빠르고 결정론적인 정적 분석 도구입니다. 🛠️
[!NOTE] 이 베타 프로젝트는 활발히 개발 중입니다. 여러분의 피드백, 버그 신고, 기능 요청 및 코드를 환영합니다.
#mcp커뮤니티 Slack 채널에 참여하세요!
목차
시작하기
uv을 사용하여 Python 패키지를 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
- 커넥터 설정 페이지로 이동합니다 (직접 링크)
- 연결 이름을
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 스키마를 가져옵니다
프롬프트
일반적인 LLM 상호 작용을 표준화하기 위한 재사용 가능한 프롬프트입니다.
write_custom_semgrep_rule: Semgrep 규칙 작성을 돕는 프롬프트를 반환합니다
리소스
LLM에 데이터와 콘텐츠를 노출합니다
semgrep://rule/schema: JSON 스키마를 사용한 Semgrep 규칙 YAML 구문 사양semgrep://rule/{rule_id}/yaml: Semgrep 레지스트리의 전체 Semgrep 규칙 (YAML 형식)
사용법
이 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 상단의 설치 버튼을 클릭하세요.
수동 구성
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
다음 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 팀이 ❤️를 담아 제작했습니다.