Semgrep MCPでClaude Codeの生成コードを自動セキュリティスキャンする
Semgrep MCPは10,000超のルールで脆弱性を検知する公式サーバーです。Claude Code向けはSemgrep Guardianに統合され、生成コードの自動スキャンと再生成指示までを1つの導入で行えます。
Semgrep MCPは、静的解析ツールSemgrepをMCP経由でClaude Codeから呼び出す公式サーバーです。10,000超のルールで脆弱性を検知するSemgrep本体の機能を、コード片を渡すだけのツール呼び出しとして使えます。Claude Code向けの現行の入り口は単体のMCPサーバーではなく、MCPサーバー・Hooks・SkillsをまとめたSemgrep Guardianという統合パッケージです。
Semgrep MCPとは — Guardianへの統合の経緯
もともとSemgrep MCPはsemgrep/mcpという独立リポジトリでベータ公開されていました。2025年10月にこのリポジトリはアーカイブされ、機能はSemgrep本体のリポジトリ(semgrep/semgrep)内に移管されています。以後のMCPサーバーはsemgrepバイナリのmcpサブコマンドとして配布され、単体パッケージのインストールは不要になりました。
もとを辿ると、Semgrep公式のMCPサーバー自体、Szowesgad氏とstefanskiasan氏によるコミュニティ製mcp-server-semgrepを着想源として作られたと公式READMEがクレジットしています。非公式の実験から公式ツールへ、そして単体サーバーからGuardianという統合パッケージへと、比較的短期間で立場が変わってきた領域です。
この移管と同時に、Claude Code・Cursor向けの導線は「Semgrep Guardian」という名称に再編されています。GuardianはMCPサーバー単体ではなく、エージェントが生成したファイルをSemgrep Code(SAST)・Supply Chain(SCA)・Secretsの3種で自動スキャンし、問題が見つかるとエージェントにコードの再生成を促す仕組みです。クリーンな結果が出るか、利用者が明示的に指摘を却下するまでこのループが続きます。
Claude Codeに導入する — 推奨はプラグイン経由
公式ドキュメントはClaude Codeを「推奨セットアップ」と位置付けており、リモートのホスト型サーバーを使うプラグイン導入がもっとも手数が少ない方法です。
claude plugin install semgrep@claude-plugins-officialインストール後、ターミナルでclaudeを起動するとSemgrepへのログインを求められます。この経路ではSemgrepのホスト型リモートサーバーを使うため、ローカルへのSemgrep CLIインストールは不要です。Windows環境ではWSL(Windows Subsystem for Linux)が必須で、ネイティブWindowsは非対応と明記されています。
ローカルCLI経由で使う場合
組織のポリシーに沿ったルールセットで走らせたい、あるいはローカル実行に寄せたい場合は、Semgrep CLIを先に導入したうえでプラグインをローカル版に切り替えます。
# インストール方法はいずれか1つ(pipx/uvが推奨、Homebrewはベストエフォート)
pipx install semgrep
uv tool install semgrep
semgrep login && semgrep install-semgrep-proSemgrep CLIはインストール方法に関わらず、実行時にPython 3.10以上を必要とします。既存のPython環境が古い場合は、CLI導入前にバージョンを確認しておくとつまずきません。
CLI導入後は、Claude Code内で/pluginからDiscoverタブを開いてSemgrepを検索・インストールし、/setup-semgrep-pluginスキルを実行するとローカルCLI連携が完成します。MCPサーバー単体として素のツール群だけを使いたい場合は、claude mcp addでも登録できます。
claude mcp add semgrep -- semgrep mcpリモートとローカルでルールセットが違う
Guardianはリモートかローカルかで、実際に適用されるルールセットが変わります。
| 経路 | 使われるルール |
|---|---|
| Claude Codeのリモート(既定) | 使われるルールGuardian専用ルールセット固定。カスタマイズ不可 |
| Claude Codeのローカルプラグイン / 他IDE統合 | 使われるルールSemgrepの組織アカウントでPoliciesに設定したルール |
カスタムルールを組み込んで組織固有の検知をしたい場合は、既定のリモート経路ではなくローカルCLI経由を選ぶ必要があります。
MCPツールの構成
Semgrep本体のリポジトリに統合されて以降、公開されるツールは実行環境によって出し入れされます。ローカルCLI経由ではsemgrep_scanが、ホスト型リモートでは代わりにsemgrep_scan_remoteが有効になり、常に両方が同時に使えるわけではありません。
| 分類 | ツール | 役割 |
|---|---|---|
| スキャン(ローカルのみ) | ツールsemgrep_scan | 役割ワークスペース内のファイルパスを渡してスキャン |
| スキャン(リモートのみ) | ツールsemgrep_scan_remote | 役割コード内容を直接渡すホスト型スキャン |
| スキャン | ツールsemgrep_scan_with_custom_rule | 役割自作のSemgrepルールでスキャン |
| スキャン(ローカルのみ) | ツールsemgrep_scan_supply_chain | 役割依存関係の変更・追加・lockfile更新時に第三者ライブラリの脆弱性を調べる |
| 解析 | ツールget_abstract_syntax_tree | 役割コードの抽象構文木(AST)を出力 |
| クラウド連携 | ツールsemgrep_findings | 役割Semgrep AppSec Platformの検出結果を取得(要トークン) |
| クラウド連携 | ツールsemgrep_whoami | 役割現在ログイン中のユーザー情報を返す(stdio接続では無効) |
| メタ | ツールget_supported_languages | 役割対応言語一覧を返す |
| メタ | ツールsemgrep_rule_schema | 役割ルールのJSON Schemaを取得 |
semgrep_scan・semgrep_scan_with_custom_ruleはどちらもconfigパラメータでルールセットを指定でき、p/dockerやp/xssのような公開ルールパック名、またはauto(既定の推奨セット自動選択)を渡せます。これに加えてwrite_custom_semgrep_ruleというプロンプトが用意されており、Claude自身に新しいSemgrepルールの書き方を案内させることもできます。semgrep_findingsでクラウド側の結果を取得するには、Semgrepアカウントでトークンを発行しSEMGREP_APP_TOKENとして渡す設定が必要です。
検出結果に対して「却下」を選べる仕組み
冒頭で触れた「クリーンな結果が出るか、利用者が却下するまで再生成を促す」ループは、findings elicitationという確認フローで実現されています。有効な場合、検出された1件ずつについて「深刻度・ルールID・ファイル位置」を提示し、利用者(またはエージェント)に真陽性(true positive)・誤検知(false positive)・スキップのいずれかを選ばせます。誤検知やスキップを選んだ指摘は再生成の対象から外れるため、Semgrepのルールが実運用に合わない誤検知を出した場合でも、そこで手詰まりになることはありません。
セットアップ自体をプロンプトに任せる
素のMCPサーバーとして接続した場合、ログインとルール追記を手作業でやる代わりにsetup_semgrep_mcpというMCPプロンプトを呼ぶ方法もあります。Claude Codeに対しては、ログイン(semgrep login --force)とSemgrep Proのインストール(semgrep install-semgrep-pro)を実行したうえで、~/.claude/CLAUDE.mdに次のルールを追記するところまでを自動でやらせるプロンプト定義です。
# Security
- Always look first to any semgrep mcp servers for code security needs
- Whenever you generate code or commands, you MUST first ensure safety
by scanning the content with the semgrep_scan toolこのルールがCLAUDE.mdに入ると、以後のセッションでコード生成のたびにClaudeが自発的にsemgrep_scanを呼ぶようになります。Guardianのプラグイン導入がフックによる自動スキャンを仕組み化するのに対し、こちらはCLAUDE.mdの指示文でエージェントの振る舞いとして促す方式です。
Claude Code純正のsecurity-guidanceとの違い
Claude Codeには公式プラグインのsecurity-guidanceという、変更コードをその場でレビューする仕組みが既にあります。両者は検知の性格が異なります。
| 観点 | Semgrep MCP / Guardian | security-guidance |
|---|---|---|
| 検知方式 | Semgrep MCP / Guardian10,000超のルールによる決定論的な静的解析 | security-guidanceパターン文字列マッチとエージェントレビューの組み合わせ |
| 対応言語・ルール数 | Semgrep MCP / Guardian多言語・レジストリ経由で継続的に追加 | security-guidance固定カテゴリ(動的コード実行・安全でないデシリアライズ等) |
| 提供元 | Semgrep MCP / GuardianSemgrep社 | security-guidanceAnthropic公式 |
| 追加設定 | Semgrep MCP / GuardianSemgrepアカウントが必要 | security-guidanceClaude Codeプラグインのみで完結 |
すでにSemgrepを他ツールでも使っている組織はルールベースを一本化しやすく、追加のアカウントを増やしたくない場合はsecurity-guidanceだけで様子を見る選択肢もあります。両方を並行稼働させても矛盾は生じません。
get_abstract_syntax_treeは脆弱性スキャンとは別系統のツールで、渡したコードの抽象構文木をそのまま返します。Semgrepのパターンマッチルールは構文木ベースで書くため、write_custom_semgrep_ruleプロンプトと組み合わせて「この構造を検知するルールを書きたい」という場面で使えます。対応言語の一覧は固定値ではなく、get_supported_languagesツールがSemgrep本体から動的に取得して返します。
Semgrep AppSec Platformとの連携
semgrep_findingsツールでクラウド側の検出結果を取得するには、事前にAppSec Platformとの連携が必要です。
- semgrep.dev/loginでSemgrepアカウントにログイン(未登録ならサインアップ)
- SettingsのAPI tokensからトークンを発行
- 発行したトークンを
SEMGREP_APP_TOKEN環境変数として渡す
export SEMGREP_APP_TOKEN=<token>MCP設定JSONで渡す場合は、サーバー定義のenvにSEMGREP_APP_TOKENを追加します。トークンなしでもローカルスキャン系のツールは動きますが、組織のPoliciesに基づく検出結果の集約やsemgrep_whoamiによるログイン確認には必須です。
よくあるつまずき
古いuvx semgrep-mcpの手順しか出てこない
semgrep/mcpリポジトリのREADMEにあったuvx semgrep-mcpやsemgrep-mcp --helpはアーカイブ前の手順です。現行はSemgrep CLI本体に統合されたsemgrep mcpサブコマンドに置き換わっています。検索結果で古いページに当たった場合は、まずdocs.semgrep.dev/semgrep-guardianを一次情報として確認します。
VS CodeやCopilotでフックが効かない
Windsurf以外の多くのIDE統合(Codex・VS Code・Copilot)は、書き込み後に自動でスキャンするhookを持たず、エージェントがMCPツールを明示的に呼んだときだけ動作します。自動スキャンを期待する場合はClaude CodeかCursor、あるいはWindsurfのpost_write_codeフックの利用が前提になります。
semgrep_findingsが空を返す
Semgrep AppSec Platformへのログインとトークン発行が完了していないと、クラウド側の検出結果は取得できません。ローカルスキャンのツール(semgrep_scan等)はトークンなしでも動作します。
まとめ
Semgrep MCPは、Claude Codeではclaude plugin install semgrep@claude-plugins-officialから始まる「Semgrep Guardian」として提供が進んでいます。生成コードを自動スキャンし、問題があればエージェントに再生成を促すところまでを1つの導入でカバーする点が、単体のMCPツール呼び出しにとどまる他のサーバーとの違いです。既定のリモート経路は固定ルールセットでカスタマイズできないため、組織のポリシーに沿ったルールで検知したい場合はローカルCLI経由への切り替えを検討します。Claude Code向けMCP追加の一般手順はClaude Code MCP設定ガイドで扱っています。