
Acronis Cyber Protect Cloud
io.github.WYRE-AI由 GitHub 帳號 WYRE-AI 發布v1.0.1更新於 Nov 7, 2026
Acronis Cyber Protect Cloud MCP: alerts, policies, resources, agents, tenants and EDR incidents.
概覽
以唯讀為主的 Acronis Cyber Protect Cloud MCP 介接:告警、EDR 事件、保護原則、資源、代理程式與租用戶。
- 可以做什麼
- 查詢告警:清單、詳情、計數器、分類、告警類型、依範圍或客戶分組、含最高嚴重度告警的資源
- 檢視保護原則與資源:原則、原則套用情形、問題統計、資源清單、資源保護狀態
- 檢視代理程式與 EDR 事件:代理程式清單與詳情、事件清單與詳情、回應動作狀態
- 查詢租用戶與使用者:租用戶、子租用戶、租用戶使用者、使用者資訊、MFA 狀態、用量、搜尋
- 選用寫入工具(預設關閉):將告警標記為誤報、更新調查狀態、執行保護原則
- 適用情境
- 適合讓助理在不開啟 Acronis 主控台的情況下檢視備份與安全狀況,例如查看作用中的告警、EDR 事件、原則套用失敗或未受保護的資源。也適合多租用戶服務商核對租用戶用量與 MFA 狀態。
- 執行需求
- 以本機程序(stdio)或 HTTP 容器方式執行;本機使用需 Node.js 22 以上版本。需要一個使用 client_credentials 的 Acronis API 用戶端:ACRONIS_BASE_URL(https,主機名稱以 .acronis.com 結尾)、ACRONIS_CLIENT_ID 與 ACRONIS_CLIENT_SECRET。需要能透過 HTTPS 連線至 Acronis 資料中心。HTTP 模式另需 CONDUIT_S2S_SECRET 與 X-Gateway-S2S 簽章;閘道模式從 X-Acronis-* 標頭取得憑證。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Acronis Cyber Protect Cloud,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
acronis-mcp
WYRE-AI hosted wrapper around the vendor's own MCP server for Acronis Cyber Protect Cloud
(@acronis-platform/mcp, pinned to the
exact version 1.0.1). The wrapper adds what the upstream server does not have:
- a curated, tiered tool allowlist (34 read tools, 3 opt-in write tools out of upstream's 159),
- per-tenant process isolation, hosted dual-era HTTP serving (2025-era
initializehandshake and 2026-07-28 stateless envelope), andX-Gateway-S2Sverification, - response sanitising (size cap, secret/token redaction, uniform error shape),
- an SSRF guard on the Acronis base URL (WYREAI-454).
tools/list is static (generated at build time), so it works without credentials and without
starting any child process. Only tools/call starts an upstream child.
Upstream pinning policy
@acronis-platform/mcp is pinned to an exact version in package.json (no ^/~; a test
enforces 1.0.1). Bumps happen by pull request only. Renovate/Dependabot may propose one, but it
must not auto-merge: a bump needs a human to
- diff the upstream
tools/listagainstresearch/upstream-tools-1.0.1.json(new, renamed or duplicated tools), - regenerate
src/generated/tools.tswithnpm run gen-tools, - re-review
research/tiers.jsonand the integration test.
Upstream 1.0.1 ships three duplicated tool names (device_authorization_approval,
fetch_registration_tokens, create_registration_token); none are allowlisted, and the generator
refuses any allowlisted name that is missing or duplicated upstream.
Why one child process per tenant
One upstream process holds one privileged client_credentials token and uses it for every caller.
Sharing a process between tenants would let one tenant's request run with another tenant's token.
So src/upstream-pool.ts spawns one child per distinct credential tuple
(key = sha256(baseUrl, clientId, clientSecret); raw values are never logged) over stdio, using
@modelcontextprotocol/client, and routes each call to its own tenant's child.
- Child binary:
require.resolve('@acronis-platform/mcp/package.json')→bin/cli.js, run withprocess.execPath. - Child environment is built from scratch (the parent env is not inherited, so
CONDUIT_S2S_SECRETetc. cannot leak):PATH,NODE_ENV,API_BASE_URL,OAUTH_CLIENT_ID,OAUTH_CLIENT_SECRET,MCP_TRANSPORT=stdio,MCP_TOOLS_INCLUDE=<allowlist for enabled tiers>. (The MCP client SDK additionally adds its own non-secret defaults:HOME,LOGNAME,SHELL,TERM,USER.) - LRU limit
ACRONIS_POOL_MAX(default 50), idle TTLACRONIS_POOL_IDLE_MS(default 10 min), and every child is closed on shutdown. An evicted child that is mid-call is closed when the call ends.
Known upstream behaviours to be aware of:
- Upstream 1.0.1 fetches an OAuth token eagerly at startup, so a child with bad credentials (or
no route to the datacenter) exits immediately. The caller then gets an
{error:{code:"upstream_unavailable",…}}result; the first call per tenant pays the token round trip. - Each tenant child runs with its own private, throwaway
HOME(mkdtemp, mode 0700, removed when the child exits), so the upstream token cache below is never shared between tenants. - Upstream caches the access token on disk under
~/.mcp/token-cache(mode 0600, AES-256-GCM, keyed from the client secret). - Upstream registers an extra built-in tool,
get_acronis_skill, that is not filtered byMCP_TOOLS_INCLUDE. The wrapper never lists or forwards it (the allowlist is enforced a second time in the call handler).
Tools
Tool names are acronis_ + the upstream name. A tool that is not in research/tiers.json is never
listed and never callable. This is enforced twice: MCP_TOOLS_INCLUDE on the child, and an allowlist
check in our tools/call handler.
- read tools are always available (
readOnlyHint: true). - write tools appear and work only when
ACRONIS_ENABLE_WRITES=true(defaultfalse); annotatedreadOnlyHint: false,destructiveHint: false.
Input schemas are taken verbatim from upstream. Because 37 tools exceeds the fleet's ~25 flat-tool
threshold, descriptions are cut to the first sentence (max 300 chars) with the
[Account Management API 2]-style prefix removed. Tool definitions live in
src/generated/tools.ts, produced by scripts/gen-tools.mjs (npm run gen-tools) from
research/upstream-tools-1.0.1.json filtered by research/tiers.json.
tools/list payload size (JSON bytes):
(Schemas dominate the payload and are kept from upstream, so description trimming saves ~5%.)
Excluded categories
Not exposed and not callable, whatever the environment:
- tenant / user / API-client create and delete, and all other deletes
- pricing, offering items, usage updates, editions (money)
- tokens, one-time tokens (OTT), device authorization, IdP / OpenID configuration
- registration tokens
- branding
- EDR
initiate_response_action - everything else not named in
research/tiers.json
Response sanitising
Every upstream result passes through src/sanitize.ts: text is capped at 100 KB with a truncation
marker; values under keys matching secret|password|token|access_token|refresh_token|api[_-]?key|authorization|client_secret
are redacted in JSON; Bearer tokens and JWT-looking strings are redacted anywhere; non-text blocks
are dropped. Errors reach the caller as {"error":{"code","message"}} with the message capped at
500 chars and the tenant's credentials scrubbed.
Credentials
Copy .env.example. Leave CONDUIT_S2S_SECRET empty in that file.
- Local / stdio (Claude Desktop, CLI): set
ACRONIS_BASE_URL,ACRONIS_CLIENT_ID,ACRONIS_CLIENT_SECRET(an Acronis API client withclient_credentials). stdio does not useCONDUIT_S2S_SECRET. - Hosted / gateway (
AUTH_MODE=gateway): credentials arrive per request and never fall back to the environment.
Base URL validation (SSRF guard): https only, hostname must end with .acronis.com, no
userinfo, no non-default port, no path/query/fragment. Anything else is rejected (401 in gateway
mode, no child spawned).
Environment variables
/health and /healthz stay unauthenticated and do not read credentials.
X-Gateway-S2S signing
With MCP_TRANSPORT=http and CONDUIT_S2S_SECRET set, every /mcp request must include X-Gateway-S2S:
v1 is HMAC-SHA256 over the ASCII message t=<unix seconds>, keyed with CONDUIT_S2S_SECRET, hex-encoded. The timestamp must be within 300 seconds of the server clock. A missing or invalid header returns 401. The secret is never logged.
In AUTH_MODE=gateway, /mcp also requires the three X-Acronis-* headers. A request missing any of them (or carrying an invalid base URL) returns 401 and does not fall back to ACRONIS_*.
Run locally (stdio)
Requires Node >= 22.
Run as HTTP (gateway / hosted)
Local HTTP without a secret is development-only. It binds 127.0.0.1 and logs a warning:
Docker
The image (node:26-alpine, runs as user acronis) listens on 0.0.0.0 inside the container and
defaults to AUTH_MODE=gateway. No registry auth or build secret is needed. The container needs
outbound HTTPS to the Acronis datacenters.
Compose refuses to start when CONDUIT_S2S_SECRET is unset and does not inject ACRONIS_*:
Development
The integration test spawns the real pinned package. Upstream 1.0.1 needs a token endpoint before it
answers tools/list, so the test points OAUTH_TOKEN_URL (and a temp HOME) at a local fake while
keeping API_BASE_URL=https://example.acronis.com and dummy credentials.
License
Apache-2.0
來源:README.md,提交 c07e384
工具
0版本歷史
1- v1.0.1最新Nov 7, 2026
評分
已滿足適用檢查項的 40%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
請在儲存庫或註冊中心條目中宣告授權條款。