TractorBeeam365 MCP について
TractorBeeam365 MCPは、Veeam Backup for Microsoft 365を確認する管理者向けのMCPサーバーです。既定では読み取り専用で、操作や復元を有効にした場合は確認トークンが必要となり、監査ログに記録されます。
主な機能
- 01ヘルス状況と傾向の異常を要約
- 02バックアップ対象の漏れを確認
- 03クラウドストレージのロック設定を照合
- 04組織、ジョブ、復元ポイントを確認
- 05任意でジョブ制御と復元を有効化
- 06確認と監査ログで変更を管理
活用シーン
- 01バックアップ設定と保護漏れの確認
- 02ジョブ成功率とリポジトリ容量の推移を追跡
- 03クラウドストレージの不変性設定を検証
- 04必要に応じてMicrosoft 365データを復元
MCP 対応
MCPクライアントにVeeam Backup for Microsoft 365の確認ツールを公開し、任意でジョブ操作と復元にも対応します。stdioとStreamable HTTPをサポートします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e VB365_HOST -e VB365_USERNAME -e VB365_PASSWORD ghcr.io/ringosystems/tractorbeeam-mcp:2.2.0VB365_HOSTIP or hostname of the VB365 (Veeam Backup Server) hostVB365_USERNAMEシークレットVB365 account used to obtain a REST API token (DOMAIN\\user, .\\localuser, or user@domain)VB365_PASSWORDシークレットPassword for VB365_USERNAMEローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/ringosystems/tractorbeeam-mcp:2.2.0stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
TractorBeeam365 MCP
Veeam Backup for Microsoft 365(VB365)用のModel Context Protocolサーバーです。 VB365 REST APIに直接接続し、MCPクライアント(Claude Code / Claude Desktop)がバックアップ構成を確認し、保護のギャップを見つけ、傾向を把握し、クラウドのイミュータビリティを検証できます。また、明示的にオプトインした場合は、ジョブの実行やリストアのオーケストレーションも行えます。
独立したプロジェクトです。Veeam Softwareとは提携、承認、サポートの関係にありません。 「Veeam」はVeeam Softwareの登録商標です。「Beeam」という表記は、意図的に変えた独自の言葉遊びです。ご自身の責任でご利用ください。
🔱 名前の由来:トラクタービームがデータを引き戻し、Beeamはその下にあるバックアップ製品にちなんでいます。読み取り専用の確認が安全なデフォルトです。「引き戻し」(リストア/アクション)はオプトインです。
2つのティア
| ティア | デフォルト | できること |
|---|---|---|
| 読み取り専用の確認 | ✅ 常に有効 | GETのみ。変更は一切できません。構成/健全性、ギャップ分析、傾向、クラウドロックの照合。 |
| アクション/リストア | ⛔ 無効 | TB_* 環境フラグでオプトインします。ジョブの実行/停止、レポートの生成、組織の同期、リストアの定義と実行ができます。書き込みはすべて確認トークンによって制御され、監査されます。 |
TB_* フラグを設定しなければ、このツールは純粋な読み取り専用の確認ツールとなり、物理的に環境を変更できません。アクション/リストアのツールは登録すらされません。
すばやくデプロイ(ビルド済みイメージ)
クローンもビルドも不要です。v2.2.0以降、イメージはGitHub Container RegistryとDocker Hubに**マルチアーキテクチャ(amd64 + arm64)**で公開されているため、x86サーバー、Apple Silicon、ARMマシン(Raspberry Pi、ARMクラウド)でネイティブに実行できます。ARMホストでは、マルチアーキテクチャ対応の :latest が公開されるまで、:2.2.0(またはそれ以降)のタグを固定して使用してください。
常駐HTTPサービス(Docker Compose)
2つのファイルを取得して起動します。
curl -fsSLO https://raw.githubusercontent.com/Ringosystems/TractorBeeam-MCP/main/docker-compose.deploy.yml
curl -fsSL https://raw.githubusercontent.com/Ringosystems/TractorBeeam-MCP/main/.env.example -o .env
# Edit .env: set VB365_HOST / VB365_USERNAME / VB365_PASSWORD and a long MCP_AUTH_TOKEN.
docker compose -f docker-compose.deploy.yml up -d
MCPは http://<host>:8766/mcp で利用できます。設定したベアラートークンを使ってクライアントを接続します。
claude mcp add --transport http tractorbeeam365 http://<host>:8766/mcp \
--header "Authorization: Bearer <your MCP_AUTH_TOKEN>"
後で更新する場合:
docker compose -f docker-compose.deploy.yml pull && docker compose -f docker-compose.deploy.yml up -d
Unraid(ワンクリック)
UnraidでDocker → Add Containerを開き、このテンプレートURLをTemplateフィールドに貼り付けます。
https://raw.githubusercontent.com/Ringosystems/TractorBeeam-MCP/main/deploy/unraid/tractorbeeam365.xml
VB365_HOST、VB365_USERNAME、VB365_PASSWORD、長い MCP_AUTH_TOKEN を入力してから、Applyをクリックします。監査フォルダーとダウンロードフォルダーは /mnt/user/appdata/tractorbeeam365/ にマッピングされます。
MCPクライアント1つでサービス不要(stdio)
サーバー自体を起動するクライアントでは、必要に応じてイメージをstdio経由で実行します。
docker run -i --rm \
-e VB365_HOST=... -e VB365_USERNAME=... -e VB365_PASSWORD=... \
ghcr.io/ringosystems/tractorbeeam-mcp:latest
読み取り専用ツール(常に利用可能)
| ツール | 返される内容 |
|---|---|
vb365_health_summary | 一括確認:組織、ジョブと最終ステータス、リポジトリ、クラウドストレージ(B2/S3/Azure)、プロキシ、ライセンス、傾向の異常、flags リスト。まずはこちらを確認してください。 |
vb365_trends | ジョブごとの成功/失敗の推移、リポジトリの容量上限到達予測、組織ごとのリストアテストの実施頻度、RPO準拠状況。 |
gap_coverage_summary / gap_unprotected_objects | Microsoft Graphとジョブの保護対象を比較し、バックアップ対象範囲の割合と、稼働中のM365オブジェクトのうち保護されていないものを表示します(GRAPH_* が必要です)。 |
cloud_lock_audit | バケットのObject Lockモード/保持期間/バージョニングをVB365の報告内容と照合します(B2_*/S3_* が必要です)。 |
vb365_api_root | リソース一覧とバージョン(接続を確認します)。 |
vb365_list_organizations / vb365_org_inventory | 保護対象の組織、および組織内のユーザー/グループ/サイト/チーム。 |
vb365_list_jobs / vb365_get_job / vb365_job_scope | ジョブ一覧、1つのジョブの構成、ジョブが保護する対象の詳細(選択対象/除外対象)。 |
vb365_list_job_sessions | 最近の実行結果(ジョブごとの絞り込みも可能)。 |
vb365_list_repositories / vb365_list_restore_points | リポジトリ(容量/保持期間/イミュータビリティ)とリストアポイント。 |
vb365_list_object_storage / vb365_get_object_storage | クラウド/オブジェクトストレージ(B2/S3/Azure/Wasabi/IBM/Glacier)。 |
vb365_list_proxies / vb365_license | プロキシとステータス、ライセンス/エディション/有効期限。 |
vb365_get | その他の /<version>/... リソースに対する読み取り専用GET。 |
アクション/復元ツール(オプトイン、制限付き)
対応するフラグが設定されている場合にのみ登録されます。2 回呼び出す確認パターン: 1 回目の呼び出しでプレビューと一度限りの confirm_token を取得し、2 回目の呼び出しで confirm=<token> を指定して実行します。実行のたびに TB_AUDIT_LOG に追記されます。
| ツール(フラグ) | 機能 |
|---|---|
action_job (TB_ALLOW_JOB_CONTROL) | バックアップジョブの開始/停止/有効化/無効化 |
action_generate_report (TB_ALLOW_REPORTS) | メールボックス/onedrive/sharepoint/teams/ユーザー保護、ライセンス、ストレージのレポートをファイルに出力 |
action_org_sync (TB_ALLOW_ORG_SYNC) | 組織のディレクトリ再同期を実行 |
action_proxy (TB_ALLOW_PROXY) | プロキシの再スキャン/メンテナンスモードへの切り替え |
restore_session_start → restore_browse / restore_search → restore_define → restore_execute → restore_status → restore_session_stop (TB_ALLOW_RESTORE) | Exchange/OneDrive/SharePoint/Teams 全体の復元オーケストレーション:特定時点のセッションを開き、復元可能なアイテムを参照/検索してから、復元対象、復元先、オプションを定義し、復元を実行します。 |
復元:対象、場所、方法を定義する
restore_session_start(scope="job", scope_id="<jobId>", workload="exchange")
→ { session_id } # opens a point-in-time explore session
restore_browse(session_id) # list mailboxes
restore_browse(session_id, parent_id=<mailboxId>) # list items in a mailbox
restore_define(session_id, parent_id=<mailboxId>, item_ids=[...], target="export")
→ { confirm_token, preview } # DRY RUN — nothing changed
restore_execute(session_id, confirm=<confirm_token>) # executes + audits
restore_session_stop(session_id)
- target =
export(最も安全です。バックアップをローカルファイルに読み込みます。M365 の認証情報は不要です)、alternate(別の M365 の場所に書き込みます)、またはoriginal(元の場所に書き戻します。破壊的な操作です。confirm_overwrite_original=Trueも指定してください)。 - options には、代替の
mailbox/folderと、書き戻しに VB365 が使用する M365 の接続先認証情報(userName/userPassword/applicationId)を指定できます。または.envにVB365_RESTORE_*を設定してください。 - PST へのエクスポートには、VB365 サーバーに 64 ビット版の Outlook 2010 以降がインストールされている必要があります(Veeam の要件です)。インストールされていない場合、
exportToPstはサーバー側エラーを返します。
セットアップ
-
Claude Code の実行環境に Python 3.10 以降をインストールします。
-
このフォルダーから次を実行します。
python -m venv .venv .\.venv\Scripts\Activate.ps1 pip install -r requirements.txt -
.env.exampleを.envにコピーし、VB365_HOST、VB365_USERNAME、VB365_PASSWORDを設定します(値が異なる場合を除き、VB365_PORT=4443、VB365_API_VERSION=v8はそのままにしてください)。必要に応じてGRAPH_*、B2_*/S3_*、TB_*フラグも追加します。REST API アカウントには、VB365 管理者(または復元オペレーター)の権限が必要です。VB365 には読み取り専用の API ロールがありません。読み取り専用のレビューツールは、いずれも GET リクエストのみを使用します。
New-VB365ReviewAccount.ps1は VB365 サーバー上に専用のサービスアカウントを作成します。.envをソース管理に含めないでください。
Claude Code への登録
# Replace <repo> with the absolute path to your clone.
claude mcp add tractorbeeam365 --scope user -- "<repo>\.venv\Scripts\python.exe" "<repo>\server.py"
Linux/macOS ではスラッシュを使用し、
<repo>/.venv/bin/pythonを指定してください。
また、MCP Registry に io.github.Ringosystems/tractorbeeam-mcp として公開されています(GHCR 上の OCI イメージ)。レジストリに対応している MCP クライアントは、直接インストールできます。公開済みイメージを stdio サーバーとして実行するには、次を実行します。
docker run -i --rm \
-e VB365_HOST=... -e VB365_USERNAME=... -e VB365_PASSWORD=... \
ghcr.io/ringosystems/tractorbeeam-mcp:latest
次に、**「VB365 の正常性サマリーを実行して、設定に問題がないか教えてください。」**と尋ねます。
アクション/復元レベルを有効にする
オプトインするまで、アクション/復元ツールは非表示のままです。.env で次のように設定します。
TB_ENABLE_ACTIONS=true # master switch
TB_ALLOW_JOB_CONTROL=true # + any of the per-category flags you want
TB_ALLOW_RESTORE=true
TB_AUDIT_LOG=audit/actions.jsonl
呼び出し元ごとの ID を確認できないため、
TB_ALLOW_WRITE_OVER_HTTP=trueも設定しない限り、HTTP トランスポートではアクション/復元ツールは登録されません。オペレーター向けレベルは stdio 経由で実行するか、独自の認証機能付きリバースプロキシの背後でのみ実行してください。
安全性の仕組み:ツールは有効化された場合にのみ登録され、変更操作にはすべて一度限りの確認トークンを使った 2 回目の呼び出しが必要です。復元先は安全な場所がデフォルトであり、元の場所への上書きには明示的な確認が必要です。また、すべての操作が追記専用の監査ログに記録されます。推奨事項:フラグを有効にした別個の「オペレーター」インスタンスを実行し、デフォルトのインスタンスは読み取り専用にしてください。
永続サービスとして実行する(Docker / UNRAID)
イメージはデフォルトで stdio トランスポートを使用するため、MCP クライアントから docker run -i で実行できます。docker compose 経由では、コンテナ内の 0.0.0.0:8000 で streamable-http を読み取り専用で実行します(TB_* フラグはありません)。認証情報はイメージに組み込まれていません。HTTP トランスポートはフェイルクローズで動作し、MCP_AUTH_TOKEN を設定しないと起動を拒否します(クライアントは Authorization: Bearer <token> を送信します)。または、MCP_ALLOW_UNAUTHENTICATED_HTTP=true を設定してリスクを明示的に受け入れることもできます。
# Put MCP_AUTH_TOKEN=<a long random secret> in .env first.
docker compose up -d --build # builds locally and runs read-only
# MCP is live at http://<host>:8766/mcp ; attach with:
claude mcp add --transport http tractorbeeam365 http://<host>:8766/mcp \
--header "Authorization: Bearer <token>"
ビルド済みイメージ
各 GitHub リリースでは、CI 経由でマルチアーキテクチャ、マルチタグのイメージが GHCR、Docker Hub、MCP Registry に公開されます(.github/workflows/publish.yml)。リリースの詳細な手順については、PUBLISHING.md を参照してください。
# GitHub Container Registry (published automatically on every release):
docker pull ghcr.io/ringosystems/tractorbeeam-mcp:latest
# Docker Hub (published when the DOCKERHUB_USERNAME / DOCKERHUB_TOKEN repo
# secrets are configured):
docker pull ringosystems/tractorbeeam365-mcp:latest
代わりに手動で公開するには:
docker build -t <dockerhubuser>/tractorbeeam365-mcp:latest .
docker push <dockerhubuser>/tractorbeeam365-mcp:latest
セキュリティ: MCP HTTP トランスポートには呼び出し元ごとの ID がありません。このビルドはデフォルトでループバックにバインドされ、HTTP を提供する前に
MCP_AUTH_TOKENを必須とし、TB_ALLOW_WRITE_OVER_HTTP=trueを設定しない限り、HTTP 経由での書き込み/復元ツールを非表示にします。それでも、ポートは信頼できるネットワーク内に限定し、TLS と認証を備えたフロントエンドの背後に配置してください。監査ログおよび生成された PST/レポートファイルは、マウントされたaudit/とdownloads/ボリュームに保存されます。SECURITY.md を参照してください。
クイック接続テスト(MCP クライアント不要)
.\.venv\Scripts\Activate.ps1
python -c "import server; print(server.vb365_api_root())"
注意事項
.gitignoreは.env、仮想環境、運用者向けのaudit/、downloads/、*.pstアーティファクトを除外します。認証情報や復元データは絶対にコミットしないでください。- VB365 には自己署名証明書が同梱されているため、
VB365_VERIFY_SSLのデフォルト値はfalseです。この設定では、VB365 への接続が中間者攻撃にさらされます。そのため、サーバーの証明書を指定するVB365_CA_BUNDLE(証明書に対する検証が有効になります)か、信頼できる証明書を使用したVB365_VERIFY_SSL=trueの設定を推奨します。サーバーは、接続が未検証の場合に起動時に警告します。 - エンドポイント名は VB365 のバージョンによって多少異なります。厳選されたツールが 404 を返す場合は、
vb365_api_rootを呼び出し、正確なリソース名を指定してvb365_getを使用してください。
商標
本プロジェクトは独立したものであり、以下のいずれの企業とも提携、推奨、後援関係にありません。製品名は識別の目的でのみ使用しています(記述的使用)。
- 「Veeam」は Veeam Software の登録商標です。「Beeam」という表記は、意図的に区別して用いている言葉遊びであり、商標ではありません。
- Microsoft、Microsoft 365、Microsoft Graph、Outlook、Office Deployment Tool は、Microsoft グループ企業の商標です。
- Backblaze と B2 は、Backblaze, Inc. の商標です。
- Amazon Web Services、AWS、Amazon S3、S3 Glacier は、Amazon.com, Inc. またはその関連会社の商標です。
- Wasabi、IBM と IBM Cloud、Azure、Google Cloud は、それぞれの所有者の商標です。
ライセンス
MIT License のもとで公開されています。セキュリティモデルと脆弱性報告については SECURITY.md を、貢献方法については CONTRIBUTING.md を、リリースのビルドと公開方法については PUBLISHING.md を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。