Acronis Cyber Protect Cloud について
Acronis Cyber Protect Cloudは、AcronisのMCPサーバーをホスト向けにラップし、選定したアカウント、アラート、ポリシー、リソース、エージェント、EDRインシデントの操作を提供します。読み取り中心のツールを許可リストで制限し、テナント分離、応答のサニタイズ、ゲートウェイ認証を加えています。
主な機能
- 0134個の読み取りツールと3個の任意の書き込みツール
- 02テナントの認証情報ごとに上流プロセスを分離
- 03応答のサニタイズと認証情報のマスキング
- 04SSRF対策としてAcronisのベースURLを検証
- 05stdioとHTTPトランスポートに対応
活用シーン
- 01テナントのアカウント、ユーザー、利用状況の確認
- 02アラート、ポリシー、リソース、保護状態の確認
- 03エージェントとEDRインシデントの確認
- 04選択したアラート、調査状態、ポリシーの変更
MCP 対応
`@acronis-platform/mcp`をラップし、許可リストで選別したAcronis操作をMCPクライアントに提供します。読み取りツールは既定で利用でき、3つの書き込みツールには`ACRONIS_ENABLE_WRITES=true`が必要です。HTTPリクエストではゲートウェイ認証を使用します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e ACRONIS_BASE_URL -e ACRONIS_CLIENT_ID -e ACRONIS_CLIENT_SECRET -e ACRONIS_ENABLE_WRITES -e MCP_TRANSPORT -e AUTH_MODE -e LOG_LEVEL ghcr.io/wyre-ai/acronis-mcp:v1.0.1ACRONIS_BASE_URLAcronis datacenter URL, https only, hostname must end with .acronis.com (e.g. https://us5-cloud.acronis.com)ACRONIS_CLIENT_IDAcronis API client ID (OAuth client_credentials)ACRONIS_CLIENT_SECRETシークレットAcronis API client secretACRONIS_ENABLE_WRITESSet to 'true' to expose the 3 write tools (default: read-only)MCP_TRANSPORTTransport mode. Set to 'stdio' for local CLI use; the image defaults to 'http' for gateway hosting.AUTH_MODEシークレットCredential source: 'env' reads vars locally, 'gateway' expects header injection from the WYRE MCP Gateway.LOG_LEVELLog verbosity: debug, info, warn, errorローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/wyre-ai/acronis-mcp:v1.0.1stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
acronis-mcp
Acronis Cyber Protect Cloud向けに、ベンダー独自の MCP サーバー(@acronis-platform/mcp、バージョン 1.0.1 に厳密に固定)を WYRE-AI がホストするラッパーです。このラッパーは、上流サーバーにない機能を追加します。
- 厳選された階層別のツール許可リスト(上流の159個のうち、読み取りツール34個、オプトイン方式の書き込みツール3個)
- テナントごとのプロセス分離、2つの時代のHTTP方式に対応したホスト型サービス(2025年方式の
initializeハンドシェイクと、2026-07-28方式のステートレスエンベロープ)、およびX-Gateway-S2Sの検証 - レスポンスのサニタイズ(サイズ上限、シークレット/トークンのマスキング、統一されたエラー形式)
- Acronis のベースURLに対するSSRFガード(WYREAI-454)
tools/list は静的(ビルド時に生成)なので、認証情報がなくても、子プロセスを起動しなくても動作します。上流の子プロセスを起動するのは tools/call のみです。
上流バージョンの固定ポリシー
@acronis-platform/mcp は package.json で厳密なバージョンに固定されています(^/~ は付けません。テストで 1.0.1 を強制しています)。バージョンの更新はプルリクエストのみで行います。Renovate/Dependabot による更新提案は可能ですが、自動マージは禁止です。更新時には担当者が次の作業を行う必要があります。
- 上流の
tools/listとresearch/upstream-tools-1.0.1.jsonを比較する(新規、名称変更、または重複したツールの確認)。 npm run gen-toolsでsrc/generated/tools.tsを再生成する。research/tiers.jsonと統合テストを再レビューする。
上流の1.0.1には、重複したツール名が3つあります(device_authorization_approval、fetch_registration_tokens、create_registration_token)。いずれも許可リストには含まれていません。また、ジェネレーターは、許可リストに含まれる名前が上流に存在しない場合や重複している場合、処理を拒否します。
テナントごとに子プロセスを1つ用意する理由
上流プロセスは、特権付きの client_credentials トークンを1つ保持し、すべての呼び出し元に対して使用します。テナント間でプロセスを共有すると、あるテナントのリクエストが別のテナントのトークンで実行されるおそれがあります。そのため、src/upstream-pool.ts は stdio を介して @modelcontextprotocol/client を使い、認証情報の組み合わせごとに1つの子プロセス(キー = sha256(baseUrl, clientId, clientSecret)。生の値はログに記録されません)を起動し、各呼び出しを各テナント専用の子プロセスに振り分けます。
- 子プロセスのバイナリ:
require.resolve('@acronis-platform/mcp/package.json')→bin/cli.js。process.execPathで実行します。 - 子プロセスの環境変数は一から構築されます(親の環境変数は継承されないため、
CONDUIT_S2S_SECRETなどが漏れることはありません)。設定されるのはPATH、NODE_ENV、API_BASE_URL、OAUTH_CLIENT_ID、OAUTH_CLIENT_SECRET、MCP_TRANSPORT=stdio、MCP_TOOLS_INCLUDE=<allowlist for enabled tiers>です。 (MCP クライアント SDK は、これらに加えて、シークレットではない既定値としてHOME、LOGNAME、SHELL、TERM、USERも追加します。) - LRU 上限は
ACRONIS_POOL_MAX(既定値は50)、アイドル時のTTLはACRONIS_POOL_IDLE_MS(既定値は10分)です。シャットダウン時には、すべての子プロセスが終了します。呼び出し中に退避された子プロセスは、呼び出しの終了時に終了します。
次の上流の挙動にご注意ください。
- 上流の1.0.1は起動時にOAuthトークンを先行取得するため、認証情報が誤っている場合や、データセンターへの経路がない場合、子プロセスはすぐに終了します。その場合、呼び出し元には
{error:{code:"upstream_unavailable",…}}の結果が返されます。また、テナントごとの初回呼び出しでは、トークン取得の往復時間が発生します。 - 各テナントの子プロセスは、それぞれ専用の使い捨て
HOME(mkdtemp、モード0700)で実行されます。このディレクトリは子プロセスの終了時に削除されるため、以下の上流のトークンキャッシュがテナント間で共有されることはありません。 - 上流はアクセストークンを
~/.mcp/token-cacheの下にディスク上でキャッシュします(モード0600、AES-256-GCM、クライアントシークレットから生成したキーを使用)。 - 上流は追加の組み込みツール
get_acronis_skillを登録しますが、このツールはMCP_TOOLS_INCLUDEではフィルタリングされません。ラッパーはこのツールを一覧表示も転送もしません(呼び出しハンドラーで許可リストを二重に適用します)。
ツール
ツール名は acronis_ + 上流の名前です。research/tiers.json に含まれていないツールは、一覧に表示されず、呼び出すこともできません。これは、子プロセスの MCP_TOOLS_INCLUDE と、tools/call ハンドラーの許可リストチェックという2つの仕組みによって強制されます。
- read ツールは常に利用できます(
readOnlyHint: true)。 - write ツールは
ACRONIS_ENABLE_WRITES=trueの場合にのみ表示され、動作します(デフォルトはfalse)。注釈はreadOnlyHint: false、destructiveHint: falseです。
入力スキーマは上流からそのまま取得されます。37個のツールはフリートのフラットツールのしきい値である約25個を超えるため、説明は最初の文(最大300文字)までに短縮され、[Account Management API 2] のようなプレフィックスは削除されます。ツール定義は src/generated/tools.ts にあり、research/tiers.json でフィルタリングした research/upstream-tools-1.0.1.json をもとに、scripts/gen-tools.mjs(npm run gen-tools)で生成されます。
tools/list のペイロードサイズ(JSON バイト数):
| 対象 | 変更前(上流、全件) | 変更後(ラッパー) |
|---|---|---|
| 上流の全159ツール | 298,320 | n/a(公開されません) |
| 34個の読み取りツール | 70,343 | 67,309 |
| 37個のツール(読み取り+書き込み) | 75,822 | 72,864 |
(ペイロードの大部分はスキーマであり、上流のまま保持されるため、説明の短縮による削減は約5%です。)
| ツール | ティア | 上流 API |
|---|---|---|
acronis_fetch_tenant | read | Account Management API 2 |
acronis_fetch_tenants_batch | read | Account Management API 2 |
acronis_fetch_tenant_children | read | Account Management API 2 |
acronis_fetch_tenant_users | read | Account Management API 2 |
acronis_fetch_users_batch | read | Account Management API 2 |
acronis_fetch_user | read | Account Management API 2 |
acronis_fetch_current_user_info | read | Account Management API 2 |
acronis_search | read | Account Management API 2 |
acronis_fetch_tenant_mfa_status | read | Account Management API 2 |
acronis_fetch_tenant_usages | read | Account Management API 2 |
acronis_fetch_all_alerts | read | Alert Manager 1.0 |
acronis_fetch_alert | read | Alert Manager 1.0 |
acronis_fetch_categories | read | Alert Manager 1.0 |
acronis_fetch_alert_counters | read | Alert Manager 1.0 |
acronis_fetch_alerts_grouped_by_scope | read | Alert Manager 1.0 |
acronis_fetch_all_alert_types | read | Alert Manager 1.0 |
acronis_fetch_resources_with_top_severity_alerts | read | Alert Manager 1.0 |
acronis_fetch_alert_counts_per_customer | read | Alert Manager 1.0 |
acronis_fetch_alerts_grouped_per_customer | read | Alert Manager 1.0 |
acronis_fetch_active_alert_count | read | Alert Manager 1.0 |
acronis_fetch_policies | read | Resource and Policy Management API v4 |
acronis_fetch_policy | read | Resource and Policy Management API v4 |
acronis_fetch_policy_applications | read | Resource and Policy Management API v4 |
acronis_fetch_applications_issue_statistics | read | Resource and Policy Management API v4 |
acronis_fetch_application_statuses_by_policy | read | Resource and Policy Management API v4 |
acronis_fetch_resources | read | Resource and Policy Management API v4 |
acronis_fetch_resource_count | read | Resource and Policy Management API v4 |
acronis_fetch_resource | read | Resource and Policy Management API v4 |
acronis_fetch_resource_protection_status | read | Resource and Policy Management API v4 |
acronis_fetch_agents | read | Agent Management REST API 2 |
acronis_fetch_agent | read | Agent Management REST API 2 |
acronis_fetch_incidents | read | Endpoint Detection and Response API 1.0 |
acronis_fetch_incident | read | Endpoint Detection and Response API 1.0 |
acronis_fetch_response_action_status | read | Endpoint Detection and Response API 1.0 |
acronis_mark_alert_as_false_positive | write | Alert Manager 1.0 |
acronis_update_investigation_state | write | Endpoint Detection and Response API 1.0 |
acronis_execute_protection_policy | write | Resource and Policy Management API v4 |
除外されるカテゴリ
環境にかかわらず、公開されず、呼び出すこともできません。
- テナント/ユーザー/API クライアントの作成と削除、およびその他すべての削除
- 価格、提供項目、使用状況の更新、エディション(金銭関連)
- トークン、ワンタイムトークン(OTT)、デバイス認証、IdP/OpenID の設定
- 登録トークン
- ブランディング
- EDR の
initiate_response_action research/tiers.jsonに記載されていないその他すべて
応答のサニタイズ
上流からのすべての結果は src/sanitize.ts を通過します。テキストは最大 100 KB に制限され、切り詰めを示すマーカーが付加されます。JSON では、キーが secret|password|token|access_token|refresh_token|api[_-]?key|authorization|client_secret に一致する値がマスキングされます。Bearer トークンと JWT に見える文字列は、場所を問わずマスキングされます。テキスト以外のブロックは破棄されます。エラーは {"error":{"code","message"}} として呼び出し元に返されます。メッセージは最大 500 文字に制限され、テナントの認証情報は取り除かれます。
認証情報
.env.example をコピーしてください。そのファイルでは CONDUIT_S2S_SECRET を空のままにしてください。
- ローカル/stdio(Claude Desktop、CLI):
ACRONIS_BASE_URL、ACRONIS_CLIENT_ID、ACRONIS_CLIENT_SECRET(client_credentialsを使う Acronis API クライアント)を設定します。stdio ではCONDUIT_S2S_SECRETは使用しません。 - ホスト型/ゲートウェイ(
AUTH_MODE=gateway): 認証情報はリクエストごとに渡され、環境変数にフォールバックすることはありません。
| ゲートウェイヘッダー | 意味 |
|---|---|
X-Acronis-Base-Url | データセンターの URL。例:https://us5-cloud.acronis.com |
X-Acronis-Client-Id | API クライアント ID |
X-Acronis-Client-Secret | API クライアントシークレット |
ベース URL の検証(SSRF ガード): https のみ許可されます。ホスト名は .acronis.com で終わる必要があります。ユーザー情報、デフォルト以外のポート、パス/クエリ/フラグメントは許可されません。それ以外はすべて拒否されます(ゲートウェイモードでは 401 を返し、子プロセスは起動されません)。
環境変数
| 変数 | 必須 | 説明 |
|---|---|---|
ACRONIS_BASE_URL | stdio および AUTH_MODE=env | Acronis データセンターの URL(上記の検証を参照) |
ACRONIS_CLIENT_ID | stdio および AUTH_MODE=env | API クライアント ID |
ACRONIS_CLIENT_SECRET | stdio および AUTH_MODE=env | API クライアントシークレット |
ACRONIS_ENABLE_WRITES | いいえ | true にすると、3 つの書き込みツールが公開されます。デフォルトは false です。 |
ACRONIS_POOL_MAX | いいえ | 同時に実行する上流の子プロセスの最大数(LRU)。デフォルトは 50 です。 |
ACRONIS_POOL_IDLE_MS | いいえ | 子プロセスを終了するまでのアイドル時間。デフォルトは 600000(10 分)です。 |
MCP_TRANSPORT | いいえ | stdio(デフォルト)または http |
AUTH_MODE | いいえ | gateway(Docker イメージと Compose のデフォルト)または env。env は S2S 認証の成功後にのみ ACRONIS_* を使用します。 |
CONDUIT_S2S_SECRET | HTTP では必須 | サービス間シークレット。これが空、または既知のプレースホルダーの場合、HTTP サーバーはエラーをログに記録し、ゼロ以外の終了コードで終了します。Compose はこれがないと起動しません。実際の値をコミットしないでください。openssl rand -hex 32 で生成してください。 |
MCP_ALLOW_INSECURE_DEV | いいえ | CONDUIT_S2S_SECRET がなくても HTTP を起動する場合に限り、ローカル開発用に 1 を設定します。プロセスは警告をログに記録し、X-Gateway-S2S の検証を行わず、127.0.0.1 のみで待ち受けます。プレースホルダーのシークレットは引き続き拒否されます。 |
MCP_HTTP_HOST | いいえ | 実際の CONDUIT_S2S_SECRET が設定されている場合のバインドアドレス。デフォルトは 127.0.0.1 です。コンテナーイメージでは 0.0.0.0 が設定されます。 |
MCP_HTTP_PORT | いいえ | HTTP ポート。デフォルトは 8080 です。 |
LOG_LEVEL | いいえ | debug、info(デフォルト)、warn、error |
/health と /healthz は認証なしで利用でき、認証情報を読み取りません。
X-Gateway-S2S 署名
MCP_TRANSPORT=http で CONDUIT_S2S_SECRET が設定されている場合、すべての /mcp リクエストに X-Gateway-S2S が必要です。
X-Gateway-S2S: t=<unix seconds>,v1=<hex hmac-sha256>
v1 は、CONDUIT_S2S_SECRET を鍵として、ASCII メッセージ t=<unix seconds> に対して計算した HMAC-SHA256 を 16 進数でエンコードしたものです。タイムスタンプはサーバーの時計から 300 秒以内でなければなりません。ヘッダーがない場合、または無効な場合は 401 を返します。シークレットがログに記録されることはありません。
AUTH_MODE=gateway では、/mcp に 3 つの X-Acronis-* ヘッダーも必要です。いずれかが欠けているリクエスト(または無効なベース URL を含むリクエスト)は 401 を返し、ACRONIS_* にフォールバックしません。
ローカルで実行(stdio)
Node >= 22 が必要です。
npm install
npm run build
ACRONIS_BASE_URL=https://us5-cloud.acronis.com \
ACRONIS_CLIENT_ID=... ACRONIS_CLIENT_SECRET=... npm start
HTTP として実行(ゲートウェイ/ホスト型)
CONDUIT_S2S_SECRET="$(openssl rand -hex 32)" MCP_TRANSPORT=http AUTH_MODE=env \
ACRONIS_BASE_URL=https://us5-cloud.acronis.com ACRONIS_CLIENT_ID=... ACRONIS_CLIENT_SECRET=... npm start
# → http://127.0.0.1:8080/mcp, health at http://127.0.0.1:8080/health
シークレットなしのローカル HTTP は開発専用です。127.0.0.1 にバインドし、警告をログに記録します。
MCP_TRANSPORT=http MCP_ALLOW_INSECURE_DEV=1 npm start
Docker
イメージ(node:26-alpine、ユーザー acronis として実行)は、コンテナ内で 0.0.0.0 をリッスンし、デフォルトで AUTH_MODE=gateway を使用します。レジストリ認証もビルドシークレットも不要です。コンテナには Acronis データセンターへのアウトバウンド HTTPS 接続が必要です。
docker build --platform linux/amd64 -t acronis-mcp .
docker run -e CONDUIT_S2S_SECRET="$(openssl rand -hex 32)" -p 127.0.0.1:8080:8080 acronis-mcp
CONDUIT_S2S_SECRET が設定されていない場合、Compose は起動を拒否し、ACRONIS_* を注入しません。
CONDUIT_S2S_SECRET="$(openssl rand -hex 32)" docker compose up
開発
npm install
npm run lint && npm run typecheck && npm test && npm run build
npm run smoke # dual-era HTTP smoke test (after build)
npm run gen-tools # regenerate src/generated/tools.ts
統合テストでは、固定された実際のパッケージを起動します。上流の 1.0.1 は tools/list に応答する前にトークンエンドポイントを必要とするため、テストでは API_BASE_URL=https://example.acronis.com とダミーの認証情報を維持しながら、OAUTH_TOKEN_URL と一時的な HOME をローカルの偽エンドポイントに向けます。
ライセンス
Apache-2.0
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。