🚀 CyberEdu MCPサーバ
これは、CyberEdu CTFプラットフォーム (https://cyber-edu.co / https://cyberedu.ro) の公式モデルコンテキストプロトコル (MCP) サーバです。このサーバは、CyberEduClient のすべてのメソッドを自動的に検出し、MCPツールとして公開することで、MCP互換クライアントを介してCyberEduプラットフォームと簡単にやり取りできるようになります。
✨ 主な機能
- 動的ツール検出:
CyberEduClient のすべてのパブリックメソッドを自動的に検出し、MCPツールとして公開します。
- 新しいメソッドのゼロコンフィグレーション:
CyberEduClient に新しいメソッドが追加されると、コードを変更することなく自動的にMCPツールとして利用可能になります。
- 型安全:メソッドのシグネチャと型ヒントから自動的にJSONスキーマを生成します。
- エラーハンドリング:詳細なエラーメッセージを含む包括的なエラーハンドリングを提供します。
📚 CyberEDUプラットフォームの概要
CyberEDUは、実践的なラボ、リアルなシミュレーション、競争環境を提供するサイバーセキュリティトレーニングプラットフォームです。企業のセキュリティチーム、学術機関、政府機関、および個人学習者を対象としています。
コア機能
CyberEDUは、包括的なサイバーセキュリティトレーニングプラットフォームで、実践的なラボ、リアルなシミュレーション、競争環境を提供します。企業のセキュリティチーム、学術機関、政府機関、および実際のシナリオを通じて実践的なサイバーセキュリティスキルを身につけたい個人学習者を対象としています。
主な差別化要素
- 実践的アプローチ:ユーザーが実際のインフラストラクチャを攻撃したり防御したりするインタラクティブなサイバーレンジ(単なる動画や理論ではありません)
- MITRE ATT&CKマッピング:シナリオがMITRE ATT&CKにマッピングされ、実際のマルウェアサンプルを使用します(安全に管理されています)
- 高いスキル保持率:受動的な学習と比較して、3.5倍高いスキル保持率を実現します。
- 現実的なシナリオ:実際の攻撃者の手法や攻撃パターンをシミュレートします。
プラットフォームの構成要素
- サイバーレンジ:複雑なネットワークトポロジを持つ企業規模のサイバー戦争シミュレーション
- サイバーラボ:MITRE ATT&CKにマッピングされた650以上の実践的ラボ。ブラウザベースで自動採点されます。
- トーナメントスイート:ゲーム化されたコンペティション(CTF、レッドチーム対ブルーチーム、ウォーゲーム)
主要統計情報
- 世界中で30,000人以上のアクティブユーザー
- 650以上の実践的ラボ
- 1,400以上のシミュレーションプロファイル
- 500以上のイベントを開催
- 45以上の国にサービスを提供
- 250時間以上のトレーニングコンテンツ
ターゲットユーザー
- 学生:CTFチャレンジとリーダーボードを備えたキャリア指向のトレーニング
- 学界:LMS統合と自動採点機能を持つカリキュラム
- 企業:技術面接評価、チームトレーニング、コンプライアンスマッピング
- 政府機関:エアギャップ環境でのデプロイメント、OT/SCADAシミュレーション、重要インフラの防御
デプロイメントオプション
- クラウドホスト型SaaS(ブラウザベース、インストール不要)
- オンプレミス(VMware、Proxmox、ベアメタル)
- 機密環境用のエアギャップデプロイメント
📦 インストール
リポジトリのクローン
cyberedu-client はGitサブモジュールとして含まれています。すべてを取得するには、--recursive オプションを使用してクローンしてください。
git clone --recursive https://github.com/CyberEDU-Cyber-Range/cyberedu-mcp.git
cd cyberedu-mcp
もし --recursive を使用せずにクローンした場合は、サブモジュールを初期化してください。
git submodule update --init --recursive
パッケージのインストール
クライアントとMCPサーバの両方のパッケージをインストールします。
macOS/Linux:
python3 -m venv venv
source venv/bin/activate
pip install -e ".[local]"
Windows (PowerShell):
python -m venv venv
.\venv\Scripts\Activate.ps1
pip install -e ".[local]"
Windows (コマンドプロンプト):
python -m venv venv
venv\Scripts\activate.bat
pip install -e ".[local]"
代替方法:パッケージを個別にインストールすることもできます。
pip install -e ./cyberedu-client
pip install -e .
🛠️ 設定
セッションの永続化(推奨)
MCPサーバは、セッションの資格情報を自動的にディスクに保存します。これにより、以下のことが可能になります。
cyberedu_set_session_cookie ツールを使用して一度クッキーを設定すると、MCPセッション間で記憶されます。
- 初回の認証後は、環境変数を設定する必要はありません。
- テナントを切り替えるときに、テナントの選択が保持されます。
セッションファイルの場所:
- macOS/Linux:
~/.cyberedu-mcp/session.json
- Windows:
%USERPROFILE%\.cyberedu-mcp\session.json(例: C:\Users\YourName\.cyberedu-mcp\session.json)
このファイルは、Unixシステムではセキュリティ上の理由から所有者の読み取り/書き込み権限のみに制限されています。
環境変数の使用(代替方法)
環境変数を使用することもできます。サーバは、資格情報を以下の優先順位で読み込みます。
- ディスクから保存された資格情報(最も高い優先度)
- 環境変数
- デフォルト値
環境変数:
CYBEREDU_SESSION_COOKIE: CyberEduのセッションクッキー
- これは、https://app.cyber-edu.co にログインした後、ブラウザの開発者ツールから取得できます。
cyberedu_session クッキーの値を探してください。
CYBEREDU_TENANT: テナント識別子(オプション、デフォルトは "cyberedu")
セッションクッキーの取得方法
Chrome/Edge:
- 開発者ツールを開きます(F12)。
- アプリケーション/ストレージタブに移動します。
- クッキー →
https://app.cyber-edu.co を選択します。
cyberedu_session を見つけて、その値をコピーします。
Firefox:
- 開発者ツールを開きます(F12)。
- ストレージタブに移動します。
- クッキー →
https://app.cyber-edu.co を選択します。
cyberedu_session を見つけて、その値をコピーします。
💻 使用方法
MCPサーバの起動
サーバは直接実行することができます(テスト用)。
macOS/Linux:
python3 -m venv venv
source venv/bin/activate
python -m cyberedu_mcp
Windows:
python -m venv venv
.\venv\Scripts\Activate.ps1
python -m cyberedu_mcp
MCPクライアントの設定
このサーバをMCPクライアント(Cursor IDEまたはClaude Desktop)で使用するには、MCP設定に追加してください。
重要: 仮想環境内のPython実行可能ファイルの完全パスを使用してください。MCPクライアントはサーバを外部で実行するため、アクティブな仮想環境にアクセスできません。
macOS/Linuxの例
Cursor IDE (~/.cursor/mcp.json):
{
"mcpServers": {
"cyberedu": {
"command": "/path/to/cyberedu-mcp/venv/bin/python3",
"args": ["-m", "cyberedu_mcp"]
}
}
}
Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"cyberedu": {
"command": "/path/to/cyberedu-mcp/venv/bin/python3",
"args": ["-m", "cyberedu_mcp"]
}
}
}
Windowsの例
Cursor IDE (%APPDATA%\Cursor\User\mcp.json または C:\Users\YourName\.cursor\mcp.json):
{
"mcpServers": {
"cyberedu": {
"command": "C:\\path\\to\\cyberedu-mcp\\venv\\Scripts\\python.exe",
"args": ["-m", "cyberedu_mcp"]
}
}
}
Claude Desktop (%APPDATA%\Claude\claude_desktop_config.json):
{
"mcpServers": {
"cyberedu": {
"command": "C:\\path\\to\\cyberedu-mcp\\venv\\Scripts\\python.exe",
"args": ["-m", "cyberedu_mcp"]
}
}
}
クロスプラットフォームの例
VS Code (.vscode/mcp.json ワークスペース内):
{
"servers": {
"cyberedu": {
"type": "stdio",
"command": "/path/to/cyberedu-mcp/venv/bin/python3",
"args": ["-m", "cyberedu_mcp"]
}
}
}
Windows: C:\\path\\to\\cyberedu-mcp\\venv\\Scripts\\python.exe を使用してください
Antigravity / Windsurf (mcp_config.json - MCPストア → MCPサーバの管理 → 生の設定を表示 からアクセスできます):
{
"mcpServers": {
"cyberedu": {
"command": "/path/to/cyberedu-mcp/venv/bin/python3",
"args": ["-m", "cyberedu_mcp"],
"env": {}
}
}
}
Windows: C:\\path\\to\\cyberedu-mcp\\venv\\Scripts\\python.exe を使用してください
注: セッションの資格情報は ~/.cyberedu-mcp/session.json に保存されるため、cyberedu_set_session_cookie ツールを使用した初回の認証後は、環境変数を設定する必要はありません。
🛠️ 利用可能なツール
サーバは、CyberEduClient のすべてのパブリックメソッドを自動的にMCPツールとして公開します。ツール名には cyberedu_ が接頭辞として付けられ、名前の衝突を避けます。
セッション管理ツール
これらのツールを使用すると、MCPサーバを再起動することなく、認証とテナントの切り替えを管理できます。資格情報は自動的に ~/.cyberedu-mcp/session.json に保存されます。
cyberedu_get_session_status - 認証されているか、どのテナントが選択されているか、資格情報が保存されているかを確認します。
cyberedu_set_session_cookie - 認証用のセッションクッキーを設定/更新します(ディスクに保存されます)。
cyberedu_switch_tenant - 別のテナント/組織に切り替えます(ディスクに保存されます)。
cyberedu_clear_session - ディスクとメモリから保存された資格情報を削除します。
使用例:
- ステータスの確認: "What's my CyberEdu session status?"
- クッキーの設定: "Set my CyberEdu session cookie to
eyJ..."(一度設定すると保存されます!)
- テナントの切り替え: "Switch to tenant
myorg"
- 資格情報の削除: "Clear my CyberEdu session"
認証とユーザーツール
cyberedu_check_auth - 認証を検証し、ユーザー情報を取得します。
cyberedu_get_user_info - 完全なユーザー情報を取得します。
cyberedu_list_tenants - 利用可能なすべてのテナントをリストします。
cyberedu_get_current_tenant_info - 現在のテナント情報を取得します。
cyberedu_get_user - IDでユーザー情報を取得します。
チャレンジツール(アーカイブ)
cyberedu_list_challenges - すべてのチャレンジをリストします(オプションのフィルター付き)。
cyberedu_get_challenge - チャレンジの詳細を取得します。
cyberedu_get_challenge_difficulties - 利用可能な難易度レベルを取得します。
cyberedu_get_challenge_tags - 利用可能なチャレンジタグを取得します。
cyberedu_subscribe_to_challenge - チャレンジに登録します。
フラッグと提出ツール(アーカイブ)
cyberedu_get_flag - フラッグ/質問情報を取得します。
cyberedu_submit_flag - フラッグ/回答を提出します。
ファイルツール(アーカイブ)
cyberedu_download_file - チャレンジファイルをダウンロードします(オプションの save_path パラメータを使用して、直接ディスクに保存できます)。
サービスツール(アーカイブ)
cyberedu_start_service - チャレンジサービスを起動します。
cyberedu_get_service_status - サービスのステータスを取得します。
cyberedu_extend_service - サービス時間を延長します。
cyberedu_restart_service - サービスを再起動します。
コンテストツール
cyberedu_list_contests - 利用可能なすべてのコンテストをリストします。
cyberedu_get_contest - コンテストの詳細を取得します。
cyberedu_get_contest_ranks - コンテストのリーダーボードを取得します。
cyberedu_get_contest_challenge - コンテスト内のチャレンジの詳細を取得します。
cyberedu_subscribe_to_contest_challenge - コンテストチャレンジに登録します。
コンテストのフラッグと提出ツール
cyberedu_get_contest_flag - コンテスト内のフラッグ情報を取得します。
cyberedu_submit_contest_flag - コンテスト内のフラッグを提出します。
コンテストのファイルツール
cyberedu_download_contest_file - コンテストチャレンジからファイルをダウンロードします(オプションの save_path パラメータを使用して、直接ディスクに保存できます)。
コンテストのサービスツール
cyberedu_start_contest_service - コンテスト内のサービスを起動します。
cyberedu_get_contest_service_status - コンテスト内のサービスのステータスを取得します。
cyberedu_extend_contest_service - コンテスト内のサービス時間を延長します。
cyberedu_restart_contest_service - コンテスト内のサービスを再起動します。
💻 使用例とプロンプト
CyberEdu MCPサーバとやり取りするための例プロンプトです。
セッションと認証
"Check my CyberEdu session status"
"Set my CyberEdu session cookie to eyJpdiI6Ik..."
"Switch to tenant 'mycompany'"
チャレンジ(アーカイブ)
"List all web security challenges"
"Show me the easiest challenges from tenant unbreakable/rocsc"
"Show me hard difficulty forensics challenges"
"Get details for challenge abc123"
"Subscribe me to this challenge and start the service"
"Download challenge files to ./downloads/"
"Submit flag 'CTF{i-like-web-security-ctf-challenges}' for this challenge"
コンテスト
"List available CTF contests"
"Show leaderboard for contest 'defcamp ctf quals 2025'"
"Get challenge abc123 from contest 'rocsc26-quals'"
"Start service for this contest challenge"
"Submit flag 'FLAG{solved}' for contest challenge"
ワークフローの例
1. "List easy web challenges from tenant rocsc"
2. "Subscribe to 'why-xor' and start the service"
3. "Download the challenge files"
4. [Solve...]
5. "Submit flag 'CTF{xor-is-not-safe}'"
🔧 アーキテクチャ
動的ツール検出
サーバはPythonの inspect モジュールを使用して、CyberEduClient クラスのすべてのパブリックメソッドを自動的に検出します。各メソッドについて、以下の処理が行われます。
- メソッドの検出:クラス内のパブリックメソッド(プライベートメソッドやヘルパーメソッドを除く)をスキャンします。
- スキーマの生成:メソッドのシグネチャと型ヒントから自動的にJSONスキーマを生成します。
- ツールの登録:各メソッドを適切なメタデータとともにMCPツールとして登録します。
ツールレジストリ
ToolRegistry クラスは、ツールを管理するための柔軟なシステムを提供します。
- 自動検出:イントロスペクションを使用してクラスからメソッドを検出します。
- 手動登録:カスタムメソッドの手動登録を可能にします。
- カテゴリの整理:メソッドを自動的にカテゴリ分けします(認証、チャレンジ、コンテスト、サービスなど)。
拡張性
新しい機能を追加するには、以下の手順を実行します。
- CyberEduClientにメソッドを追加する:CyberEduClient クラスに新しいパブリックメソッドを追加します。
- 自動公開:MCPサーバは自動的に新しいメソッドを検出し、公開します。
- MCPサーバコードの変更不要:MCPサーバのコードを変更する必要はありません。
クライアントメソッドに直接マッピングされないカスタムツールの場合は、以下のようにします。
from cyberedu_mcp.tool_registry import ToolRegistry
registry = ToolRegistry()
def custom_tool(param1: str, param2: int) -> dict:
"""Custom tool description."""
return {"result": f"{param1}: {param2}"}
registry.register_method(
name="custom_tool",
method=custom_tool,
description="A custom tool",
category="custom"
)
⚠️ エラーハンドリング
サーバは包括的なエラーハンドリングを提供します。
- HTTPエラー:ステータスコードとレスポンスボディを含む詳細なHTTPエラー情報を返します。
- バリデーションエラー:欠落しているまたは無効なパラメータに対して明確なエラーメッセージを返します。
- クライアントエラー:すべての例外に対して構造化されたエラー情報を返します。
📚 詳細ドキュメント
追加のドキュメントは docs/ フォルダにあります。
- docs/index.md - ドキュメントの概要とクイックリファレンス
- docs/architecture.md - サーバの設計、ツールの検出、セッション管理
- docs/extending.md - カスタムツールの追加方法と動作の変更方法
📄 ライセンス
MIT