datto-bcdr-mcp
Provides tools for managing Datto BCDR backup appliances (SIRIS/Alto), protected agents, recovery points, screenshot verifications, off-site sync status, alerts, and activity logs through the Datto partner portal API.
Datto BCDR MCP Server
Model Context Protocol (MCP) server for the Datto BCDR (Backup Portal) API. Exposes SIRIS / Alto appliances, protected agents, recovery points, screenshot verifications, off-site sync status, alerts, and activity logs to AI assistants.
Tools
Tool | Description |
| List all SIRIS/Alto appliances in the partner portal |
| Get appliance details by |
| List protected agents on an appliance |
| Get a specific protected agent |
| List recovery points for an agent |
| List screenshot verifications for an agent |
| Fetch a screenshot PNG (returned as base64 image content) |
| Off-site sync status for an appliance |
| Portal alerts (date-range filtered) |
| Activity log (date-range filtered) |
When the user omits required filters (date range, serial number, etc.) the server uses MCP elicitation to prompt for them.
Related MCP server: cipp-mcp
Features
Interactive Device Card (MCP Apps, SEP-1865):
datto_bcdr_get_devicerenders as a read-only interactive card in MCP Apps hosts (Claude Desktop/web) showing the appliance's backup status at a glance — neutral by default, brandable viawindow.__BRAND__injection orMCP_BRAND_*env vars; plain-JSON behavior is unchanged in other hosts. Editui/and runnpm run build:uito regenerate the embedded card bundle.
Configuration
Copy .env.example and set the variables below. The stdio
transport reads DATTO_BCDR_* and is not affected by HTTP service-to-service
auth.
Variable | Required | Description |
| For stdio and | Datto BCDR partner portal public key |
| For stdio and | Datto BCDR partner portal private key (secret) |
| No |
|
| No |
|
| No |
|
| Yes for HTTP | Service-to-service secret. The HTTP server logs an error and exits non-zero when this is empty or a known placeholder ( |
| No | Set to exactly |
| No | Bind address when |
| No | HTTP port. Defaults to |
/health stays unauthenticated and does not read credentials.
HTTP authentication
With MCP_TRANSPORT=http and CONDUIT_S2S_SECRET set, every /mcp request must include X-Gateway-S2S. A missing or invalid header returns 401 before vendor credentials are read.
The header value is t=<unix seconds>,v1=<hex hmac-sha256>. The signed message is the ASCII string t=<unix seconds> (the same timestamp prefix), and the HMAC key is CONDUIT_S2S_SECRET. Timestamps more than 300 seconds from the server clock are rejected.
import { createHmac } from "node:crypto";
const t = Math.floor(Date.now() / 1000);
const v1 = createHmac("sha256", process.env.CONDUIT_S2S_SECRET).update(`t=${t}`).digest("hex");
const xGatewayS2s = `t=${t},v1=${v1}`;In AUTH_MODE=gateway, /mcp also requires X-Datto-BCDR-Public-Key and X-Datto-BCDR-Private-Key (X-Datto-BCDR-Region is optional). Those headers are the only credential source for that request. A request missing either key returns 401 and does not fall back to DATTO_BCDR_PUBLIC_KEY / DATTO_BCDR_PRIVATE_KEY. Each request creates a fresh server instance with isolated credentials.
The WYRE MCP Gateway signs X-Gateway-S2S with the per-vendor subkey provisioned as CONDUIT_S2S_SECRET and injects the Datto headers:
await fetch("http://gateway:8080/mcp", {
method: "POST",
headers: {
"content-type": "application/json",
accept: "application/json, text/event-stream",
"x-gateway-s2s": xGatewayS2s,
"x-datto-bcdr-public-key": publicKey,
"x-datto-bcdr-private-key": privateKey,
},
body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "tools/list" }),
});Local development
npm install
npm run build
DATTO_BCDR_PUBLIC_KEY=... DATTO_BCDR_PRIVATE_KEY=... npm startHTTP refuses to start until CONDUIT_S2S_SECRET is set:
CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" MCP_TRANSPORT=http npm start
curl http://127.0.0.1:8080/healthLocal HTTP without a service-to-service secret is development-only. It binds 127.0.0.1 only and logs a warning. A non-loopback MCP_HTTP_HOST makes startup exit. The container image sets MCP_HTTP_HOST=0.0.0.0, so this bypass also needs -e MCP_HTTP_HOST=127.0.0.1 when using the image:
MCP_TRANSPORT=http MCP_ALLOW_INSECURE_DEV=1 npm startDocker
The image listens on 0.0.0.0 inside the container (MCP_HTTP_HOST) and defaults to AUTH_MODE=gateway. Publish the port on loopback and pass the S2S secret. In gateway mode, Datto credentials arrive on each request as headers; they are not read from the environment.
docker build -t datto-bcdr-mcp .
docker run --rm \
-e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \
-p 127.0.0.1:8080:8080 \
datto-bcdr-mcpCompose refuses to start when CONDUIT_S2S_SECRET is unset or empty, sets AUTH_MODE=gateway, publishes 127.0.0.1:8080:8080, and does not inject DATTO_BCDR_PUBLIC_KEY or DATTO_BCDR_PRIVATE_KEY:
CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" docker compose upSingle-tenant HTTP (AUTH_MODE=env) still requires the S2S secret, then uses DATTO_BCDR_PUBLIC_KEY and DATTO_BCDR_PRIVATE_KEY:
docker run --rm \
-e CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \
-e AUTH_MODE=env \
-e DATTO_BCDR_PUBLIC_KEY=your-value \
-e DATTO_BCDR_PRIVATE_KEY=your-value \
-p 127.0.0.1:8080:8080 \
datto-bcdr-mcpLicense
Apache-2.0
This server cannot be deployed
Maintenance
Related MCP Connectors
Hosted MCP servers for MSP tools: ConnectWise, NinjaOne, Microsoft 365, SentinelOne, Pax8 and more.
Cloud-hosted MCP server for secure AI access to enterprise data sources via CData Connect AI.
MCP Server for agents to onboard, pay, and provision services autonomously with InFlow
MCP server enabling AI agents to manage Bitrix24 features via standardized protocol
Related MCP Servers
- AlicenseAqualityAmaintenanceAn MCP server for Action1, a cloud-native RMM platform, enabling remote monitoring, patch management, and endpoint management through Action1's API.63Apache 2.0
- AlicenseBqualityAmaintenanceAn MCP server for CIPP (Community IT Professionals Platform), enabling MSPs to manage Microsoft 365 tenants, users, policies, and security settings through CIPP's API.4912Apache 2.0
- AlicenseNot gradedqualityAmaintenanceAn MCP server for Datto SaaS Protection, providing tools to manage cloud backup and recovery for Microsoft 365 and Google Workspace data through Datto's API.2Apache 2.0
- AlicenseNot gradedqualityAmaintenanceAn MCP server for Blackpoint Cyber MDR platform, enabling management of security monitoring, threat detection, and incident response through Blackpoint's API.Apache 2.0