Skip to main content
Glama
Datto RMM MCP Server

Datto RMM MCP Server

by am3cramirez

Datto RMM MCP Server

A Model Context Protocol server for the Datto RMM API v2, giving AI assistants full read/write access to devices, sites, alerts, audits, jobs, variables, filters, and activity logs.

Inspired by wyre-technology/datto-rmm-mcp (8 tools), this server covers the complete v2 API surface with 46 tools, plus OAuth token caching, automatic 401 re-auth, and 429 rate-limit retry with backoff.

Tools

Account

Tool

Description

datto_get_account

Account details

datto_list_devices

All devices, filterable by hostname, type, OS, site name, or filter ID

datto_list_sites

All sites, filterable by name

datto_list_users

Authentication users

datto_list_components

Automation components (for quick jobs)

datto_list_dnet_site_mappings

Datto Networking site mappings

datto_list_account_variables / datto_create_account_variable / datto_update_account_variable / datto_delete_account_variable

Account variable CRUD

Sites

Tool

Description

datto_get_site

Site details with device counts

datto_create_site / datto_update_site

Create or update sites

datto_list_site_devices

Devices in a site

datto_list_site_network_interfaces

Device network interface info for a site

datto_get_site_settings

Site settings

datto_list_site_filters

Device filters visible for a site

datto_set_site_proxy / datto_delete_site_proxy

Site proxy management

datto_list_site_variables / datto_create_site_variable / datto_update_site_variable / datto_delete_site_variable

Site variable CRUD

Devices

Tool

Description

datto_get_device / datto_get_device_by_id / datto_get_device_by_mac

Look up devices by UID, numeric ID, or MAC

datto_run_quickjob

Run a component on a device (with input variables)

datto_move_device

Move a device to another site

datto_set_device_udf

Set user-defined fields (udf1–udf30)

datto_set_device_warranty

Set warranty expiration date

Alerts

Tool

Description

datto_list_alerts

Open/resolved alerts, scoped to account, site, or device

datto_get_alert

Single alert details

datto_resolve_alert

Resolve an alert

Audit

Tool

Description

datto_get_device_audit

Full device audit (hardware, OS, network, patches)

datto_get_device_software

Installed software list

datto_get_esxi_audit / datto_get_printer_audit

ESXi host / printer audits

datto_get_audit_by_mac

Audit lookup by MAC address

Jobs

Tool

Description

datto_get_job

Job status and details

datto_get_job_components

Job components

datto_get_job_results

Per-device job results

datto_get_job_stdout / datto_get_job_stderr

Job output streams

Other

Tool

Description

datto_list_filters

Default or custom device filters

datto_list_activity_logs

Activity log search (date range, entities, free-text query)

datto_get_system_info

Platform status, pagination config, or current rate-limit usage

Related MCP server: ConnectWise Live MCP Server

Setup

1. Get API credentials

In Datto RMM: Setup > Users > [your user] > API keys. Note your platform from your Datto RMM URL (e.g. merlot.centrastage.net → merlot).

2. Configure

Environment variables:

Variable

Required

Description

DATTO_API_KEY

yes

API access key

DATTO_API_SECRET

yes

API secret key

DATTO_PLATFORM

yes*

One of pinotage, merlot, concord, vidal, zinfandel, syrah

DATTO_API_URL

no

Full base URL; overrides DATTO_PLATFORM

MCP_TRANSPORT

no

stdio (default) or http

PORT

no

HTTP port when MCP_TRANSPORT=http (default 3000)

3. Run

npm install
npm run build

Claude Desktop / Claude Code (claude_desktop_config.json or .mcp.json):

{
  "mcpServers": {
    "datto-rmm": {
      "command": "node",
      "args": ["/path/to/dattormm-mcp/dist/index.js"],
      "env": {
        "DATTO_API_KEY": "your-key",
        "DATTO_API_SECRET": "your-secret",
        "DATTO_PLATFORM": "merlot"
      }
    }
  }
}

Docker (Streamable HTTP):

docker build -t dattormm-mcp .
docker run -p 3000:3000 \
  -e DATTO_API_KEY=your-key \
  -e DATTO_API_SECRET=your-secret \
  -e DATTO_PLATFORM=merlot \
  -e MCP_TRANSPORT=http \
  dattormm-mcp

The HTTP transport runs stateless at POST / with a GET /health endpoint.

Notes

  • Rate limits: Datto allows 600 reads and 100 writes per 60 seconds. The client retries once on 429 honoring Retry-After; check live usage with datto_get_system_info (request_rate).

  • Pagination: list endpoints return at most 250 records per page — responses include pageDetails with next-page info; pass page/max to the tools.

  • Auth: OAuth tokens (100 h lifetime) are cached in-memory and transparently refreshed on expiry or 401.

  • The POST /v2/user/resetApiKeys endpoint is intentionally not exposed — it would invalidate the credentials the server is running with.

  • Alert mute/unmute endpoints are omitted: Datto removed alert muting in RMM 8.9.0.

License

MIT

Available Tools

46 tools
datto_create_account_variableCreate account variableC

Create an account-level variable.

Inputs: name (required), value (required), masked.

datto_create_siteCreate siteC

Create a new site in the account.

Inputs: name (required), notes, onDemand, description, +1 more.

datto_create_site_variableCreate site variableC

Create a variable in a site.

Inputs: name (required), value (required), siteUid (required), masked.

datto_delete_account_variableDelete account variableB

Delete an account-level variable by its numeric ID.

Inputs: variableId (required).

datto_delete_site_proxyDelete site proxyB

Delete the proxy settings of a site.

Inputs: siteUid (required).

datto_delete_site_variableDelete site variableB

Delete a site variable by its numeric ID.

Inputs: siteUid (required), variableId (required).

datto_get_accountGet accountA

Get the authenticated Datto RMM account's details (name, UID, currency, descriptors).

Inputs: no named parameters.

datto_get_alertGet alertA

Get details of a single alert by its UID.

Inputs: alertUid (required).

datto_get_audit_by_macGet device audit by MAC addressB

Get audit data of the device(s) matching a MAC address. Format: 12 hex characters, no separators.

Inputs: macAddress (required).

datto_get_deviceGet deviceA

Get details of a device by its UID.

Inputs: deviceUid (required).

datto_get_device_auditGet device auditA

Get the full audit data of a device (hardware, OS, network, disks, installed patches, etc.).

Inputs: deviceUid (required).

datto_get_device_by_idGet device by IDA

Get details of a device by its numeric device ID (as opposed to its UID).

Inputs: deviceId (required).

datto_get_device_by_macGet device by MAC addressB

Get the device(s) matching a MAC address. Format: 12 hex characters, no separators (XXXXXXXXXXXX).

Inputs: macAddress (required).

datto_get_device_softwareGet device software auditC

List the audited software installed on a device.

Inputs: deviceUid (required), max, page.

datto_get_esxi_auditGet ESXi host auditC

Get the audit data of an ESXi host device.

Inputs: deviceUid (required).

datto_get_jobGet jobA

Get the status and details of a job by its UID.

Inputs: jobUid (required).

datto_get_job_componentsGet job componentsB

List the components of a job.

Inputs: jobUid (required).

datto_get_job_resultsGet job results for a deviceB

Get the results of a job on a specific device.

Inputs: jobUid (required), deviceUid (required).

datto_get_job_stderrGet job stderrB

Get the standard error output of a job's run on a specific device.

Inputs: jobUid (required), deviceUid (required).

datto_get_job_stdoutGet job stdoutB

Get the standard output of a job's run on a specific device.

Inputs: jobUid (required), deviceUid (required).

datto_get_printer_auditGet printer auditB

Get the audit data of a printer device.

Inputs: deviceUid (required).

datto_get_siteGet siteA

Get details of a site (including device counts) by its UID.

Inputs: siteUid (required).

datto_get_site_settingsGet site settingsB

Get the settings of a site (proxy, privacy mode, etc.).

Inputs: siteUid (required).

datto_get_system_infoGet system infoA

Get platform system information: 'status' (version, uptime), 'pagination' (page size limits), or 'request_rate' (current API rate-limit usage for this account).

Inputs: type.

datto_list_account_variablesList account variablesB

List the account-level variables (usable in components and policies).

Inputs: max, page.

datto_list_activity_logsList activity logsA

Search the account's activity logs (audit trail of user and system actions). Defaults to the last 24 hours unless 'from' is set. Use searchAfter from the previous response page for cursor-based pagination.

Inputs: from, size, order, until, +7 more.

datto_list_alertsList alertsA

List open or resolved alerts. Scope to the whole account (default), a single site (siteUid), or a single device (deviceUid).

Inputs: max, page, muted, status, +2 more.

datto_list_componentsList componentsA

List the account's components (scripts/automation components). Use a component's UID with datto_run_quickjob.

Inputs: max, page.

datto_list_devicesList devicesA

List all devices in the account, with optional filters. Filter text params use SQL LIKE matching (use * as wildcard). Paginated; check pageDetails in the response for more pages.

Inputs: max, page, filterId, hostname, +3 more.

datto_list_dnet_site_mappingsList Datto Networking site mappingsB

List sites with their mapped Datto Networking (DNET) network IDs.

Inputs: max, page.

datto_list_filtersList device filtersA

List device filters. 'default' returns the built-in filters; 'custom' returns filters created in the account (requires administrator role). Filter IDs can be used with datto_list_devices and datto_list_site_devices.

Inputs: max, page, type.

datto_list_site_devicesList site devicesB

List the devices of a site.

Inputs: siteUid (required), max, page, filterId.

datto_list_site_filtersList site device filtersB

List the device filters visible for a site.

Inputs: siteUid (required), max, page.

datto_list_site_network_interfacesList site device network interfacesA

List shortened device records with network interface information (IP/MAC) for a site.

Inputs: siteUid (required), max, page.

datto_list_sitesList sitesA

List all sites in the account. Optionally filter by site name (LIKE match).

Inputs: max, page, siteName.

datto_list_site_variablesList site variablesC

List the variables of a site.

Inputs: siteUid (required), max, page.

datto_list_usersList usersB

List the authentication users of the account.

Inputs: max, page.

datto_move_deviceMove device to siteB

Move a device from its current site to another site.

Inputs: siteUid (required), deviceUid (required).

datto_resolve_alertResolve alertB

Resolve (close) an alert by its UID.

Inputs: alertUid (required).

datto_run_quickjobRun quick jobA

Run a component as a quick job on a device. Find component UIDs with datto_list_components. Returns the created job; poll it with datto_get_job and fetch output with datto_get_job_stdout.

Inputs: jobName (required), deviceUid (required), componentUid (required), variables.

datto_set_device_udfSet device UDFsA

Set user-defined fields (UDFs) on a device. Provide only the fields to change, keyed udf1 through udf30.

Inputs: udfs (required), deviceUid (required).

datto_set_device_warrantySet device warrantyC

Set the warranty expiration date of a device.

Inputs: deviceUid (required), warrantyDate (required).

datto_set_site_proxySet site proxyB

Create or update the proxy settings for a site.

Inputs: host (required), port (required), type (required), siteUid (required), +2 more.

datto_update_account_variableUpdate account variableB

Update an existing account-level variable by its numeric ID.

Inputs: variableId (required), name, value, masked.

datto_update_siteUpdate siteB

Update an existing site's name, description, or notes.

Inputs: name (required), siteUid (required), notes, description.

datto_update_site_variableUpdate site variableB

Update an existing site variable by its numeric ID.

Inputs: siteUid (required), variableId (required), name, value, +1 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.3/5.0

    Scored across 46 tools

    Disambiguation4/5

    Most tools have clearly distinct purposes, but some overlap exists (e.g., datto_get_device vs datto_get_device_by_id, datto_list_devices vs datto_list_site_devices). Descriptions help differentiate, but the similarity could cause occasional misselection.

    Naming Consistency5/5

    All tools follow a consistent ‘datto_verb_noun’ pattern using snake_case. Verbs like get, list, create, delete, update, set, move, resolve, run are used uniformly. No mixing of conventions.

    Tool Count4/5

    46 tools is high, but the Datto RMM domain is complex with many entities (sites, devices, alerts, jobs, variables, etc.). The count is slightly above ideal but still reasonable given the API’s breadth. Each tool serves a distinct purpose.

    Completeness3/5

    The set covers most core workflows (CRUD for sites and variables, listing and managing devices, alerts, jobs), but notable gaps exist: no tool to delete a site, no tool to manage components beyond listing, and no user management beyond listing. These gaps may require workarounds.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Provides comprehensive access to the Kaseya VSAX (VSA 10) REST API v3 through 67 specialized tools. It enables users to manage devices, run workflows, execute scripts, and oversee organizational data using natural language and OData query support.
      1
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables interaction with N-able RMM (N-sight) API to manage clients, sites, devices, and retrieve monitoring data such as checks, patches, and performance history.
      Apache 2.0
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables Claude to interact with Datto RMM accounts for device, alert, site, and quick job management through natural language.
      Apache 2.0