mcpField
S
Spanning Cloud Backup

Spanning Cloud Backup

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

关于 Spanning Cloud Backup

Spanning Cloud Backup MCP 服务面向管理 Microsoft 365、Google Workspace 或 Salesforce SaaS 备份的团队,提供覆盖范围、备份历史、恢复、审计日志和许可证用量信息。用户备份状态也可显示为交互卡片。

主要功能

  1. 01列出备份用户并查看详情
  2. 02检查覆盖服务和备份历史
  3. 03排队提交恢复并查询状态
  4. 04查看管理员审计日志
  5. 05检查许可证用量
  6. 06以交互卡片显示用户备份状态

适用场景

  1. 01检查用户的备份覆盖情况
  2. 02查看某项服务的备份记录
  3. 03提交恢复并跟踪进度
  4. 04审计管理员活动或许可证用量

MCP 相关

向 MCP 客户端提供 Spanning Cloud Backup 工具,包括用户和备份查询、恢复请求、审计日志及许可证用量。用户详情可在 MCP Apps 宿主中显示为只读交互卡片。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"wyre-technology-spanning": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"SPANNING_PLATFORM",
"-e",
"SPANNING_ADMIN_EMAIL",
"-e",
"SPANNING_API_TOKEN",
"-e",
"MCP_TRANSPORT",
"-e",
"AUTH_MODE",
"-e",
"LOG_LEVEL",
"ghcr.io/wyre-technology/spanning-mcp:v1.1.3"
],
"env": {
"SPANNING_PLATFORM": "<SPANNING_PLATFORM>",
"SPANNING_ADMIN_EMAIL": "<SPANNING_ADMIN_EMAIL>",
"SPANNING_API_TOKEN": "<SPANNING_API_TOKEN>",
"MCP_TRANSPORT": "<MCP_TRANSPORT>",
"AUTH_MODE": "<AUTH_MODE>",
"LOG_LEVEL": "<LOG_LEVEL>"
}
}
}
}
启动命令docker run -i --rm -e SPANNING_PLATFORM -e SPANNING_ADMIN_EMAIL -e SPANNING_API_TOKEN -e MCP_TRANSPORT -e AUTH_MODE -e LOG_LEVEL ghcr.io/wyre-technology/spanning-mcp:v1.1.3
需要配置的环境变量
SPANNING_PLATFORMPlatform: 'm365', 'gws', or 'salesforce'
SPANNING_ADMIN_EMAILSpanning admin account email
SPANNING_API_TOKEN密钥Spanning API token
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/spanning-mcp:v1.1.3

工具

还没有获取到工具列表

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

详细介绍

Spanning Cloud Backup MCP 服务

CI License: Apache 2.0

一个 Model Context Protocol 服务,可将 Spanning Cloud Backup API 提供给 Claude 和其他 MCP 客户端。

功能

直接向 AI 助手展示 M365、Google Workspace 或 Salesforce 租户的 SaaS 备份状态——列出已备份的用户、查看受保护的服务、浏览备份历史记录、排队执行恢复,以及审计管理员活动和许可证使用情况。

  • 交互式备份状态卡片(MCP Apps,SEP-1865):spanning_get_user 会在 MCP Apps 宿主(Claude Desktop/web)中呈现为只读交互式卡片,显示用户的备份状态、许可证状态、上次备份时间以及各服务的覆盖情况;默认采用中性色,可通过 window.__BRAND__ 注入或 MCP_BRAND_* 环境变量自定义品牌 (MCP_BRAND_NAME、MCP_BRAND_LOGO_URL、MCP_BRAND_PRIMARY_COLOR、 MCP_BRAND_ACCENT_COLOR、MCP_BRAND_BG、MCP_BRAND_TEXT)。在其他宿主中,纯 JSON 行为保持不变。编辑 ui/ 后,运行 npm run build:ui 重新构建内嵌卡片。

工具

工具用途
spanning_list_users列出组织中已备份的用户
spanning_get_user获取单个用户的详细信息
spanning_list_services列出某用户受保护的服务
spanning_list_backups列出某用户和服务的备份运行记录
spanning_queue_restore排队执行恢复(破坏性操作——需要确认)
spanning_get_restore_status查看恢复进度
spanning_list_audit_log管理员审计日志(通过日期范围获取信息)
spanning_get_license_usage已用席位与已购席位
spanning_status服务状态/运行状况

凭据

复制 .env.example,并设置以下变量。在示例中将 CONDUIT_S2S_SECRET 留空。切勿提交真实密钥。

本地(env 模式)
export SPANNING_PLATFORM="m365"        # or "gws" or "salesforce"
export SPANNING_ADMIN_EMAIL="..."
export SPANNING_API_TOKEN="..."

stdio 传输会读取这些变量,不使用 CONDUIT_S2S_SECRET。

HTTP 传输

当 MCP_TRANSPORT=http 时,必须设置 CONDUIT_S2S_SECRET。如果该变量为空或为已知占位值(changeme、change-me、secret、placeholder、example、replace-me、replace-with-a-real-secret、your-secret、your-s2s-secret、s2s-secret),进程会记录错误并以非零状态码退出。密钥值绝不会被记录。使用 openssl rand -hex 32 生成密钥。

MCP_ALLOW_INSECURE_DEV=1 仅用于本地开发。设置后,HTTP 会在未设置 CONDUIT_S2S_SECRET 的情况下启动、记录警告、不检查 X-Gateway-S2S,并且仅监听 127.0.0.1。如果 MCP_HTTP_HOST 配置为非环回地址(包括 0.0.0.0),则会将其覆盖为 127.0.0.1 并记录此次覆盖。已知占位密钥仍会被拒绝。

未设置时,MCP_HTTP_HOST 默认为 127.0.0.1。配置了 CONDUIT_S2S_SECRET 时,会遵循 MCP_HTTP_HOST 的设置。容器镜像将 MCP_HTTP_HOST 设为 0.0.0.0,并将 AUTH_MODE 设为 gateway。

X-Gateway-S2S

设置了真实的 CONDUIT_S2S_SECRET 时,每个 /mcp 请求都必须包含 X-Gateway-S2S。检查逻辑位于 src/s2s-verify.ts 的 verifyS2sHeader 中:请求头的值为 t=<unix seconds>,v1=<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}" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
托管(网关模式)

AUTH_MODE=gateway(Docker 镜像和 Compose 默认值)要求每个 /mcp 请求都携带以下三个标头,且不会回退到进程环境中的 SPANNING_*:

  • X-Spanning-Platform(必需,取值为 m365 | gws | salesforce 之一)
  • X-Spanning-Admin-Email(必需)
  • X-Spanning-API-Token(必需,机密)

缺少其中任何一个标头,请求都会返回 HTTP 401。将它们添加到上面的签名 curl 命令中。网关 Compose 服务不会设置 SPANNING_PLATFORM、SPANNING_ADMIN_EMAIL 或 SPANNING_API_TOKEN。

/health 无需身份验证,也不会读取凭据。

单租户 HTTP(AUTH_MODE=env)

/mcp 仍要求有效的 X-Gateway-S2S 标头。供应商凭据来自 SPANNING_PLATFORM、SPANNING_ADMIN_EMAIL 和 SPANNING_API_TOKEN。请在该进程中传入这些变量。不要将它们添加到网关 Compose 服务。

变量必需描述
SPANNING_PLATFORMstdio 和 AUTH_MODE=envm365、gws 或 salesforce
SPANNING_ADMIN_EMAILstdio 和 AUTH_MODE=envSpanning 管理员账户邮箱
SPANNING_API_TOKENstdio 和 AUTH_MODE=envSpanning API 令牌
MCP_TRANSPORT否stdio(默认)或 http
AUTH_MODE否gateway(Docker 镜像和 Compose)或 env。网关模式要求提供 X-Spanning-* 标头,且绝不会回退到 SPANNING_*。
CONDUIT_S2S_SECRETHTTP 必需服务间 HMAC 密钥。此值为空或为已知占位值时,HTTP 会记录错误并以非零状态码退出。未设置此值时,Compose 不会启动。切勿提交真实值。
MCP_ALLOW_INSECURE_DEV否仅在本地开发时设为 1,以便在未设置 CONDUIT_S2S_SECRET 的情况下启动 HTTP。此设置会记录警告、跳过 X-Gateway-S2S 验证,并且只绑定到 127.0.0.1。
MCP_HTTP_HOST否MCP_TRANSPORT=http 时的绑定地址。默认为 127.0.0.1。设置 CONDUIT_S2S_SECRET 时,此设置生效。容器镜像会将其设为 0.0.0.0。
MCP_HTTP_PORT否HTTP 端口。默认为 8080。

运行

npm install
npm run build
npm start                       # stdio

# HTTP refuses to start until CONDUIT_S2S_SECRET is a real secret
CONDUIT_S2S_SECRET="$(openssl rand -hex 32)" MCP_TRANSPORT=http npm start

# Local HTTP only, without a service-to-service secret (always binds 127.0.0.1)
MCP_TRANSPORT=http MCP_ALLOW_INSECURE_DEV=1 npm start
Docker

镜像在容器内监听 0.0.0.0,并默认使用 AUTH_MODE=gateway。将端口发布到回环地址,并传入 S2S 密钥。在网关模式下,Spanning 凭据通过每个请求的标头传入。

docker build --secret id=npmrc,src=$HOME/.npmrc -t spanning-mcp .
docker run --rm \
  -e CONDUIT_S2S_SECRET \
  -p 127.0.0.1:8080:8080 \
  spanning-mcp

未设置 CONDUIT_S2S_SECRET 时,Compose 会拒绝启动;它会设置 AUTH_MODE=gateway、发布 127.0.0.1:8080:8080,且不会注入静态 Spanning 凭据:

CONDUIT_S2S_SECRET="$(openssl rand -hex 32)" docker compose up --build

构建镜像需要 GitHub Packages npmrc(docker build --secret id=npmrc,src=$HOME/.npmrc)。单租户 HTTP 仍要求提供 S2S 密钥,之后使用 SPANNING_*:

docker run --rm \
  -e CONDUIT_S2S_SECRET \
  -e AUTH_MODE=env \
  -e SPANNING_PLATFORM=m365 \
  -e [email protected] \
  -e SPANNING_API_TOKEN \
  -p 127.0.0.1:8080:8080 \
  spanning-mcp

许可证

Apache 2.0 — 详见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

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

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