Dynatrace SaaS MCP Server
Provides tools for observability and configuration management for Dynatrace SaaS, including DQL queries, logs, spans, metrics, entities, problems, vulnerabilities, settings, dashboards, notebooks, SLOs, and synthetic monitors.
Click on "Deploy 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., "@Dynatrace SaaS MCP Server list open problems with severity critical"
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.
Dynatrace SaaS MCP Server
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 |
|
|
|
|
Classic host |
|
|
|
|
Setup
Clone & install:
npm installConfigure environment:
cp .env.example .env # then edit .env.envis gitignored — never commit it.Variable
Required
Description
DT_PLATFORM_URLyes
Platform host base URL
DT_CLASSIC_URLyes
Classic host base URL
DT_PLATFORM_TOKENyes
Bearer token (
dt0s16…) for platform APIsDT_API_TOKENyes
Api-Token (
dt0c01…) for classic APIsDT_ENABLE_WRITESno
Set to
trueto allow create/update/delete operationsDT_HTTP_TIMEOUT_MSno
Request timeout in ms (default: 30000)
Required Token Scopes
Classic API token (dt0c01…)
Needed for settings, metrics, entities, problems:
metrics.readslo.read,slo.writelogs.readsettings.read,settings.writeentities.readproblems.readReadConfig,WriteConfigExternalSyntheticIntegration(synthetic read/write)credentialVault.read
Platform token (dt0s16…)
Needed for DQL/Grail, document APIs, SLOs, synthetic, and vulnerabilities:
storage:logs:readstorage:metrics:readstorage:spans:readstorage:entities:readstorage:bizevents:readstorage:events:readstorage:buckets:readstorage:system:readdocument:documents:read,document:documents:writedocument:environment-shares:read,document:environment-shares:writeslo:slos:read,slo:slos:writeautomation: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 typecheckRead-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 a DQL statement against Grail |
| Validate a DQL statement without returning data |
| Search logs via DQL |
| Search spans/traces via DQL |
| Retrieve a trace by trace ID |
| Search metric keys (Grail) or list descriptors |
| Get metadata for a specific metric |
| Query metric data points |
| List host entities |
| Query entities with an entitySelector |
| Get details for a specific entity |
| List available entity types |
| List open or recent problems |
| Get details for a specific problem |
| List security vulnerabilities |
| 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_entityreturns relationships and host properties inline, so it covers host-detail and entity-relationship use cases (there are no separateget_host/get_entity_relationshipstools).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 Dynatracedt-dql-essentialsskill from Dynatrace/dynatrace-for-ai, redistributed unmodified under the Apache License 2.0 (seeknowledge/dql/vendor/dynatrace-for-ai/LICENSE). Exposed via thedql_referencetool (topic: "official"/officialRef).knowledge/dashboards/vendor/dynatrace-for-ai/— the official Dynatracedt-app-dashboardsanddt-app-notebooksskills from Dynatrace/dynatrace-for-ai, redistributed unmodified under the Apache License 2.0 (seeknowledge/dashboards/vendor/dynatrace-for-ai/LICENSE). Exposed via thedashboard_referencetool (tile types, visualizations, variables, full dashboard/notebook examples).
Available Tools
152 toolsadd_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
Scored across 152 tools
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.
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.
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.
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
Related MCP Connectors
Query your app's logs, metrics and incidents from your AI assistant.
Manage uptime monitors and incidents and search logs, metrics and traces from an AI assistant.
Open-source agent that observes and fixes your application. Query logs, traces, metrics, incidents.
LLM Orchestration Agent (Opentelemetry Api)
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables 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.18790 npm34Apache 2.0
- FlicenseBqualityDmaintenanceEnables AI assistants to interact with Datadog APIs for querying metrics, logs, events, monitors, and APM traces.164-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Datadog's observability platform via natural language, covering metrics, logs, APM, monitors, dashboards, incidents, and infrastructure.2,087 npm1MIT
- FlicenseNot gradedqualityCmaintenanceEnables interaction with Dynatrace Grail and API endpoints by executing DQL queries, retrieving logs, reporting active problems, and querying metrics.-