mcpField
D
Datto SaaS Protection

Datto SaaS Protection

本地服务
github.com文件与存储22 周前更新

关于 Datto SaaS Protection

Datto SaaS Protection 的 MCP 服务将 Datto REST API 接入 MCP 客户端,供管理 Microsoft 365 和 Google Workspace 备份的团队查看保护状态并管理席位。支持经确认后批量更改席位,并提供只读交互式席位卡片。

主要功能

  1. 01查看受保护的客户和域
  2. 02检查席位及保护状态
  3. 03查看应用备份状态
  4. 04确认后批量更改席位
  5. 05渲染交互式席位卡片

适用场景

  1. 01核查客户的 SaaS 备份覆盖情况
  2. 02检查特定席位的保护状态
  3. 03按应用查看备份统计
  4. 04批量许可、暂停或取消席位许可

MCP 相关

通过 MCP 工具向客户端开放 Datto SaaS Protection 的域、席位、应用和备份统计信息,并支持确认后执行批量席位更改。MCP Apps 主机可将席位查询呈现为只读交互卡片。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"wyre-technology-datto-saas-protection": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"DATTO_SAAS_API_KEY",
"-e",
"DATTO_SAAS_REGION",
"-e",
"MCP_TRANSPORT",
"-e",
"AUTH_MODE",
"-e",
"LOG_LEVEL",
"ghcr.io/wyre-technology/datto-saas-protection-mcp:v2.1.4"
],
"env": {
"DATTO_SAAS_API_KEY": "<DATTO_SAAS_API_KEY>",
"DATTO_SAAS_REGION": "<DATTO_SAAS_REGION>",
"MCP_TRANSPORT": "<MCP_TRANSPORT>",
"AUTH_MODE": "<AUTH_MODE>",
"LOG_LEVEL": "<LOG_LEVEL>"
}
}
}
}
启动命令docker run -i --rm -e DATTO_SAAS_API_KEY -e DATTO_SAAS_REGION -e MCP_TRANSPORT -e AUTH_MODE -e LOG_LEVEL ghcr.io/wyre-technology/datto-saas-protection-mcp:v2.1.4
需要配置的环境变量
DATTO_SAAS_API_KEY密钥Datto SaaS Protection (Backupify) API key
DATTO_SAAS_REGIONRegion: 'us' (default) or 'eu'
MCP_TRANSPORTTransport mode for the server. 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-technology/datto-saas-protection-mcp:v2.1.4

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Datto SaaS Protection MCP 服务

CI License: Apache 2.0

这是一个 Model Context Protocol 服务,可将 Datto SaaS Protection (Backupify) API 提供给 Claude 和其他 MCP 客户端使用。

功能

通过 Datto 公开的 REST API (https://api.datto.com/v1/saas/...),向 AI 助手展示 Microsoft 365 和 Google Workspace 客户的 SaaS 备份状态:列出受保护的客户和域名,查看席位及其保护状态,检查各应用的备份状态,以及(经确认后)批量授权、暂停或取消席位授权。

  • 交互式席位卡片(MCP Apps):在 MCP Apps 宿主(Claude Desktop/web)中,datto_saas_get_seat 会呈现为交互式卡片——只读,显示席位类型和 Datto 席位状态;默认采用中性色,可通过注入 window.__BRAND__ 或设置 MCP_BRAND_* 环境变量进行品牌化;在其他宿主中,纯 JSON 行为保持不变

工具

工具Datto 端点注解
datto_saas_list_domainsGET /v1/saas/domains只读
datto_saas_list_seatsGET /v1/saas/{saasCustomerId}/seats只读
datto_saas_get_seatGET /v1/saas/{saasCustomerId}/seats(筛选单个席位)只读
datto_saas_list_applicationsGET /v1/saas/{saasCustomerId}/applications只读
datto_saas_get_backup_statsGET /v1/saas/{saasCustomerId}/detailedBackupStats只读
datto_saas_bulk_seat_changePUT /v1/saas/{saasCustomerId}/{externalSubscriptionId}/bulkSeatChange写入,会造成破坏(需确认)

请从 datto_saas_list_domains 开始:它会返回其他所有工具所需的 saasCustomerId 和 externalSubscriptionId。

早期版本提供了 list_clients、list_backups、queue_restore、 get_restore_status、list_activity 和 get_license_usage。这些工具基于 Datto 未提供的路由(/v1/saas/clients、/restores、…) 构建,始终返回 404,因此现已移除。

凭据

在 Datto Partner Portal(Admin > Integrations > API Keys)中创建 API 密钥。该 API 使用 HTTP Basic 身份验证,并需要公钥/密钥对。API 只有一个主机(api.datto.com);没有区域性(EU)API 主机。

复制 .env.example,并设置以下变量。

变量必需说明
DATTO_SAAS_PUBLIC_KEYstdio 和 AUTH_MODE=env 时必需Datto REST API 公钥
DATTO_SAAS_SECRET_KEYstdio 和 AUTH_MODE=env 时必需Datto REST API 密钥
MCP_TRANSPORT否stdio(默认)或 http
AUTH_MODE否gateway(Docker 镜像和 Compose)或 env。Gateway 模式要求每个 /mcp 请求都携带 X-Datto-SaaS-Public-Key 和 X-Datto-SaaS-Secret-Key,且绝不会回退到 DATTO_SAAS_*。env 仅在 S2S 身份验证成功后使用这些变量。未设置时默认为 env。
CONDUIT_S2S_SECRETHTTP 模式下必需服务到服务密钥。如果该变量为空或使用已知占位值(changeme、secret、replace-me、your-s2s-secret、replace-with-a-real-secret 以及其他示例值,或未解析的 ${...} 模板),HTTP 服务会记录错误并以非零状态码退出。使用 openssl rand -hex 32 生成密钥。未设置此变量时,Compose 不会启动。此值绝不会写入日志。
MCP_ALLOW_INSECURE_DEV否仅限本地开发时,设为 1 才能在未设置 CONDUIT_S2S_SECRET 的情况下启动 HTTP。进程会记录警告,不会强制检查 X-Gateway-S2S,且仅绑定到 127.0.0.1。如果 MCP_HTTP_HOST 设置为非环回地址(包括 0.0.0.0),则会覆盖该设置并记录此覆盖。使用已知占位值作为密钥时仍会拒绝启动。
MCP_HTTP_HOST否设置了真实 CONDUIT_S2S_SECRET 时使用的绑定地址。未设置时默认为 127.0.0.1。容器镜像和 Compose 会在容器内将其设为 0.0.0.0。
MCP_HTTP_PORT否HTTP 端口。默认为 8080。

/health 无需身份验证,且不会读取凭据。stdio 传输不使用 CONDUIT_S2S_SECRET。

本地(env 模式)
export DATTO_SAAS_PUBLIC_KEY="..."
export DATTO_SAAS_SECRET_KEY="..."
托管(gateway 模式)

WYRE MCP Gateway 会通过请求头按请求注入凭据:

  • X-Datto-SaaS-Public-Key(必需,密钥)
  • X-Datto-SaaS-Secret-Key(必需,密钥)
  • X-Datto-SaaS-Region(为向后兼容而接受;忽略)

如果请求缺少公钥或密钥,则会返回 HTTP 401,且不会回退到进程环境中的 DATTO_SAAS_PUBLIC_KEY / DATTO_SAAS_SECRET_KEY。

HTTP 身份验证

设置了 MCP_TRANSPORT=http 和 CONDUIT_S2S_SECRET 时,每个 /mcp 请求都必须携带 X-Gateway-S2S。检查逻辑位于 src/s2s-verify.ts 中的 verifyS2sHeader:请求头的值为 t=<unix seconds>,v1=<hex>,其中 hex 是以 CONDUIT_S2S_SECRET 为密钥、对字面字符串 t=<unix seconds> 计算的 HMAC-SHA256(64 个小写十六进制字符)。时间戳与服务器时钟的偏差不得超过 300 秒。缺少或无效的请求头会导致 HTTP 401,且发生在读取供应商凭据之前。

TS=$(date +%s)
SIG=$(printf 't=%s' "$TS" | openssl dgst -sha256 -hmac "$CONDUIT_S2S_SECRET" -hex | awk '{print $NF}')
curl -sS http://127.0.0.1:8080/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -H "X-Gateway-S2S: t=${TS},v1=${SIG}" \
  -H "X-Datto-SaaS-Public-Key: $DATTO_SAAS_PUBLIC_KEY" \
  -H "X-Datto-SaaS-Secret-Key: $DATTO_SAAS_SECRET_KEY" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

运行

npm install
npm run build
npm start                       # stdio
CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" MCP_TRANSPORT=http npm start

在 CONDUIT_S2S_SECRET 设置为真实密钥之前,HTTP 会拒绝启动。未设置该密钥时,仅限开发环境启动本地 HTTP,并绑定到 127.0.0.1:

MCP_TRANSPORT=http MCP_ALLOW_INSECURE_DEV=1 npm start
Docker

镜像会在容器内的 0.0.0.0(MCP_HTTP_HOST)上监听,且默认使用 AUTH_MODE=gateway。将端口发布到环回地址,并传入真实的 S2S 密钥。在 gateway 模式下,Datto 凭据会作为请求头随每个请求传入;不会从环境变量中读取。

docker build -t datto-saas-protection-mcp .
docker run \
  -e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \
  -p 127.0.0.1:8080:8080 \
  datto-saas-protection-mcp

未设置 CONDUIT_S2S_SECRET 时,Compose 会拒绝启动。Gateway 服务会设置 AUTH_MODE=gateway,不会注入 DATTO_SAAS_PUBLIC_KEY 或 DATTO_SAAS_SECRET_KEY,并发布 127.0.0.1:8080:8080:

CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" docker compose up

单租户 HTTP(AUTH_MODE=env)仍需要 S2S 密钥,然后使用 DATTO_SAAS_PUBLIC_KEY 和 DATTO_SAAS_SECRET_KEY。它与上文的 Gateway Compose 服务相互独立。

docker run \
  -e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \
  -e AUTH_MODE=env \
  -e DATTO_SAAS_PUBLIC_KEY=your-public-key \
  -e DATTO_SAAS_SECRET_KEY=your-secret-key \
  -p 127.0.0.1:8080:8080 \
  datto-saas-protection-mcp

许可证

Apache 2.0——参见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。