Semgrep MCP Server
公式AIエージェントがSemgrepでコードをセキュアにできるようにします。
ドキュメント
⚠️ Semgrep MCPサーバーはスタンドアロンリポジトリからメインの semgrep リポジトリへ移行しました! ⚠️
このリポジトリは非推奨となり、Semgrep MCPサーバーの今後のアップデートは公式の semgrep バイナリを通じて提供されます。
Semgrep MCPサーバー
Semgrepを使用してコードのセキュリティ脆弱性をスキャンするためのModel Context Protocol (MCP)サーバーです。Vibe Codingを安全に! 😅
Model Context Protocol (MCP)は、Cursor、VS Code、WindsurfなどのLLM、エージェント、IDE、またはMCPをサポートするあらゆるものが、専門的な支援を受け、コンテキストを取得し、ツールの力を活用するための標準化された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のContainer Registry(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トランスポートは、クライアントからサーバー、サーバーからクライアントへの通信にServer-Sent Eventsを使用したサーバーからクライアントへのストリーミングを可能にします。詳細は仕様をご覧ください。
デフォルトでは、サーバーはクライアント接続のために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チームが❤️を込めて作成