mcpField
A
Acronis Cyber Protect Cloud

Acronis Cyber Protect Cloud

ローカル
github.comセキュリティ01 日前に更新

Acronis Cyber Protect Cloud について

Acronis Cyber Protect Cloudは、AcronisのMCPサーバーをホスト向けにラップし、選定したアカウント、アラート、ポリシー、リソース、エージェント、EDRインシデントの操作を提供します。読み取り中心のツールを許可リストで制限し、テナント分離、応答のサニタイズ、ゲートウェイ認証を加えています。

主な機能

  1. 0134個の読み取りツールと3個の任意の書き込みツール
  2. 02テナントの認証情報ごとに上流プロセスを分離
  3. 03応答のサニタイズと認証情報のマスキング
  4. 04SSRF対策としてAcronisのベースURLを検証
  5. 05stdioとHTTPトランスポートに対応

活用シーン

  1. 01テナントのアカウント、ユーザー、利用状況の確認
  2. 02アラート、ポリシー、リソース、保護状態の確認
  3. 03エージェントとEDRインシデントの確認
  4. 04選択したアラート、調査状態、ポリシーの変更

MCP 対応

`@acronis-platform/mcp`をラップし、許可リストで選別したAcronis操作をMCPクライアントに提供します。読み取りツールは既定で利用でき、3つの書き込みツールには`ACRONIS_ENABLE_WRITES=true`が必要です。HTTPリクエストではゲートウェイ認証を使用します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"wyre-ai-acronis": {
"command": "docker",
"args": [
"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.1"
],
"env": {
"ACRONIS_BASE_URL": "<ACRONIS_BASE_URL>",
"ACRONIS_CLIENT_ID": "<ACRONIS_CLIENT_ID>",
"ACRONIS_CLIENT_SECRET": "<ACRONIS_CLIENT_SECRET>",
"ACRONIS_ENABLE_WRITES": "<ACRONIS_ENABLE_WRITES>",
"MCP_TRANSPORT": "<MCP_TRANSPORT>",
"AUTH_MODE": "<AUTH_MODE>",
"LOG_LEVEL": "<LOG_LEVEL>"
}
}
}
}
起動コマンド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.1
設定が必要な環境変数
ACRONIS_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 secret
ACRONIS_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocighcr.io/wyre-ai/acronis-mcp:v1.0.1

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

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 による更新提案は可能ですが、自動マージは禁止です。更新時には担当者が次の作業を行う必要があります。

  1. 上流の tools/list と research/upstream-tools-1.0.1.json を比較する(新規、名称変更、または重複したツールの確認)。
  2. npm run gen-tools で src/generated/tools.ts を再生成する。
  3. 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,320n/a(公開されません)
34個の読み取りツール70,34367,309
37個のツール(読み取り+書き込み)75,82272,864

(ペイロードの大部分はスキーマであり、上流のまま保持されるため、説明の短縮による削減は約5%です。)

ツールティア上流 API
acronis_fetch_tenantreadAccount Management API 2
acronis_fetch_tenants_batchreadAccount Management API 2
acronis_fetch_tenant_childrenreadAccount Management API 2
acronis_fetch_tenant_usersreadAccount Management API 2
acronis_fetch_users_batchreadAccount Management API 2
acronis_fetch_userreadAccount Management API 2
acronis_fetch_current_user_inforeadAccount Management API 2
acronis_searchreadAccount Management API 2
acronis_fetch_tenant_mfa_statusreadAccount Management API 2
acronis_fetch_tenant_usagesreadAccount Management API 2
acronis_fetch_all_alertsreadAlert Manager 1.0
acronis_fetch_alertreadAlert Manager 1.0
acronis_fetch_categoriesreadAlert Manager 1.0
acronis_fetch_alert_countersreadAlert Manager 1.0
acronis_fetch_alerts_grouped_by_scopereadAlert Manager 1.0
acronis_fetch_all_alert_typesreadAlert Manager 1.0
acronis_fetch_resources_with_top_severity_alertsreadAlert Manager 1.0
acronis_fetch_alert_counts_per_customerreadAlert Manager 1.0
acronis_fetch_alerts_grouped_per_customerreadAlert Manager 1.0
acronis_fetch_active_alert_countreadAlert Manager 1.0
acronis_fetch_policiesreadResource and Policy Management API v4
acronis_fetch_policyreadResource and Policy Management API v4
acronis_fetch_policy_applicationsreadResource and Policy Management API v4
acronis_fetch_applications_issue_statisticsreadResource and Policy Management API v4
acronis_fetch_application_statuses_by_policyreadResource and Policy Management API v4
acronis_fetch_resourcesreadResource and Policy Management API v4
acronis_fetch_resource_countreadResource and Policy Management API v4
acronis_fetch_resourcereadResource and Policy Management API v4
acronis_fetch_resource_protection_statusreadResource and Policy Management API v4
acronis_fetch_agentsreadAgent Management REST API 2
acronis_fetch_agentreadAgent Management REST API 2
acronis_fetch_incidentsreadEndpoint Detection and Response API 1.0
acronis_fetch_incidentreadEndpoint Detection and Response API 1.0
acronis_fetch_response_action_statusreadEndpoint Detection and Response API 1.0
acronis_mark_alert_as_false_positivewriteAlert Manager 1.0
acronis_update_investigation_statewriteEndpoint Detection and Response API 1.0
acronis_execute_protection_policywriteResource 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-IdAPI クライアント ID
X-Acronis-Client-SecretAPI クライアントシークレット

ベース URL の検証(SSRF ガード): https のみ許可されます。ホスト名は .acronis.com で終わる必要があります。ユーザー情報、デフォルト以外のポート、パス/クエリ/フラグメントは許可されません。それ以外はすべて拒否されます(ゲートウェイモードでは 401 を返し、子プロセスは起動されません)。

環境変数
変数必須説明
ACRONIS_BASE_URLstdio および AUTH_MODE=envAcronis データセンターの URL(上記の検証を参照)
ACRONIS_CLIENT_IDstdio および AUTH_MODE=envAPI クライアント ID
ACRONIS_CLIENT_SECRETstdio および AUTH_MODE=envAPI クライアントシークレット
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_SECRETHTTP では必須サービス間シークレット。これが空、または既知のプレースホルダーの場合、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

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。