datto-rmm-mcp
Provides tools for interacting with Datto RMM, enabling device inventory lookup, component/script library listing, running components as quick jobs on devices, and checking job status.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@datto-rmm-mcpList all devices in our Datto RMM account"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
datto-rmm-mcp
MCP server for Datto RMM — device inventory, the component (script) library, and Quick Job execution (run a component on a device right now), over the Model Context Protocol (Streamable HTTP/SSE transport).
Built for PRD-16562 (on-prem operations via Datto RMM, alongside self-host/NinjaOne) after a feasibility investigation confirmed the API surface — see Known Gaps for exactly what was and wasn't verified before this was written.
When would you use this
"What devices do we have in Datto?" / find a device before running something on it →
dattormm_get_devices"What scripts/components can we run?" →
dattormm_get_components"Run [component] on [device] now" →
dattormm_run_component(⚠️ destructive, irreversible — see Known Gaps for what you can and can't confirm afterward)"Did that job finish?" →
dattormm_get_job_status
Related MCP server: Datadog MCP Server
Tools
授权需要 X-Datto-Api-Key / X-Datto-Api-Secret / X-Datto-Api-Url 三个请求头(见下方授权说明)。
Tool | 功能 | 参数 |
| 列出该租户Datto RMM账号下的全部设备 |
|
| 列出可运行的组件/脚本库 | 无 |
| 立即在指定设备上运行指定组件——Datto的"Quick Job",破坏性、不可撤销 |
|
| 查询某次job是否已到达终态 |
|
dattormm_get_job_status只能确认job是否"completed",不能确认成败——见Known Gaps。
Quick Start
Docker (recommended)
docker compose up --buildThe server starts on http://localhost:8080.
Local (uv)
uv sync
python -m datto_rmm_mcpHealth Check
curl http://localhost:8080/health
# {"status": "ok"}No credentials are required for the health endpoint.
授权参数说明 (Authentication)
Every request to /mcp must include the following HTTP headers (provided by the
MCP caller/gateway):
Header | 类型 | 是否必填 | 字段描述 |
| string | 必填 | 租户在Datto RMM里生成的API Key。用作OAuth2 password grant的username。 |
| string | 必填 | 对应的API Secret Key。用作password。 |
| string | 必填 | 该租户账号所在的Datto RMM区域API host(Datto是多区域架构,每个租户账号固定绑在一个区域上,如 |
Missing any of the three headers returns 401 Unauthorized。
认证机制:本服务收到这三个凭据后,自己去调Datto的OAuth2 password grant(POST /auth/oauth/token,client_id/secret是Datto官方公开的固定值public-client/public,租户的API Key/Secret作为username/password),换出真正的bearer token再去调实际接口——不是网关代发token,是这个服务自己做的(因为Datto这套OAuth的client凭据本身就是公开常量,不存在需要网关代管的机密)。Token只在一次请求的生命周期内持有,从不缓存。
Environment Variables
Variable | Default | Description |
|
| Listening port |
|
| Listening host |
MCP Endpoint
POST http://localhost:8080/mcpConnect your MCP client with:
Transport:
http(Streamable HTTP / SSE)Headers:
X-Datto-Api-Key,X-Datto-Api-Secret,X-Datto-Api-Url(all required)
测试示例 (Test Example)
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-Datto-Api-Key: <api-key>" \
-H "X-Datto-Api-Secret: <api-secret>" \
-H "X-Datto-Api-Url: zinfandel-api.centrastage.net" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": { "name": "dattormm_get_devices", "arguments": { "max_results": 10 } }
}'⚠️ 本仓库为公开仓库,请勿在任何提交的文件中写入真实的API Key/Secret, 上面的占位符仅为示意。
Known Gaps
What was actually verified live, and how. This server was written after a feasibility investigation on real customer Datto RMM accounts (read-only credentials, OAuth2 password grant against real
tenant_integrationrecords), not from documentation alone:GET /api/v2/account/devices— called for real, returned real device records (1711 devices in one tested account).GET /api/v2/account/components— called for real, returned 250 real components.GET /api/v2/job/{jobUid}— called for real, twice, against two different real job UIDs on two different tenant accounts. Both returned only{id, dateCreated, name, uid, status}— no exitCode, stdout, stderr, or success/failure field of any kind.PUT /api/v2/device/{deviceUid}/quickjob(the tool that actually runs a script) has never been executed — by design, the investigation was read-only to stay invisible to customers. Its request/response contract inapi_client.py/tools/jobs.pyis taken from Datto's own current official documentation (rmm.datto.com/help/en/Content/2SETUP/APIv2.htm), not from a real call. Test this for real (a Datto trial/sandbox account, or an explicit customer-consented dry run) before treating this tool as production-ready.
No success/failure or stdout/stderr reporting, on purpose — and this is not a version artifact. Datto's own current API documentation states outright: "It is not possible from within the API to examine the success or failure result of a completed job schedule and access the StdOut/StdErr." Datto's v14.0.0 release notes separately claim "New API endpoints under v2/job now allow retrieval of job results, including StdOut and StdErr" — these two official Datto documents contradict each other, and this investigation could not resolve it: the "new endpoint" the release notes describe was never found (WebSearch results describing it could not be traced to a real, citable page), and there's no way to read a tested account's platform version from the API to know whether it should even have this capability. What's certain: the two real accounts tested, right now, do not return this data via
GET /v2/job/{jobUid}. Given this,dattormm_get_job_status's docstring is deliberately conservative — it reports only "reached a terminal state," never success. Do not add a success/failure field to this tool without a fresh, real test proving the new endpoint (whatever it turns out to be) actually exists and works.dattormm_run_component's request shape is desk-verified, not field-verified.{"componentUid": ..., "<variableName>": "<value>", ...}is what Datto's docs say to send; the docs also say a successful response contains auidusable asdattormm_get_job_status'sjob_uid— this server is built to that contract, but no real call has confirmed it works as documented, whether variable names are validated, or what a validation error actually looks like from this specific endpoint (blind probing during this investigation got a generic{"detail":"Failed to read request"}for every guessed body shape, including ones matching the eventual documented shape — that response never got more specific no matter what was sent, so it's untested whether the documented shape actually parses).componentUid discovery:
dattormm_get_componentsis the intended way to find one (confirmed working), even though Datto's own docs say to copy it from the UI manually — the API path works in practice, use it.No write/admin endpoints beyond quickjob are wrapped: device claim/unclaim, site management, alert management, and anything else in Datto's API are out of scope for this MCP; PRD-16562 only asked for deployment/execution + inventory.
Pagination parameters (
page,max) are passed through, not independently verified beyond amax=2smoke test — the exact upper bound Datto enforces, and whetherpageis 0- or 1-indexed, weren't confirmed field-by-field.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Model Context Protocol server for Studex tools, notifications, and profile integrations
BGG MCP provides access to the BoardGameGeek API through the Model Context Protocol, enabling retr…
Model Context Protocol server for todo.vu task management and time tracking.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceProvides tools for managing Netskope infrastructure, policies, and steering configurations via the Model Context Protocol.332ISC
- AlicenseNot gradedqualityDmaintenanceEnables integration with Datadog APIs to monitor and retrieve information about monitors, metrics, dashboards, logs, events, and incidents through the Model Context Protocol.3,024MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Fleet Device Management for device management, security monitoring, and compliance enforcement through the Model Context Protocol.5MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with DigitalOcean services and tools through a unified API via the Model Context Protocol.2MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/MSPbotsAI/datto-rmm-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server