mcpField
L
Laraguard Mcp

Laraguard Mcp

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

Laraguard Mcp について

Laraguard MCPは、アプリケーションの起動なしでLaravelプロジェクトを監査するTypeScript製MCPサーバーです。ソースコード、設定、ルート、Bladeテンプレート、依存関係を対象に構造化されたセキュリティ検出結果を返し、稼働中のアプリへのプローブも実行できます。

主な機能

  1. 01PHPの静的セキュリティスキャン
  2. 02BladeテンプレートのXSSチェック
  3. 03ルートとミドルウェアの監査
  4. 04設定と依存関係の監査
  5. 05HTTP攻撃プローブ
  6. 06監査結果の統合レポート

活用シーン

  1. 01リリース前のLaravelプロジェクト確認
  2. 02Composer固定パッケージの既知CVE確認
  3. 03認証とミドルウェア適用状況の監査
  4. 04ローカルまたはステージング環境の一般的な弱点の検査

MCP 対応

プロジェクト情報、個別監査、攻撃シミュレーション、統合監査など、8種類の監査ツールをMCPクライアントに提供します。通信にはstdioを使用します。

設定

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

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Laraguard MCP

image

Laravel プロジェクト向けのセキュリティ監査 MCP サーバーです。TypeScript と stdio トランスポートで構築されています。

License: MIT Node.js TypeScript MCP SDK Version


概要

Laraguard MCP は、Laravel プロジェクトのセキュリティ監査を実施するスタンドアロンの Model Context Protocol (MCP) サーバーです。公式の @modelcontextprotocol/sdk を使用して純粋な TypeScript で実装され、stdio 経由で通信するため、MCP 対応の IDE やクライアント(Cursor、Claude Desktop、VS Code MCP 拡張機能など)とネイティブに互換性があります。

このサーバーは Laravel プロジェクトを外部の監査対象として解析するため、Laravel の実行は不要です。設定の問題、リスクのあるコードパターン、依存関係の適切性を対象に、重大度別に分類された構造化 JSON の検出結果を返します。


機能

  • 🔍 静的コードスキャン — SQL インジェクション、RCE、ハードコードされた認証情報、脆弱な暗号化、マスアサインメント、LFI を対象とする 15 以上のルール
  • 🎭 Blade XSS スキャナー — テンプレート内のエスケープされていない {!! !!} 出力や、生の入力値の描画を検出
  • 🛣️ ルートとミドルウェアの監査 — 認証のない管理者ルート、auth:sanctum のない API ルート、スロットリングのないログインルート、CSRF の例外を検出
  • 📦 依存関係の CVE フィード — OSV.dev API を照会し、すべての composer.lock パッケージに関する実際の CVE を取得
  • ⚙️ 設定監査 — .env(DEBUG、APP_KEY、APP_ENV、セキュア Cookie)と config/cors.php を検査
  • 🗂️ プロジェクトメタデータ — composer.json を読み取り、Laravel と PHP のバージョン制約を特定
  • 💥 攻撃のアクティブシミュレーション — 実行中のアプリに HTTP プローブ(SQL インジェクション、XSS、CSRF、認証バイパス、レート制限)を送信
  • 🔒 パストラバーサル防止 — すべてのファイル操作で厳格な許可リストを適用
  • ✂️ シークレットの秘匿化 — MCP クライアントに渡す前に、テキスト出力内の機密値をマスク
  • 🚀 stdio トランスポート — ネットワーク設定は不要。MCP をサポートするあらゆる IDE 内で動作

MCP ツール

このサーバーは 8 つのツールを公開します。静的ツールはすべて、単一の path パラメーターを受け取ります。attack_simulate ではさらに baseUrl が必要です。

ツール入力説明
project_infopathcomposer.json からプロジェクト名、Laravel/PHP のバージョン制約、エンジン情報などのメタデータを返します。
dependency_auditpathcomposer.lock を解析し、OSV.dev を照会して、重大度と修正バージョンを含む実際の CVE を取得します。
config_auditpath.env(DEBUG、APP_KEY、APP_ENV、セッション Cookie)と config/cors.php(ワイルドカードのオリジン)を検査します。
code_scanpathすべての PHP ファイルを対象に、認証情報、脆弱な暗号化、マスアサインメント、RCE、LFI、SQL インジェクションなど、15 以上の静的パターンルールでスキャンします。
blade_scanpathresources/views/ の Blade テンプレートをスキャンし、エスケープされていない出力({!! !!})や XSS を引き起こしやすいパターンを検出します。
route_auditpathルートファイルとミドルウェアを監査し、認証の欠如、スロットリングの欠如、CSRF 例外のワイルドカードを検出します。
attack_simulatepath + baseUrl実行中のアプリに 6 種類の HTTP プローブを送信します。SQL インジェクション、XSS、CSRF、認証バイパス、レート制限、エラー情報の漏えいが対象です。
full_auditpathdependency_audit + config_audit + code_scan + blade_scan + route_audit を並列実行し、統合レポートを返します。
コードスキャン — 検出されるパターン
パターン重大度検出タイプ
->whereRaw(高SQL_INJECTION
DB::raw(中RAW_SQL_USAGE
unserialize(重大UNSAFE_UNSERIALIZE
shell_exec( / exec( / system( / passthru(重大RCE_RISK
eval(重大EVAL_USAGE
password = 'literal'重大HARDCODED_PASSWORD
api_key = 'literal'重大HARDCODED_API_KEY
ハードコードされた長いトークン/シークレット高HARDCODED_SECRET
md5(高WEAK_HASH_MD5
sha1(中WEAK_HASH_SHA1
protected $guarded = []高MASS_ASSIGNMENT_UNGUARDED
file_get_contents($request…)重大PATH_TRAVERSAL_RISK
include/require($request…)重大LFI_RISK
監査レポートのスキーマ

各ツールは、構造化された JSON レポートを返します。

{
  "summary": {
    "critical": 0,
    "high": 1,
    "medium": 2,
    "low": 0,
    "info": 1
  },
  "findings": [
    {
      "severity": "high",
      "type": "SQL_INJECTION",
      "title": "Potential SQL injection via whereRaw",
      "file": "app/Http/Controllers/UserController.php",
      "line": 42,
      "evidence": "->whereRaw('email = ' . $email)",
      "recommendation": "Avoid raw SQL with user input. Use parameter binding/query builder."
    }
  ],
  "metadata": {
    "scannedPath": "/absolute/path/to/laravel-project",
    "engine": "Laraguard MCP",
    "version": "3.0.0",
    "timestamp": "2025-01-01T00:00:00.000Z",
    "durationMs": 312
  }
}

アーキテクチャ

src/
├── index.ts      — MCP server bootstrap and tool registration
├── config.ts     — Environment variable loading and validation
├── security.ts   — Path allowlist enforcement and secret redaction
├── files.ts      — Safe file enumeration and reading
├── tools.ts      — Audit tool implementations
├── reports.ts    — Report aggregation and severity summarization
└── types.ts      — Domain types (Finding, AuditReport, Severity, etc.)

実行環境のスタック:

コンポーネントテクノロジー
ランタイムNode.js 20+
言語TypeScript 5.x
プロトコルModel Context Protocol (MCP)
トランスポートstdio
スキーマ検証Zod
MCP SDK@modelcontextprotocol/sdk

要件

  • Node.js 20 以上
  • npm 10 以上

環境を確認します。

node -v
npm -v

インストール

リポジトリをクローンし、依存関係をインストールします。

git clone https://github.com/ecr17dev/Laraguard-MCP.git
cd "Laraguard MCP"
npm install

設定

環境設定ファイルのサンプルをコピーし、必要に応じてカスタマイズします。

cp .env.example .env
環境変数
変数デフォルト説明
MCP_BASE_PATH—プロジェクトのスキャンで許可される単一のルートパスです。
MCP_BASE_PATHS—許可されるルートパスをカンマ区切りで指定したリストです。MCP_BASE_PATH より優先されます。
MCP_MAX_FILES5000スキャンごとに列挙するファイルの最大数です。
MCP_MAX_FILE_SIZE_BYTES300000ファイルごとに読み込むファイルサイズの上限(バイト単位)です。
MCP_TIMEOUT_SECONDS30監査操作の論理タイムアウトです。

優先順位: MCP_BASE_PATHS → MCP_BASE_PATH → 現在の作業ディレクトリ。

.env の例
# Allow scanning two project roots
MCP_BASE_PATHS="/Users/yourname/projects/my-laravel-app,/srv/workspaces/api"

# Scan limits
MCP_MAX_FILES=5000
MCP_MAX_FILE_SIZE_BYTES=300000
MCP_TIMEOUT_SECONDS=30

開発

利用可能なスクリプト
コマンド説明
npm run devtsx を使用して TypeScript ソースから MCP サーバーを直接実行します(開発時に推奨)。
npm run buildTypeScript を dist/ にコンパイルします。
npm run startコンパイル済みのサーバーを dist/index.js から実行します。
npm run check出力を生成せずに、プロジェクトの型をチェックします。
開発モードでの実行
npm run dev
本番環境向けのビルド
npm run check   # Validate types first
npm run build   # Emit to dist/
npm run start   # Run compiled output

MCP クライアントとの連携

汎用 MCP 設定(JSON)

以下を MCP クライアントの設定ファイルに追加し、パスをインストール先の絶対パスに置き換えます。

{
  "mcpServers": {
    "laraguard": {
      "command": "node",
      "args": ["/absolute/path/to/Laraguard MCP/dist/index.js"],
      "env": {
        "MCP_BASE_PATHS": "/absolute/path/to/your-laravel-project"
      }
    }
  }
}
開発モード(tsx)の使用

先にビルドせずに実行する場合は、次のようにします。

{
  "mcpServers": {
    "laraguard": {
      "command": "npx",
      "args": ["tsx", "/absolute/path/to/Laraguard MCP/src/index.ts"],
      "env": {
        "MCP_BASE_PATHS": "/absolute/path/to/your-laravel-project"
      }
    }
  }
}
Cursor IDE

Settings → MCP を開き、上記の JSON ブロックを貼り付けます。Cursor は次回の再読み込み時にサーバーを検出します。

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json(macOS)を編集し、mcpServers の下に laraguard エントリを追加します。


ツール使用リファレンス

project_info
{ "path": "/absolute/path/to/laravel-project" }

セキュリティチェックを実行せずに、プロジェクトの基本メタデータを返します。対象が有効な Laravel プロジェクトであることを確認し、監査前にフレームワークと PHP のバージョン要件を調べるために使用します。


dependency_audit
{ "path": "/absolute/path/to/laravel-project" }

composer.lock を解析し、ロックされているすべてのパッケージ名とバージョンを抽出して、既知の CVE について OSV.dev のバッチ API に問い合わせます。各脆弱性は、次の情報を含む検出結果として返されます。

  • CVE/GHSA 識別子と概要
  • 重大度(CVSS スコアからマッピング)
  • 影響を受けるパッケージのバージョンと推奨修正バージョン
  • アドバイザリーページへの直接リンク

config_audit
{ "path": "/absolute/path/to/laravel-project" }
チェックファイル重要度
APP_DEBUG=true.env高
APP_ENV=local.env中
APP_KEY=(空).env重大
SESSION_SECURE_COOKIE=false.env中
CORS オリジンのワイルドカード('*')config/cors.php中

code_scan
{ "path": "/absolute/path/to/laravel-project" }

すべての PHP ファイルに対して、行ごとの静的解析を実行します。一致した検出結果をすべて、ファイルパス、行番号、証拠となるスニペットとともに返します。ルールの全一覧については、上記のコードスキャン — 検出パターンテーブルを参照してください。


blade_scan
{ "path": "/absolute/path/to/laravel-project" }

resources/views/ 配下にあるすべての .blade.php ファイルをスキャンし、XSS を引き起こす可能性のある出力パターンを検出します。

チェック重要度
{!! $variable !!} — エスケープされていない変数高
{!! request( !!} / {!! old( !!} — 生のユーザー入力重大
Blade の PHP ブロック内の echo $_GET / echo $_POST高

route_audit
{ "path": "/absolute/path/to/laravel-project" }

routes/web.php、routes/api.php、および app/Http/Middleware/VerifyCsrfToken.php を読み込みます。

チェックファイル重要度
auth ミドルウェアのない管理者/ダッシュボードルートroutes/web.php重大
auth:sanctum / auth:api のない API ルートroutes/api.php高
throttle ミドルウェアのないログイン/登録ルートルートファイル中
VerifyCsrfToken::$except 内のワイルドカードパターンVerifyCsrfToken.php高

attack_simulate
{
  "path": "/absolute/path/to/laravel-project",
  "baseUrl": "http://localhost:8000"
}

⚠️ ローカル環境またはステージング環境に対してのみ使用してください。本番環境では絶対に実行しないでください。

実行中のアプリケーションに対し、6 件の HTTP プローブを実行します。

プローブメソッドとエンドポイントテスト内容
error_disclosureGET /__invalid_route__フレームワーク情報/スタックトレース情報の漏えい
sql_injection_loginSQLi ペイロードを使用した POST /loginログインフォームの SQL インジェクション
reflected_xssGET /search?q=<script>…検索/クエリパラメーターの反射型 XSS
csrf_not_enforcedCSRF トークンなしの POST /loginCSRF トークンの強制(HTTP 419 を想定)
auth_bypass認証ヘッダーなしの GET /api/user保護された API への未認証アクセス
rate_limit10 回連続で実行する POST /loginブルートフォース攻撃に対するレート制限(HTTP 429 を想定)

レポートには、各プローブのステータスコード、所要時間、トリガー状態を含む probes メタデータ配列が含まれます。


full_audit
{ "path": "/absolute/path/to/laravel-project" }

dependency_audit、config_audit、code_scan、blade_scan、route_audit を並列で実行し、すべての検出結果を単一の統合レポートにまとめます。メタデータには、セクションごとの概要が含まれます。


セキュリティ設計

Laraguard MCP は、信頼できないプロジェクトパスを扱う場合でも安全に動作するよう、以下の制御を実装しています。

  • 厳格なパス許可リスト — すべてのファイルアクセスは MCP_BASE_PATHS / MCP_BASE_PATH に照らして検証されます。パストラバーサルの試みは直ちに拒否されます。
  • ファイル数の上限 — 設定可能な上限(MCP_MAX_FILES)により、大規模なモノレポでの際限のない列挙を防ぎます。
  • ファイルサイズの上限 — 設定可能な上限(MCP_MAX_FILE_SIZE_BYTES)により、バイナリファイルや生成ファイルによるメモリ枯渇を防ぎます。
  • ディレクトリと拡張子の除外 — vendor/、node_modules/、.git/、およびバイナリファイル形式はスキャン対象から除外されます。
  • シークレットのマスキング — MCP クライアントに返す前に、テキスト出力内の機密値(パスワード、トークン、キー)をマスキングします。
  • 攻撃シミュレーションの保護 — attack_simulate の対象は、明示的に指定された baseUrl のみに限定されます。自動検出や本番環境の判定は行われません。

重要な注意事項

  • Laraguard MCP は、Laravel プロジェクトを外部監査人の立場から分析します。静的ツールを使う場合、Laravel アプリケーション自体を起動しておく必要はありません。
  • attack_simulate の実行には、アプリケーションが起動している必要があり、本番環境を対象にしてはいけません。
  • サーバーはトランスポート層でフレームワークに依存しません。MCP stdio に対応するクライアントであれば、どれでも使用できます。
  • すべての検出結果は参考情報です。本番環境のセキュリティ評価では、自動スキャンに手動でのコードレビューと専用の DAST/SAST ツール(OWASP ZAP、Burp Suite)を必ず組み合わせてください。

ライセンス

このプロジェクトはMIT Licenseの下でライセンスされています。詳細は LICENSE をご覧ください。

コメント

MCP は初めてですか?

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

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