MCP Security Scans について
MCP Security Scansは、MCPサーバー設定を含むリポジトリを監査するチーム向けのPython自動化プロジェクトです。対象リポジトリをGitHub組織にフォークし、対応するGitHub Advanced Security機能を有効にしてレポートを作成します。
主な機能
- 01MCPサーバー設定の読み込み
- 02対象組織へのリポジトリのフォーク
- 03対応するGHAS機能の有効化
- 04Dependabot設定の確認
- 05フォークの分析とレポート作成
- 06GitHub APIエラーとレート制限への対応
活用シーン
- 01MCPサーバーのフォークにセキュリティスキャンを適用
- 02Dependabot設定のあるリポジトリを追跡
- 03処理したフォークの定期レポート作成
MCP 対応
これはリポジトリスキャンの自動化プロジェクトであり、MCPサーバーではありません。MCPサーバー設定を含むリポジトリを処理します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP セキュリティスキャン
このプロジェクトには、mcp-agents-ai/mcp-agents-hub に登録されているリポジトリをフォークし、フォーク先で GitHub Advanced Security(GHAS)機能を有効にするプロセスを自動化する Python スクリプトが含まれています。
機能
- 複数のリポジトリソースから MCP サーバーの設定を読み込めます。
- 現在は
mcp-agents-ai/mcp-agents-hubリポジトリに対応しています。 - GitHub App を使用して GitHub に認証します。
- 特定したソースリポジトリを、指定した対象組織(デフォルト:
mcp-research)にフォークします。 - フォークを作成する前に、既存のフォークがあるか確認します。
- フォークで次の GHAS 機能を有効にします。
- 依存関係スキャン(脆弱性アラートを使用)
- セキュリティ修正の自動化
- シークレットスキャン
- デフォルト設定によるコードスキャン(リポジトリの言語が対応している場合)
- 各フォークに
.github/dependabot.ymlファイルが存在するか確認します。 - 処理したリポジトリの総数と、Dependabot の設定があるリポジトリとないリポジトリの件数を報告します。
- GitHub API エラーを処理し、レート制限の情報を表示します。
セットアップ
-
このリポジトリをクローンします:
git clone <your-repo-url> cd mcp-security-scans -
Python 仮想環境を作成します(推奨):
python -m venv .venv source .venv/bin/activate # On Windows use `.venv\Scripts\activate` -
依存関係をインストールします:
pip install -r requirements.txt pip install -r requirements-dev.txt -
GitHub App をセットアップします:
- GitHub App を作成します(ユーザーアカウントまたは組織の下に作成できます)。
- 対象組織(例:
mcp-research)に必要な権限を付与します。- リポジトリの権限:
- Administration:読み取りと書き込み(セキュリティ機能の有効化、フォークの作成に使用)
- Contents:読み取りと書き込み(dependabot.yml の確認に使用。デフォルト設定にも必要な場合があります)
- Metadata:読み取り専用(デフォルト)
- Secret scanning alerts:読み取りと書き込み
- Code scanning alerts:読み取りと書き込み
- Dependabot alerts:読み取りと書き込み
- 組織の権限:
- Members:読み取り専用(アプリのインストールを確認するため)
- リポジトリの権限:
- 対象組織(
mcp-research)にアプリをインストールします。 - アプリの秘密鍵を生成し、その内容をコピーします。
- アプリ ID を控えます。
-
環境変数を設定します: 次の環境変数をシェルで設定するか、
.envファイルに設定します(スクリプトによって自動的に読み込まれます)。export GH_APP_ID="YOUR_APP_ID" export GH_APP_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\\nYOUR_KEY_CONTENT_HERE\\n-----END RSA PRIVATE KEY-----"YOUR_APP_IDをアプリの ID に置き換えてください。 秘密鍵の文字列を実際の.pemファイルの内容に置き換えてください。シェルで直接設定する場合は改行(\\n)をそのまま維持し、.envファイルに設定する場合は実際の改行を使用してください。
使用方法
環境変数 GH_APP_ID と GH_APP_PRIVATE_KEY が設定されていることを確認します。その後、このプロジェクトのルートディレクトリからスクリプトを実行します。
python -m src.process_mcp_repos # will process all repos found and fork them into the target org
python -m src.analyze --num-repos x # will analyze the forks and store found information into the forks repository properties
python -m src.report # will generate a report of the forks based on the information stored in the forks repository properties
オプション引数:
--target-org <org_name>:フォーク先の対象組織を指定します(デフォルトはmcp-researchです)。
例:
# Assuming environment variables are set and the virtual environment is active
python -m src.process_mcp_repos --target-org my-testing-org
スクリプトは進行状況をコンソールに記録します。
新しい MCP サーバーソースの追加
MCP サーバーの設定を含む新しいリポジトリに対応するには:
src/process_mcp_repos.pyに、そのリポジトリから MCP サーバーの一覧を読み込む新しい関数を作成します。
def load_mcp_servers_from_my_custom_repo() -> list[Path]:
"""
Loads MCP server configurations from your custom repository.
Returns:
A list of Path objects pointing to files containing server configurations.
"""
repo_url = "https://github.com/your-org/your-repo.git"
local_path = Path("./cloned_your_repo")
json_dir_in_repo = Path("path/to/configs")
# Clone or update the repository
newly_cloned = clone_or_update_repo(repo_url, local_path)
if newly_cloned:
logging.info(f"Custom repository newly cloned to [{local_path}]")
else:
logging.info(f"Custom repository at [{local_path}] already exists and was updated")
# Find configuration files in the repository
json_dir = local_path / json_dir_in_repo
if not json_dir.is_dir():
logging.error(f"Config directory not found: [{json_dir}]")
return []
config_files = sorted(list(json_dir.glob("*.json"))) # Adjust the pattern as needed
if not config_files:
logging.warning(f"No configuration files found in [{json_dir}]")
return []
logging.info(f"Found [{len(config_files)}] configuration files in custom repository")
return config_files
- 新しいローダー関数を
MCP_SERVER_LOADERSリストに登録します。
# Register the custom loader
MCP_SERVER_LOADERS.append(load_mcp_servers_from_my_custom_repo)
メイン関数は、登録されているすべてのローダーを自動的に使用して MCP サーバーの設定を収集します。
GitHub ワークフロー
このリポジトリには、さまざまなタスクを自動化する GitHub ワークフローがいくつか含まれています。
- MCP リポジトリの処理:リポジトリを自動的にフォークし、GHAS 機能を有効にします。
- 毎日のセキュリティレポート:リポジトリのセキュリティレポートを毎日生成します。
- リポジトリプロパティの作成:必要なリポジトリプロパティを設定します。
- 新しい Issue で @rajbos にタグ付け:@rajbos が作成したものではない新しい Issue で、自動的に @rajbos にタグ付けし、報告された Issue に迅速に対応できるようにします。
テスト
python -m unittest tests.test_mcp_scan
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。