Dynatrace SaaS MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DT_API_TOKEN | Yes | Api-Token (dt0c01…) for classic APIs | |
| DT_CLASSIC_URL | Yes | Classic host base URL (e.g., https://asn8731h.sprint.dynatracelabs.com) | |
| DT_PLATFORM_URL | Yes | Platform host base URL (e.g., https://asn8731h.sprint.apps.dynatracelabs.com) | |
| DT_ENABLE_WRITES | No | Set to 'true' to allow create/update/delete operations (default: false) | |
| DT_PLATFORM_TOKEN | Yes | Bearer token (dt0s16…) for platform APIs | |
| DT_HTTP_TIMEOUT_MS | No | Request timeout in milliseconds (default: 30000) |
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 | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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'. |
| verify_dqlA | Validate a DQL statement without returning data (executes with limit 0). Returns ok=true or the validation error. |
| 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. |
| 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. |
| 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. |
| 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). |
| 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. |
| 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. |
| 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. |
| list_problemsB | List problems (classic Problems v2). Filter by status/severity via problemSelector and a timeframe. |
| get_problemA | Get full details of one problem, including root cause and affected entities. |
| search_logsA | Search logs in Grail via DQL. Builds a 'fetch logs' query with optional filters. For advanced needs use execute_dql. |
| search_spansB | Search distributed-tracing spans in Grail via DQL ('fetch spans'). Filter by service, status, or duration. |
| get_traceA | Fetch all spans for a single trace id (ordered by start time) for latency/root-cause analysis. |
| list_vulnerabilitiesC | List security vulnerabilities (Dynatrace Platform Vulnerabilities v1). Supports optional DQL-style filter expressions, sort, and time range. |
| get_vulnerabilityA | Get full details of a single vulnerability by its ID (Dynatrace Platform Vulnerabilities v1). |
| list_settings_schemasC | List Settings 2.0 schema ids (classic). These identify configurable settings types. |
| get_settings_schemaA | Get the full JSON schema for a Settings 2.0 schemaId. Use this to construct a valid 'value' before writing. |
| list_settings_objectsB | List Settings 2.0 objects, filtered by schema and/or scope. |
| get_settings_objectB | Get one Settings 2.0 object by objectId. |
| validate_settings_objectA | Validate a Settings 2.0 object payload WITHOUT persisting it (validateOnly=true). Returns constraint violations if invalid. Always safe (read-only). |
| create_settings_objectB | Create a Settings 2.0 object (WRITE). Validate first with validate_settings_object. |
| update_settings_objectB | Update an existing Settings 2.0 object by objectId (WRITE). |
| delete_settings_objectA | Delete a Settings 2.0 object by objectId (WRITE, destructive). |
| list_dashboardsA | List Dynatrace dashboards accessible to you (Document Service). Filters to type='dashboard'. Optionally pass pageSize (max 1000). |
| 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 }. |
| 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. |
| 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. |
| 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. |
| list_notebooksB | List Dynatrace notebooks accessible to you (Document Service). Filters to type='notebook'. Optionally pass pageSize (max 1000). |
| 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 }. |
| 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. |
| 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. |
| 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. |
| list_slosC | List Service-Level Objectives (platform SLO v1). |
| get_sloA | Get one SLO by id (platform SLO v1). |
| 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. |
| list_objective_templatesB | List SLO objective templates (platform SLO v1). |
| create_sloB | Create an SLO (WRITE). Body fields per the SLO v1 spec (name, criteria, target, etc.). |
| update_sloC | Update an SLO by id (WRITE). |
| delete_sloA | Delete an SLO by id (WRITE, destructive). |
| list_monitorsA | List all synthetic monitors (browser and network availability). Optionally filter using a monitor-selector expression. |
| get_monitorA | Get the full definition of a single synthetic monitor by its entity ID. |
| list_synthetic_locationsB | List all synthetic locations (both public and private) available for the environment. |
| list_synthetic_nodesA | List all synthetic nodes (ActiveGates capable of running synthetic monitors). |
| create_monitorB | Create a new synthetic monitor definition (WRITE). Pass a full monitor body per the platform synthetic v1 spec (SyntheticMultiProtocolMonitorRequest or SyntheticBrowserMonitorRequest). |
| 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. |
| delete_monitorA | Delete a synthetic monitor definition by entity ID (WRITE, destructive). |
| list_request_attributesA | List all request attribute definitions (classic Config API v1). |
| get_request_attributeA | Get a single request attribute definition by ID (classic Config API v1). |
| create_request_attributeA | Create a new request attribute (WRITE, classic Config API v1). Body must include at minimum: name, dataType, dataSources. |
| update_request_attributeB | Update an existing request attribute by ID (WRITE, classic Config API v1). |
| delete_request_attributeA | Delete a request attribute by ID (WRITE, destructive, classic Config API v1). |
| list_request_namingsA | List all request naming rules (classic Config API v1). |
| get_request_namingB | Get a single request naming rule by ID (classic Config API v1). |
| create_request_namingB | Create a new request naming rule (WRITE, classic Config API v1). Body must include at minimum: naming, enabled, namingPattern, conditions. |
| update_request_namingB | Update an existing request naming rule by ID (WRITE, classic Config API v1). |
| delete_request_namingA | Delete a request naming rule by ID (WRITE, destructive, classic Config API v1). |
| list_custom_servicesA | List all custom service definitions for a given technology (classic Config API v1, read-only). |
| get_custom_serviceA | Get a single custom service definition by technology and ID (classic Config API v1, read-only). |
| 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. |
| 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. |
| 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. |
| get_openpipeline_technology_processorsA | Get the processors available for a specific OpenPipeline technology. Use list_openpipeline_technologies first to find the technology id. |
| 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. |
| openpipeline_dql_autocompleteA | Get DQL autocomplete suggestions for a DQL processor script (safe, read-only). Useful when authoring pipeline DQL expressions. |
| 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. |
| openpipeline_matcher_autocompleteA | Get autocomplete suggestions for a matcher (routing condition) expression (safe, read-only). Useful when authoring pipeline routing conditions. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
| check_settings_schema_driftA | Compare committed settings-schema versions against the live tenant. Optionally perform a structural key-path diff for a specific schemaId. |
| 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. |
| 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. |
| 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. |
| list_workflowsB | List Dynatrace Automation (Workflows) workflows via the platform Automation v1 API. Requires automation:workflows:read scope on the platform token. |
| get_workflowA | Get a single Dynatrace Automation workflow by ID (platform Automation v1). Requires automation:workflows:read scope. |
| 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. |
| get_workflow_executionA | Get a single Dynatrace Automation workflow execution by ID (platform Automation v1). Requires automation:workflows:read scope. |
| 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. |
| 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. |
| 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. |
| 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. |
| list_grail_bucketsA | List all Grail retention bucket definitions (Dynatrace Storage Management v1). Returns the full bucket array including bucketName, table, retentionDays, status, etc. |
| get_grail_bucketA | Get a single Grail retention bucket definition by name (Dynatrace Storage Management v1). |
| 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. |
| 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. |
| 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. |
| list_filter_segmentsA | List all Grail filter segments (platform storage filter-segments v1). |
| get_filter_segmentB | Get a filter segment by UID (platform storage filter-segments v1). |
| create_filter_segmentA | Create a new filter segment (WRITE, platform storage filter-segments v1). Requires storage:filter-segments:write scope. |
| 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. |
| delete_filter_segmentA | Delete a filter segment by UID (WRITE, destructive, platform storage filter-segments v1). Requires storage:filter-segments:delete scope. |
| 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. |
| 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. |
| 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. |
| list_self_notificationsA | List self-notifications (platform notification v1). Returns paginated results array. |
| get_self_notificationB | Get a single self-notification by ID (platform notification v1). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mnmozi/dynatrace-mcp-saas'
If you have feedback or need assistance with the MCP directory API, please join our Discord server