{
  "markdown": "# Datto RMM MCP Server\n\nMCP server for Datto RMM, enabling Claude to interact with your Datto RMM account.\n\n## One-Click Deployment\n\n> [!IMPORTANT]\n> **Before you click:** this server depends on `@wyre-ai/node-datto-rmm`,\n> which is hosted on the **GitHub Packages** npm registry. GitHub Packages has no\n> anonymous access — even though the package is public, every `npm install` needs a\n> token. The cloud builder runs `npm install` for you, so you must give it one, or\n> the build fails with `npm error 401 Unauthorized ... npm.pkg.github.com`.\n>\n> 1. Create a GitHub **Personal Access Token** with the `read:packages` scope\n>    ([classic token](https://github.com/settings/tokens/new?scopes=read:packages&description=datto-rmm-mcp%20deploy)).\n>    Any GitHub account works — you do **not** need to be a member of the\n>    `wyre-technology` org to read its public packages.\n> 2. Add it as a build variable when prompted by the deploy flow:\n>    - **Cloudflare Workers** → set a build variable named **`NODE_AUTH_TOKEN`** to your PAT\n>      (Workers → Settings → Build → Variables and Secrets).\n>    - **DigitalOcean App Platform** → set an encrypted env var named **`GITHUB_TOKEN`**\n>      with scope **Build Time** to your PAT (the `.do/deploy.template.yaml` already declares it).\n\n[![Deploy to DO](https://www.deploytodo.com/do-btn-blue.svg)](https://cloud.digitalocean.com/apps/new?repo=https://github.com/WYRE-AI/datto-rmm-mcp/tree/main)\n\n[![Deploy to Cloudflare Workers](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/WYRE-AI/datto-rmm-mcp)\n\n> [!NOTE]\n> The DigitalOcean target builds the full Docker image and runs the complete MCP\n> server over HTTP — this is the recommended path for operators. This repo has no\n> Cloudflare Workers entrypoint (`src/worker.ts`), so the Workers button is not a\n> supported target yet; prefer DigitalOcean or the prebuilt container image\n> (`ghcr.io/wyre-ai/datto-rmm-mcp`).\n\n## Features\n\n- **Device Management**: List, search, and get details for devices\n- **Alert Management**: View and resolve alerts\n- **Interactive Alert Card (MCP Apps)**: `datto_get_alert` renders as an interactive card in MCP Apps hosts (Claude Desktop/web) with an in-card \"Resolve alert\" round-trip; neutral by default, brandable via `window.__BRAND__` injection or `MCP_BRAND_*` env vars; plain-JSON behavior is unchanged in other hosts\n- **Site Management**: List and view site details\n- **Quick Jobs**: Run quick jobs on devices\n- **Audit Data**: Retrieve full device audit or software inventory\n\n## Installation\n\n### Via MCP Gateway (Recommended)\n\nThis server is designed to work with the [MCP Gateway](https://github.com/wyre-technology/mcp-gateway) which handles authentication and credential management.\n\n### Local Development\n\nThis server's `@wyre-technology/*` dependencies live on the **GitHub Packages** npm\nregistry, which requires a token even for public packages. Authenticate once, then install:\n\n```bash\n# Authenticate npm to GitHub Packages (token needs the read:packages scope)\nexport NODE_AUTH_TOKEN=$(gh auth token)   # or a PAT with read:packages\n\nnpm install\nnpm run build\nnpm start\n```\n\nThe repo's `.npmrc` already points the `@wyre-technology` scope at GitHub Packages and\nreads the token from `NODE_AUTH_TOKEN`, so no further config is needed.\n\n## Configuration\n\nThe server accepts credentials via environment variables:\n\n| Variable | Description |\n|----------|-------------|\n| `DATTO_API_KEY` | Your Datto RMM API key |\n| `DATTO_API_SECRET` | Your Datto RMM API secret |\n| `DATTO_PLATFORM` | API platform: `pinotage`, `merlot`, `concord`, `vidal`, `zinfandel`, or `syrah` (default: `concord`) |\n\nWhen used with the MCP Gateway, credentials are injected via `X_API_KEY` and `X_API_SECRET` environment variables.\n\n### Platform Selection\n\nDatto RMM uses regional API endpoints. Select the platform that matches your account:\n\n| Platform | Region/Description |\n|----------|-------------------|\n| `pinotage` | South Africa |\n| `merlot` | Europe |\n| `concord` | US East (default) |\n| `vidal` | Canada |\n| `zinfandel` | US West |\n| `syrah` | Australia |\n\n## Available Tools\n\n| Tool | Description |\n|------|-------------|\n| `datto_list_devices` | List devices with optional site filter |\n| `datto_find_device` | Find a device by hostname (exact or partial match) and resolve its UID |\n| `datto_get_device` | Get device details by UID |\n| `datto_list_alerts` | List open alerts with optional site filter |\n| `datto_get_alert` | Get alert details by UID (renders as an interactive card in MCP Apps hosts) |\n| `datto_resolve_alert` | Resolve an alert |\n| `datto_list_sites` | List all sites |\n| `datto_get_site` | Get site details |\n| `datto_run_quickjob` | Run a quick job on a device |\n| `datto_get_device_audit` | Get device audit data (full or software only) |\n\n## Docker\n\n### Use the prebuilt image (no build, no token)\n\n```bash\ndocker pull ghcr.io/wyre-ai/datto-rmm-mcp:latest\n\ndocker run -p 8080:8080 \\\n  -e DATTO_API_KEY=xxx \\\n  -e DATTO_API_SECRET=xxx \\\n  -e DATTO_PLATFORM=concord \\\n  ghcr.io/wyre-ai/datto-rmm-mcp:latest\n```\n\nThe image is public and pulls anonymously, so this path needs no GitHub token at all.\n\n### Build from source\n\nThe build installs `@wyre-ai/node-datto-rmm` from GitHub Packages, which\nrequires a token even though the package is public (see\n[One-Click Deployment](#one-click-deployment)). The `Dockerfile` takes it as the\n`GITHUB_TOKEN` build arg — omit it and the build fails at `npm ci` with\n`npm error 401 Unauthorized ... npm.pkg.github.com`:\n\n```bash\ndocker build --build-arg GITHUB_TOKEN=$(gh auth token) -t datto-rmm-mcp .\n\ndocker run -p 8080:8080 \\\n  -e DATTO_API_KEY=xxx \\\n  -e DATTO_API_SECRET=xxx \\\n  -e DATTO_PLATFORM=concord \\\n  datto-rmm-mcp\n```\n\nThe token is written to a temporary `.npmrc` that is deleted in the same layer, so\nit is never baked into the image.\n\n> [!NOTE]\n> The image defaults to `MCP_TRANSPORT=http` on port 8080, so `-p 8080:8080` is\n> required to reach it. Health check: `curl http://localhost:8080/health`.\n\n## License\n\nApache-2.0\n",
  "bytes": 6100,
  "sha": "413a2a043e09da66ebf950c269251257545fe9c07fee3cba87fd86883860d293",
  "repo_slug": "wyre-technology/datto-rmm-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_wyre_technology_datto_rmm_mcp_218718a7/readme"
}