Datto EDR MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| AUTH_MODE | No | HTTP credential source: env or gateway. The Docker image and Compose set gateway. | env |
| LOG_LEVEL | No | Log level: debug, info, warn, or error. Logs are always written to stderr. | info |
| DATTO_EDR_URL | No | Datto EDR instance base URL, e.g. https://yourcompany.infocyte.com. Required for stdio, or HTTP with AUTH_MODE=env. | |
| MCP_HTTP_HOST | No | HTTP bind address. The Docker image sets 0.0.0.0. | 127.0.0.1 |
| MCP_HTTP_PORT | No | HTTP port. | 8080 |
| MCP_TRANSPORT | No | Transport to use: stdio or http. | stdio |
| CONDUIT_S2S_SECRET | No | Required for HTTP. Shared secret for the X-Gateway-S2S header. Generate with openssl rand -hex 32. | |
| DATTO_EDR_API_TOKEN | No | Datto EDR API token. Required for stdio, or HTTP with AUTH_MODE=env. | |
| DATTO_EDR_READ_ONLY | No | Set to true to hide and block all write tools. | false |
| DATTO_EDR_ALLOW_HTTP | No | Set to 1 to allow an http:// instance URL, for local mock APIs only. | |
| DATTO_EDR_TIMEOUT_MS | No | Per-request timeout in milliseconds. | 30000 |
| MCP_ALLOW_INSECURE_DEV | No | Set to 1 to start HTTP without a service-to-service secret, local only (binds 127.0.0.1). | |
| DATTO_EDR_ALLOWED_HOSTS | No | Comma-separated host suffixes the instance URL must match, e.g. .infocyte.com. Recommended in gateway mode. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
| logging | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| datto_edr_navigateA | Discover available Datto EDR tools by domain. Returns tool names and descriptions for the selected domain. All tools are callable at any time — this is a help/discovery aid, not a prerequisite. |
| datto_edr_statusA | Check whether Datto EDR credentials are configured and list the available domains. Does not call the API; use datto_edr_test_connection for a live check. |
| datto_edr_test_connectionA | Test the connection and token against the Datto EDR instance (GET /api/Version). Returns the instance host and API version. |
| datto_edr_api_modelsA | List the API models this Datto EDR instance exposes (read from its /explorer/swagger.json), or pass "model" to see that model's paths and properties. Use it to find filterable field names before building a "where" filter. |
| datto_edr_raw_requestA | Read-only escape hatch for Datto EDR API endpoints not covered by a typed tool. Prefer typed tools. Sends GET https:///api/; the token is added automatically. Object values in "query" are JSON-encoded, so pass a LoopBack filter as {"filter":{"where":{...},"limit":50}} or a count as path "Model/count" with {"where":{...}}. Credential and token models are refused. |
| datto_edr_audit_log_listC | List user activity (audit log) entries (GET /api/useractivities). |
| datto_edr_agents_listA | List or search Datto EDR endpoint agents (GET /api/Agents). Filter by hostname, IP, active/authorized state and last heartbeat; add any other property (OS, version, isolation state...) through "where" after checking field names with datto_edr_api_models {"model":"Agents"}. Paged with limit/skip. |
| datto_edr_agents_getA | Get one Datto EDR agent by id (GET /api/Agents/{id}). |
| datto_edr_agents_countA | Count agents matching the same filters as datto_edr_agents_list (GET /api/Agents/count). Useful for "how many agents are offline" questions. |
| datto_edr_alerts_listA | List Datto EDR alerts, newest first (GET /api/Alerts). Filter by creation date range and archived state; filter by severity, host, organization, status or any other property through "where" (see datto_edr_api_models {"model":"Alerts"} for this instance's field names). Set archive_table for alerts older than 30 days. |
| datto_edr_alerts_getA | Get one Datto EDR alert by id (GET /api/Alerts/{id}). |
| datto_edr_alerts_countA | Count alerts matching the same filters as datto_edr_alerts_list (GET /api/Alerts/count). |
| datto_edr_alert_details_listA | List enriched alert records (GET /api/AlertDetails), which join alert, host and file/rule context. Use "where" to filter (e.g. by alert id or hostname) and "fields" to keep the response small. |
| datto_edr_target_groups_listA | List Datto EDR target groups (GET /api/targets). Target groups hold the hosts that scans and response actions run against; their ids are needed by datto_edr_scan_host and the response tools. |
| datto_edr_target_groups_getA | Get one target group by id (GET /api/targets/{id}). |
| datto_edr_addresses_listA | List discovered host addresses (GET /api/Addresses), optionally within one target group. Shows whether each host was reachable and which agent it maps to. |
| datto_edr_organizations_listA | List Datto EDR organizations (tenants/customers). The endpoint is looked up in this instance's /explorer/swagger.json; if it is missing, the error lists related models to query with datto_edr_raw_request. |
| datto_edr_organizations_getA | Get one Datto EDR organization by id. The endpoint is looked up in this instance's /explorer/swagger.json; if it is missing, the error lists related models to query with datto_edr_raw_request. |
| datto_edr_locations_listA | List Datto EDR locations (sites inside organizations). Filter by organization through "where" once you know the field name (datto_edr_api_models). The endpoint is looked up in this instance's /explorer/swagger.json; if it is missing, the error lists related models to query with datto_edr_raw_request. |
| datto_edr_locations_getA | Get one Datto EDR location by id. The endpoint is looked up in this instance's /explorer/swagger.json; if it is missing, the error lists related models to query with datto_edr_raw_request. |
| datto_edr_integrations_listA | List configured integrations (RMM, PSA, RocketCyber...). The endpoint is looked up in this instance's /explorer/swagger.json; if it is missing, the error lists related models to query with datto_edr_raw_request. |
| datto_edr_scans_listA | List Datto EDR scans (GET /api/scans), optionally for one target group. |
| datto_edr_scans_getB | Get one scan by id (GET /api/scans/{id}). |
| datto_edr_tasks_listA | List user tasks (scans, responses, enumerations shown in the task list), newest first (GET /api/usertasks). Use status "Active" for running tasks. |
| datto_edr_tasks_getA | Get one user task by id, including status, progress and message (GET /api/usertasks/{id}). Use it to follow a scan or response started by this server. |
| datto_edr_task_items_listA | List the per-host items of a user task (GET /api/userTaskItems), e.g. the result of a scan or response on each host. |
| datto_edr_jobs_listB | List background jobs (GET /api/jobs). Pass state "active" for running jobs. |
| datto_edr_scan_hostA | ⚠ HIGH-IMPACT: Start a forensic scan of one host (POST /api/targets/scan). Runs on the endpoint and uses its resources. Requires confirm: true; without it, returns the request it would send. Returns a task id for datto_edr_tasks_get. |
| datto_edr_run_responseA | ⚠ HIGH-IMPACT: Run a response extension (e.g. kill process, isolate, collect evidence) on one host (POST /api/targets/scan with the extension). Identify the extension by id or exact name. Requires confirm: true; without it, returns the request it would send. |
| datto_edr_isolate_hostA | ⚠ HIGH-IMPACT: Network-isolate one host by running the "Host Isolation" response extension. The host keeps talking to Datto EDR but loses all other network access until restored (Windows and Linux). Requires confirm: true. |
| datto_edr_restore_hostA | ⚠ HIGH-IMPACT: Remove network isolation from one host by running the "Host Isolation Restore" response extension. Requires confirm: true. |
| datto_edr_rules_listB | List Datto EDR detection rules (GET /api/rules). |
| datto_edr_rules_getA | Get one detection rule by id (GET /api/rules/{id}). |
| datto_edr_extensions_listA | List Datto EDR extensions (GET /api/extensions): collection extensions and response actions such as "Host Isolation" and "Host Isolation Restore". Extension ids/names feed datto_edr_run_response. |
| datto_edr_extensions_getB | Get one extension by id (GET /api/extensions/{id}). |
| datto_edr_action_types_listC | List the response/action types the instance supports (GET /api/ActionTypes). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 36 tools
Most tools target a distinct resource (agents, alerts, scans, tasks, rules, extensions) and descriptions clarify boundaries, but some pairs overlap: datto_edr_isolate_host and datto_edr_restore_host are specializations of datto_edr_run_response, and tasks/jobs/task_items/scans are easy to confuse at a glance. Alert_details_list versus alerts_list also requires reading descriptions to distinguish.
Nearly everything follows datto_edr_<resource>_<verb> in snake_case with a small predictable verb set (_list, _get, _count). The main deviation is verb-first ordering for action tools (isolate_host, restore_host, scan_host, run_response) versus noun-first for read tools, but the pattern remains readable and predictable.
36 tools is heavy for a coherent set; many resources get a three-tool pattern (list/get/count) that could be collapsed, and the discovery family (navigate, status, test_connection, api_models, raw_request) adds further surface. The domain is broad, but the count exceeds what an agent can comfortably select from.
Read coverage is strong across all major resources, and high-impact response actions exist (isolate, restore, scan, run_response), but there is no write lifecycle: no alert status/archive update, no rule creation or modification, and the raw_request escape hatch is read-only. These are notable gaps for an agent expected to manage rather than just observe.