mcpField
S
SAST MCP Server

SAST MCP Server

ローカル
github.comセキュリティ418 週間前に更新

SAST MCP Server について

SAST MCP Server は、AI エージェントが複数のスキャナーでコードや稼働中のアプリケーションを検査するためのサーバーです。結果の集約に加え、絞り込み、ベースライン比較、SARIF 出力、パッチによる修正を扱えます。

主な機能

  1. 01複数スキャナーの並列実行と重複排除
  2. 02コード、依存関係、シークレット、IaC のスキャン
  3. 03OWASP ZAP による稼働中アプリのスキャン
  4. 04検出結果の絞り込みとページ分割
  5. 05SARIF 出力とベースライン比較
  6. 06修正プロンプトの生成とパッチ適用

活用シーン

  1. 01コード変更に含まれる新たな脆弱性の確認
  2. 02依存関係や Git 履歴に潜むリスクの検査
  3. 03スキャン結果による CI のゲート設定
  4. 04脆弱性修正案の作成と適用

MCP 対応

スキャン、検出結果管理、SARIF、ベースライン、修正、プロンプト、リソースの機能を MCP クライアントに提供します。stdio と Streamable HTTP に対応します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"skyrxin-sast": {
"command": "uvx",
"args": [
"sast-mcp-server"
],
"env": {
"SAST_MCP_TIMEOUT": "<SAST_MCP_TIMEOUT>",
"SAST_MCP_LOG_LEVEL": "<SAST_MCP_LOG_LEVEL>",
"SAST_MCP_API_KEY": "<SAST_MCP_API_KEY>",
"SAST_MCP_JWT_SECRET": "<SAST_MCP_JWT_SECRET>"
}
}
}
}
起動コマンドuvx sast-mcp-server
設定が必要な環境変数
SAST_MCP_TIMEOUTPer-scan timeout in seconds (default: 300).
SAST_MCP_LOG_LEVELLogging level: DEBUG, INFO, WARNING, ERROR (default: INFO).
SAST_MCP_API_KEYシークレットOptional static API key to require auth (legacy mode; HTTP transports).
SAST_MCP_JWT_SECRETシークレットOptional HMAC secret to require JWT auth with scopes (HTTP transports).

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypisast-mcp-server0.8.3

ツール

27

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
limitintegerいいえ返す検出結果の最大数(ページネーション用)。
offsetintegerいいえページネーションのオフセット。
use_cachebooleanいいえtrue の場合、対象ファイルに変更がなければ前回キャッシュしたスキャン結果を再利用します(増分スキャン)。git_diff_only が設定されている場合は無視されます。
target_pathstringはいスキャンするディレクトリまたはファイルの絶対パス。
min_severitystringいいえ報告する最低重大度(LOW、MEDIUM、HIGH、CRITICAL)。
scanner_namestringいいえ使用するスキャナー('bandit'、'njsscan'、'bearer'、 'semgrep')。デフォルトは 'bearer' です。
git_diff_onlybooleanいいえtrue の場合、git diff で変更されたファイルの検出結果のみを報告します。
output_formatstringいいえ'markdown'(人が読みやすい形式、デフォルト)または 'json' (Agent/CI 向けの機械可読な検出結果リスト)。
min_confidencestringいいえ報告する最低信頼度(LOW、MEDIUM、HIGH)。

詳細

SAST MCP サーバー

PyPI version sast-mcp-server MCP server Python 3.10+ License: MIT CI codecov

AI エージェント向け静的アプリケーションセキュリティテスト(SAST)。 あらゆる AI エージェントにコードのセキュリティ脆弱性をスキャンする機能を提供する、本番環境対応の MCP サーバーです。

業界標準のスキャナー 11 種類に対応しています。

スキャナー言語/対象範囲種類
BanditPythonセキュリティリンター
njsscanJavaScript、Node.js静的解析
BearerPython、JS、Ruby、Java、Go、PHPデータフロー SAST
Semgrep30 以上の言語ルールベース SAST
Trivyすべて(CVE、シークレット、IaC、イメージ)マルチスキャナー
CodeQLPython、JS、Java、Go、C/C++、C#、Ruby、Swiftセマンティック SAST
CheckovTerraform、K8s、Docker、CloudFormationIaC ポリシースキャナー
Gitleaksすべて(.git の履歴)詳細なシークレットスキャン
OSV-Scanner複数(ロックファイル、SBOM)SCA
Grypeコンテナ、OS パッケージ、ロックファイル、SBOMSCA/イメージスキャン
OWASP ZAP実行時Docker 経由の動的スキャン(DAST)

Gemini CLI、Claude Desktop、OpenAI Agents、Cursor、Windsurf など、あらゆる MCP 対応エージェントで利用できます。


機能

  • 🔍 SAST/SCA/DAST スキャナー 11 種類と統一された出力形式
  • 🌳 AST 対応コンテキスト — 行番号だけでなく、該当箇所を含む関数全体を表示
  • 📊 重大度と信頼度によるフィルタリング — 重要な項目に集中できます
  • 🔀 Git 差分モード — 増分レビューでは変更されたファイルのみをスキャン
  • 🙈 除外設定の管理 — 監査証跡を残して誤検知を抑制
  • 📄 ページネーション — エージェントに過剰な負荷をかけずに大規模なコードベースを処理
  • 🌐 デュアルトランスポート — stdio(ローカル)または Streamable HTTP(リモートデプロイ)
  • 🔐 JWT と API キーによる認証 — リモートデプロイを保護
  • 📦 1 つのコマンドでインストール — pip install sast-mcp-server
  • 🚀 マルチスキャナーモード — インストール済みのすべてのスキャナーを並列実行し、重複を除去
  • 📋 SARIF エクスポート — GitHub、GitLab、Azure DevOps との CI/CD 統合
  • 🏗️ IaC スキャン — Terraform、Kubernetes、Docker のセキュリティポリシー
  • 🔑 シークレット検出 — コードや Git の履歴にハードコードされた API キー、トークン、パスワードを検出
  • 📦 SCA/依存関係の CVE — ロックファイルをスキャンし、OSV データベースを照合して既知の脆弱性を検出
  • 🕷️ DAST — OWASP ZAP と Docker を使用して、稼働中のアプリを動的にベースラインスキャン
  • 📈 ベースラインと傾向の追跡 — スキャンをキャッシュし、保存済みのベースラインと比較
  • 🤖 MCP プロンプトとリソース — エージェント向けのセキュリティワークフローとリアルタイムダッシュボードを標準搭載
  • 📤 ダッシュボード連携 — SARIF の結果を DefectDojo または GitHub Code Scanning に送信
  • 🩹 AI 支援の修正 — 修正プロンプトを生成し、エージェントが作成したパッチを git apply で適用

クイックスタート

サーバーの有用性は、併せてインストールされているスキャナーに左右されます。必要なツールセットに応じて、インストール方法を選択してください。

オプション 1 — フルコンテナ(推奨:スキャナー 9 種、セットアップ不要)
docker pull ghcr.io/skyrxin/sast-mcp-server:full

bandit、njsscan、bearer、semgrep、trivy、checkov、gitleaks、osv-scanner、grype が含まれているため、すぐに scan_all を実行できます。または、1 つのコマンドで HTTP サーバーを起動できます。

docker compose up          # serves http://localhost:8080/mcp + /health /ready /metrics
オプション 2 — pip エクストラ(pip でインストール可能なスキャナー 4 種)
pip install "sast-mcp-server[scanners]"   # adds bandit, njsscan, semgrep, checkov
オプション 3 — 最小構成/カスタム構成
pip install sast-mcp-server               # server only — bring your own scanners
uvx sast-mcp-server                        # run without installing

次に、必要なスキャナーをインストールします(バイナリスキャナーは pip パッケージではありません)。

pip install bandit njsscan semgrep checkov     # pip-installable
# trivy:        https://aquasecurity.github.io/trivy/latest/getting-started/installation/
# grype:        https://github.com/anchore/grype#installation
# gitleaks:     https://github.com/gitleaks/gitleaks#installing
# osv-scanner:  https://google.github.io/osv-scanner/installation/
# bearer:       https://docs.bearer.com/installation/
# codeql:       https://github.com/github/codeql-cli-binaries/releases
各スキャナーの提供形態
スキャナー:full イメージ[scanners] エクストラ備考
Bandit✅✅pip
njsscan✅✅pip
Semgrep✅✅pip
Checkov✅✅pip
Bearer✅—インストールスクリプト
Trivy✅—バイナリ
Gitleaks✅—バイナリ
OSV-Scanner✅—バイナリ
Grype✅—バイナリ
CodeQL——数 GB のバンドル — 実行時にマウント
OWASP ZAP——ホスト上の Docker 経由で実行(run_active_scan)

起動時に、サーバーは実際に認識できるスキャナーの数(例: Scanners available: 9/11 (...))をログに出力します。list_scanners ツールと /ready エンドポイントでも同じ内容を報告するため、利用可能なスキャナーが常に明確です。

sast-mcp-server MCP サーバー


AI エージェントでの使用

Gemini CLI

拡張機能としてインストールします。

gemini extensions install https://github.com/Skyrxin/sast-mcp-server

または、~/.gemini/settings.json に追加します。

{
  "mcpServers": {
    "sast": {
      "command": "uvx",
      "args": ["sast-mcp-server"]
    }
  }
}
Claude Desktop

claude_desktop_config.json に追加します。

{
  "mcpServers": {
    "sast": {
      "command": "uvx",
      "args": ["sast-mcp-server"]
    }
  }
}

Claude Desktop の完全なガイドを参照してください。

Cursor IDE

Cursor の設定 → MCP サーバーに追加します。

{
  "mcpServers": {
    "sast": {
      "command": "uvx",
      "args": ["sast-mcp-server"]
    }
  }
}

Cursor の完全なガイドを参照してください。

OpenAI Agents SDK
from agents.mcp import MCPServerStdio

sast_server = MCPServerStdio(command="uvx", args=["sast-mcp-server"])

OpenAI の完全なガイドを参照してください。


利用可能な MCP ツール

scan_vulnerabilities

特定のスキャナーを使用して、ディレクトリのセキュリティ脆弱性をスキャンします。

パラメーター型デフォルト説明
target_pathstring必須スキャン対象のパス
scanner_namestring"bearer"スキャナー:bandit、njsscan、bearer、semgrep、trivy、codeql、checkov
min_severitystring"LOW"最小重大度:LOW、MEDIUM、HIGH、CRITICAL
min_confidencestring"LOW"最小信頼度:LOW、MEDIUM、HIGH
git_diff_onlyboolfalseGit で変更されたファイルのみをスキャン
limitint50返す検出結果の最大数
offsetint0ページネーションのオフセット
scan_all

インストール済みのすべてのスキャナーを並列実行し、自動的に重複を除去します。包括的なセキュリティスキャンにおすすめです。

パラメーター型デフォルト説明
target_pathstring必須スキャン対象のパス
min_severitystring"MEDIUM"最小重大度(ノイズを減らすため、デフォルトは高めです)
min_confidencestring"LOW"最小信頼度
git_diff_onlyboolfalseGit で変更されたファイルのみをスキャン
limitint50返す検出結果の最大数
offsetint0ページネーションのオフセット
scan_git_history

Gitleaks を使用して、.git の全履歴から漏えいしたシークレットと認証情報をスキャンします。

パラメーター型デフォルト説明
target_pathstring"."リポジトリのルートへのパス(.git を含む必要があります)
min_severitystring"LOW"報告する最小重大度
run_active_scan

Docker Compose スタックを実行して、OWASP ZAP による動的(DAST)ベースラインスキャンを行います。

パラメーター型デフォルト説明
target_pathstring必須docker-compose ファイルを含むディレクトリ
docker_compose_filestring必須docker-compose ファイルの名前(例:docker-compose.yml)
target_urlstring必須起動後のアプリの URL(例:http://localhost:8080)
export_sarif

CI/CD との統合用に、スキャン結果を SARIF 2.1.0 形式でエクスポートします。

パラメーター型デフォルト説明
target_pathstring必須スキャンするパス
scanner_namestring"bearer"使用するスキャナー
min_severitystring"LOW"最低重大度
min_confidencestring"LOW"最低信頼度
output_pathstring""SARIF の書き込み先ファイルパス(空の場合は文字列として返します)
list_scanners

利用可能なスキャナー、そのインストール状況、および対応言語を一覧表示します。

ignore_vulnerability

検出結果を今後のスキャンで抑制します(監査証跡付き)。

unignore_vulnerability

以前に抑制した検出結果を再度有効にします。

list_ignored_vulnerabilities

プロジェクトで現在抑制されている検出結果をすべて表示します。

save_baseline

スキャンを実行し、今後の傾向比較用に、名前を付けたベースラインとして結果をキャッシュします。

パラメーター型デフォルト説明
target_pathstring必須スキャンするパス
tagstring"latest"このベースラインの名前(例:main、pre-release)
scanner_namestring"bearer"使用するスキャナー
min_severitystring"LOW"含める最低重大度
min_confidencestring"LOW"含める最低信頼度
compare_baseline

新しいスキャン結果と保存済みのベースラインを比較し、新規および修正済みの検出結果を明らかにします。

パラメーター型デフォルト説明
target_pathstring必須スキャンするパス
tagstring"latest"比較対象のベースラインタグ
scanner_namestring"bearer"使用するスキャナー
min_severitystring"LOW"含める最低重大度
min_confidencestring"LOW"含める最低信頼度
upload_to_defectdojo

SARIF エクスポートを DefectDojo のエンゲージメントにインポートします。環境変数 DEFECTDOJO_URL および DEFECTDOJO_API_KEY が必要です。

パラメーター型デフォルト説明
sarif_pathstring必須export_sarif による SARIF ファイルのパス
engagement_idint必須対象となる DefectDojo エンゲージメント ID
activebooltrueインポートした検出結果をアクティブとしてマークします
verifiedboolfalseインポートした検出結果を検証済みとしてマークします
upload_to_github

SARIF レポートを GitHub Code Scanning にアップロードします。security_events: write スコープを持つ GITHUB_TOKEN が必要です。

パラメーター型デフォルト説明
sarif_pathstring必須export_sarif による SARIF ファイルのパス
repostring必須owner/name 形式のリポジトリ
commit_shastring必須結果の対象となる完全なコミット SHA
refstring必須完全修飾参照(例:refs/heads/main)
generate_fix_prompt

キャッシュされた検出結果の脆弱なコードとコンテキストをまとめ、厳密な統一差分による修正を求める、LLM 用のプロンプトを生成します。

パラメーター型デフォルト説明
target_pathstring必須スキャンしたプロジェクトのルート(.sast-mcp-cache を含む)
finding_hashstring必須修正する検出結果のハッシュ(スキャン出力から取得)
context_windowint15検出箇所の前後に含めるソース行数
apply_patch

エージェントが生成した統一差分を git apply でディスクに適用します(対象ディレクトリ外へ出るパスは拒否されます)。

パラメーター型デフォルト説明
target_pathstring必須パッチのパスの基準となるディレクトリ
patchstring必須適用する統一差分テキスト
check_onlyboolfalseファイルを変更せずに検証します
evaluate_policy

すべてのスキャナーを実行し、CI ゲート判定用に明示的な PASS/FAIL を返します。

パラメーター型デフォルト説明
target_pathstring必須スキャンするパス
max_criticalint0許容する CRITICAL の最大数(−1 = 無制限)
max_highint-1許容する HIGH の最大数(−1 = 無制限)
max_mediumint-1許容する MEDIUM の最大数(−1 = 無制限)
fail_on_newboolfalsescan_all のベースラインと比較して、新しい検出結果があれば失敗にします
baseline_tagstring"latest"fail_on_new の場合に使用するベースラインタグ
output_formatstring"markdown"markdown または json
export_sbom

すべてのスキャナーを実行し、SBOM/脆弱性レポートをエクスポートします。CycloneDX モードでは、 Syft がインストールされている場合、コンポーネント一覧には 脆弱性のあるパッケージだけでなく、依存関係がすべて含まれます。

パラメーター型デフォルト説明
target_pathstring必須スキャンするパス
output_pathstring""書き込み先ファイル(空の場合はインラインで返します)
min_severitystring"LOW"含める最小深刻度
sca_onlybooltrue依存関係(SCA)の検出結果のみを対象とします。false = すべて
formatstring"cyclonedx"cyclonedx または spdx(SPDX 2.3)
generate_report

すべてのスキャナーを実行し、経営層向けのセキュリティレポートを生成します。

パラメーター型デフォルト説明
target_pathstring必須スキャンするパス
output_pathstring""書き込み先ファイル(空の場合は HTML をインラインで返します。PDF の場合は必須です)
min_severitystring"LOW"含める最小深刻度
formatstring"html"html または pdf([pdf] の追加機能が必要です)
compliance_report

検出結果をコンプライアンスフレームワークにマッピングし、対応状況をレポートします。

パラメーター型デフォルト説明
target_pathstring必須スキャンするパス
frameworkstring"owasp"owasp、sans、pci、または cis
output_pathstring""Markdown レポートの任意の書き込み先ファイル
min_severitystring"LOW"含める最小深刻度
scan_image

コンテナイメージの参照をスキャンして、脆弱性とシークレットを検出します(Trivy または Grype)。

パラメーター型デフォルト説明
image_refstring必須イメージの参照。例:nginx:1.25
scanner_namestring"trivy"trivy または grype
min_severitystring"MEDIUM"レポートする最小深刻度
output_formatstring"markdown"markdown または json
remediate_and_verify

クローズドループで修正します。パッチをドライランし、適用して再スキャンし、検出結果がなくなったことを確認します(失敗した場合はパッチをロールバックします)。

パラメーター型デフォルト説明
target_pathstring必須プロジェクトのルート(.sast-mcp-cache を含む)
finding_hashstring必須修正する検出結果のハッシュ
patchstring必須適用する統合 diff
scanner_namestring""再スキャンに使用するスキャナー(デフォルト:検出結果のスキャナー)
auto_rollbackbooltrue検証に失敗した場合にパッチを元に戻します
import_sarif

外部の SARIF ファイル(Snyk、Veracode、CI ジョブなど)を正規化された検出結果パイプラインに取り込み、重複排除、ベースライン、ダッシュボードに反映します。

パラメーター型デフォルト説明
target_pathstring必須結果が属するプロジェクトのルート
sarif_pathstring必須SARIF 2.1.0 ファイルのパス
scanner_namestring"external"記録するソーススキャナー名
savebooltrueインポートした検出結果をキャッシュします
triage_finding

悪用可能性/誤検知の評価プロンプトを取得するか、CycloneDX VEX の判定を記録します(抑制する処置の場合、検出結果も無視リストに追加されます)。

ParameterTypeDefaultDescription
target_pathstringrequiredプロジェクトのルート(.sast-mcp-cache を含む)
finding_hashstringrequiredトリアージする検出結果のハッシュ
dispositionstring""exploitable、not_affected、false_positive、resolved、in_triage(空の場合はプロンプトを返します)
justificationstring""根拠/CycloneDX の正当化キーワード
comment_on_pr

GitHub の PR または GitLab のマージリクエストにセキュリティの概要を投稿します。GITHUB_TOKEN または GITLAB_TOKEN(および任意の GITLAB_URL)が必要です。

ParameterTypeDefaultDescription
providerstringrequiredgithub または gitlab
repostringrequiredowner/name(GitHub)またはプロジェクト ID/パス(GitLab)
pr_numberintrequiredPR 番号/MR IID
bodystringrequiredMarkdown コメント本文
notify_slack / notify_teams

Slack または Microsoft Teams の受信 Webhook(SLACK_WEBHOOK_URL/TEAMS_WEBHOOK_URL)に通知を送信します。

create_jira_issue

検出結果の Jira 課題を作成します。JIRA_URL、JIRA_EMAIL、JIRA_API_TOKEN が必要です。

ParameterTypeDefaultDescription
project_keystringrequiredJira プロジェクトキー(例:SEC)
summarystringrequired課題のタイトル
descriptionstringrequired課題の説明
issue_typestring"Bug"Jira の課題タイプ

Tip: scan_vulnerabilities、scan_all、scan_git_history は、CI/エージェントのパイプラインで機械可読な結果を得るために output_format="json" を指定できます。

Auth: HTTP トランスポートでは、すべてのツールでスコープによるアクセス制御が適用されます。scan:read(スキャン、レポート、エクスポート)、scan:write(ベースライン、パッチ、アップロード、通知)、config:write(無視リスト)。SAST_MCP_JWT_SECRET を設定し、スコープ付き JWT を発行してください。


SARIF/CI/CD 統合

CI/CD プラットフォームと統合するため、スキャン結果を SARIF 2.1.0 形式でエクスポートします。

# In your CI pipeline, use the MCP tool:
# export_sarif(target_path=".", scanner_name="semgrep", output_path="results.sarif")

# Then upload to GitHub Code Scanning:
# gh api /repos/{owner}/{repo}/code-scanning/sarifs -f [email protected]

対応対象:GitHub Code Scanning、GitLab SAST、Azure DevOps、VS Code SARIF Viewer。


リモートデプロイ(Streamable HTTP)

リモートまたはクラウドでホストするデプロイでは、2026 年の MCP 標準で Streamable HTTP が使用されます。

シークレットを設定すると、JWT Bearer 認証でサーバーを保護できます。また、下位互換性のために静的 API キーを使用することもできます。

# Set JWT secret for secure authentication
export SAST_MCP_JWT_SECRET="your_hmac_sha256_secret"

# Or use the legacy API key method
export SAST_MCP_API_KEY="your_secure_api_key_here"

# Start the server with streamable-http transport
uv run sast-mcp-server --transport streamable-http --port 8080 --host 0.0.0.0

Note:従来の sse トランスポートは非推奨です。streamable-http に移行してください。

主なワークフロー

1. 統合脆弱性スキャン

インストール済みのスキャナーを個別に実行する(scan_vulnerabilities(scanner_name="bandit"))か、scan_all を使用してすべてを一度に実行します。

2. 詳細なシークレットスキャンと動的スキャン

scan_git_history を使用して何年も前に漏えいした API キーを検出するか、run_active_scan を使用して Docker Compose でアプリケーションを起動し、OWASP ZAP で動的にテストします。

3. ベースラインと傾向の追跡

スキャン結果を名前付きベースラインとして保存し、以降のスキャンと比較して、新たな脆弱性、修正済みの問題、重大度の傾向を時系列で追跡します。

  • save_baseline(target_path=".", tag="main")
  • compare_baseline(target_path=".", tag="main")
4. CI/CD 統合

スキャン結果を SARIF 形式(export_sarif)でエクスポートし、GitHub Code Scanning、GitLab SAST、その他の SARIF 対応プラットフォームと統合します。

5. MCP プロンプト(セキュリティワークフロー)

AI エージェントをガイドする、事前構築済みのセキュリティワークフロー:

  • security_review:コードベース全体の評価
  • fix_vulnerability:脆弱性の修正に特化したアドバイザー
  • pr_security_check:Git の差分のみをスキャンし、重大度のしきい値を適用
  • compliance_report:OWASP Top 10 または PCI-DSS のレポートを生成
6. MCP リソース(セキュリティダッシュボード)

フルスキャンを実行せずに、AI エージェントが参照できる読み取り専用のコンテキストデータです。

  • sast://dashboard/{path}:セキュリティポスチャダッシュボード
  • sast://config:サーバーの設定とステータス
  • sast://scanners:利用可能なスキャナーと言語
  • sast://cache/{path}/latest:最新スキャン結果のメタデータ
7. ダッシュボードへのアップロードと AI 支援による修正

SARIF の結果を外部プラットフォームに送信し、エージェントが作成したパッチで検出結果を修正します。

  • upload_to_defectdojo / upload_to_github:SARIF エクスポートをダッシュボードに送信します
  • generate_fix_prompt:特定の検出結果に対応した LLM 向けプロンプトを作成します
  • apply_patch:生成された統合差分を git apply で適用します
Docker

リリースごとに、ビルド済みイメージが GHCR に公開されます。

docker pull ghcr.io/skyrxin/sast-mcp-server:full       # 9 scanners (recommended)
docker pull ghcr.io/skyrxin/sast-mcp-server:minimal    # bandit, njsscan, bearer

# Run as an HTTP server
docker run -p 8080:8080 -e SAST_MCP_JWT_SECRET=your-secret \
  ghcr.io/skyrxin/sast-mcp-server:full --transport streamable-http

# …or use the bundled compose file (exposes /health /ready /metrics too)
docker compose up

ローカルでビルドしますか?

docker build -t sast-mcp-server .                       # minimal
docker build -f Dockerfile.full -t sast-mcp-server:full .   # full

CodeQL と OWASP ZAP はイメージに含まれていません。CodeQL は数 GB のバンドルとして提供されるため、実行時にマウントしてください。ZAP の run_active_scan はホスト上で Docker をオーケストレーションします。


信頼性

ここで「本番環境対応」は単なるスローガンではありません。プッシュのたびに CI で測定しています。

  • 226 件のテスト、74% の行カバレッジ(Codecov)。Python 3.10–3.13 全体でテストが成功し、mypy による型チェックを必須としています。
  • ビルドごとのセルフスキャン。 CI でサーバー自身のコードに対して自らのスキャナーを実行し、SARIF とサマリーを self-scan-report アーティファクトとして公開します。スナップショットは examples/self-scan/ にあります。
  • 負荷テスト済みの HTTP トランスポート。 scripts/loadtest.py を CI で Streamable HTTP サーバーに対して実行します。ローカルでの実行では、30 個の同時ワーカーを使い、/health、/ready、/metrics 全体で失敗ゼロのまま、p95 ≈ 290 ms で約 210 req/s を維持できます。
  • 運用エンドポイント — /health(稼働状態)、/ready(キャッシュされたスキャナー一覧。インストール済みのスキャナーがない場合は 503)、/metrics(Prometheus テキスト形式)。
  • 負荷時も上限を維持 — サブプロセススキャナーには設定可能な同時実行数の上限(SAST_MCP_MAX_CONCURRENT_SCANS)、HTTP トランスポートにはクライアントごとのトークンバケット方式のレート制限(SAST_MCP_RATE_LIMIT_PER_MIN)を設け、スキャナーごとのタイムアウトと任意のインクリメンタルスキャンキャッシュも備えています。

負荷テストを自分で実行するには:

python scripts/loadtest.py --requests 2000 --concurrency 50

設定

環境変数
変数デフォルト説明
SAST_MCP_TIMEOUT300スキャンのタイムアウト時間(秒)
SAST_MCP_LOG_LEVELINFOログレベル:DEBUG、INFO、WARNING、ERROR
SAST_MCP_CACHE_TTL86400キャッシュの有効期間(秒、タグなしのスキャン)
SAST_MCP_CACHE_MAX_SCANS200保持するタグなしキャッシュ済みスキャンの最大数(0 = 無制限)
SAST_MCP_HTTP_RETRIES3インテグレーションの HTTP 呼び出しの再試行回数
SAST_MCP_HTTP_TIMEOUT60インテグレーションの HTTP 呼び出しのリクエストごとのタイムアウト(秒)
SAST_MCP_MAX_CONCURRENT_SCANS8同時に実行できるサブプロセスのスキャナーの最大数(0 = 無制限)
SAST_MCP_RATE_LIMIT_PER_MIN0HTTP トランスポートにおけるクライアントごとのリクエスト上限(0 = 無効)
SAST_MCP_SCANNER_TIMEOUTS(なし)スキャナーごとのタイムアウト上書きを指定する JSON マップ。例:{"trivy":600}
SAST_MCP_API_KEY(なし)リモート(HTTP)認証用の API キー
SAST_MCP_JWT_SECRET(なし)JWT ベアラー認証用の HMAC-SHA256 シークレット(スコープはツールごとに適用されます)
DEFECTDOJO_URL(なし)DefectDojo インスタンスのベース URL(upload_to_defectdojo 用)
DEFECTDOJO_API_KEY(なし)DefectDojo API v2 トークン
GITHUB_TOKEN(なし)security_events: write 権限を持つトークン(SARIF のアップロードと PR コメント用)
GITLAB_TOKEN(なし)api スコープを持つ GitLab トークン(comment_on_pr 用)
GITLAB_URLhttps://gitlab.comGitLab のベース URL(セルフマネージド環境での上書き用)
SLACK_WEBHOOK_URL(なし)Slack の受信 Webhook(notify_slack 用)
TEAMS_WEBHOOK_URL(なし)Microsoft Teams の受信 Webhook(notify_teams 用)
JIRA_URL / JIRA_EMAIL / JIRA_API_TOKEN(なし)Jira Cloud の認証情報(create_jira_issue 用)
運用エンドポイント(HTTP トランスポート)

--transport streamable-http を指定して実行すると、サーバーは次のエンドポイントを公開します。

エンドポイント用途
GET /health稼働確認プローブ — プロセスの実行中はバージョンとともに 200 を返します
GET /ready準備状況プローブ — インストール済みスキャナーを一覧表示します(該当するスキャナーがない場合は 503)
GET /metricsPrometheus 形式のテキスト出力(ツール呼び出し、スキャン時間、検出結果)
インクリメンタルスキャン

scan_vulnerabilities と scan_all は use_cache=true を受け付けます。サーバーはターゲットのファイルをフィンガープリント化し、変更がない場合は前回のスキャン結果を再利用するため、セッション中にスキャンを繰り返しても高速です。


開発

# Clone and install with dev dependencies
git clone https://github.com/Skyrxin/sast-mcp-server.git
cd sast-mcp-server
pip install -e ".[dev]"

# Run tests
pytest tests/ -v

# Lint
ruff check sast_mcp_server/

# Run locally
python -m sast_mcp_server

プロジェクト構成

sast_mcp_server/
├── __init__.py          # Package version
├── __main__.py          # python -m entry point
├── server.py            # FastMCP server with all tools + /health /ready /metrics
├── models.py            # Typed data models (Finding, Severity, etc.)
├── config.py            # Central validated settings (env-driven)
├── sarif.py             # SARIF 2.1.0 export and parsing
├── aggregator.py        # Multi-scanner parallel execution + deduplication
├── cache.py             # Scan caching, baselines, comparison, fingerprints
├── auth.py              # JWT / API key authentication for remote transports
├── metrics.py           # In-process Prometheus metrics
├── ratelimit.py         # Per-client token-bucket rate limiting
├── prompts.py           # MCP prompt templates (security workflows)
├── resources.py         # MCP resources (sast:// dashboards and metadata)
├── scanners/
│   ├── base.py          # Abstract scanner base class
│   ├── factory.py       # Scanner registry and factory
│   ├── bandit.py        # Bandit (Python)
│   ├── njsscan.py       # njsscan (JavaScript)
│   ├── bearer.py        # Bearer (multi-language)
│   ├── semgrep.py       # Semgrep (30+ languages)
│   ├── trivy.py         # Trivy (CVEs, secrets, IaC)
│   ├── codeql.py        # CodeQL (deep semantic SAST)
│   ├── checkov.py       # Checkov (IaC policies)
│   ├── gitleaks.py      # Gitleaks (git history secret scanning)
│   ├── osv_scanner.py   # OSV-Scanner (SCA / dependency CVEs)
│   ├── grype.py         # Grype (SCA + container image scanning)
│   └── zap.py           # OWASP ZAP (DAST via Docker)
├── enrichment/
│   ├── ast_context.py   # AST-aware code context extraction
│   ├── git_diff.py      # Git diff for incremental scanning
│   ├── ignore_manager.py # Finding ignore list management
│   ├── patch_prompt.py  # Builds LLM prompts to fix a cached finding
│   └── patch_apply.py   # Applies/reverts agent-generated diffs via `git apply`
├── reporting/
│   ├── sbom.py          # CycloneDX SBOM/VDR (+ optional Syft inventory)
│   ├── spdx.py          # SPDX 2.3 SBOM
│   ├── vex.py           # CycloneDX VEX statements (triage decisions)
│   ├── html.py          # Standalone HTML executive report
│   ├── pdf.py           # PDF report (optional [pdf] extra)
│   └── compliance.py    # OWASP / SANS / PCI / CIS mapping
└── integrations/
    ├── defectdojo.py    # Upload SARIF to DefectDojo
    ├── github.py        # GitHub Code Scanning + PR comments
    ├── gitlab.py        # GitLab MR comments
    ├── slack.py / teams.py  # Webhook notifications
    └── jira.py          # Create Jira issues

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。