Reversecore_mcp について
Reversecore_mcpはセキュリティ分析向けのMCPサーバーで、AIアシスタントにリバースエンジニアリング、マルウェア分析、脆弱性調査、デジタルフォレンジック、ソース監査のツールを提供します。複数の分析バックエンドを構造化ツールにまとめ、自然言語を使った分析フローを支援します。
主な機能
- 01静的解析と逆アセンブル
- 02マルウェアとYARAの分析
- 03シンボリック実行と汚染追跡
- 04デジタルフォレンジックとPCAP分析
- 05ソースコードの脆弱性スキャン
- 06MITRE ATT&CKレポート生成
活用シーン
- 01マルウェア検体の分析とIOC抽出
- 02バイナリの脆弱性兆候の調査
- 03メモリ、ディスク、ネットワーク証拠の調査
- 04PythonおよびC/C++ソースの監査
MCP 対応
stdioまたはHTTP/SSE経由で対応クライアントに接続し、177の分析ツール、ガイド付き分析プロンプト、MCPリソースを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
114掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| language | any | いいえ | 省略可能な言語ヒント(例:'c'、'python')。None の場合は、拡張子から推定します。 |
| file_path | string | はい | ソースコードファイルへのパス。 |
詳細
Reversecore MCP
Model Context Protocol による AI を活用したリバースエンジニアリングとセキュリティ分析
Claude や Cursor などの AI アシスタントが、自然言語を通じてリバースエンジニアリング、マルウェア分析、脆弱性調査、デジタルフォレンジック、ソースコード監査を実行できるようにする MCP サーバーです。
目次
- Reversecore MCP とは?
- アーキテクチャ
- ツール一覧(177 種類)
- ガイド付き分析プロンプト(22 モード)
- MCP リソース(11 URI)
- クイックスタート
- AI クライアントへの接続
- 設定
- セキュリティモデル
- 開発
- CI/CD パイプライン
- Docker ビルドアーキテクチャ
- システム要件
- プロジェクト構成
- エラー処理
- 新しいツールの追加
- コントリビューション
- ドキュメント
- ライセンス
Reversecore MCP とは?
Reversecore MCP は、177 個の分析ツールを単一のインターフェースにまとめ、AI アシスタントが自然言語を通じて呼び出せるようにする、Model Context Protocol サーバーです。
複数のツールのコマンドライン構文を覚える代わりに、実行したい内容を説明するだけです。
"Decompile the main function of this malware sample, extract all network IOCs,
map the behavior to MITRE ATT&CK, and generate a triage report."
AI アシスタントは、これをツール呼び出しに分割します。
r2_decompile("sample.exe", "main")
→ extract_iocs("sample.exe")
→ add_mitre_technique(technique_id="T1071.001", ...)
→ create_analysis_report(template_type="quick_triage")
各ツールは、型付きデータを含む構造化された ToolResult(ToolSuccess または ToolError)を返します。AI はそのデータを使って推論し、後続のクエリに連鎖させたり、ユーザー向けに表示したりできます。
対応範囲
| 分野 | 実行できること |
|---|---|
| 静的解析 | 逆アセンブル、逆コンパイル(r2ghidra)、バイナリ解析(LIEF)、パッカー検出(DIE)、機能検出(CAPA)、文字列抽出、ファームウェアスキャン(binwalk) |
| 動的解析とシンボリック解析 | ESIL エミュレーション、angr シンボリック実行、テイント解析、ファジングハーネス生成 |
| マルウェア解析 | IOC 抽出、YARA スキャン、休眠バックドア検出、適応型ワクチン生成、自律型脆弱性ハンティング |
| 脆弱性調査 | 危険な API の検出、ROP ガジェットの発見、ヒープエクスプロイト解析、クラッシュのトリアージ、PoC 生成 |
| デジタルフォレンジック | メモリフォレンジック(Volatility3)、PCAP 解析(Scapy)、ディスクフォレンジック(Sleuth Kit)、アーティファクトの相関分析 |
| ソースコード監査 | Python AST スキャン、C/C++ 正規表現パターンスキャン |
| レポート作成 | MITRE ATT&CK とのマッピングを含むセッションベースのレポート、SIGMA ルール生成、VEX レポート、メール配信 |
アーキテクチャ
AI Client (Claude / Cursor / any MCP-compatible client)
│ MCP Protocol (stdio or HTTP/SSE)
▼
┌──────────────────────────────────────────────────────┐
│ FastMCP 3.4.4 Server │
│ 177 registered tools · Fully async │
│ Python 3.10–3.12 │
├────────────────────┬─────────────────────────────────┤
│ Guided Prompts │ Dynamic Resources │
│ (22 analysis │ (11 URI-based: per-binary │
│ modes) │ strings, IOCs, ASM, CFG, …) │
├────────────────────┴─────────────────────────────────┤
│ Core Infrastructure │
│ Config · Security · Validators · Exceptions (17) │
│ R2 Pool · Metrics · Memory (SQLite) · Task Queue │
│ MITRE Mapper · Evidence Engine · Resilience Layer │
│ Arch Registry (x86/ARM/MIPS/RISC-V/PPC) │
│ Result Cache (SHA256) · Analysis Cache (Redis+SQL) │
│ SAST (Python AST + C/C++ Regex) · Plugin System │
├──────────────────────────────────────────────────────┤
│ Analysis Engines │
│ Radare2 6.0.4 │ YARA 4.3.1 · LIEF · Capstone │
│ r2ghidra │ CAPA · angr · Qiling │
│ Volatility3 · Scapy│ DIE · Binwalk · Sleuth Kit │
│ pwntools · ROPgadget│ Keystone (assembler) │
└──────────────────────────────────────────────────────┘
サーバーは Python 3.10~3.12 に対応しています。オプションの angr シンボリック実行エンジンは、セキュリティ上問題のない互換リリースが利用可能な Python 3.12 以降にインストールされます。Python 3.10 および 3.11 へのインストールでは angr は省略されます。
コアインフラストラクチャ(37 モジュール)
reversecore_mcp/core/ ディレクトリには、すべてのツールの基盤となる共有インフラストラクチャが含まれています。
| モジュール | 役割 |
|---|---|
config.py | 34 個以上の環境変数に対応した Pydantic BaseSettings |
security.py | 入力のサニタイズ、コマンド引数の検証 |
validators.py | TOCTOU の軽減とシンボリックリンクの解決を伴う、ファイルおよびバイナリパスの検証 |
r2_pool.py | サイズを設定可能な、スレッドセーフな Radare2 接続プール |
r2_helpers.py | Radare2 の構造化出力の解析 |
metrics.py | ツールごとの実行時間、呼び出し回数、エラー率、キャッシュ統計 |
memory.py | セッションをまたいで解析結果を保持する、非同期 SQLite ベースの AI メモリストア |
mitre_mapper.py | MITRE ATT&CK 手法 ID のマッピングエンジン |
evidence.py | 証拠の分類システム:OBSERVED、INFERRED、POSSIBLE |
resilience.py | 再試行、サーキットブレーカー、タイムアウトのデコレータパターン |
task_queue.py | Redis + arq によるバックグラウンドタスクキュー |
extension_registry.py | プラグインの登録とライフサイクル管理 |
arch_registry.py | マルチアーキテクチャのマッピング(x86、x86_64、ARM32、ARM64、MIPS、RISC-V、PPC → r2 のアーキテクチャ/ビット数/レジスター) |
result_cache.py | SHA256 ベースのツール結果キャッシュデコレータ(@cache_tool_result) |
analysis_cache.py | マルチレベルの逆コンパイルキャッシュ(L1:Redis、L2:SQLite) |
result.py | ToolSuccess / ToolError Pydantic モデル |
exceptions.py | RCMCP-E* エラーコードを持つ 17 個の例外クラス |
decorators.py | @log_execution、@track_metrics |
error_handling.py | @handle_tool_errors デコレータ |
error_formatting.py | 構造化されたエラーレスポンスのフォーマット |
execution.py | タイムアウトと出力制限に対応した安全なサブプロセス実行 |
command_spec.py | サブプロセス呼び出し用のコマンド仕様 |
loader.py | ツールモジュールの動的ローダー |
plugin.py | プラグインの基底クラス |
extension.py | 拡張機能の基底クラス |
container.py | コンテナー/サンドボックスの実行サポート |
audit.py | 監査ログ |
binary_cache.py | バイナリファイルのキャッシュ |
json_utils.py | orjson による JSON シリアライズ(標準ライブラリの json より 3~5 倍高速) |
logging_config.py | Loguru ベースの構造化ログ |
report_generator.py | レポートレンダリングエンジン(Markdown、xhtml2pdf による PDF) |
resource_manager.py | MCP リソースのライフサイクル管理 |
sast/python_ast_scanner.py | Python AST ベースの脆弱性スキャナー |
sast/regex_scanner.py | C/C++ 正規表現ベースの脆弱性スキャナー |
sast/rule_manager.py | SAST ルールの読み込みと管理 |
ツールカタログ(177 ツール)
📖 正式版ツールカタログおよびパラメーターリファレンス(151 ツール) 📊 ツールプロファイルのフットプリントとコンテキストのベンチマークマトリクス
すべてのツールは、型付きの data を含む ToolSuccess、または RCMCP-E* エラーコードを含む ToolError のいずれかとして、構造化された ToolResult を返します。ツールは、5 つのモジュール型実行プロファイル(full、static、malware、forensics、vuln-research)にわたる 11 のドメインプラグインに整理されています。
| プロファイル | 登録ツール数 | スキーマサイズ | full に対する LLM コンテキストの削減率 | 推奨ドメイン |
|---|---|---|---|---|
full | 153 | 116.8 KB | ベースライン(0%) | エンタープライズ向けリバースエンジニアリング完全スイート |
vuln-research | 105 | 73.3 KB | -37.2%(約10,800トークン) | ファジング、ASan クラッシュのトリアージ、CVE 探索、エクスプロイト調査 |
static | 99 | 67.7 KB | -42.0%(約12,200トークン) | 逆アセンブル、逆コンパイル(r2ghidra)、LIEF、静的トリアージ |
malware | 67 | 62.8 KB | -46.2%(約13,500トークン) | 脅威のトリアージ、YARA スキャン、難読化解除、解析対策 |
forensics | 57 | 37.0 KB | -68.4%(約19,500トークン) | メモリフォレンジック(Volatility3)、ネットワーク PCAP(Scapy)、ディスク |
🔍 静的解析プラグイン(24 ツール)
| # | ツール | バックエンド | 説明 |
|---|---|---|---|
| 1 | run_strings | strings CLI | 最小文字列長を設定できる ASCII/Unicode 文字列の抽出 |
| 2 | run_binwalk | Binwalk | 埋め込みシグネチャとファイルシステムを対象としたファームウェアの詳細スキャン |
| 3 | run_binwalk_extract | Binwalk | binwalk で検出した埋め込みファイルの抽出 |
| 4 | parse_binary_with_lief | LIEF | PE/ELF/Mach-O のヘッダー、セクション、インポート/エクスポート、TLS の完全な解析 |
| 5 | detect_packer | DIE | パッカー/コンパイラーの簡易検出 |
| 6 | detect_packer_deep | DIE(diec) | Detect It Easy による詳細なパッカー/プロテクター解析 |
| 7 | run_capa | CAPA(Mandiant FLARE) | 機能の検出 — 「データを暗号化する」「永続化を作成する」など |
| 8 | run_capa_quick | CAPA | ルールのサブセットによる機能の簡易スキャン |
| 9 | generate_signature | Radare2 | 識別用のバイナリシグネチャを生成 |
| 10 | generate_yara_rule | Radare2 + YARA | バイナリパターンから YARA 検出ルールを生成 |
| 11 | generate_advanced_yara_rule | Radare2 + YARA | 動作指標を含む高度な YARA ルールを生成 |
| 12 | scan_for_versions | LIEF + strings | バイナリに埋め込まれたバージョン文字列をスキャン |
| 13 | extract_rtti_info | Radare2 | C++ RTTI(実行時型情報)を抽出 |
| 14 | diff_binaries | Radare2 | 2 つのファイルバージョン間のセマンティックなバイナリ差分を取得 |
| 15 | analyze_variant_changes | Radare2 | バイナリの亜種間の変更を分析 |
| 16 | match_libraries | Radare2 | 関数フィンガープリントによって静的リンクされたライブラリを特定 |
| 17 | patch_diff_1day | Radare2 + ヒューリスティクス | 1-day 脆弱性調査向けのパッチ差分を自動分析 |
| 18 | analyze_patch_diff_auto | Radare2 + 推論 | パッチから脆弱性を自動推論 |
| 19 | emulate_binary | Radare2 ESIL | レジスター/メモリーのトレース付きコードエミュレーション |
| 20 | generate_fuzzing_harness | Qiling + AFL++ | 特定の関数を対象とするファジングハーネスを生成 |
| 21 | run_fuzzing_campaign | AFL++ | クラッシュの収集を伴うファジングキャンペーンを実行 |
| 22 | triage_crash | GDB | クラッシュの解析とエクスプロイト可能性の評価 |
| 23 | verify_path_and_get_args | angr | シンボリック実行 — パスの到達可能性を証明し、具体的な入力を算出 |
| 24 | taint_trace | Radare2 + angr | ソースからシンクまでのデータフロー汚染解析 |
🔐 ソースコード監査プラグイン(1 ツール)
| # | ツール | バックエンド | 説明 |
|---|---|---|---|
| 25 | audit_source_code | AST + Regex | 危険なパターンを対象とする Python AST スキャンと C/C++ 正規表現スキャン |
🛠️ 共通ユーティリティプラグイン(20 個のツール)
ファイル操作(5 個のツール)
| # | ツール | 説明 |
|---|---|---|
| 26 | run_file | ファイルの種類、アーキテクチャ、コンパイラーのフィンガープリントを特定します |
| 27 | copy_to_workspace | ファイルを分析ワークスペースにコピーします |
| 28 | create_directory | ワークスペースにディレクトリを作成します |
| 29 | list_workspace | ワークスペース内のすべてのファイルを一覧表示します |
| 30 | scan_workspace | ファイルのメタデータを含む、ワークスペース全体のスキャンを実行します |
パッチの説明(1 個のツール)
| # | ツール | 説明 |
|---|---|---|
| 31 | explain_patch | バイナリパッチを自然言語で説明します |
アセンブラー(1 個のツール)
| # | ツール | バックエンド | 説明 |
|---|---|---|---|
| 32 | assemble_instructions | Keystone | 命令をマシンコードにアセンブルします(x86、ARM、MIPS など) |
AI メモリ管理(11 個のツール)
これらのツールを使うと、非同期 SQLite データベースを使用して、AI が分析セッションをまたいで調査結果を保存し、呼び出せます。
| # | ツール | 説明 |
|---|---|---|
| 33 | create_memory_session | 分析用の新しいメモリセッションを開始します |
| 34 | store_analysis_finding | タグを付けて分析結果を保存します |
| 35 | query_analysis_memories | クエリを使って過去の調査結果を検索します |
| 36 | get_binary_analysis_context | 特定のバイナリに関するすべてのコンテキストを取得します |
| 37 | tag_analysis_session | セッションを整理するためにタグを追加します |
| 38 | search_memories_by_tag | タグからセッションや調査結果を検索します |
| 39 | delete_analysis_session | セッションとその調査結果を削除します |
| 40 | cleanup_expired_sessions | 指定した期間より古いセッションを削除します |
| 41 | list_analysis_sessions | すべてのアクティブなセッションを一覧表示します |
| 42 | export_memory_store | すべてのメモリを移植可能な形式でエクスポートします |
| 43 | import_memory_store | エクスポートファイルからメモリをインポートします |
サーバー監視(2 個のツール)
| # | ツール | 説明 |
|---|---|---|
| 44 | get_server_health | 稼働時間、メモリ使用量、読み込まれたツール、Python のバージョンを取得します |
| 45 | get_tool_metrics | ツールごとの呼び出し回数、平均実行時間、エラー率、キャッシュヒット/ミスを取得します |
⚙️ Radare2 & r2ghidra プラグイン(30 個のツール)
Radare2 のすべてのツールは、r2pipe セッションを自動管理するスレッドセーフな接続プール(r2_pool.py)を使用します。
| # | ツール | 説明 |
|---|---|---|
| 46 | Radare2_open_file | Radare2 でバイナリファイルを開く |
| 47 | Radare2_close_file | Radare2 セッションを閉じる |
| 48 | Radare2_list_open_files | 現在開いているファイルを一覧表示する |
| 49 | Radare2_analyze_binary | 完全な自動解析(aaa)を実行する |
| 50 | Radare2_list_functions | 検出されたすべての関数を一覧表示する |
| 51 | Radare2_disassemble_function | 特定の関数を逆アセンブルする |
| 52 | Radare2_disassemble_address | 特定のアドレスを逆アセンブルする |
| 53 | Radare2_decompile_function | r2ghidra 経由でデコンパイルする(r2 に組み込まれた Ghidra エンジン。JVM は不要) |
| 54 | Radare2_list_exports | エクスポートされたシンボルを一覧表示する |
| 55 | Radare2_list_imports | インポートされた関数を一覧表示する |
| 56 | Radare2_list_sections | エントロピーを含めてバイナリのセクションを一覧表示する |
| 57 | Radare2_list_strings | バイナリ内で見つかった文字列を一覧表示する |
| 58 | Radare2_find_cross_references | 関数呼び出しとデータ参照を追跡する |
| 59 | Radare2_search_bytes | バイナリ内のバイトパターンを検索する |
| 60 | Radare2_get_binary_info | バイナリのメタデータ(アーキテクチャ、形式、エンディアン)を取得する |
| 61 | Radare2_execute_command | Radare2 のコマンドをそのまま実行する |
| 62 | Radare2_esil_emulate | 特定のアドレスで ESIL エミュレーションを実行する |
| 63 | Radare2_get_hexdump | 仮想アドレスのヘックスダンプを取得する |
| 64 | Radare2_get_cfg_data | 制御フローグラフのデータを抽出する |
| 65 | Radare2_generate_cfg_png | CFG を PNG 画像として生成する |
| 66 | Radare2_generate_callgraph | 関数呼び出しグラフを生成する |
| 67 | Radare2_recover_structures | C 構造体を自動復元し、アノテーションデータベースに保存する |
| 68 | Radare2_decompile_with_r2ghidra | キャッシュ機能付きの高品質な C デコンパイル |
| 69 | Radare2_annotate_binary | バイナリにアノテーションを追加する |
| 70 | Radare2_get_annotations | アノテーションを取得する |
| 71 | Radare2_export_annotations | アノテーションをファイルにエクスポートする |
| 72 | Radare2_import_annotations | アノテーションをファイルからインポートする |
| 73 | Radare2_detect_crypto_constants | 暗号定数(AES S-box など)を検出する |
| 74 | Radare2_find_gadgets | ROP/JOP ガジェットを見つける |
| 75 | Radare2_calculate_entropy | セクションごとのエントロピーを計算する |
🦠 マルウェア解析プラグイン(9 個のツール)
| # | ツール | バックエンド | 説明 |
|---|---|---|---|
| 76 | dormant_detector | Radare2 + ヒューリスティック | 隠されたバックドア、孤立関数、時限爆弾、ロジック爆弾を見つける |
| 77 | adaptive_vaccine | YARA + Radare2 | 脅威を無効化するための検出用 YARA ルールとバイナリパッチを生成する |
| 78 | vulnerability_hunter | Radare2 + 解析 | 危険な API パターン(strcpy、sprintf)と ROP ガジェットチェーンを検出する |
| 79 | extract_iocs | 正規表現 + LIEF | IP、URL、ドメイン、ハッシュ、レジストリキー、暗号資産アドレスを抽出する |
| 80 | run_yara | YARA | カスタムルールファイルと組み込みルールセットでスキャンする |
| 81 | generate_poc_exploit | pwntools | 概念実証(PoC)エクスプロイトコードを生成する |
| 82 | build_rop_chain | ROPgadget + pwntools | ROP チェーンを自動構築する |
| 83 | autonomous_vuln_hunt | Radare2 + angr | 自律型の脆弱性探索パイプライン |
| 84 | analyze_heap_exploit | Radare2 + ヒューリスティック | ヒープ悪用の解析(UAF、二重解放、オーバーフロー) |
🕵️ デジタルフォレンジックプラグイン(22 ツール)
メモリフォレンジック(6 ツール)
| # | ツール | バックエンド | 説明 |
|---|---|---|---|
| 85 | memory_analyze | Volatility3 | メモリダンプを完全に解析 |
| 86 | memory_list_processes | Volatility3 | メモリダンプから実行中のプロセスを一覧表示 |
| 87 | memory_detect_injections | Volatility3 | プロセスメモリ内のコードインジェクションを検出 |
| 88 | memory_extract_strings | Volatility3 | プロセスメモリから文字列を抽出 |
| 89 | memory_dump_module | Volatility3 | メモリからロード済みモジュールをダンプ |
| 90 | memory_list_symbols | Volatility3 | メモリ内のシンボルを一覧表示 |
ディスクフォレンジック(6 ツール)
| # | ツール | バックエンド | 説明 |
|---|---|---|---|
| 91 | disk_list_partition | Sleuth Kit | ディスクパーティションを一覧表示 |
| 92 | disk_list_files | Sleuth Kit | ディスクイメージ内のファイルを一覧表示 |
| 93 | disk_recover_deleted | Sleuth Kit | 削除されたファイルを復元 |
| 94 | disk_analyze_mft | Sleuth Kit | NTFS マスターファイルテーブルを解析 |
| 95 | disk_extract_file | Sleuth Kit | ディスクイメージからファイルを抽出 |
| 96 | disk_hash_verify | Sleuth Kit | ハッシュを使用してファイルの整合性を検証 |
ネットワークフォレンジック(5 ツール)
| # | ツール | バックエンド | 説明 |
|---|---|---|---|
| 97 | pcap_analyze | Scapy | PCAP 解析:プロトコルの内訳、異常 |
| 98 | pcap_list_connections | Scapy | すべてのネットワーク接続を一覧表示 |
| 99 | pcap_extract_dns | Scapy | DNS クエリと応答を抽出 |
| 100 | pcap_extract_c2 | Scapy | C2 通信の可能性を特定 |
| 101 | pcap_reconstruct_stream | Scapy | TCP ストリームを再構築 |
アーティファクト分析(5 ツール)
| # | ツール | バックエンド | 説明 |
|---|---|---|---|
| 102 | artifact_collect | Custom parsers | ブラウザー履歴、レジストリハイブ、イベントログ、プリフェッチを収集 |
| 103 | artifact_correlate_ioc | Custom parsers | アーティファクトを既知の IOC と相関付け |
| 104 | artifact_generate_yara | YARA | アーティファクトのパターンから YARA ルールを生成 |
| 105 | artifact_timeline | Custom parsers | 複数のアーティファクトソースからタイムラインを作成 |
| 106 | artifact_report | Custom parsers | アーティファクト分析レポートを生成 |
📝 レポート生成プラグイン(14 ツール)
| # | ツール | 説明 |
|---|---|---|
| 107 | get_system_time | サーバーのタイムスタンプを取得(日付の AI による幻覚を防止) |
| 108 | set_timezone | レポートのタイムゾーンを設定 |
| 109 | get_timezone_info | 現在のタイムゾーン情報を取得 |
| 110 | start_report_session | 一意の ID を持つ時間計測付き分析セッションを開始 |
| 111 | end_report_session | セッションを終了:所要時間を計算し、IOC/ATT&CK リストをロック |
| 112 | get_report_session_status | セッションのステータスを確認 |
| 113 | list_report_sessions | すべての進行中/完了済みセッションを一覧表示 |
| 114 | add_ioc | ライブセッション中に IOC を収集してタグ付け |
| 115 | add_analysis_note | カテゴリ別のメモ(発見事項、警告、振る舞い)を追加 |
| 116 | add_mitre_technique | MITRE ATT&CK のテクニック ID を記録 |
| 117 | set_severity | セッションの重大度を設定(低/中/高/重大) |
| 118 | create_analysis_report | 4 つのモードでレポートを作成:full_analysis、quick_triage、ioc_summary、executive_brief |
| 119 | generate_vex_report | VEX(Vulnerability Exploitability eXchange)レポートを生成 |
| 120 | generate_sigma_rule | SIGMA 検出ルールを生成 |
ガイド付き分析プロンプト(22 モード)
プロンプトは、構造化されたペルソナ、段階的なツール使用手順、証拠分類ルールを AI に設定する、事前構築済みの分析ワークフローです。AI クライアントでプロンプト名を指定すると有効になります。
マルウェア解析(9 個のプロンプト)
| プロンプト | ユースケース |
|---|---|
full_analysis_mode | 6 フェーズの包括的な解析:トリアージ → 逆アセンブル → 挙動 → ネットワーク → 永続化 → レポート |
malware_analysis_mode | 脅威の分類を含む、的を絞ったマルウェア解析 |
basic_analysis_mode | 初期評価と迅速な判定のための迅速なトリアージ |
apt_hunting_mode | APT に特化したハンティング:ラテラルムーブメント、永続化、データ流出 |
malware_defense_mode | 防御を重視:検出ルールと緩和策を生成 |
unpacking_mode | パッキング/難読化(Themida、VMProtect、UPX)を解析して回避 |
c2_extraction_mode | C2 通信インフラストラクチャを抽出して解析 |
ransomware_triage_mode | ランサムウェアに特化したトリアージ:暗号化の解析、鍵回復の評価 |
code_similarity_mode | バイナリのコード類似性と共通系統を比較 |
セキュリティ研究(6 個のプロンプト)
| プロンプト | ユースケース |
|---|---|
vulnerability_research_mode | バグハンティング:バッファーオーバーフロー、UAF、コマンドインジェクション |
crypto_analysis_mode | 暗号実装の解析と脆弱性の検出 |
firmware_analysis_mode | IoT/組み込みファームウェア:binwalk による抽出、UART 文字列、ハードコードされた認証情報 |
patch_analysis_mode | セキュリティパッチの解析と回帰テスト |
source_code_audit_mode | ソースコードのセキュリティ監査(Python、C、C++) |
autonomous_vuln_hunt_mode | 自律型の脆弱性ハンティングパイプライン |
CVE 研究とエクスプロイト開発(5 個のプロンプト)
| プロンプト | ユースケース |
|---|---|
taint_analysis_mode | データフローのテイント解析:ソースからシンクへの経路を自動検出 |
heap_exploit_mode | ヒープエクスプロイトの解析と PoC の生成 |
fuzzing_mode | ファジングキャンペーンのセットアップとクラッシュのトリアージ |
patch_diff_auto_mode | 1-day 脆弱性研究向けのパッチ差分を自動生成 |
cve_discovery_pipeline_mode | パッチ差分から動作するエクスプロイトまでの、CVE 発見パイプライン全体 |
その他(2 個のプロンプト)
| プロンプト | ユースケース |
|---|---|
game_analysis_mode | ゲームクライアントの解析:アンチチート検出、プロトコル RE、メモリ検査 |
report_generation_mode | MITRE ATT&CK の手法マッピングを含む、構造化されたセッションワークフロー |
プロンプトの仕組み: 各プロンプトは、構造化された解析担当者として AI に役割を設定します。AI が次に進む前に立ち止まって評価する必要がある Chain-of-Thought 推論チェックポイントと、推測を事実として述べることを防ぐ証拠の分類ルールが含まれています。すべての調査結果には、
OBSERVED(直接確認済み)、INFERRED(静的解析から論理的に導出)、POSSIBLE(さらなる検証が必要)のいずれかのラベルを付ける必要があります。
MCP リソース(11 個の URI)
リソースは読み取り専用のデータエンドポイントであり、AI クライアントは URI テンプレートを通じてアクセスできます。明示的なツール呼び出しを必要とせずに構造化データを提供し、ツールを補完します。
静的リソース
| URI | 説明 |
|---|---|
reversecore://guide | ファイルパスのルールとベストプラクティスを含む、ツール使用ガイド |
reversecore://guide/structures | 構造体の復元と相互参照解析に関する技術ガイド |
reversecore://tools | 登録済みの 177 個すべてのツールに関する完全なドキュメント |
reversecore://logs | アプリケーションログ(直近 100 行) |
動的リソース(バイナリごとの仮想ファイルシステム)
これらの URI はバイナリごとに解決され、必要に応じて対応する分析ツールを実行します。
| URI テンプレート | 説明 |
|---|---|
reversecore://{filename}/strings | バイナリからすべての文字列を抽出します |
reversecore://{filename}/iocs | IOC(IP、URL、メールアドレス、ハッシュ)を抽出します |
reversecore://{filename}/func/{address}/code | 関数の逆コンパイル済み疑似 C コード |
reversecore://{filename}/func/{address}/asm | 関数の逆アセンブル結果 |
reversecore://{filename}/func/{address}/cfg | Mermaid 形式の制御フローグラフ |
reversecore://{filename}/functions | バイナリ内のすべての関数の一覧 |
reversecore://{filename}/dormant_detector | Dormant Detector の分析結果 |
クイックスタート
オプション 1 — PyPI(最も簡単)
pip install reversecore-mcp
reversecore-mcp
前提条件: Radare2 をシステムにインストールしておく必要があります(
r2 --version)。YARA はyara-python経由で自動的にインストールされます。
オプション 2 — Docker(すべての機能を利用する場合におすすめ)
すべての分析エンジン(Radare2、r2ghidra、YARA、Binwalk、Sleuth Kit、GDB など)があらかじめインストールされています。
docker run -i --rm \
-v /path/to/your/samples:/app/workspace \
-e REVERSECORE_WORKSPACE=/app/workspace \
-e MCP_TRANSPORT=stdio \
ghcr.io/sjkim1127/reversecore_mcp:latest
オプション 3 — ソースからビルド(Docker Compose)
git clone https://github.com/sjkim1127/Reversecore_MCP.git
cd Reversecore_MCP
./scripts/run-docker.sh # auto-detects Intel / Apple Silicon
または、手動で実行します。
docker compose --profile x86 up -d # Intel/AMD
docker compose --profile arm64 up -d # Apple Silicon (M1/M2/M3)
オプション 4 — Python(ローカル開発)
git clone https://github.com/sjkim1127/Reversecore_MCP.git
cd Reversecore_MCP
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
python -m reversecore_mcp.server
ローカルモードの前提条件: Radare2 をシステムにインストールしておく必要があります(
r2 --version)。個々のツールバックエンド(YARA、LIEF、Capstone など)は pip 経由でインストールします。フォレンジック機能をすべて利用するには、Volatility3、Scapy、Sleuth Kit も必要です。
AI クライアントへの接続
IDE クライアントの設定(例:~/.cursor/mcp.json または claude_desktop_config.json)にサーバー設定を追加します。
⚡ オプション 1:Docker Exec モード(おすすめ)
Docker Compose でコンテナを実行している場合、このモードでは stdio を実行中のコンテナに直接接続します。起動時の遅延がなく、メモリが保持され、すべてのツールを利用できます。
{
"mcpServers": {
"Reversecore_MCP": {
"command": "docker",
"args": [
"exec",
"-i",
"-e",
"MCP_TRANSPORT=stdio",
"reversecore-mcp-arm64",
"python",
"-m",
"reversecore_mcp.server"
]
}
}
}
Intel/AMD をご利用の場合は、
reversecore-mcp-arm64をreversecore-mcpに置き換えてください。
🌐 オプション 2:SSE HTTP モード
ネットワーク経由でストリーミングする場合(Server-Sent Events):
{
"mcpServers": {
"Reversecore_MCP": {
"url": "http://localhost:8000/mcp/sse"
}
}
}
📦 オプション 3:Stdio モード(オンデマンド Docker)
セッションごとに、新しい独立したコンテナを起動します。
🍎 macOS
{
"mcpServers": {
"reversecore": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "/Users/YOUR_USERNAME/samples:/app/workspace",
"-e", "REVERSECORE_WORKSPACE=/app/workspace",
"-e", "MCP_TRANSPORT=stdio",
"ghcr.io/sjkim1127/reversecore_mcp:latest"
]
}
}
}
🐧 Linux
{
"mcpServers": {
"reversecore": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "/home/YOUR_USERNAME/samples:/app/workspace",
"-e", "REVERSECORE_WORKSPACE=/app/workspace",
"-e", "MCP_TRANSPORT=stdio",
"ghcr.io/sjkim1127/reversecore_mcp:latest"
]
}
}
}
🪟 Windows
{
"mcpServers": {
"reversecore": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "C:/samples:/app/workspace",
"-e", "REVERSECORE_WORKSPACE=/app/workspace",
"-e", "MCP_TRANSPORT=stdio",
"ghcr.io/sjkim1127/reversecore_mcp:latest"
]
}
}
}
⚠️ 重要 — Docker 内のファイルパス
ローカルフォルダーは、コンテナ内の
/app/workspaceにマウントされます。 ファイルを指定する際は、ローカルのフルパスではなく、必ずファイル名のみを使用してください。
❌ 誤り ✅ 正しい r2_decompile("/Users/john/samples/mal.exe")r2_decompile("mal.exe")
設定
すべての設定は、環境変数または .env ファイル(.env.example を参照)で指定できます。設定は REVERSECORE_ プレフィックスを使用する Pydantic BaseSettings で管理されます。
コア設定
| 変数 | デフォルト | 説明 |
|---|---|---|
MCP_TRANSPORT | stdio | トランスポートモード:stdio または http |
REVERSECORE_WORKSPACE | ./ (cwd) | 分析ワークスペースのディレクトリ |
REVERSECORE_READ_DIRS | "" | 読み取り専用の追加ディレクトリのカンマ区切りリスト |
REVERSECORE_STRICT_PATHS | false | 警告ではなく、パスが見つからない場合にエラーを発生させます |
REVERSECORE_STRUCTURED_ERRORS | false | エラーコード付きの構造化エラーレスポンスを有効にします |
REVERSECORE_DEFAULT_TOOL_TIMEOUT | 120 | ツール実行のデフォルトタイムアウト(秒) |
REVERSECORE_MAX_OUTPUT_SIZE | 10000000 | ツールの最大出力サイズ(バイト) |
REVERSECORE_FORENSICS_MAX_RECOVERED_BYTES | 500000000 | 1 つのディスク inode から復元する最大バイト数 |
HTTP モードの設定
| 変数 | デフォルト | 説明 |
|---|---|---|
MCP_HOST | 0.0.0.0 | バインドするホストインターフェース(API キーが設定されていない場合、自動的に 127.0.0.1 に上書きされます) |
MCP_PORT | 8000 | HTTP サーバーのポート |
MCP_API_KEY | (未設定) | HTTP 認証用の API キー(X-API-Key または Authorization: Bearer) |
REVERSECORE_RATE_LIMIT | 60 | 1 分あたりの最大リクエスト数(HTTP モードのみ、slowapi 経由) |
MAX_UPLOAD_SIZE | 100000000 | アップロードの最大サイズ(デフォルトは 100 MB) |
FILE_RETENTION_MINUTES | 1440 | アップロードファイルの保持期間(デフォルトは 24 時間) |
Radare2 の設定
| 変数 | デフォルト | 説明 |
|---|---|---|
REVERSECORE_R2_POOL_SIZE | 3 | プール内の Radare2 接続数 |
REVERSECORE_R2_POOL_TIMEOUT | 30 | プールから接続を取得する際のタイムアウト |
REVERSECORE_R2_EXTENSIONS | "" | r2 拡張クラスのカンマ区切りリスト(module:ClassName) |
REVERSECORE_GHIDRA_MAX_PROJECTS | 3 | キャッシュする r2ghidra デコンパイラプロジェクトの最大数 |
REVERSECORE_GHIDRA_EXTENSIONS | "" | Ghidra 拡張クラスのカンマ区切りリスト |
MAX_EMULATION_INSTRUCTIONS | 1000 | ESIL エミュレーション命令の最大数 |
サンドボックスの設定
| 変数 | デフォルト | 説明 |
|---|---|---|
REVERSECORE_SANDBOX_ENABLED | false | 動的解析ツールでのサンドボックス実行を有効にします |
REVERSECORE_SANDBOX_MODE | auto | サンドボックスモード:auto、host、container、disabled |
REVERSECORE_SANDBOX_DOCKER_IMAGE | reversecore-sandbox:latest | サンドボックス実行用の Docker イメージ |
REVERSECORE_SANDBOX_CPU_LIMIT | 1.0 | サンドボックスコンテナの CPU コア制限 |
REVERSECORE_SANDBOX_MEMORY_LIMIT | 512m | サンドボックスコンテナのメモリ制限 |
REVERSECORE_SANDBOX_PIDS_LIMIT | 100 | サンドボックスコンテナの PID 制限 |
REVERSECORE_SANDBOX_USER | nobody | サンドボックス実行用の非 root ユーザー |
ストレージとキュー
| 変数 | デフォルト | 説明 |
|---|---|---|
REDIS_URL | redis://localhost:6379/0 | タスクキューと結果キャッシュ用の Redis URL |
MEMORY_DB_PATH | ~/.reversecore_mcp/memory.db | AI メモリ SQLite データベースのパス |
REVERSECORE_LIEF_MAX_FILE_SIZE | 1000000000 | LIEF 解析の最大ファイルサイズ(1 GB) |
ロギング
| 変数 | デフォルト | 説明 |
|---|---|---|
LOG_LEVEL | INFO | ログの詳細度:DEBUG、INFO、WARNING、ERROR |
LOG_FILE | <tempdir>/reversecore/app.log | ログファイルのパス |
LOG_FORMAT | human | ログ形式:human(読みやすい形式)または json(構造化形式) |
プラグインと SAST
| 変数 | デフォルト | 説明 |
|---|---|---|
REVERSECORE_PLUGIN_DIRS | "" | 拡張プラグインを検索するディレクトリのカンマ区切りリスト |
REVERSECORE_SAST_RULES_PATH | "" | カスタム YAML SAST ルールファイルのパス |
セキュリティモデル
セキュリティは多層防御として実装され、複数の層で保護を行います。
入力とパスの安全性
| 制御 | 実装 |
|---|---|
| シェルインジェクションなし | すべてのサブプロセス呼び出しでリスト形式の引数を使用し、シェル文字列は使用しません(execution.py) |
| パストラバーサルの防止 | validate_file_path() と validate_binary_path() でシンボリックリンクを解決し、ワークスペース内にアクセスを制限します(validators.py) |
| TOCTOU の緩和 | bypass_cache=True フラグでパスを再検証し、競合状態を防ぎます |
| 入力のサニタイズ | 実行前にすべてのパラメーターをサニタイズします(security.py) |
| CSRF 対策 | ダッシュボードのフォームでは、トークンベースの CSRF 検証が必要です(dashboard/__init__.py) |
ネットワークと認証
| 制御 | 実装 |
|---|---|
| タイミング攻撃に安全な認証 | API キーの比較に secrets.compare_digest() を使用(web/auth.py) |
| 認証ベクトルの制限 | X-API-Key と Authorization: Bearer ヘッダーのみ受け付けます。クエリパラメーターや Cookie は受け付けません |
| ループバックのみのフォールバック | MCP_API_KEY が設定されていない場合、HTTP アクセスは 127.0.0.1 に制限されます(web/middleware.py) |
| レート制限 | slowapi による、設定可能な分単位の制限 |
| セキュリティヘッダー | すべての HTTP レスポンスに HSTS、X-Content-Type-Options、X-Frame-Options、CSP を設定します(web/middleware.py) |
最小限の /health | 公開エンドポイントは {"status": "alive"} のみを返します。詳細情報は認証後に確認できます(web/endpoints.py) |
コンテナーとランタイム
| 制御 | 実装 |
|---|---|
| 非 root での実行 | 最小限のケイパビリティで appuser(UID 1000)として実行します |
| リソース制限 | Docker Compose により CPU(2.0)とメモリ(4 GB)の制限を適用します |
| サンドボックス分離 | 動的解析ツール向けの、任意のコンテナー型サンドボックス |
CI/CD セキュリティゲート
| 制御 | 実装 |
|---|---|
| シークレットのスキャン | Gitleaks を各コミットで実行します(pre-commit フックと CI) |
| SAST | 各コミットで Bandit がすべての Python コードをスキャンします |
| CodeQL | main へのプッシュごとに GitHub CodeQL の静的解析を実行します |
| 依存関係の監査 | 各プッシュで pip-audit を実行し、未レビューの CVE がないことを確認します |
| コンテナーのスキャン | Trivy が Docker イメージの脆弱性(LOW から CRITICAL まで)をスキャンします |
| エクスプロイト安全性ゲート | POC テンプレートを Bandit でスキャンし、Hypothesis による DAST ファジングを実行し、コンテナー分離を検証します |
構造化されたエラー処理
17 種類すべての例外クラスに、プログラムから処理するための RCMCP-E* エラーコードが付与されています。階層の全容については、エラー処理を参照してください。
開発
セットアップ
git clone https://github.com/sjkim1127/Reversecore_MCP.git
cd Reversecore_MCP
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
pip install -r requirements-dev.txt
pre-commit install # installs Ruff, Bandit, Gitleaks hooks
テスト
# Full test suite with coverage report
pytest tests/ -v
# Unit tests only (fast, no external dependencies)
pytest tests/unit/ -v
# Integration tests (requires Docker)
pytest tests/integration/ -v
# Run with coverage threshold enforcement
pytest tests/unit/ --cov=reversecore_mcp --cov-fail-under=80
# Run a specific test
pytest tests/unit/test_cli_tools.py::TestRunFile::test_success -v
# Security boundary tests
pytest tests/ -m security -v
# Benchmarks
pytest tests/ -m benchmark -v
テスト状況:
- ✅ 1,957 件のユニットテストが Python 3.10/3.11/3.12 で成功
- 📊 コードカバレッジ 87%(CI では 80%を最低基準として適用)
- 🔒 Bandit の検出結果はゼロ
- ⚡
pytest-asyncioによる完全な非同期テストスイート
テストマーカー:
| マーカー | 用途 |
|---|---|
@pytest.mark.unit | 高速なユニットテスト |
@pytest.mark.integration | Docker または外部ツールが必要なテスト |
@pytest.mark.slow | 実行時間の長いテスト |
@pytest.mark.benchmark | パフォーマンスベンチマーク |
@pytest.mark.security | セキュリティ境界の検証テスト |
コード品質
ruff check reversecore_mcp/ # Lint (E, W, F, I, B, C4, UP rules)
ruff format reversecore_mcp/ # Format
mypy reversecore_mcp/ # Type check (0 errors across 108 files)
bandit -r reversecore_mcp/ # Security scan (all severities)
pip-audit # Dependency CVE scan
Pre-commit フック
以下のフックが各コミットで自動的に実行されます。
- Ruff — 自動修正付きのリンティングとフォーマットチェック
- trailing-whitespace — 行末の空白を削除
- end-of-file-fixer — ファイル末尾を改行で終わるように修正
- check-yaml / check-json — YAML/JSON 構文を検証
- check-added-large-files — 1 MB を超えるファイルをブロック
- check-merge-conflict — 未解決のマージマーカーを検出
- detect-private-key — 誤ってキーをコミットするのを防止
- Bandit — Python のセキュリティスキャン
CI/CD パイプライン
main へのプッシュごとに 11 個のパイプラインジョブが起動します。デプロイ前にすべてのジョブが成功する必要があります。
Lint & Security Gate Unit Tests (Python Matrix)
├─ Gitleaks (secret scan) ├─ pytest 3.10 --cov-fail-under=80
├─ Hadolint (Dockerfile lint) ├─ pytest 3.11 --cov-fail-under=80
├─ Ruff check + format └─ pytest 3.12 --cov-fail-under=80
├─ Mypy type check (108 files)
├─ Bandit (all severities) Wheel Smoke Test
├─ pip-audit (no CVEs) └─ Build wheel → install in /tmp
└─ Security boundary tests → verify plugin discovery
→ assert __file__ under sys.prefix
CodeQL Analysis
└─ Python SAST Docker Verification
├─ Build reversecore-mcp:ci
Exploit Safety Gate ├─ Trivy container scan
├─ Bandit on POC templates ├─ Image size check (< 5 GB)
├─ Hypothesis DAST fuzzing ├─ CLI tool verification
├─ Performance benchmarks ├─ Integration tests in container
└─ Container isolation test └─ E2E tool invocation
In-Container Smoke Test Build Base Image (amd64 + arm64)
├─ Copy test ELF into container ├─ Compile YARA 4.3.1
└─ Run scripts/smoke_test.py ├─ Compile Radare2 6.0.4
├─ Compile r2ghidra
Deploy (amd64 + arm64) └─ Push to GHCR
├─ Build app image
├─ Push to GHCR Merge Manifests
└─ Trivy rescan on published └─ Multi-arch manifest → :latest
バイパス禁止ポリシー: CI/CD の失敗をパイプライン設定の変更によって解決することはありません。根本原因は常にソースコードまたは依存関係を直接修正して解消します。
Docker ビルドアーキテクチャ
Docker ビルドでは、ビルド時間を抑えるために 2 層構成を採用しています。
レイヤー 1:ベースイメージ(Dockerfile.base)
ビルドに時間がかかり、変更頻度の低い依存関係をすべてソースからコンパイルするマルチステージビルドです。
compiler-toolchain (python:3.12-slim-bookworm + build tools)
├── compiler-yara (YARA 4.3.1 from source) [parallel]
├── compiler-r2 (Radare2 6.0.4 from source) [parallel]
│ └── compiler-r2ghidra (r2ghidra plugin) [sequential]
└── compiler-pip (pip install into /opt/venv) [parallel]
base (final runtime: python:3.12-slim-bookworm)
├── Runtime packages: file, binutils, gdb, binwalk, graphviz, nasm, sleuthkit
├── /opt/yara (compiled YARA)
├── /opt/radare2 (compiled r2 + r2ghidra)
├── /opt/venv (Python packages)
└── Non-root user: appuser (UID 1000)
このイメージは、ツールのバージョンが変更された場合にのみ再ビルドされます。ビルド時間:約 12 分。
レイヤー 2:アプリケーションイメージ(Dockerfile)
ベースイメージを継承し、アプリケーションコードをコピーします。
FROM base image
├── COPY reversecore_mcp/ (application code)
├── COPY scripts/ (smoke test, benchmarks)
├── pip install any new requirements
├── Security package upgrades
└── CMD ["python", "-m", "reversecore_mcp.server"]
ビルド時間:約 60 秒。
Docker Compose
アーキテクチャ別のプロファイルを持つ3つのサービスです。
| サービス | プロファイル | 説明 |
|---|---|---|
reversecore-mcp | default, x86 | Intel/AMD x86_64 |
reversecore-mcp-arm64 | arm64, macos | Apple Silicon ARM64 |
redis | すべてのプロファイル | タスクキューとキャッシュ用の Redis 7 Alpine |
リソース制限:コンテナあたり CPU コア 2.0、メモリ 4 GB。
システム要件
| コンポーネント | 最小要件 | 推奨要件 |
|---|---|---|
| CPU | 4 コア | 8 コア以上 |
| RAM | 8 GB | 16 GB |
| ストレージ | 20 GB | 50 GB SSD |
| OS | Linux / macOS | Docker 環境(任意の OS) |
| Docker | 20.10+ | 24.0+ |
| Python(ローカルモード) | 3.10 | 3.11 または 3.12 |
プロジェクト構成
reversecore_mcp/
├── core/ # Infrastructure layer (37 modules)
│ ├── config.py # Pydantic BaseSettings (34+ env vars)
│ ├── exceptions.py # Exception hierarchy (17 classes, RCMCP-E* codes)
│ ├── security.py # Input sanitization & command arg validation
│ ├── validators.py # Path validators (TOCTOU-hardened, symlink-safe)
│ ├── r2_pool.py # Thread-safe Radare2 connection pool
│ ├── r2_helpers.py # Structured Radare2 output parsing
│ ├── metrics.py # Per-tool timing, counts, error rates, cache stats
│ ├── decorators.py # @log_execution, @track_metrics
│ ├── error_handling.py # @handle_tool_errors decorator
│ ├── error_formatting.py # Structured error formatting
│ ├── execution.py # Safe subprocess with timeout/output limits
│ ├── command_spec.py # Command specifications
│ ├── memory.py # Async SQLite AI memory store
│ ├── mitre_mapper.py # MITRE ATT&CK mapping engine
│ ├── evidence.py # Evidence classification (OBSERVED/INFERRED/POSSIBLE)
│ ├── resilience.py # Retry, circuit-breaker, timeout patterns
│ ├── task_queue.py # Background task queue (Redis + arq)
│ ├── extension_registry.py # Plugin registration system
│ ├── arch_registry.py # Multi-arch mapping (x86/ARM/MIPS/RISC-V/PPC)
│ ├── result_cache.py # SHA256-based tool result caching
│ ├── analysis_cache.py # Multi-level decompilation cache (Redis + SQLite)
│ ├── result.py # ToolSuccess / ToolError Pydantic models
│ ├── loader.py # Dynamic tool module loader
│ ├── plugin.py # Plugin base class
│ ├── extension.py # Extension base class
│ ├── container.py # Container/sandbox execution
│ ├── audit.py # Audit logging
│ ├── binary_cache.py # Binary file caching
│ ├── json_utils.py # orjson-backed JSON (3-5x faster)
│ ├── logging_config.py # Loguru logging configuration
│ ├── report_generator.py # Report rendering (Markdown, PDF)
│ ├── resource_manager.py # MCP resource lifecycle
│ └── sast/ # Source code scanners
│ ├── python_ast_scanner.py # Python AST vulnerability scanner
│ ├── regex_scanner.py # C/C++ regex vulnerability scanner
│ ├── rule_manager.py # SAST rule loader
│ └── default_rules.yaml # Default scanning rules
│
├── tools/ # MCP tool implementations (177 tools)
│ ├── analysis/ # Static analysis (24 tools)
│ │ ├── static_analysis.py # file, strings, binwalk
│ │ ├── lief_tools.py # LIEF binary parser
│ │ ├── capa_tools.py # CAPA capability detection
│ │ ├── die_tools.py # Detect It Easy packer detection
│ │ ├── diff_tools.py # Binary diffing
│ │ ├── emulation_tools.py # ESIL emulation
│ │ ├── fuzz_tools.py # Fuzzing harness generator
│ │ ├── fuzzing_campaign.py # Full fuzzing campaign runner
│ │ ├── symbolic_analysis.py # angr symbolic execution
│ │ ├── signature_tools.py # Library signature matching
│ │ ├── source_auditor.py # SAST (Python + C/C++)
│ │ ├── crash_triage.py # GDB crash triage
│ │ ├── taint_analysis.py # Source→sink taint tracing
│ │ ├── advanced_yara.py # Advanced YARA generation
│ │ ├── patch_vuln_inference.py # Patch vulnerability inference
│ │ └── cache_tools.py # Analysis cache management
│ │
│ ├── radare2/ # Disassembly & decompilation (30 tools)
│ │ ├── radare2_mcp_tools.py # Core Radare2 tool set
│ │ ├── r2ghidra_tools.py # r2ghidra decompiler (cached)
│ │ ├── r2_analysis.py # Deep function analysis
│ │ ├── r2_db.py # SQLite annotation + cache DB
│ │ ├── r2_esil_simulator.py # Multi-arch ESIL simulator
│ │ └── r2_session.py # Stateful analysis sessions
│ │
│ ├── malware/ # Threat detection (9 tools)
│ │ ├── dormant_detector.py # Backdoor/logic bomb detection
│ │ ├── ioc_tools.py # IOC extraction
│ │ ├── yara_tools.py # YARA scanning
│ │ ├── adaptive_vaccine.py # YARA rule + patch generation
│ │ ├── vulnerability_hunter.py # Dangerous API detection
│ │ ├── autonomous_hunter.py # Autonomous vuln hunting pipeline
│ │ ├── heap_exploit.py # Heap exploitation analysis
│ │ ├── poc_generator.py # PoC exploit generation
│ │ └── rop_builder.py # ROP chain construction
│ │
│ ├── forensics/ # Digital forensics (22 tools)
│ │ ├── memory.py # Volatility3 memory forensics
│ │ ├── network.py # Scapy PCAP analysis
│ │ ├── disk.py # Sleuth Kit disk forensics
│ │ └── artifact.py # Browser/registry/event log analysis
│ │
│ ├── report/ # Report generation (14 tools)
│ │ ├── report_mcp_tools.py # MCP-registered report tools
│ │ ├── report_tools.py # Report rendering logic
│ │ ├── session.py # Session state management
│ │ ├── converter.py # Format conversion (Markdown → PDF/HTML)
│ │ ├── email.py # SMTP report delivery
│ │ ├── sigma_generator.py # SIGMA rule generation
│ │ └── vex_generator.py # VEX report generation
│ │
│ └── common/ # Shared utilities (20 tools)
│ ├── file_operations.py # File ops, workspace management
│ ├── server_tools.py # Server health, tool metrics
│ ├── memory_tools.py # AI memory management (11 tools)
│ ├── patch_explainer.py # Binary patch explanation
│ └── assembler.py # Keystone assembler
│
├── prompts/ # AI reasoning prompts (22 modes)
│ ├── malware.py # 9 malware analysis prompts
│ ├── security.py # 6 security research prompts
│ ├── cve_research.py # 5 CVE/exploit research prompts
│ ├── game.py # Game client analysis prompt
│ ├── report.py # Report generation prompt
│ ├── server_health.py # Server inspection prompts
│ └── common.py # Shared constants (DOCKER_PATH_RULE, LANGUAGE_RULE)
│
├── dashboard/ # Web dashboard (FastAPI + HTMX)
│ ├── templates/ # Jinja2 templates with HTMX fragments
│ └── static/ # htmx.min.js (local, CSP-compliant)
│
├── web/ # HTTP transport layer
│ ├── auth.py # API key authentication middleware
│ ├── middleware.py # Security headers, loopback restriction
│ └── endpoints.py # /health, file upload, dashboard routes
│
├── resources.py # 11 MCP resources (static + dynamic per-binary)
└── server.py # FastMCP server entry point
その他のディレクトリ:
tests/
├── unit/ # 1,957 unit tests
├── integration/ # Docker-based integration tests
├── fixtures/ # Test binaries, YARA rules, sample data
└── conftest.py # Shared pytest fixtures
scripts/
├── smoke_test.py # Multi-layer in-container smoke test
├── check_release_metadata.py # Version consistency validation
├── fetch_test_binaries.py # Download test fixtures
├── run-docker.sh # Auto-detect architecture and start
└── ... # Benchmarks, analysis scripts
docs/
├── getting-started/ # Installation guide
├── development/ # Architecture, contributing, testing guides
├── api/ # Tool and module reference
└── user-guide/ # Analysis workflows
エラー処理
すべてのカスタム例外は ReversecoreError を継承し、構造化されたエラーコードを持ちます。
| 例外 | コード | 種類 | 発生条件 |
|---|---|---|---|
ReversecoreError | RCMCP-E000 | UNKNOWN_ERROR | すべてのエラーの基底クラス |
ValidationError | RCMCP-E001 | VALIDATION_ERROR | 無効な入力、不正なパラメーター |
ExecutionTimeoutError | RCMCP-E002 | TIMEOUT_ERROR | ツールがタイムアウトを超過 |
ToolNotFoundError | RCMCP-E003 | TOOL_ERROR | 必須の CLI ツールがインストールされていない |
OutputLimitExceededError | RCMCP-E004 | OUTPUT_ERROR | 出力が最大サイズを超過 |
ToolExecutionError | RCMCP-E005 | EXECUTION_ERROR | サブプロセスがゼロ以外を返した |
BinaryAnalysisError | RCMCP-E100 | BINARY_ANALYSIS_ERROR | 一般的なバイナリ解析の失敗 |
DecompilationError | RCMCP-E101 | DECOMPILATION_ERROR | r2ghidra の逆コンパイルに失敗 |
DisassemblyError | RCMCP-E102 | DISASSEMBLY_ERROR | Radare2 の逆アセンブルに失敗 |
StructureRecoveryError | RCMCP-E103 | STRUCTURE_RECOVERY_ERROR | C 構造体の復元に失敗 |
SignatureGenerationError | RCMCP-E104 | SIGNATURE_GENERATION_ERROR | YARA/シグネチャの生成に失敗 |
EmulationError | RCMCP-E105 | EMULATION_ERROR | ESIL エミュレーションに失敗 |
ToolTimeoutError | RCMCP-E200 | TOOL_TIMEOUT_ERROR | 外部ツールがタイムアウト |
GhidraConnectionError | RCMCP-E201 | GHIDRA_CONNECTION_ERROR | r2ghidra の接続に問題が発生 |
Radare2Error | RCMCP-E202 | RADARE2_ERROR | Radare2 コマンドに失敗 |
WorkspaceError | RCMCP-E300 | WORKSPACE_ERROR | ワークスペースファイルへのアクセスエラー |
SecurityViolationError | RCMCP-E301 | SECURITY_VIOLATION | セキュリティポリシー違反 |
PathTraversalError | RCMCP-E302 | PATH_TRAVERSAL | パストラバーサルの試みを検出 |
AI クライアントは error_code フィールドを使用して、失敗をプログラムから処理し、再試行するか、代替ツールを試すか、エラーをユーザーに報告するかを判断できます。
新しいツールの追加
新しい MCP ツールを追加するには、次のパターンに従います。
# reversecore_mcp/tools/analysis/my_tool.py
from reversecore_mcp.core.decorators import log_execution
from reversecore_mcp.core.result import ToolResult, success, failure
from reversecore_mcp.core.security import validate_file_path
@log_execution()
async def my_analysis_tool(
file_path: str,
option: str | None = None,
) -> ToolResult:
"""Analyze a binary for X.
Args:
file_path: Path to the binary file (relative to workspace).
option: Optional analysis option.
Returns:
ToolResult with status='success' and structured content.
"""
try:
safe_path = validate_file_path(file_path)
result = await perform_analysis(safe_path)
return success({"result": result})
except Exception as e:
return failure(
error_code="RCMCP-E100",
message=str(e),
hint="Check that the file exists and is a valid binary.",
)
次に、該当するプラグインの __init__.py に登録し、tests/unit/ にテストを追加します。
コントリビューション
- リポジトリをフォークします
- フィーチャーブランチを作成します:
git checkout -b feat/my-feature - コードと併せてテストを作成します — カバレッジは 80% を下回ってはなりません
- すべてのチェックに合格することを確認します:
pytest、ruff check、mypy、bandit - 明確な説明を添えてプルリクエストを作成します
コーディング規約、docstring の規約(Google スタイル)、プルリクエストのチェックリストについては、コントリビューションガイドをお読みください。
ドキュメント
| ドキュメント | 説明 |
|---|---|
| インストールガイド | すべての環境に対応した詳細なセットアップ手順 |
| アーキテクチャガイド | システム設計とコンポーネントの詳細 |
| コントリビューションガイド | コーディング規約、docstring、PR のワークフロー |
| テストガイド | テストパターン、フィクスチャ、カバレッジ |
| API リファレンス | ツールとモジュールのリファレンス |
| ユーザーガイド | 解析ワークフロー |
使用例
例 1:基本的なマルウェアのトリアージ
User: "Analyze this suspicious file sample.exe"
AI calls:
1. run_file("sample.exe") → PE32 executable, x86, MSVC
2. detect_packer("sample.exe") → Not packed
3. extract_iocs("sample.exe") → 3 IPs, 2 URLs, 1 mutex
4. run_capa("sample.exe") → "creates persistence", "encrypts data"
5. dormant_detector("sample.exe") → 2 orphan functions with network calls
6. generate_yara_rule("sample.exe") → Detection rule generated
AI response: "This PE32 binary shows ransomware-like behavior. CAPA detected
encryption and persistence capabilities. I found 2 hidden network functions
that may serve as a backup C2 channel. Here's a YARA rule for detection..."
例 2:汚染分析による脆弱性調査
User: "Find exploitable bugs in this network daemon"
AI activates: taint_analysis_mode
AI calls:
1. taint_trace("daemon", verify_with_angr=True)
→ Found 3 source→sink paths:
recv() → strcpy() [CWE-120, CONFIRMED by angr]
read() → sprintf() [CWE-134, LIKELY]
getenv() → system() [CWE-78, POSSIBLE]
2. vulnerability_hunter("daemon")
→ 12 dangerous API calls, 4 exploitable patterns
3. generate_poc_exploit(target="daemon", vuln_type="bof", offset=128)
→ Python exploit script generated
AI response: "I found a confirmed stack buffer overflow where recv() data
flows directly into strcpy() at 0x40123C. angr proved the path is reachable.
Here's a working PoC..."
例 3:デジタルフォレンジック調査
User: "Analyze this memory dump from a compromised server"
AI calls:
1. memory_list_processes("memdump.raw")
→ 47 processes, 2 with suspicious names
2. memory_detect_injections("memdump.raw")
→ Code injection detected in PID 1842 (svchost.exe)
3. memory_extract_strings("memdump.raw", pid=1842)
→ C2 domain strings extracted
4. artifact_correlate_ioc(artifacts={"domains": ["evil-c2.com"]})
→ Matches known APT group IOCs
5. create_analysis_report(template_type="full_analysis")
→ PDF report with timeline and MITRE ATT&CK mapping
例 4:1-day 調査のためのパッチ差分分析
User: "Compare the patched and unpatched versions to find what was fixed"
AI activates: patch_diff_auto_mode
AI calls:
1. diff_binaries("libfoo-1.0.so", "libfoo-1.1.so")
→ 3 functions changed, 1 new function
2. patch_diff_1day("libfoo-1.0.so", "libfoo-1.1.so")
→ Automated analysis: bounds check added at parse_header()
3. r2_decompile("libfoo-1.0.so", "parse_header")
→ Decompiled vulnerable version (no bounds check)
4. r2_decompile("libfoo-1.1.so", "parse_header")
→ Decompiled patched version (memcpy size limited)
AI response: "The patch adds a bounds check in parse_header() at 0x12340.
The old version copies user-controlled length bytes via memcpy without
validation, creating a heap buffer overflow (CWE-122)."
マルチアーキテクチャ対応
arch_registry.py モジュールは、アーキテクチャ名を Radare2 の設定パラメーターにマッピングします。これにより、手動で設定しなくても、ツールをさまざまな CPU アーキテクチャで動作させることができます。
| アーキテクチャ | キー | r2 アーキテクチャ | ビット幅 | PC レジスター | SP レジスター |
|---|---|---|---|---|---|
| Intel 32 ビット | x86 | x86 | 32 | eip | esp |
| Intel/AMD 64 ビット | x86_64 | x86 | 64 | rip | rsp |
| ARM 32 ビット / Thumb | arm32 | arm | 16, 32 | r15 | r13 |
| ARM 64 ビット(AArch64) | arm64 | arm | 64 | pc | sp |
| MIPS | mips | mips | 32, 64 | pc | sp |
| RISC-V | riscv | riscv | 32, 64 | pc | sp |
| PowerPC | ppc | ppc | 32, 64 | pc | r1 |
エイリアスの解決は自動的に行われます。
amd64→x86_64aarch64→arm64bits=64を指定したarm→arm64bits=16またはbits=32を指定したarm→arm32
Radare2_esil_emulate、assemble_instructions、r2_simulate_patch などのツールは、このレジストリーを使用して、任意のターゲットバイナリーに適した分析環境を設定します。
結果キャッシュシステム
2 層のキャッシュにより、重複する計算を最小限に抑えます。
ツール結果キャッシュ(result_cache.py)
@cache_tool_result デコレーターは、バイナリーファイルの SHA256 ハッシュとツールのキーワード引数に基づいて、任意のツールの出力をキャッシュします。
Cache key = SHA256( "<tool_name>::{sorted_json_kwargs}" )
ストレージバックエンド: r2_db.py を介した SQLite データベースです。get_cached_result() および set_cached_result() ツールから利用できます。
メトリクス: キャッシュヒットとキャッシュミスは、metrics_collector.record_cache_hit() および metrics_collector.record_cache_miss() を介して追跡され、get_tool_metrics ツールで確認できます。
分析キャッシュ(analysis_cache.py)
計算コストの高い逆コンパイル結果専用の、複数レベルのキャッシュです。
| レベル | バックエンド | キー形式 | TTL | 用途 |
|---|---|---|---|---|
| L1 | Redis | ghidra:decompile:{file_hash}:{function_address}:{decompiler} | 1 時間(3600s) | 高速で、セッション間で共有 |
| L2 | SQLite | テーブル decompilation_cache | 永続 | Redis の再起動後も保持 |
インポート/エクスポート: export_analysis_cache ツールと import_analysis_cache ツールを使うと、キャッシュの状態を rcpack ファイルに保存したり、そこから読み込んだりして、環境間で共有できます。
AI メモリーシステム
AI メモリーシステム(memory_tools.py + core/memory.py)は、セッションをまたいで分析結果を永続的に保存し、検索できるようにします。これにより、AI は次のことができます。
- バイナリーについて以前に見つけた内容を記憶する
- 異なるサンプル間で調査結果を相互参照する
- トピック、マルウェアファミリー、手法ごとにセッションをタグ付けして検索する
仕組み
create_memory_session("analysis of ransomware sample")
│
├── store_analysis_finding("Found AES-256 encryption at 0x401000", tags=["crypto", "ransomware"])
├── store_analysis_finding("C2 beacon interval: 30 seconds", tags=["c2", "network"])
└── tag_analysis_session(tags=["ransomware", "financial-sector"])
# Later, in a different session:
query_analysis_memories("ransomware encryption")
→ Returns previous findings about ransomware encryption patterns
get_binary_analysis_context("sample.exe")
→ Returns all findings ever recorded for this binary
ストレージ: MEMORY_DB_PATH で設定したパス(デフォルト:~/.reversecore_mcp/memory.db)にある非同期 SQLite データベースです。
移植性: export_memory_store と import_memory_store を使うと、メモリーデータベース全体を環境間で転送できます。
Web ダッシュボード
HTTP モード(MCP_TRANSPORT=http)で実行すると、http://localhost:8000/dashboard から Web ダッシュボードを利用できます。以下の機能を提供します。
- ドラッグ&ドロップによるバイナリーのアップロード
- リアルタイムの分析状況
- 関数リストと逆アセンブリ表示のインタラクティブな操作
- IOC 抽出結果
- サーバーの稼働状況の監視
技術スタック: FastAPI + Jinja2 テンプレート + HTMX(CSP への準拠のため、CDN に依存せず dashboard/static/ からローカルに読み込みます)。
セキュリティ機能:
- 状態を変更するすべてのフォームで CSRF トークンを使用
- Jinja2 の自動エスケープを有効化
- 表示前に
html.escape()ですべてのユーザー入力をサニタイズ validate_file_path()によるパストラバーサル対策
デプロイ
本番環境チェックリスト
本番環境にデプロイする前に:
| 項目 | 方法 |
|---|---|
| API キーを設定する | MCP_API_KEY=<strong-random-key> |
| root 以外のユーザーを使用する | 組み込み:コンテナは appuser(UID 1000)として実行されます |
| リソース制限を設定する | デフォルト:docker-compose.yml で CPU 2 個/RAM 4 GB |
| 構造化ログを有効にする | ログ集約には LOG_FORMAT=json を設定します |
| Redis を設定する | タスクキューとキャッシュには REDIS_URL=redis://<host>:6379/0 を設定します |
| ワークスペースのパスを設定する | REVERSECORE_WORKSPACE=/path/to/isolated/directory |
| レート制限を確認する | REVERSECORE_RATE_LIMIT=60(リクエスト/分。必要に応じて調整してください) |
| サンドボックスを有効にする | 動的解析を隔離するには REVERSECORE_SANDBOX_ENABLED=true を設定します |
ヘルスチェック
サーバーは、オーケストレーション向けに HTTP ヘルスチェックエンドポイントを提供します。
# Liveness (always 200 if process is running)
curl http://localhost:8000/health/live
# Readiness (checks tool availability)
curl http://localhost:8000/health/ready
# Full health (requires API key if configured)
curl -H "X-API-Key: <key>" http://localhost:8000/health
これらのエンドポイントは API キー認証の対象外であるため、ロードバランサーやコンテナオーケストレーターから状態を確認できます。
コンテナのヘルスチェック
Docker イメージには、30 秒ごとにポート 8000 への TCP 接続を確認する組み込みの HEALTHCHECK 命令が含まれています。Docker と Kubernetes は、異常なコンテナを自動的に再起動します。
トラブルシューティング
よくある問題
ツールが RCMCP-E003: Tool not found を返す
必要な CLI ツールが環境にインストールされていません。
解決策: Docker を使用している場合は、ツールがベースイメージに含まれていることを確認してください。
docker exec reversecore-mcp-arm64 which r2 yara binwalk tsk_recover gdb
ローカルの Python インストールを使用している場合は、不足しているツールをインストールしてください。
# macOS
brew install radare2 yara binwalk sleuthkit
# Ubuntu/Debian
apt install radare2 yara binwalk sleuthkit
タイムアウトエラー(RCMCP-E002 / RCMCP-E200)
解析が設定されたタイムアウト時間を超えました。
解決策: タイムアウト時間を延長してください。
export REVERSECORE_DEFAULT_TOOL_TIMEOUT=300 # 5 minutes
大きなバイナリ(>100 MB)の場合は、クイックスキャン版の使用を検討してください。
run_capaの代わりにrun_capa_quickdetect_packer_deepの代わりにdetect_packer
パストラバーサルエラー(RCMCP-E302)
ワークスペースディレクトリの外にあるファイルを参照しました。
解決策: まずファイルをワークスペースにコピーしてください。
copy_to_workspace("/path/to/file.exe")
または、追加のディレクトリを読み取り専用でマウントしてください。
export REVERSECORE_READ_DIRS=/opt/samples,/mnt/evidence
Apple Silicon で Docker コンテナが起動しない
ARM64 プロファイルを使用していることを確認してください。
docker compose --profile arm64 up -d
または、自動検出スクリプトを使用してください。
./scripts/run-docker.sh
Redis の接続が拒否される
タスクキューには、Redis インスタンスが実行されている必要があります。
解決策: メインサービスとともに Redis を起動してください。
docker compose --profile arm64 up -d # Starts both reversecore and redis
または、REDIS_URL を設定せずに Redis 依存機能を無効にしてください。
r2ghidra の逆コンパイル結果が空になる
通常、これは先に関数の解析が行われていないことを意味します。
解決策: 逆コンパイルの前に解析を実行してください。
Radare2_analyze_binary("sample.exe")
Radare2_decompile_function("sample.exe", "main")
FAQ
これは Ghidra や IDA Pro の代わりになりますか?
いいえ。このプロジェクトは代替ではなく、補完するものです。逆アセンブルには、Radare2 に組み込まれた Ghidra のデコンパイラエンジンである r2ghidra を使用します。GUI は提供せず、フル機能の逆アセンブラのような対話型の解析ワークフローも備えていません。AI アシスタントがプログラムから解析タスクを実行できるようにすることを目的としています。
別途 Ghidra または JDK をインストールする必要がありますか?
いいえ。r2ghidra プラグインは、Ghidra のデコンパイラエンジンを Radare2 に直接組み込みます。JDK も Ghidra のインストールも、Ghidra プロジェクトファイルも必要ありません。r2ghidra プラグインを組み込んでコンパイルした r2 だけで十分です。
どの MCP クライアントに対応していますか?
Model Context Protocol の仕様を実装したクライアントであれば、どれでも利用できます。Claude Desktop、Cursor、Windsurf、Google Antigravity でテスト済みです。サーバーは stdio と HTTP/SSE の両方のトランスポートに対応しています。
Linux/macOS で Windows PE ファイルを解析できますか?
はい。静的解析(逆アセンブル、デコンパイル、文字列抽出、IOC 抽出、YARA スキャン)は、ホスト OS に関係なく、あらゆるファイル形式で動作します。動的解析(エミュレーション、ファジング)には、対象アーキテクチャによって制限がある場合があります。
このツールでマルウェアを解析する際の安全性はどの程度ですか?
Docker コンテナによって分離されます。非 root ユーザーで実行され、CI ではデフォルトでネットワークが無効になり、リソース制限も適用されます。実際のマルウェアを解析する場合は、専用の VM で実行するか、サンドボックス機能(REVERSECORE_SANDBOX_ENABLED=true)を使用することをお勧めします。静的解析ツール(r2、YARA、strings)が対象のバイナリを実行することはありません。
ファイルサイズの上限はどのくらいですか?
デフォルトの上限:
- アップロード:100 MB(
MAX_UPLOAD_SIZE) - LIEF の解析:1 GB(
REVERSECORE_LIEF_MAX_FILE_SIZE) - ツールの出力:10 MB(
REVERSECORE_MAX_OUTPUT_SIZE)
すべての上限は環境変数で設定できます。
謝辞
このプロジェクトは、多くのオープンソースプロジェクトの成果を基盤としています。
| プロジェクト | Reversecore MCP における役割 |
|---|---|
| Radare2 | 逆アセンブル、エミュレーション、バイナリ解析 |
| r2ghidra | Radare2 用 Ghidra デコンパイラエンジン |
| FastMCP | MCP サーバーフレームワーク |
| YARA | マルウェア検出のためのパターンマッチング |
| LIEF | バイナリ形式の解析(PE、ELF、Mach-O) |
| CAPA | Mandiant FLARE による機能検出 |
| angr | シンボリック実行エンジン |
| Capstone | 逆アセンブルフレームワーク |
| Keystone | アセンブリフレームワーク |
| pwntools | エクスプロイト開発ツールキット |
| ROPgadget | ROP ガジェット検索ツール |
| Volatility3 | メモリフォレンジックフレームワーク |
| Scapy | ネットワークパケット解析 |
| Sleuth Kit | ディスクフォレンジックツールキット |
| Binwalk | ファームウェア解析 |
| Detect It Easy | パッカー/コンパイラの検出 |
ライセンス
MIT — 詳細は LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。