Skip to main content
Glama
Dynatrace SaaS MCP Server

Dynatrace SaaS MCP Server

by mnmozi

Dynatrace SaaS MCP Server

CI

An MCP server for Dynatrace SaaS (Gen3 Platform) that exposes observability and configuration capabilities as tools for LLM agents (Claude Code, Claude Desktop, and any other MCP-compatible client).


Overview

This server bridges AI agents with Dynatrace SaaS, providing:

  • Observability — DQL queries, log search, span/trace lookup, metrics, entities, problems, vulnerabilities

  • Configuration — Settings 2.0 CRUD, dashboards, notebooks, SLOs, synthetic monitors

All write operations (create / update / delete) are blocked by default and must be explicitly enabled with DT_ENABLE_WRITES=true.


Related MCP server: MCP Datadog Server

Two-Host / Two-Token Model

Dynatrace SaaS exposes APIs across two distinct hostnames, each requiring a different token type.

Host

Env var

Example value

Auth header

APIs served

Platform host

DT_PLATFORM_URL

https://asn8731h.sprint.apps.dynatracelabs.com

Authorization: Bearer dt0s16…

/platform/* — DQL (Grail), dashboards, notebooks, SLOs, synthetic, vulnerabilities

Classic host

DT_CLASSIC_URL

https://asn8731h.sprint.dynatracelabs.com

Authorization: Api-Token dt0c01…

/api/v2/* — settings, metrics, entities, problems, logs (v2)


Setup

  1. Clone & install:

    npm install
  2. Configure environment:

    cp .env.example .env
    # then edit .env

    .env is gitignored — never commit it.

    Variable

    Required

    Description

    DT_PLATFORM_URL

    yes

    Platform host base URL

    DT_CLASSIC_URL

    yes

    Classic host base URL

    DT_PLATFORM_TOKEN

    yes

    Bearer token (dt0s16…) for platform APIs

    DT_API_TOKEN

    yes

    Api-Token (dt0c01…) for classic APIs

    DT_ENABLE_WRITES

    no

    Set to true to allow create/update/delete operations

    DT_HTTP_TIMEOUT_MS

    no

    Request timeout in ms (default: 30000)


Required Token Scopes

Classic API token (dt0c01…)

Needed for settings, metrics, entities, problems:

  • metrics.read

  • slo.read, slo.write

  • logs.read

  • settings.read, settings.write

  • entities.read

  • problems.read

  • ReadConfig, WriteConfig

  • ExternalSyntheticIntegration (synthetic read/write)

  • credentialVault.read

Platform token (dt0s16…)

Needed for DQL/Grail, document APIs, SLOs, synthetic, and vulnerabilities:

  • storage:logs:read

  • storage:metrics:read

  • storage:spans:read

  • storage:entities:read

  • storage:bizevents:read

  • storage:events:read

  • storage:buckets:read

  • storage:system:read

  • document:documents:read, document:documents:write

  • document:environment-shares:read, document:environment-shares:write

  • slo:slos:read, slo:slos:write

  • automation:workflows:read (optional, for synthetic execution)

  • securitySensor:vulnerabilities:read


Build & Run

# Install dependencies
npm install

# Build (compiles TypeScript to dist/)
npm run build

# Run the MCP server
node dist/index.js
# or equivalently:
npm start

# Development mode (tsx, no build step)
npm run dev

# Run tests
npm test

# Type-check only (no emit)
npm run typecheck

Read-Only by Default

All mutating tools (create, update, delete) check the enableWrites config flag. If the flag is false (the default), calling any write tool returns an error immediately — no network request is made.

Set DT_ENABLE_WRITES=true in your .env (or in the MCP client env config) to enable writes. Even then, each destructive tool has its own description noting that it is a write operation.


Tool Catalog

Observability

Tool

Description

execute_dql

Execute a DQL statement against Grail

verify_dql

Validate a DQL statement without returning data

search_logs

Search logs via DQL

search_spans

Search spans/traces via DQL

get_trace

Retrieve a trace by trace ID

list_metrics

Search metric keys (Grail) or list descriptors

get_metric_metadata

Get metadata for a specific metric

query_metric

Query metric data points

list_hosts

List host entities

find_entities

Query entities with an entitySelector

get_entity

Get details for a specific entity

list_entity_types

List available entity types

list_problems

List open or recent problems

get_problem

Get details for a specific problem

list_vulnerabilities

List security vulnerabilities

get_vulnerability

Get details for a specific vulnerability

Configuration

Settings (8 tools): list_settings_schemas (filter with query), get_settings_schema, list_settings_objects, get_settings_object, validate_settings_object, create_settings_object, update_settings_object, delete_settings_object

OneAgent (1 tool): list_oneagent_features — exact feature keys, flags and objectIds from builtin:oneagent.features

Trace sampling (1 tool): get_trace_sampling_config — the trace ingest-control and URL/RPC sampling settings of one scope, in one call

Dashboards (5 tools): list_dashboards, get_dashboard, create_dashboard, update_dashboard, delete_dashboard

Notebooks (5 tools): list_notebooks, get_notebook, create_notebook, update_notebook, delete_notebook

SLOs (7 tools): list_slos, get_slo, evaluate_slo, list_objective_templates, create_slo, update_slo, delete_slo

Synthetic (7 tools): list_monitors, get_monitor, list_synthetic_locations, list_synthetic_nodes, create_monitor, update_monitor, delete_monitor

Notes

  • get_entity returns relationships and host properties inline, so it covers host-detail and entity-relationship use cases (there are no separate get_host / get_entity_relationships tools).

  • Synthetic location/node tools are named list_synthetic_locations / list_synthetic_nodes.


MCP Client Registration

Add the following to your MCP client config (Claude Code ~/.claude/mcp.json or Claude Desktop claude_desktop_config.json):

{
  "mcpServers": {
    "dynatrace-saas": {
      "command": "node",
      "args": ["/Users/nasr/mycode/personal/saas-mcp/dist/index.js"],
      "env": {
        "DT_PLATFORM_URL": "https://asn8731h.sprint.apps.dynatracelabs.com",
        "DT_CLASSIC_URL": "https://asn8731h.sprint.dynatracelabs.com",
        "DT_PLATFORM_TOKEN": "dt0s16...",
        "DT_API_TOKEN": "dt0c01...",
        "DT_ENABLE_WRITES": "false"
      }
    }
  }
}

Replace the token values with real credentials. Set DT_ENABLE_WRITES to "true" only if you intend to allow the agent to create or modify Dynatrace configuration.


License

MIT — see LICENSE.

Third-party attribution

This project is MIT-licensed. It vendors one third-party component under its own license:

  • knowledge/dql/vendor/dynatrace-for-ai/dt-dql-essentials/ — the official Dynatrace dt-dql-essentials skill from Dynatrace/dynatrace-for-ai, redistributed unmodified under the Apache License 2.0 (see knowledge/dql/vendor/dynatrace-for-ai/LICENSE). Exposed via the dql_reference tool (topic: "official" / officialRef).

  • knowledge/dashboards/vendor/dynatrace-for-ai/ — the official Dynatrace dt-app-dashboards and dt-app-notebooks skills from Dynatrace/dynatrace-for-ai, redistributed unmodified under the Apache License 2.0 (see knowledge/dashboards/vendor/dynatrace-for-ai/LICENSE). Exposed via the dashboard_reference tool (tile types, visualizations, variables, full dashboard/notebook examples).

Available Tools

152 tools
add_iam_userA

Add a user to an organisational level (IAM v1, WRITE). Requires an account-scoped platform token with iam write scopes. level-type is 'account' or 'environment'; level-id is the corresponding UUID.

Inputs: levelType (required), levelId (required), user (required).

cancel_record_deletionA

Cancel a Grail record deletion process that is in progress or queued. Cancels subtasks that have not started yet; already-deleted data is NOT restored. Requires DT_ENABLE_WRITES=true. Required scopes: storage:records:delete, storage:events:read, storage:logs:read, storage:bizevents:read, storage:spans:read, storage:buckets:read.

Inputs: taskId (required).

check_api_spec_driftA

Compare committed OpenAPI specs against the live tenant's catalog. Without args: returns a catalog-level overview of added/removed specs. With a spec stem (e.g. 'platform_slo_v1', 'environment-api-v2'): deep-diffs operations.

Inputs: spec.

check_settings_schema_driftA

Compare committed settings-schema versions against the live tenant. Optionally perform a structural key-path diff for a specific schemaId.

Inputs: schemaId.

convert_lql_to_dqlA

Convert a legacy LQL (Log Query Language) matcher expression to a DQL (Dynatrace Query Language) equivalent (safe, read-only). Useful when migrating older pipeline routing conditions.

Inputs: body (required).

create_dashboardA

Create a new dashboard (WRITE). Sends a multipart/form-data POST per the Document Service spec. The content object is serialized to JSON and sent as the 'content' part with Content-Type application/json. Provide the content inline via 'content' OR from a file via 'contentPath' (not both). Requires DT_ENABLE_WRITES=true.

Inputs: name (required), content, contentPath.

create_event_notificationB

Create an event-notification (WRITE, platform notification v2).

Inputs: notification (required).

create_extension_monitoring_configB

Create a new monitoring configuration for an Extension 2.0 (WRITE). The config object must include at minimum a 'scope' field (e.g. HOST-XXXX) and a 'value' object.

Inputs: extensionName (required), config (required).

create_featureA

Create a feature in a project (WRITE). Requires feature-management:features:write scope and DT_ENABLE_WRITES.

Inputs: projectKey (required), feature (required).

create_feature_flagA

Create a flag in a feature (WRITE). Requires feature-management:features:write scope and DT_ENABLE_WRITES.

Inputs: projectKey (required), featureKey (required), flag (required).

create_feature_projectA

Create a Feature Management project (WRITE). Requires feature-management:projects:write scope and DT_ENABLE_WRITES.

Inputs: project (required).

create_filter_segmentA

Create a new filter segment (WRITE, platform storage filter-segments v1). Requires storage:filter-segments:write scope.

Inputs: filterSegment (required).

create_grail_bucketB

Create a new custom Grail retention bucket (WRITE, Dynatrace Storage Management v1). Requires DT_ENABLE_WRITES=true and the platform scope storage:bucket-definitions:write.

Inputs: bucket (required).

create_iam_groupA

Create a group at an organisational level (IAM v1, WRITE). Requires an account-scoped platform token with iam write scopes.

Inputs: levelType (required), levelId (required), group (required).

create_monitorB

Create a new synthetic monitor definition (WRITE). Pass a full monitor body per the platform synthetic v1 spec (SyntheticMultiProtocolMonitorRequest or SyntheticBrowserMonitorRequest).

Inputs: monitor (required).

create_notebookA

Create a new notebook (WRITE). Sends a multipart/form-data POST per the Document Service spec. The content object is serialized to JSON and sent as the 'content' part with Content-Type application/json. Provide the content inline via 'content' OR from a file via 'contentPath' (not both). Requires DT_ENABLE_WRITES=true.

Inputs: name (required), content, contentPath.

create_request_attributeA

Create a new request attribute (WRITE, classic Config API v1). Body must include at minimum: name, dataType, dataSources.

Inputs: requestAttribute (required).

create_request_namingB

Create a new request naming rule (WRITE, classic Config API v1). Body must include at minimum: naming, enabled, namingPattern, conditions.

Inputs: requestNaming (required).

create_self_notificationC

Create a self-notification (WRITE, platform notification v1).

Inputs: notification (required).

create_settings_objectB

Create a Settings 2.0 object (WRITE). Validate first with validate_settings_object.

Inputs: schemaId (required), scope (required), value (required).

create_sloB

Create an SLO (WRITE). Body fields per the SLO v1 spec (name, criteria, target, etc.).

Inputs: slo (required).

create_trust_policyA

Create a WIF trust policy for an account (IAM v1, WRITE). Requires an account-scoped platform token.

Inputs: accountUuid (required), trustPolicy (required).

create_trust_policy_mappingA

Create a WIF service user mapping for a trust policy (IAM v1, WRITE). Requires an account-scoped platform token.

Inputs: accountUuid (required), trustPolicyUuid (required), mapping (required).

create_workflowA

Create a Dynatrace Automation workflow (WRITE, platform Automation v1). Requires DT_ENABLE_WRITES=true and automation:workflows:write scope on the platform token.

Inputs: workflow (required).

delete_dashboardA

Delete (trash) a dashboard by id (WRITE). Optimistic locking: you must supply the current document version. The document is moved to the trash (restorable for 30 days). Requires DT_ENABLE_WRITES=true.

Inputs: id (required), version (required).

delete_event_notificationA

Delete an event-notification by ID (WRITE, destructive, platform notification v2).

Inputs: id (required).

delete_extension_monitoring_configB

Delete a specified monitoring configuration for an Extension 2.0 (WRITE, destructive).

Inputs: extensionName (required), configurationId (required).

delete_featureA

Delete a feature by key within a project (WRITE, destructive). Requires feature-management:features:delete scope and DT_ENABLE_WRITES.

Inputs: projectKey (required), featureKey (required).

delete_feature_flagA

Delete a feature flag by key (WRITE, destructive). Requires feature-management:features:delete scope and DT_ENABLE_WRITES.

Inputs: projectKey (required), featureKey (required), flagKey (required).

delete_feature_projectA

Delete a Feature Management project by key (WRITE, destructive). Requires feature-management:projects:delete scope and DT_ENABLE_WRITES.

Inputs: projectKey (required).

delete_filter_segmentA

Delete a filter segment by UID (WRITE, destructive, platform storage filter-segments v1). Requires storage:filter-segments:delete scope.

Inputs: uid (required).

delete_grail_bucketA

Delete a Grail retention bucket by name (WRITE, destructive, Dynatrace Storage Management v1). This permanently removes all data in the bucket. The operation is asynchronous; the bucket status transitions to 'deleting' until complete. Cannot delete buckets whose name starts with 'default_' or 'dt_'. Requires DT_ENABLE_WRITES=true and the platform scope storage:bucket-definitions:write.

Inputs: bucketName (required).

delete_monitorA

Delete a synthetic monitor definition by entity ID (WRITE, destructive).

Inputs: id (required).

delete_notebookA

Delete (trash) a notebook by id (WRITE). Optimistic locking: you must supply the current document version. The document is moved to the trash (restorable for 30 days). Requires DT_ENABLE_WRITES=true.

Inputs: id (required), version (required).

delete_request_attributeA

Delete a request attribute by ID (WRITE, destructive, classic Config API v1).

Inputs: id (required).

delete_request_namingA

Delete a request naming rule by ID (WRITE, destructive, classic Config API v1).

Inputs: id (required).

delete_self_notificationA

Delete a self-notification by ID (WRITE, destructive, platform notification v1).

Inputs: id (required).

delete_settings_objectA

Delete a Settings 2.0 object by objectId (WRITE, destructive).

Inputs: objectId (required).

delete_sloA

Delete an SLO by id (WRITE, destructive).

Inputs: id (required).

delete_trust_policyA

Delete a WIF trust policy by UUID (IAM v1, WRITE, destructive). Requires an account-scoped platform token.

Inputs: accountUuid (required), trustPolicyUuid (required).

delete_trust_policy_mappingB

Delete a WIF service user mapping by UUID (IAM v1, WRITE, destructive). Requires an account-scoped platform token.

Inputs: accountUuid (required), trustPolicyUuid (required), mappingUuid (required).

delete_workflowA

Delete a Dynatrace Automation workflow by ID (WRITE, destructive, platform Automation v1). Requires DT_ENABLE_WRITES=true and automation:workflows:write scope on the platform token.

Inputs: id (required).

evaluate_sloA

Evaluate an SLO by ID and return its compliance result (platform SLO v1). Uses the async evaluation:start / evaluation:poll flow per spec.

Inputs: id (required), timeframeFrom, timeframeTo.

execute_dqlA

Execute a Dynatrace Query Language (DQL) statement against Grail and return the result records. Use for logs, spans/traces, events, metrics, and entities. Example: 'fetch logs | filter loglevel == "ERROR" | limit 50'.

Inputs: query (required), maxResultRecords.

execute_record_deletionA

DESTRUCTIVE — permanently deletes Grail records matching the given DQL query and optional timeframe. Data that is deleted CANNOT be restored. Timeframe length is limited to 24 hours; end time must be at least 4 hours in the past. Subsequent requests are queued and executed in order. Returns a taskId to track deletion progress via get_record_deletion_status. Requires DT_ENABLE_WRITES=true. Required scopes: storage:records:delete, storage:events:read, storage:logs:read, storage:bizevents:read, storage:spans:read, storage:buckets:read. Allowed query commands: fetch, fields, fieldsAdd, fieldsRemove, filter, parse.

Inputs: query (required), timeFrame, timezone, locale.

find_entitiesA

Queries Smartscape entities via Grail DQL (Gen3-native). Pass useClassic:true to use the classic Entities v2 API on Gen2 tenants. The entitySelector must include a type(...) clause for the Grail DQL path; without it, a guidance message is returned.

Inputs: entitySelector (required), from, to, pageSize, +1 more.

get_audit_logA

Get a single audit log entry by its log ID (classic Audit Logs API, requires auditLogs.read scope). Uses GET /api/v2/auditlogs/{id}.

Inputs: id (required).

get_custom_serviceA

Get a single custom service definition by technology and ID (classic Config API v1, read-only).

Inputs: technology (required), id (required).

get_dashboardA

Get a dashboard by id — returns combined metadata and content. Fetches metadata from /documents/{id}/metadata and content from /documents/{id}/content, then merges them into { meta, content }.

Inputs: id (required).

get_entityA

Queries a single Smartscape entity by id via Grail DQL (Gen3-native). Pass useClassic:true to use the classic Entities v2 API on Gen2 tenants.

Inputs: entityId (required), useClassic.

get_event_notificationA

Get a single event-notification by ID (platform notification v2).

Inputs: id (required).

get_extensionB

List all versions of a specific Extension 2.0 by name.

Inputs: extensionName (required).

get_extension_environment_configB

Get the environment-level configuration for an Extension 2.0.

Inputs: extensionName (required).

get_extension_monitoring_configA

Get details of a specific monitoring configuration for an Extension 2.0.

Inputs: extensionName (required), configurationId (required).

get_featureA

Get a feature by key within a project (Dynatrace Feature Management API). Requires feature-management:features:read scope.

Inputs: projectKey (required), featureKey (required).

get_feature_flagA

Get a feature flag by key (Dynatrace Feature Management API). Requires feature-management:features:read scope.

Inputs: projectKey (required), featureKey (required), flagKey (required).

get_feature_projectB

Get a Feature Management project by key (Dynatrace Feature Management API).

Inputs: projectKey (required).

get_filter_segmentB

Get a filter segment by UID (platform storage filter-segments v1).

Inputs: uid (required).

get_grail_bucketA

Get a single Grail retention bucket definition by name (Dynatrace Storage Management v1).

Inputs: bucketName (required).

get_iam_userA

Get a single active user by UUID at an organisational level (IAM v1). Requires iam:users:read scope.

Inputs: levelType (required), levelId (required), uuid (required).

get_metric_metadataB

Get the descriptor/metadata for a single metric by key (classic Metrics v2). On Gen3/Grail tenants this endpoint may be unavailable; use query_metric or execute_dql instead.

Inputs: metricKey (required).

get_monitorA

Get the full definition of a single synthetic monitor by its entity ID.

Inputs: id (required).

get_notebookA

Get a notebook by id — returns combined metadata and content. Fetches metadata from /documents/{id}/metadata and content from /documents/{id}/content, then merges them into { meta, content }.

Inputs: id (required).

get_openpipeline_configurationA

Get the full OpenPipeline configuration for a specific data type (id). Returns all endpoints, pipelines, and routing rules. Use this to inspect or fetch the config before modifying it with update_openpipeline_configuration.

Inputs: id (required).

get_openpipeline_technology_processorsA

Get the processors available for a specific OpenPipeline technology. Use list_openpipeline_technologies first to find the technology id.

Inputs: id (required).

get_problemA

Get full details of one problem, including root cause and affected entities.

Inputs: problemId (required).

get_record_deletion_statusA

Get the status of a previously submitted Grail record deletion process. POST /platform/storage/record/v1/delete:status with the taskId from execute_record_deletion. Returns one of: finished, submitted, processing, unknown, or failed, plus optional progress and message fields. Required scopes: storage:records:delete, storage:events:read, storage:logs:read, storage:bizevents:read, storage:spans:read, storage:buckets:read.

Inputs: taskId (required).

get_request_attributeA

Get a single request attribute definition by ID (classic Config API v1).

Inputs: id (required).

get_request_namingB

Get a single request naming rule by ID (classic Config API v1).

Inputs: id (required).

get_self_notificationB

Get a single self-notification by ID (platform notification v1).

Inputs: id (required).

get_server_infoA

Report this MCP server's build identity: version, git commit, build time, write-mode, and target Dynatrace hosts. Use to verify which build is running.

Inputs: no named parameters.

get_settings_objectB

Get one Settings 2.0 object by objectId.

Inputs: objectId (required).

get_settings_schemaA

Get the full JSON schema for a Settings 2.0 schemaId. Use this to construct a valid 'value' before writing.

Inputs: schemaId (required).

get_sloA

Get one SLO by id (platform SLO v1).

Inputs: id (required).

get_traceA

Fetch all spans for a single trace id (ordered by start time) for latency/root-cause analysis.

Inputs: traceId (required), from.

get_trust_policyA

Get a WIF trust policy by UUID, including its service user mappings (IAM v1).

Inputs: accountUuid (required), trustPolicyUuid (required).

get_vulnerabilityA

Get full details of a single vulnerability by its ID (Dynatrace Platform Vulnerabilities v1).

Inputs: id (required), startTime, endTime.

get_workflowA

Get a single Dynatrace Automation workflow by ID (platform Automation v1). Requires automation:workflows:read scope.

Inputs: id (required).

get_workflow_executionA

Get a single Dynatrace Automation workflow execution by ID (platform Automation v1). Requires automation:workflows:read scope.

Inputs: id (required).

ingest_bizeventsA

Ingest a business event (CloudEvent) into Dynatrace via POST /api/v2/bizevents/ingest (WRITE). Requires DT_ENABLE_WRITES=true and a classic API token with the bizevents.ingest scope. Required CloudEvent fields: id, source, specversion, type. Optional: data, datacontenttype, dataschema, dtcontext, subject, time, traceparent.

Inputs: bizevent (required).

ingest_eventsA

Ingest a custom event into Dynatrace via POST /api/v2/events/ingest (WRITE). Requires DT_ENABLE_WRITES=true and a classic API token with the events.ingest scope. Required fields: eventType (e.g. CUSTOM_INFO, CUSTOM_DEPLOYMENT, AVAILABILITY_EVENT), title. Optional: entitySelector, properties (key/value map), startTime, endTime, timeout.

Inputs: event (required).

ingest_logsA

Ingest one or more log records into Dynatrace via POST /api/v2/logs/ingest (WRITE). Requires DT_ENABLE_WRITES=true and a classic API token with the logs.ingest scope.

Inputs: logs (required).

list_audit_logsA

List audit log entries (classic Audit Logs API, requires auditLogs.read token scope). Returns the auditLogs array. Supports time-range filtering via from/to and a free-text filter query. Uses the classic Environment API v2: GET /api/v2/auditlogs.

Inputs: filter, from, to, pageSize.

list_custom_servicesA

List all custom service definitions for a given technology (classic Config API v1, read-only).

Inputs: technology (required).

list_dashboardsA

List Dynatrace dashboards accessible to you (Document Service). Filters to type='dashboard'. Optionally pass pageSize (max 1000).

Inputs: pageSize.

list_entity_typesB

Queries Smartscape entity types via Grail DQL (Gen3-native). Returns guidance on common Grail entity tables. Pass useClassic:true to use the classic Entities v2 API on Gen2 tenants.

Inputs: pageSize, useClassic.

list_event_notificationsB

List event-notifications (platform notification v2). Returns paginated results array.

Inputs: no named parameters.

list_extension_monitoring_configsB

List all monitoring configurations for an Extension 2.0.

Inputs: extensionName (required), pageSize.

list_extensionsC

List all Extensions 2.0 available in the environment.

Inputs: pageSize.

list_feature_flagsB

List all flags in a feature (Dynatrace Feature Management API). Requires feature-management:features:read scope.

Inputs: projectKey (required), featureKey (required).

list_feature_projectsA

List all Feature Management projects (Dynatrace Feature Management API). Requires feature-management:projects:read scope.

Inputs: no named parameters.

list_featuresA

List all features in a Feature Management project. Requires feature-management:features:read scope.

Inputs: projectKey (required).

list_filter_segmentsA

List all Grail filter segments (platform storage filter-segments v1).

Inputs: no named parameters.

list_grail_bucketsA

List all Grail retention bucket definitions (Dynatrace Storage Management v1). Returns the full bucket array including bucketName, table, retentionDays, status, etc.

Inputs: no named parameters.

list_hostsA

Queries Smartscape host entities via Grail DQL (Gen3-native). Pass useClassic:true to use the classic Entities v2 API on Gen2 tenants. Optional tag/management-zone filters only work with useClassic:true (Gen2).

Inputs: tag, managementZone, pageSize, useClassic.

list_iam_groupsA

List visible groups at an organisational level (IAM v1). Requires iam:groups:read scope on an account-scoped platform token. level-type is 'account' or 'environment'; level-id is the corresponding UUID. Response array field: results (each item has uuid, groupName, type).

Inputs: levelType (required), levelId (required).

list_iam_service_usersA

List active service users usable by the calling user at an organisational level (IAM v1). Requires iam:service-users:use scope.

Inputs: levelType (required), levelId (required).

list_iam_usersA

List active users at an organisational level (IAM v1). Requires iam:users:read scope on an account-scoped platform token. level-type is 'account' or 'environment'; level-id is the corresponding UUID.

Inputs: levelType (required), levelId (required).

list_metricsA

List/search metric descriptors (classic Metrics v2). Use a metricSelector like 'builtin:host.*' to filter. On Gen3/Grail tenants this endpoint may be unavailable; use query_metric or execute_dql instead.

Inputs: selector, pageSize.

list_monitorsA

List all synthetic monitors (browser and network availability). Optionally filter using a monitor-selector expression.

Inputs: monitorSelector.

list_notebooksB

List Dynatrace notebooks accessible to you (Document Service). Filters to type='notebook'. Optionally pass pageSize (max 1000).

Inputs: pageSize.

list_objective_templatesB

List SLO objective templates (platform SLO v1).

Inputs: no named parameters.

list_openpipeline_configurationsA

List all OpenPipeline configurations (one per data type: logs, events, bizevents, metrics, spans, davis, sdlcEvents, securityEvents, etc.). Returns the available data-type configurations with their editable status.

Inputs: no named parameters.

list_openpipeline_processor_typesA

List, per data type, the processor types allowed in each pipeline stage (parsed from each configuration's pipelinesSpecification). Useful for discovering which processor types (e.g. 'fieldsAdd', 'dql', 'drop', 'geoLookup') are valid in a given stage for a given data type. Read-only.

Inputs: configId.

list_openpipeline_technologiesA

List all available OpenPipeline technology parsers (grouped by technology category). Each technology entry includes its id, name, matcher condition, and allowed configuration types.

Inputs: no named parameters.

list_problemsB

List problems (classic Problems v2). Filter by status/severity via problemSelector and a timeframe.

Inputs: problemSelector, from, to, pageSize.

list_release_stagesB

List all release stages in a Feature Management project. Requires feature-management:projects:read scope.

Inputs: projectKey (required).

list_request_attributesA

List all request attribute definitions (classic Config API v1).

Inputs: no named parameters.

list_request_namingsA

List all request naming rules (classic Config API v1).

Inputs: no named parameters.

list_self_notificationsA

List self-notifications (platform notification v1). Returns paginated results array.

Inputs: no named parameters.

list_settings_objectsB

List Settings 2.0 objects, filtered by schema and/or scope.

Inputs: schemaIds, scopes, pageSize.

list_settings_schemasC

List Settings 2.0 schema ids (classic). These identify configurable settings types.

Inputs: pageSize.

list_slosC

List Service-Level Objectives (platform SLO v1).

Inputs: pageSize.

list_synthetic_locationsB

List all synthetic locations (both public and private) available for the environment.

Inputs: no named parameters.

list_synthetic_nodesA

List all synthetic nodes (ActiveGates capable of running synthetic monitors).

Inputs: no named parameters.

list_trust_policiesA

List WIF (Workload Identity Federation) trust policies for an account (IAM v1). Requires an account-scoped platform token. Response array field: results.

Inputs: accountUuid (required).

list_trust_policy_mappingsA

List WIF service user mappings for a trust policy (IAM v1). Response array field: results.

Inputs: accountUuid (required), trustPolicyUuid (required).

list_vulnerabilitiesC

List security vulnerabilities (Dynatrace Platform Vulnerabilities v1). Supports optional DQL-style filter expressions, sort, and time range.

Inputs: filter, sort, startTime, endTime.

list_workflow_executionsA

List Dynatrace Automation workflow executions (platform Automation v1). Draft and simple workflow executions are not included. Requires automation:workflows:read scope on the platform token.

Inputs: workflow, state, limit, offset.

list_workflowsB

List Dynatrace Automation (Workflows) workflows via the platform Automation v1 API. Requires automation:workflows:read scope on the platform token.

Inputs: limit, offset, search.

openpipeline_dql_autocompleteA

Get DQL autocomplete suggestions for a DQL processor script (safe, read-only). Useful when authoring pipeline DQL expressions.

Inputs: body (required).

openpipeline_matcher_autocompleteA

Get autocomplete suggestions for a matcher (routing condition) expression (safe, read-only). Useful when authoring pipeline routing conditions.

Inputs: body (required).

preview_openpipeline_pipelineA

Preview the effect of an ORDERED SEQUENCE of processors by threading a record through each one via repeated /preview/processor API calls (safe, read-only). Each step's output record becomes the next step's input — this is pure-code orchestration, not a bulk API call. Returns a per-step trace (matched, record) and the finalRecord after all steps. Stops at the first step that returns an error.

Inputs: processors (required), sampleData (required).

preview_openpipeline_processorA

Preview the effect of a pipeline processor on sample data without mutating any configuration (safe, read-only). Returns per-record match and transformed record results. Use this to author and validate processors before applying them with update_openpipeline_configuration. Include a 'sampleData' string field (JSON-encoded record) inside the processor definition.

Inputs: processor (required).

query_metricA

Query metric data points via Grail DQL 'timeseries' (Gen3-native, platform token). Builds a timeseries query and executes it against the Grail storage API. Works on all Gen3/Grail tenants with the storage:metrics:read scope.

Inputs: metricKey (required), aggregation, by, filter, +3 more.

run_workflowA

Trigger a run of a Dynatrace Automation workflow (WRITE, platform Automation v1). Creates a new Execution for the workflow. Requires DT_ENABLE_WRITES=true and automation:workflows:run scope on the platform token.

Inputs: id (required), input.

search_logsA

Search logs in Grail via DQL. Builds a 'fetch logs' query with optional filters. For advanced needs use execute_dql.

Inputs: contains, loglevel, host, from, +1 more.

search_spansB

Search distributed-tracing spans in Grail via DQL ('fetch spans'). Filter by service, status, or duration.

Inputs: service, onlyErrors, minDurationMs, from, +1 more.

send_emailA

Send an email via the Dynatrace Email API (platform email v1). Requires DT_ENABLE_WRITES=true and the platform scope email:emails:send. The sender is fixed to no-reply@dev.apps.dynatracelabs.com.

Inputs: email (required).

update_dashboardA

Update an existing dashboard (WRITE). Uses PATCH /documents/{id} with multipart/form-data per the spec. Optimistic locking: you must supply the current document version. At least one of name, content, or contentPath must be provided. Requires DT_ENABLE_WRITES=true.

Inputs: id (required), version (required), name, content, +1 more.

update_event_notificationA

Update an event-notification by ID (WRITE, platform notification v2).

Inputs: id (required), notification (required).

update_extension_monitoring_configA

Update a specified monitoring configuration for an Extension 2.0 (WRITE). Scope cannot be changed; only the 'value' field is updated.

Inputs: extensionName (required), configurationId (required), config (required).

update_featureB

Update a feature by key within a project (WRITE). Requires feature-management:features:write scope and DT_ENABLE_WRITES.

Inputs: projectKey (required), featureKey (required), feature (required).

update_feature_flagA

Update a feature flag by key (WRITE). Requires feature-management:features:write scope and DT_ENABLE_WRITES.

Inputs: projectKey (required), featureKey (required), flagKey (required), flag (required).

update_feature_projectB

Update a Feature Management project by key (WRITE). Requires feature-management:projects:write scope and DT_ENABLE_WRITES.

Inputs: projectKey (required), project (required).

update_filter_segmentA

Update (replace) a filter segment by UID (WRITE, platform storage filter-segments v1). All fields are overwritten. Requires storage:filter-segments:write scope.

Inputs: uid (required), filterSegment (required).

update_grail_bucketA

Update a Grail retention bucket by name (WRITE, Dynatrace Storage Management v1). Uses an optimistic-locking PUT; include the current 'version' in the bucket body. Requires DT_ENABLE_WRITES=true and the platform scope storage:bucket-definitions:write.

Inputs: bucketName (required), bucket (required).

update_monitorA

Update (replace) a synthetic monitor definition by entity ID (WRITE). Sends a full PUT to /monitors/{monitor-id} per the platform synthetic v1 spec.

Inputs: id (required), monitor (required).

update_notebookA

Update an existing notebook (WRITE). Uses PATCH /documents/{id} with multipart/form-data per the spec. Optimistic locking: you must supply the current document version. At least one of name, content, or contentPath must be provided. Requires DT_ENABLE_WRITES=true.

Inputs: id (required), version (required), name, content, +1 more.

update_openpipeline_configurationA

Replace the full OpenPipeline configuration for a specific data type (WRITE, requires DT_ENABLE_WRITES=true). Fetch the current configuration first with get_openpipeline_configuration, modify it, then PUT it back. This replaces the entire configuration object.

Inputs: id (required), configuration (required).

update_request_attributeB

Update an existing request attribute by ID (WRITE, classic Config API v1).

Inputs: id (required), requestAttribute (required).

update_request_namingB

Update an existing request naming rule by ID (WRITE, classic Config API v1).

Inputs: id (required), requestNaming (required).

update_self_notificationB

Update a self-notification by ID (WRITE, platform notification v1).

Inputs: id (required), notification (required).

update_settings_objectB

Update an existing Settings 2.0 object by objectId (WRITE).

Inputs: objectId (required), value (required).

update_sloC

Update an SLO by id (WRITE).

Inputs: id (required), slo (required).

update_trust_policyA

Update a WIF trust policy by UUID (IAM v1, WRITE). Requires an account-scoped platform token.

Inputs: accountUuid (required), trustPolicyUuid (required), trustPolicy (required).

update_workflowA

Update (replace) a Dynatrace Automation workflow by ID (WRITE, platform Automation v1). Requires DT_ENABLE_WRITES=true and automation:workflows:write scope on the platform token.

Inputs: id (required), workflow (required).

validate_against_live_schemaA

Validate a settings value against the live schema (read-only, validateOnly). Returns violations, required-missing keys, and a corrected value filtered to known properties.

Inputs: schemaId (required), value (required), scope.

validate_settings_objectA

Validate a Settings 2.0 object payload WITHOUT persisting it (validateOnly=true). Returns constraint violations if invalid. Always safe (read-only).

Inputs: schemaId (required), scope (required), value (required).

verify_dqlA

Validate a DQL statement without returning data (executes with limit 0). Returns ok=true or the validation error.

Inputs: query (required).

verify_openpipeline_dql_processorA

Validate a DQL processor script without mutating any configuration (safe, read-only). Returns validation errors or a success indicator. Use this to author and validate DQL processing scripts before applying them with update_openpipeline_configuration.

Inputs: body (required).

verify_openpipeline_matcherA

Validate a matcher (routing condition) expression without mutating any configuration (safe, read-only). Use this to validate routing conditions before applying them with update_openpipeline_configuration.

Inputs: body (required).

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    B3.1/5.0

    Scored across 152 tools

    Disambiguation4/5

    Most tools target a distinct resource and action, with clear descriptions naming API versions and scopes. Some confusion is possible between generic execute_dql and purpose-built search_logs/search_spans/query_metric, and between v1/v2 notification tools, but these boundaries are mostly explained.

    Naming Consistency4/5

    The vast majority follow a consistent snake_case verb_noun pattern (list/get/create/update/delete/ingest/execute). Minor deviations include get_extension actually listing versions, non-verb-noun names like check_api_spec_drift, and mixing verb families (validate/verify/check/preview) for similar safety operations.

    Tool Count1/5

    152 tools is an extreme count for a single MCP server, far beyond the 25+ threshold for 'too many'. Even for a broad platform like Dynatrace, this creates a heavy selection burden and suggests the server is a dumping ground of many APIs rather than a coherent toolset.

    Completeness3/5

    Many resources have full CRUD (dashboards, SLOs, settings, monitors, workflows, buckets, feature flags, IAM). However there are notable dead ends: problems and vulnerabilities are read-only, custom services only list/get, and extensions lack create/delete for the extension itself.

    Maintenance

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      A
      maintenance
      Enables AI assistants to interact with self-hosted Dynatrace Managed environments to retrieve observability data, security insights, and performance metrics. It allows users to query problems, logs, events, and SLOs through natural language interfaces in both local and remote modes.
      18
      790 npm
      34
      Apache 2.0
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to interact with Datadog's observability platform via natural language, covering metrics, logs, APM, monitors, dashboards, incidents, and infrastructure.
      2,087 npm
      1
      MIT
    • F
      license
      Not graded
      quality
      C
      maintenance
      Enables interaction with Dynatrace Grail and API endpoints by executing DQL queries, retrieving logs, reporting active problems, and querying metrics.
      -