MITRE ATT&CK について
MITRE ATT&CKは、ATT&CKデータを構造化して扱うセキュリティアナリスト、脅威ハンター、開発者向けのMCPサーバーです。Enterprise、Mobile、ICSをカバーし、インデックス検索、キャッシュ、stdioまたはHTTP接続に対応します。
主な機能
- 01Enterprise、Mobile、ICSのデータ
- 02手法、戦術、グループ、ソフトウェアの検索
- 03緩和策と関連情報の照会
- 04条件付き更新に対応するデータキャッシュ
- 05stdioとHTTPのトランスポート
活用シーン
- 01脅威グループが使う手法の検索
- 02戦術に関連する手法の特定
- 03手法に対する緩和策の確認
- 04自動化ワークフローからのATT&CKデータ照会
MCP 対応
手法、戦術、グループ、ソフトウェア、緩和策を照会するツールを通じて、MCPクライアントにMITRE ATT&CKデータを提供します。stdioとHTTP接続に対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
mitre-mcp:MITRE ATT&CK MCP サーバー
MITRE ATT&CK® フレームワークを LLM、AI アシスタント、自動化ワークフローに公開する、本番環境対応の Model Context Protocol(MCP)サーバーです。公式の MCP Python SDK と mitreattack-python ライブラリを使用して構築されており、敵対者の戦術、テクニック、グループ、ソフトウェア、緩和策に安全かつ高性能でアクセスできます。
MCP Registry で公開中です(io.github.luongnv89/mitre-mcp を検索してください)。
主な特長
- LLM に最適化されたエクスペリエンス – Claude、Windsurf、Cursor、および MCP 互換クライアントとシームレスに統合
- デフォルトで安全 – 入力検証、TLS 検証、ディスク容量チェック、構造化されたエラー処理
- 高性能 – 事前構築されたインデックスを使用した O(1) のテクニック検索(スキャンより 80~95%高速)
- 柔軟なデプロイ – ローカルクライアント向けの stdio、またはウェブベースの統合向けの HTTP サーバー
目次
機能
- 包括的なMITRE ATT&CKのカバレッジ - すべてのテクニック、戦術、グループ、ソフトウェア、緩和策を網羅
- 複数ドメインのサポート - Enterprise、Mobile、ICSのATT&CKドメインに対応
- インテリジェントなキャッシュ - 条件付き更新、バックグラウンド更新を伴う古いデータの提供、設定可能な有効期限(デフォルト:14日)に対応した、ユーザーごとのアトミックなキャッシュ
- 高速な起動 - Enterpriseは起動時に読み込み、MobileとICSのドメインは初回使用時に遅延読み込み
- パフォーマンスの最適化 - 事前構築されたインデックスを使用したO(1)検索(80~95%高速化)
- 2種類のトランスポートモード - ローカルクライアント向けのstdio、Web連携向けのHTTP
- CORS対応のHTTPサーバー - 非同期通知とクロスオリジンリクエストをサポート
- 包括的なテスト - カバレッジのしきい値を必須とするpytestスイート
- コミット前の品質チェック - フォーマット、リント、型チェック、セキュリティスキャンを自動実行
- 入力検証 - 入力を検証し、レスポンスをサニタイズするセキュアなデフォルト設定
- プログラム向けAPI - PythonおよびNode.jsクライアント(API-INTEGRATION.mdを参照)
利用可能なMCPツール
| ツール名 | 説明 |
|---|---|
get_techniques | フィルタリングオプションを指定してすべてのテクニックを一覧表示 |
get_technique_by_id | IDを指定して特定のテクニックを検索(例:T1055) |
get_techniques_by_tactic | 特定の戦術のテクニックを取得(例:persistence) |
get_tactics | すべての戦術カテゴリを一覧表示 |
get_groups | すべての脅威アクターグループを一覧表示 |
get_techniques_used_by_group | 特定のグループが使用するテクニックを取得(例:APT29) |
get_software | フィルタリングしてマルウェアとツールを一覧表示 |
get_mitigations | すべてのセキュリティ緩和策を一覧表示 |
get_techniques_mitigated_by_mitigation | 特定の緩和策が対処するテクニックを取得 |
すべての一覧表示ツールと関連ツールは、ページング用のlimit/offsetパラメーターを受け付けます
(デフォルトのページサイズは20、最大200です。CONTRIBUTING.mdの
MITRE_DEFAULT_PAGE_SIZEとMITRE_MAX_PAGE_SIZEを参照してください)。また、pagination
ブロック(total、offset、limit、has_more)を返します。
クイックスタート
インストール
- 仮想環境を作成して有効化します:
python3 -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate.bat
- PyPIからインストールします:
pip install mitre-mcp
- インストールを確認します:
mitre-mcp --help
HTTP モード(推奨)
サーバーを起動します:
mitre-mcp --http
想定される出力:
2025-11-17 22:40:10,991 - mitre_mcp.mitre_mcp_server - INFO - Starting MITRE ATT&CK MCP Server (HTTP mode on localhost:8000)
======================================================================
MITRE ATT&CK MCP Server is ready (Streamable HTTP mode)
Server URL: http://localhost:8000
MCP Endpoint: http://localhost:8000/mcp
Add this to your MCP client configuration:
{
"mcpServers": {
"mitreattack": {
"url": "http://localhost:8000/mcp"
}
}
}
======================================================================
MCP クライアントを設定します:
次の JSON をクライアントの設定ファイルに追加します:
{
"mcpServers": {
"mitreattack": {
"url": "http://localhost:8000/mcp"
}
}
}
設定ファイルの場所:
- macOS(Claude Desktop):
~/Library/Application Support/Claude/claude_desktop_config.json - Windows(Claude Desktop):
%APPDATA%\Claude\claude_desktop_config.json - Linux(Claude Desktop):
~/.config/Claude/claude_desktop_config.json - VSCode:MCP 拡張機能の設定で構成します
カスタムホストとポート:
mitre-mcp --http --host 0.0.0.0 --port 8080
その後、クライアントの設定で http://your-server-ip:8080/mcp を使用します。
セキュリティ — ループバック以外へのバインドは、デフォルトでは認証されません。
--host 0.0.0.0(またはループバック以外のアドレス)にバインドすると、MCP エンドポイントがネットワーク全体に公開されます。データは公開されていますが、エンドポイントは CPU とメモリを消費させるための開放された手段となります。すべてのリクエストにAuthorization: Bearer <token>を含めるよう、MITRE_HTTP_AUTH_TOKENを設定するか、MITRE_HTTP_AUTH_TOKEN=$(openssl rand -hex 32) mitre-mcp --http --host 0.0.0.0 --port 8080ループバックのみにバインドしたサーバーの前に、認証を行うリバースプロキシを配置してください。nginx の例(TLS + Basic 認証 →
127.0.0.1:8000):server { listen 443 ssl; server_name mcp.example.com; ssl_certificate /etc/nginx/certs/mcp.example.com.pem; ssl_certificate_key /etc/nginx/certs/mcp.example.com.key; location / { auth_basic "mitre-mcp"; auth_basic_user_file /etc/nginx/.htpasswd; proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; } }
MITRE_HTTP_AUTH_TOKENが設定されていない状態でサーバーがループバック以外のホストにバインドされると、起動時に警告がログに記録されます。
HTTP モードを使う理由:
- 複数のクライアントが同時に接続できます
- 並行処理と非同期処理のサポートが強化されます
- HTTP ツールを使ってデバッグしやすくなります
- Web ベースのクライアント向けに CORS をサポートします
- パスの設定が不要です
stdio モード(代替)
stdio トランスポートが必要なローカル専用クライアントの場合:
mitre-mcp
クライアントの設定:
{
"mcpServers": {
"mitreattack": {
"command": "/absolute/path/to/.venv/bin/python",
"args": ["-m", "mitre_mcp.mitre_mcp_server"]
}
}
}
注: 絶対パスを使用してください。ほとんどの場合、HTTP モードを推奨します。
データの強制ダウンロード
MITRE ATT&CK データを新たにダウンロードします:
mitre-mcp --http --force-download
スクリーンショットの例
VSCode の設定:

ツールの呼び出し:

結果:

Web フロントエンド
React チャット UI は frontend/ にあります。ホストされたコピーは
https://montimage.github.io/mitre-mcp/ で利用できます。この公開 HTTPS ページから呼び出せるのは
クラウド LLM プロバイダー(Gemini、OpenRouter)です。このマシン上のもの、つまり
localhost:8000 の mitre-mcp、Ollama、LM Studio、その他のループバックエンドポイントには
接続できません。ブラウザーは公開サイトからループバックアドレス空間へのアクセスをブロックします(MCP URL を
https://localhost:8000/mcp にアップグレードすると net::ERR_SSL_PROTOCOL_ERROR が発生し、
http://localhost:…/v1/models では CORS またはプライベートネットワーク関連のエラーが発生します)。
MCP サーバーまたは LLM がコンピューター上で動作している場合は、ローカル UI を使用してください。
ローカルセットアップ(MCP サーバー+チャット UI)
このリポジトリをクローンし、2 つのターミナルを使用します。
1. MCP サーバーをインストールして起動する(Python >= 3.11):
uv sync --locked --extra dev
source .venv/bin/activate
mitre-mcp --http
MCP Endpoint: http://localhost:8000/mcp が表示されるまで待ちます。初回起動時に、ATT&CK データが ~/.cache/mitre-mcp にダウンロードされます。
2. チャット UI を起動する(Node 24):
cd frontend
npm ci
npm run dev
http://localhost:5173/ を開きます。GitHub Pages の URL ではありません。
3. 設定(チャットヘッダーの歯車アイコン):
| 設定 | ローカルでの値 |
|---|---|
| MCP ホスト/ポート | localhost / 8000(開発用プロキシが /mcp をサーバーに転送します) |
| LLM プロバイダー | Ollama、Gemini、OpenRouter、または OpenAI-compatible |
ローカルの OpenAI-compatible サーバー(LM Studio、llama.cpp、vLLM など)を使用する場合:
- プロバイダー:OpenAI-compatible
- エンドポイント URL:
http://localhost:<port>/v1(例:http://localhost:20128/v1) - モデル:エンドポイントが
/v1/modelsで一覧表示する ID - API キー:サーバーで必要な場合を除き、空欄のままにします
エンドポイントは http://localhost:5173 からの CORS を許可する必要があります。Ollama が起動していない場合は、Ollama を選択したままにしないでください。デフォルトのプローブは localhost:11434 にアクセスし、Vite のログに http proxy error: /api/tags が記録されます。
詳細については、frontend/README.md をご覧ください。
ドキュメント
用途に合わせた包括的なガイドを 3 つ用意しています。
1. 初心者向けガイド
Beginner-Playbook.md - MITRE ATT&CK またはサイバーセキュリティを初めて学ぶ方向け
対象者:
- 技術的な知識のないユーザー
- セキュリティ意識向上トレーニング
- 基本的な脅威インテリジェンス
- サイバーセキュリティ全般の教育
2. 上級者向けプレイブック
Playbook.md - MCP クライアントを使用するセキュリティ専門家向け
対象者:
- セキュリティアナリスト
- 脅威ハンター
- インシデント対応担当者
- セキュリティエンジニア
すぐに使える 10 種類のシナリオが含まれています:
- 脅威インテリジェンス
- 検知エンジニアリング
- 脅威ハンティング
- レッドチーム演習
- セキュリティ評価
- インシデント対応
- セキュリティ運用
- セキュリティトレーニング
- ベンダー評価
- リスク管理
3. API 統合ガイド
API-INTEGRATION.md - 自動化やカスタム統合を構築する開発者向け
対象者:
- バックエンド開発者
- 自動化エンジニア
- データパイプライン開発者
- カスタムツールのプロジェクト担当者
以下が含まれています:
- Python および Node.js クライアントの完全な実装
- プロトコル要件と例
- テストおよびデバッグツール
- 一般的な統合パターン
設定
環境変数
動作をカスタマイズするには、mitre-mcp の起動前に設定します。
| 変数 | デフォルト | 用途 |
|---|---|---|
MITRE_ENTERPRISE_URL、MITRE_MOBILE_URL、MITRE_ICS_URL | 公式 MITRE CTI GitHub URL | ATT&CK バンドルの場所を上書きするか、社内ミラーを指定します |
MITRE_DATA_DIR | ~/.cache/mitre-mcp | キャッシュされたバンドルをカスタムディレクトリに保存します |
MITRE_DOWNLOAD_TIMEOUT | 120 | バンドルのダウンロードにおける HTTP タイムアウト(秒) |
MITRE_CACHE_EXPIRY_DAYS | 14 | キャッシュデータを更新するまでの最大経過日数 |
MITRE_REQUIRED_SPACE_MB | 200 | ダウンロード前に確認するディスク容量のしきい値 |
MITRE_DEFAULT_PAGE_SIZE / MITRE_MAX_PAGE_SIZE | 20 / 200 | リストツールが返すレコード数のデフォルト値と最大値 |
MITRE_MAX_DESC_LENGTH | 500 | レスポンス内の説明の最大文字数 |
MITRE_LOG_LEVEL | INFO | ログの詳細度(DEBUG、INFO、WARNING など) |
MITRE_CORS_ORIGINS | localhost origins | HTTP モードで許可する CORS オリジン(カンマ区切りのリスト。* は明示的なオプトインです) |
MITRE_HTTP_AUTH_TOKEN | 未設定(認証なし) | 設定すると、すべての HTTP リクエストで Bearer トークンが必要です。ループバック以外にバインドする場合に推奨されます |
ホストされた UI(Netlify のデプロイなど)がクロスオリジンでサーバーを呼び出せるようにするには、MITRE_CORS_ORIGINS にそのオリジンを設定します。例:MITRE_CORS_ORIGINS="https://mitre-mcp.netlify.app,http://localhost:5173"。どの CORS 設定でも、認証情報は許可されません。
データのキャッシュ
サーバーはパフォーマンスを向上させるため、MITRE ATT&CK データを自動的にキャッシュします。
- 初回実行時に、ユーザーごとのキャッシュディレクトリにデータをダウンロードして保存します
(デフォルトでは
$XDG_CACHE_HOME/mitre-mcp、または~/.cache/mitre-mcp)。 - 以降の実行では、キャッシュが 14 日未満であればキャッシュデータを使用します。
- 14 日を超えたデータは、条件付きリクエストを使用して自動的に更新します。
304 Not Modifiedの応答が返された場合、キャッシュ済みのバンドルを再利用します。 期限切れでもデータが存在する場合、更新をバックグラウンドで実行しながら、すぐにそのデータを提供します。起動が更新によってブロックされることはなく、更新に失敗しても既存のキャッシュは保持されます。 - キャッシュファイルはアトミックに書き込まれます(一時ファイルへの書き込み後に名前を変更するため、ダウンロードに失敗しても正常なキャッシュが破損することはありません)。
- 起動時に解析されるのはエンタープライズドメインのみです。モバイルおよび ICS バンドルは初回使用時に遅延読み込みされるため、クエリされない場合はコールドスタートを高速に保てます。
- 新しいデータを強制的にダウンロードするには、
--force-downloadを使用します。
パフォーマンス
| シナリオ | 改善 | 備考 |
|---|---|---|
| エンタープライズのテクニック検索 | 80-95% 高速化 | グループ、緩和策、テクニック向けの構築済み O(1) インデックス |
| ATT&CK データのダウンロード | 20-40% 高速化 | TLS セッションの再利用による HTTP 接続プーリング |
| ウォームキャッシュの起動 | <2s | キャッシュ済みバンドルを再利用し、LLM クエリに即座に対応 |
ベンチマーク:Python 3.11 を使用した macOS 14 / Apple M3 Pro。タイミングログを表示するには MITRE_LOG_LEVEL=DEBUG を使用してください。
プログラム API
自動化、カスタム統合、バッチ処理については、API-INTEGRATION.md を参照してください。
簡単な例(Python):
from clients.python.mini_mcp_client import MitreMCPClient
async def main():
client = MitreMCPClient(host="localhost", port=8000)
# Get all tactics
tactics = await client.call_tool("get_tactics", {"domain": "enterprise-attack"})
# Get techniques for a group
techniques = await client.call_tool(
"get_techniques_used_by_group", {"group_name": "APT29", "domain": "enterprise-attack"}
)
利用可能なクライアント:
- Python:完全な CLI を備えた
clients/python/mini-mcp-client.py - Node.js:完全な CLI を備えた
clients/nodejs/mini-mcp-client.js
詳細なドキュメントについては、API-INTEGRATION.md を参照してください。
開発
クローンとインストール
git clone https://github.com/montimage/mitre-mcp.git
cd mitre-mcp
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
Pre-commit フックのインストール
pre-commit install
これにより、各コミット前にコード品質チェックが自動で実行されるようになります。
テストの実行
pytest # Full test suite with coverage
pre-commit run --all-files # All quality checks
コード品質ツール
フォーマット:
- black - Python コードフォーマッター
- isort - インポート整理ツール
- prettier - YAML/JSON/Markdown フォーマッター
リンティングと型チェック:
- flake8 - Python リンター
- mypy - 静的型チェッカー
- pydocstyle - Docstring チェッカー
セキュリティ:
- bandit - セキュリティ脆弱性スキャナー
- ファイルバリデーター - YAML、JSON、TOML、秘密鍵の検出
テスト:
- pytest - コミット前のカバレッジ基準チェックを備えたテストスイート
- インストールテスト - パッケージの検証
- インポート検証 - モジュールをインポートできることの確認
- CLI テスト - エントリーポイントの検証
トラブルシューティング
「Insufficient disk space」でダウンロードに失敗する
- データディレクトリに 200 MB 以上の空き容量を確保するか、
MITRE_DATA_DIR=/path/to/storageを設定してください
データが更新されない
- キャッシュ済みバンドルは 14 日後に自動更新されます
- 強制更新:
mitre-mcp --force-downloadを実行するか、~/.cache/mitre-mcpを削除してください
ツール呼び出しでエラーが返される
- テクニック ID が
T####またはT####.###の形式であることを確認してください - 名前や戦術は 100 文字以内にしてください
MCP クライアントがサーバーを検出できない
- クライアント設定で正しい Python パスが指定されていることを確認してください
- 手動でテストするには、
mitre-mcpを実行してサーバーが起動することを確認してください - HTTP モードの場合:
urlフィールドが正しく設定されていることを確認してください
チャット UI:「POST https://localhost:8000/mcp net::ERR_SSL_PROTOCOL_ERROR」
- GitHub Pages の UI は HTTPS のため、
localhostはhttps://localhost:8000に書き換えられます。mitre-mcp --httpは TLS に対応していません。代わりに http://localhost:5173 を開いてください(Web フロントエンドを参照)。
チャット UI:ローカル LLM の呼び出し時に CORS / “loopback address space” エラーが発生する
- 原因は同じです。公開オリジンから
http://localhost:…にはアクセスできません。 フロントエンドをローカルで実行し、OpenAI 互換プロバイダーの接続先をhttp://localhost:<port>/v1に設定してください。
Module not found: mcp.server.fastmcp
- 仮想環境で、固定バージョンの MCP SDK を再インストールしてください:
pip install "mcp>=1.28.1,<2"(CLI の追加機能も必要な場合はmcp[cli]>=1.28.1,<2)。fastmcpディストリビューションにはmcp.server.fastmcpが含まれていませんが、このパッケージで宣言されている固定バージョンには含まれています
FAQ
mitre-mcp はオフラインで動作しますか?
- はい。バンドルがキャッシュされると、キャッシュの有効期限が切れるまでサーバーはオフラインで動作します。
どの Python バージョンがサポートされていますか?
- Python 3.11 から 3.14 までです(
pyproject.tomlを参照)。
データはどのくらいの頻度で更新されますか?
- デフォルトでは 24 時間ごとです。
MITRE_CACHE_EXPIRY_DAYSを調整するか、--force-downloadを使用してください。
HTTP モードは本番環境で安全ですか?
- HTTP モードはデフォルトで localhost:8000 で配信します。外部に公開する場合は、ファイアウォールまたはリバースプロキシを使用してください。
ライセンス
MIT License - 詳細については LICENSE ファイルを参照してください。
Montimage について
mitre-mcp は、ネットワーク監視、セキュリティ分析、AI を活用した脅威検出ソリューションを専門とするサイバーセキュリティ企業、Montimage が開発・保守しています。組織がデジタル資産を保護し、ネットワークセキュリティを確保するための革新的なツールを開発しています。
ご質問やサポートについては、[email protected] までお問い合わせください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。