Model Context Protocol server for Datto RMM integration, providing tools for interacting with Datto RMM API including device management, alerts, patches, and quick job execution
The Datto RMM MCP server demonstrates solid definition quality with consistent naming patterns, detailed parameter descriptions, and well-structured schemas across all 10 tools. Tool names follow verb_noun convention (list_, find_, get_, create_, resolve_) and are clear and distinct. All tools have descriptions (ranging 94-156 chars, within the 10-1024 ideal range). Parameter schemas are complete with types, descriptions, and enums where appropriate. However, there are notable gaps: output schemas are not documented, making it unclear what fields agents should expect in responses; error handling descriptions are absent; and there is no guidance on parameter relationships or recovery paths. Additionally, tool descriptions lack 'when to use this tool instead of similar tools' disambigation, and some parameters (e.g., 'variables' in datto_create_quick_job) are described minimally. Security considerations (credentials, permissions) are handled server-side but not documented in tool descriptions. These omissions prevent a higher score despite otherwise solid fundamentals.
Execute a quick job on a device. Requires the component UID and any required variables for the job component.
Find a device by hostname and return its UID plus a lightweight summary. Use this before datto_get_device when the user provides a hostname instead of a UID.
Get detailed information about a specific alert by UID, including the alert card for UI rendering.
Get detailed information about a specific device by UID.
Get Windows patch installation status for a device, including pending, installed, and missing patches.
Get Windows patch installation status across all devices in a site.
Output schemas are not documented. Tool descriptions do not specify what fields will be returned, forcing LLMs to infer structure from examples or trial-and-error. This violates pattern:tool and prevents effective chaining of tools (agents cannot know if datto_find_device returns the device_uid needed by datto_get_device without calling it first).
datto_create_quick_job has a 'variables' parameter (type: object with additionalProperties) with minimal description: 'Key-value map of job variables (optional)'. No guidance on valid keys, expected value types, required vs. optional fields, or examples. This forces agents to guess parameter structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 73 | 2026-07-28+ | v2 |
List alerts for a device or site with optional filtering by status.
List all devices in Datto RMM. Can filter by site. To look up a single device by hostname, use datto_find_device instead.
List all sites in the Datto RMM account.
Resolve an alert by marking it as resolved.
No error handling guidance. Tool descriptions do not indicate what errors can occur (e.g., invalid deviceUid, permission denied, service unavailable) or how to recover (retry, use alternative tool, ask user). Violates pattern:recovery-guide.
Tool descriptions lack disambiguation guidance. For example, datto_find_device and datto_get_device both retrieve device information, but descriptions do not explain when to use find (search by hostname) vs. get (already have UID). Similarly, datto_list_alerts and datto_get_alert lack 'when to use' context. Pattern:tool-description requires explicit 'when to use this tool' statements.
datto_resolve_alert and datto_create_quick_job are destructive operations (WRITE risk) but descriptions do not explicitly state 'this operation is irreversible' or suggest a confirmation/dry-run pattern. Pattern:confirmation-request recommends confirmation steps for destructive ops.
Parameter descriptions lack format/constraint details. For example, 'siteUid' and 'deviceUid' are documented as strings with no format hint (UUID, alphanumeric pattern, length constraints). 'max' parameter defaults to 50 but no maximum value constraint is stated. Pattern:constrained-input requires explicit format/range documentation.
Pagination support is inconsistent. datto_list_devices, datto_list_alerts, and datto_list_sites accept 'max' but no offset/page/cursor parameter. datto_find_device has no pagination at all. Large result sets risk exhausting context or missing data. Pattern:paginated-result requires offset/limit or cursor-based pagination.
Parameter relationships are undocumented. For example, datto_list_alerts accepts both deviceUid and siteUid, are they mutually exclusive? What happens if both are omitted? What happens if both are provided? Pattern:tool-description requires explicit documentation of dependent parameters.