Dynatrace Managed MCP Server
OfficialDynatrace Managed MCP Server
The local Dynatrace Managed MCP server allows AI Assistants to interact with one or more self-hosted Dynatrace Managed deployments, bringing observability data directly into your AI-assisted workflow.
This MCP server supports two modes:
Local mode: Runs on your machine for development and testing.
Remote mode: Connects over HTTP/SSE for distributed or production-like setups.
This MCP server is specifically designed for Dynatrace Managed (self-hosted) deployments. For Dynatrace SaaS environments, please use theDynatrace MCP.
This open source product is supported by the community. For feature requests, questions, or assistance, please useGitHub Issues.
Quickstart
You can add this MCP server to your AI Assistant, such as VSCode, Claude, Cursor, Kiro, Windsurf, ChatGPT, or Github Copilot. For more details, please refer to the configuration section below.
Related MCP server: Dynatrace SaaS MCP Server
Configuration Methods
There are three ways to configure your Dynatrace Managed environments. Choose the method that works best for your use case:
Method 1: Configuration File (Recommended for Local Development)
The easiest way to configure multiple environments is by using a configuration file (JSON or YAML). This method supports:
✅ Clean, readable format - No quote escaping needed
✅ Comments (YAML only) - Document your configuration
✅ Environment variable interpolation - Keep tokens secure with
${VAR_NAME}syntax✅ Version control friendly - Commit config files without tokens
Example: dt-config.yaml
# Production environment
- dynatraceUrl: https://my-dashboard.company.com/
apiEndpointUrl: https://my-api.company.com/
environmentId: abc-123
alias: production
# Token is injected from an environment variable at runtime
apiToken: ${DT_PROD_TOKEN}
httpProxyUrl: http://proxy.company.com:8080
# Staging environment
- dynatraceUrl: https://staging-dashboard.company.com/
apiEndpointUrl: https://staging-api.company.com/
environmentId: xyz-789
alias: staging
apiToken: ${DT_STAGING_TOKEN}Example: dt-config.json
[
{
"dynatraceUrl": "https://my-dashboard.company.com/",
"apiEndpointUrl": "https://my-api.company.com/",
"environmentId": "abc-123",
"alias": "production",
"apiToken": "${DT_PROD_TOKEN}",
"httpProxyUrl": "http://proxy.company.com:8080"
}
]Usage in MCP configuration (e.g., claude_desktop_config.json):
Option A: Using npx (Recommended - no installation required)
{
"mcpServers": {
"dynatrace-managed": {
"command": "npx",
"args": ["-y", "@dynatrace-oss/dynatrace-managed-mcp-server@latest"],
"env": {
"DT_CONFIG_FILE": "./dt-config.yaml",
"DT_PROD_TOKEN": "dt0c01.ABC123...",
"DT_STAGING_TOKEN": "dt0c01.XYZ789...",
"LOG_LEVEL": "info"
}
}
}
}Option B: Local development (requires cloning the repository)
{
"mcpServers": {
"dynatrace-managed": {
"command": "node",
"args": ["./dist/index.js"],
"env": {
"DT_CONFIG_FILE": "./dt-config.yaml",
"DT_PROD_TOKEN": "dt0c01.ABC123...",
"DT_STAGING_TOKEN": "dt0c01.XYZ789...",
"LOG_LEVEL": "info"
}
}
}
}Note: Option B requires cloning this repository and running
npm install && npm run buildfirst.
Security Best Practice: Use environment variable interpolation (
${TOKEN_NAME}) in your config files so you can commit them to version control without exposing secrets!
See examples/dt-config.yaml and examples/dt-config.json for complete examples.
Method 2: Environment Variable (Docker/Kubernetes)
For Kubernetes deployments or if you prefer environment variables, you can set DT_ENVIRONMENT_CONFIGS with a JSON string:
DT_ENVIRONMENT_CONFIGS='[{"apiEndpointUrl":"https://api.example.com/","environmentId":"abc-123","alias":"production","apiToken":"dt0c01.ABC123"}]'This method works well for:
✅ Kubernetes ConfigMaps/Secrets
✅ Docker containers
✅ CI/CD pipelines
⚠️ Not ideal for local development (quote escaping is cumbersome)
Method 3: .env File (Not Recommended)
While you can use a .env file, multiline values don't work reliably. Use Method 1 (config file) instead for cleaner local development.
Configuration Priority
If multiple configuration methods are set, the MCP server uses this priority:
DT_CONFIG_FILE- External file (highest priority)DT_ENVIRONMENT_CONFIGS- JSON stringError - If neither is set
Configuration Fields
You need to configure the connection to your Dynatrace Managed environment(s). Each environment requires:
Configuration structure:
[
{
"dynatraceUrl": "https://my-dashboard-endpoint.com/",
"apiEndpointUrl": "https://my-api-endpoint.com/",
"environmentId": "my-env-id-1",
"alias": "alias-env",
"apiToken": "my-api-token",
"httpProxyUrl": "",
"httpsProxyUrl": ""
}
]Field descriptions:
dynatraceUrl: base URL for Dynatrace Managed dashboard, to which the environment ID will be appended (e.g.https://dmz123.dynatrace-managed.com). If not specified, will default to use the same value asDT_API_ENDPOINT_URL.apiEndpointUrl: base URL for Dynatrace Managed API, to which the environment ID will be appended (e.g.https://abc123.dynatrace-managed.com:9999)environmentId: ID of the managed environment, used for constructing URL for API and dashboards (e.g., of the form01234567-89ab-cdef-abcd-ef0123456789)alias: a friendly/human-readable name for the environmentapiToken: API token with required scopes (see Authentication)(optional)
httpProxyUrl/httpsProxyUrl: URL of proxy server for requests (see Environment Variables)
Getting Started
If you are using multiple environments, we strongly recommend that you set up rules (see Rules) to guide your LLM in better understanding each environment.
Changes to the environment configuration will need an MCP server restart/reload. Changes won't be picked up until a fresh reload.
Once configured, you can start using example prompts like Get all details of the Dynatrace entity 'my-service' or What problems has Dynatrace identified? Give details of the first problem..
These queries use V2 REST APIs and incur no additional costs beyond your standard Managed license.
Minimum supported version: Dynatrace Managed 1.328.0
Architecture
Local mode

Remote mode

Use cases
There are two ways that Dynatrace Managed, and thus the MCP, may be used:
Your Dynatrace Managed environment(s) is/are the primary Observability system, containing all live data; or
There has been a migration from a Dynatrace Managed environment to a Dynatrace Saas environment; however, historical observability data has not been migrated and can still be accessed via a Dynatrace Managed environment. The Dynatrace Managed MCP is used to access historical data, and a separate Dynatrace SaaS MCP is used to access live and more recent data.
Specific use cases for the Dynatrace Managed MCP include:
Real-time observability - Fetch production-level data for early detection and proactive monitoring
Contextual debugging - Fix issues with full context from monitored exceptions, logs, and anomalies
Security insights - Get detailed vulnerability analysis and security problem tracking. This can include multicloud compliance assessment with evidence-based investigation.
Natural language queries - Queries are mapped to MCP tool usage, and thus API queries, with guidance for the next step
Multiphase incident investigation - Systematic impact assessment and troubleshooting
Multienvironment support - Query multiple Dynatrace Managed environments from the same MCP server
Capabilities
Problems - List and get problem details from your services (for example Kubernetes)
Security - List and get security problems / vulnerability details
Entities - Get more information about a monitored entity, including relationship mappings
SLO - List and get Service Level Objective details, including evaluation and error budgets
Event Tracking - List and get system events
Log Investigation - Search and filter logs with advanced content and time-based queries
Metrics Analysis - Query and analyze performance metrics using V2 Metrics API
Performance Considerations
Important: This MCP server makes API calls to the Dynatrace Managed environment(s). It is designed for efficient usage (e.g., limiting the response sizes), but care should be taken not to overload the Dynatrace Managed environment(s) with large queries.
Best Practices:
Use specific time ranges (e.g., 1-2 hours) rather than large historical queries.
Use specific filters to limit the scope of queries as much as possible, for example, entity selectors that specify the entity ID.
If using multiple environments, be specific about which one to query, where applicable. If querying multiple at once, be mindful of how much data will be returned to the LLM, e.g. top 10 problems from 2 envs = 20 problems, versus top 10 problems from 10 envs = 100 problems.
Configuration
You can add this MCP server (using STDIO or HTTP) to your AI Assistant.
We recommend always setting it up for your current workspace instead of using it globally.
VS Code
{
"servers": {
"npx-dynatrace-managed-mcp": {
"command": "npx",
"cwd": "${workspaceFolder}",
"args": ["-y", "@dynatrace-oss/dynatrace-managed-mcp-server@latest"],
"envFile": "${workspaceFolder}/.env"
}
}
}Please note: In this config, the ${workspaceFolder} variable is used.
This only works if the config is stored in the current workspace, e.g., <your-repo>/.vscode/mcp.json. Alternatively, this can also be stored in user settings, and you can define env as follows:
{
"servers": {
"npx-dynatrace-managed-mcp": {
"command": "npx",
"args": ["-y", "@dynatrace-oss/dynatrace-managed-mcp-server@latest"],
"env": {
"DT_ENVIRONMENT_CONFIGS": "[{\"dynatraceUrl\":\"https://my-dashboard-endpoint.com/\",\"apiEndpointUrl\":\"https://my-api-endpoint.com/\",\"environmentId\":\"my-env-id-1\",\"alias\":\"alias-env\",\"apiToken\":\"my-api-token\"},{\"dynatraceUrl\":\"https://my-dashboard2-endpoint.com/\",\"apiEndpointUrl\":\"https://my-api2-endpoint.com/\",\"environmentId\":\"my-env-id-2\",\"alias\":\"alias-env-2\",\"apiToken\":\"my-api-token-2\"}]"
}
}
}
}Claude Desktop
{
"mcpServers": {
"dynatrace-managed-mcp": {
"command": "npx",
"args": ["-y", "@dynatrace-oss/dynatrace-managed-mcp-server@latest"],
"env": {
"DT_ENVIRONMENT_CONFIGS": "[{\"dynatraceUrl\":\"https://my-dashboard-endpoint.com/\",\"apiEndpointUrl\":\"https://my-api-endpoint.com/\",\"environmentId\":\"my-env-id-1\",\"alias\":\"alias-env\",\"apiToken\":\"my-api-token\"},{\"dynatraceUrl\":\"https://my-dashboard2-endpoint.com/\",\"apiEndpointUrl\":\"https://my-api2-endpoint.com/\",\"environmentId\":\"my-env-id-2\",\"alias\":\"alias-env-2\",\"apiToken\":\"my-api-token-2\"}]"
}
}
}
}Kiro
Amazon Kiro is an agentic IDE, and Kiro CLI provides an interactive chat experience directly in your terminal.
{
"mcpServers": {
"dynatrace-managed-mcp": {
"command": "npx",
"args": ["-y", "@dynatrace-oss/dynatrace-managed-mcp-server@latest"],
"env": {
"DT_ENVIRONMENT_CONFIGS": "[{\"dynatraceUrl\":\"https://my-dashboard-endpoint.com/\",\"apiEndpointUrl\":\"https://my-api-endpoint.com/\",\"environmentId\":\"my-env-id-1\",\"alias\":\"alias-env\",\"apiToken\":\"my-api-token\"},{\"dynatraceUrl\":\"https://my-dashboard2-endpoint.com/\",\"apiEndpointUrl\":\"https://my-api2-endpoint.com/\",\"environmentId\":\"my-env-id-2\",\"alias\":\"alias-env-2\",\"apiToken\":\"my-api-token-2\"}]"
}
}
}
}This configuration should be stored in <project-root>/.kiro/settings/mcp.json, or in user-level settings (~/.kiro/settings/mcp.json).
Google Gemini CLI
The Google Gemini CLI is Google's official command-line AI assistant that supports integration with MCP servers. You can add the Dynatrace MCP server using either the built-in management commands or manual configuration.
Using gemini CLI directly (recommended):
gemini extensions install https://github.com/dynatrace-oss/dynatrace-managed-mcp
export DT_ENVIRONMENT_CONFIGS="[{\"dynatraceUrl\":\"https://my-dashboard-endpoint.com/\",\"apiEndpointUrl\":\"https://my-api-endpoint.com/\",\"environmentId\":\"my-env-id-1\",\"alias\":\"alias-env\",\"apiToken\":\"my-api-token\"},{\"dynatraceUrl\":\"https://my-dashboard2-endpoint.com/\",\"apiEndpointUrl\":\"https://my-api2-endpoint.com/\",\"environmentId\":\"my-env-id-2\",\"alias\":\"alias-env-2\",\"apiToken\":\"my-api-token-2\"}]"and verify that the server is running via
gemini mcp listOr manually in your ~/.gemini/settings.json or .gemini/settings.json:
{
"mcpServers": {
"dynatrace-managed-mcp": {
"command": "npx",
"args": ["@dynatrace-oss/dynatrace-managed-mcp-server@latest"],
"env": {
"DT_ENVIRONMENT_CONFIGS": "[{\"dynatraceUrl\":\"https://my-dashboard-endpoint.com/\",\"apiEndpointUrl\":\"https://my-api-endpoint.com/\",\"environmentId\":\"my-env-id-1\",\"alias\":\"alias-env\",\"apiToken\":\"my-api-token\"},{\"dynatraceUrl\":\"https://my-dashboard2-endpoint.com/\",\"apiEndpointUrl\":\"https://my-api2-endpoint.com/\",\"environmentId\":\"my-env-id-2\",\"alias\":\"alias-env-2\",\"apiToken\":\"my-api-token-2\"}]"
},
"timeout": 30000,
"trust": false
}
}
}HTTP Server Mode (Alternative)
The default mode for this local MCP uses stdio for transport.
For scenarios where you need to run the MCP server as an HTTP service instead, you can use the HTTP server mode (e.g., for stateful sessions, load balancing, or integration with web clients):
Running as HTTP server:
# Get help and see all available options
npx -y @dynatrace-oss/dynatrace-managed-mcp-server@latest --help
# Run with HTTP server on default port 3000
npx -y @dynatrace-oss/dynatrace-managed-mcp-server@latest --http
# Run with custom port
npx -y @dynatrace-oss/dynatrace-managed-mcp-server@latest --http --port 3001
# Run with custom host/IP
npx -y @dynatrace-oss/dynatrace-mcp-server@latest --http --host 127.0.0.1 # recommended for local computers
npx -y @dynatrace-oss/dynatrace-mcp-server@latest --http --host 0.0.0.0 # recommended for container
npx -y @dynatrace-oss/dynatrace-mcp-server@latest --http --host 192.168.0.1 # recommended when sharing connection over a local network
# Check version
npx -y @dynatrace-oss/dynatrace-managed-mcp-server@latest --versionConfiguration for MCP clients that support HTTP transport:
{
"mcpServers": {
"dynatrace-managed-mcp": {
"url": "http://localhost:3000",
"transport": "http"
}
}
}Rule File
For efficient result retrieval from Dynatrace, please consider creating a rule file (e.g., .github/copilot-instructions.md, .amazonq/rules/), instructing coding agents on how to get more details for your component/app/service.
Here is an example for someone responsible for the easytrade system, who wants to focus on entities and problems related to easytrade.
Please adapt the names and filters to fit your use-cases, components, tagging strategy, deployment environment, etc.
Example Rule File:
# Dynatrace
We use Dynatrace Managed as our Observability solution. This document provides instructions for retrieving data for the EasyTrade system from Dynatrace using the Dynatrace Managed MCP.
## Best Practices
1. Always use specific time ranges, keeping these narrow (e.g. now-1h, now-24h), to avoid large data queries.
2. For entity selectors, consider using criteria for tags for more precise filtering (if the tagging strategy and naming are understood).
## Entity Selectors for easytrade
Consider using these criteria in the entitySelector to filter data for our easytrade application:
Services:
- `type(SERVICE),entityName.contains("easytrade")`
- `type(SERVICE),tag("app:easytrade")`
Process Groups & Containers:
- `type(PROCESS_GROUP),entityName.contains("easytrade")`
- `type(CONTAINER_GROUP_INSTANCE),entityName.contains("easytrade")`
Hosts:
- `type(HOST),tag("environment:production"),tag("app:easytrade")`
AWS Lambda Functions:
- `type(AWS_LAMBDA_FUNCTION),entityName.contains("easytrade")`
- `type(AWS_LAMBDA_FUNCTION),tag("AWS_REGION:us-west-2"),tag("app:easytrade")`Environment Variables
Configuration Variables
DT_CONFIG_FILE(optional): Path to configuration file (JSON or YAML). Recommended for local development.Supports relative paths (e.g.,
./dt-config.yaml)Supports absolute paths (e.g.,
/etc/dynatrace/config.yaml)Supports
~expansion (e.g.,~/dt-config.yaml)Supports environment variable interpolation in file content (
${VAR_NAME})Example:
DT_CONFIG_FILE=./dt-config.yaml
DT_ENVIRONMENT_CONFIGS(optional): JSON string with environment configurations. Useful for Kubernetes/Docker.Used if
DT_CONFIG_FILEis not setMust be a valid JSON array
Example:
DT_ENVIRONMENT_CONFIGS='[{"apiEndpointUrl":"...","environmentId":"...","alias":"...","apiToken":"..."}]'
Note: If both
DT_CONFIG_FILEandDT_ENVIRONMENT_CONFIGSare set,DT_CONFIG_FILEtakes priority.
Logging Variables
LOG_LEVEL(optional): Log verbosity level (e.g. debug, info, warn, error). Default:infoLOG_OUTPUT(optional): Log output destination. Default:filefile: Write logs to a file (default behavior)stdout/console: Write logs to standard output (⚠️ stdio transport only: stdio is reserved for MCP protocol - usestderr-allinstead)stderr: Write errors and warnings to standard error (info/debug suppressed)stderr-all: Write all log levels to standard error (✅ Recommended for VS Code with stdio transport)file+console/file+stdout: Write logs to both file and stdout (⚠️ stdio transport only: stdio is reserved for MCP protocol - usestderr-allinstead)file+stderr: Write logs to file and errors/warnings to stderrdisabled: Disable logging entirely
LOG_FILE(optional): Path to log file whenLOG_OUTPUTincludesfile. Default:dynatrace-managed-mcp.login current working directory
Choosing the right LOG_OUTPUT for your setup:
stdio transport (default): Use
LOG_OUTPUT=stderr-allorLOG_OUTPUT=file(default)❌
LOG_OUTPUT=consolewon't work - stdout is reserved for MCP protocol✅
LOG_OUTPUT=stderr-allshows all logs in VS Code's Output panel✅
LOG_OUTPUT=filewrites to log file (read withtail -f dynatrace-managed-mcp.log)
HTTP transport (
--httpmode): AnyLOG_OUTPUToption works✅
LOG_OUTPUT=consolevisible in terminal✅
LOG_OUTPUT=stderr-allvisible in terminal✅
LOG_OUTPUT=filewrites to log file
Logging Examples:
# VS Code with stdio transport - see logs in Output panel
LOG_OUTPUT=stderr-all LOG_LEVEL=debug
# VS Code with stdio transport - write to file (default)
LOG_LEVEL=debug
# Read with: tail -f dynatrace-managed-mcp.log
# HTTP transport - log to console
LOG_OUTPUT=console LOG_LEVEL=debug node dist/index.js --http
# HTTP transport - log to file and console
LOG_OUTPUT=file+console LOG_LEVEL=debug node dist/index.js --http
# Log to custom file path
LOG_OUTPUT=file LOG_FILE=/var/log/dynatrace-mcp.log node dist/index.js
# Disable logging entirely (not recommended)
LOG_OUTPUT=disabled node dist/index.jsRate Limiting Variables
DT_MCP_RATE_LIMIT_MAX_CALLS(optional): Maximum number of tool calls allowed within the rate limit window. Default:20DT_MCP_RATE_LIMIT_WINDOW_MS(optional): Rate limit window size in milliseconds. Default:20000(20 seconds)
Example: Allow 50 calls per 30 seconds:
DT_MCP_RATE_LIMIT_MAX_CALLS=50
DT_MCP_RATE_LIMIT_WINDOW_MS=30000Multienvironment Config Fields
Inside the DT_ENVIRONMENT_CONFIGS variable, the elements of the array must contain all of these fields for each environment:
dynatraceUrl: base URL for Dynatrace Managed dashboard, to which the environment ID will be appended (e.g.https://dmz123.dynatrace-managed.com). If not specified, will default to use the same value asDT_API_ENDPOINT_URL.apiEndpointUrl(required): base URL for Dynatrace Managed API, to which the environment ID will be appended (e.g.https://abc123.dynatrace-managed.com:9999)environmentId(required): ID of the managed environment, used for constructing URL for API and dashboards (e.g. of the form01234567-89ab-cdef-abcd-ef0123456789)alias: a friendly/human-readable name for the environment, useful when distinguishing between environments with the LLMapiToken(required): API token with required scopes (see Authentication)httpProxyUrl(optional): HTTP Proxy for corporate environments, to route traffic through (e.g. http://proxy.company.com:8080)httpsProxyUrl(optional): HTTPS Proxy for corporate environments, to route traffic through (e.g. https://proxy.company.com:8080)
Proxy Configuration
The MCP server honors system proxy settings for corporate environments for each Dynatrace Managed environment you configure:
httpProxyUrl(optional, string, e.g.,http://proxy.company.com:8080) - Proxy server URL for HTTPS requests; orhttpsProxyUrl(optional, string, e.g.,http://proxy.company.com:8080) - Proxy server URL for HTTP requests
Example configuration with proxy:
export DT_ENVIRONMENT_CONFIGS='[
{
"dynatraceUrl": "https://my-dashboard-endpoint.com/",
"apiEndpointUrl": "https://my-api-endpoint.com/",
"environmentId": "my-env-id-1",
"alias": "alias-env",
"apiToken": "my-api-token",
"httpProxyUrl": "http://proxy.company.com:8080"
},
{
"dynatraceUrl": "https://my-dashboard2-endpoint.com/",
"apiEndpointUrl": "https://my-api2-endpoint.com/",
"environmentId": "my-env-id-2",
"alias": "alias-env-2",
"apiToken": "my-api-token-2",
"httpProxyUrl": "http://proxy.company.com:8080"
}
]'Note that the httpProxyUrl/httpsProxyUrl variables are per-environment, so you can configure one environment to use a proxy whilst others may not need it.
Authentication
Dynatrace Managed uses API token-based authentication. Create an API token in your Managed cluster with the required scopes (see next subsection).
For more information about creating API tokens in Managed deployments, refer to the Dynatrace Managed documentation.
API Scopes for Managed Deployment
Your API token must include the following scopes for full functionality:
Required Scopes:
Access problem and event feed, metrics, and topology (
DataExport)Read audit logs (
auditLogs.read)Read entities (
entities.read)Read events (
events.read)Read logs (
logs.read)Read metrics (
metrics.read)Read network zones (
networkZones.read)Read problems (
problems.read)Read security problems (
securityProblems.read)Read SLO (
slo.read)
Note: API token scopes in Managed deployments differ from SaaS Platform tokens. Ensure you select the correct scopes for your Managed cluster version.
Key Differences from SaaS Dynatrace MCP
This MCP is for Dynatrace Managed platforms. There is a different Dynatrace MCP server for use with Dynatrace SaaS.
Key differences include:
Dynatrace SaaS MCP uses DQL, whereas Dynatrace Managed uses the v2 APIs
Dynatrace SaaS MCP uses Davis CoPilot, whereas Dynatrace Managed does not
Dynatrace SaaS MCP uses OAuth, whereas Dynatrace Managed uses API Tokens
Hybrid Setup with both Dynatrace SaaS MCP and Dynatrace Managed MCP
This Managed Dynatrace MCP can be run alongside the SaaS Dynatrace MCP to enable a hybrid setup between your self-hosted and SaaS Dynatrace environments. This can be useful if you run your applications in a hybrid fashion, but it also supports migration scenarios where you have moved to Dynatrace SaaS but still have historical data on your Managed platform that you won't migrate. In this scenario, your MCP client can be configured to talk to both MCP servers simultaneously, enabling you to query across SaaS and Managed data.
To set this up, you should:
Follow the instructions above to set up this Dynatrace Managed MCP server
Follow the instructions for Dynatrace SaaS MCP to set it up, making sure to name the two servers differently in your MCP config file
In your AI Assistant, confirm that it is connected to both
(optional, but recommended) Set up rules or steering for your AI Assistant to give it clear guidance on using both MCPs
Once you have both MCP servers configured, you can ask questions that your MCP client should pass back to the right MCP Server (or to both, where appropriate).
Note that if you do not include rules or steering for your MCP client, queries such as Ask Dynatrace to list application problems from the last 24 hours might use one MCP server or both, depending on what is in your context window. If you choose to proceed this way, make sure that your commands are very specific, e.g. Ask Dynatrace to list application problems from the last 24 hours in my Managed environment.
Rules/Steering
AI Assistants usually support rule files to provide guidance on their use (see Rule File for configuration information).
If you are using this MCP server in a hybrid setup alongside the SaaS MCP server and/or you have multiple managed environments, it is recommended to add this to your configuration to prevent the AI Assistant from using the wrong MCP or getting confused.
Your steering rules will be unique to your setup, but some recommended templates are included below as a starting point. You can edit these as you see fit and include additional context that is specific to your environments.
Multiple Managed Environments
In this example, you have multiple Dynatrace Managed environments set up. This might be a development/test/production setup, or a set of entirely different applications. It is recommended to refer to your environments by the same alias you used in the DT_ENVIRONMENT_CONFIGS alias field to prevent confusion.
# Dynatrace
- I have three separate Dynatrace environments:
1. "production" is a self-hosted Dynatrace Managed environment. It contains data about my production environment, and
its issues and problems should outrank any other environment, as this is customer-facing.
It is accessed via the Dynatrace Managed MCP, named
dynatrace-managed-mcp-server.
2. "test" is a self-hosted Dynatrace Managed environment. It contains data about my test environment, which is used to prepare code before going to Production.
It is accessed via the Dynatrace Managed MCP, named dynatrace-managed-mcp-server.
3. "development" is a self-hosted Dynatrace Managed environment. It contains data about my development environment,
which is my lowest priority environment.
It is accessed via the Dynatrace Managed MCP, named dynatrace-managed-mcp-server
- Be careful of which environment to use.
If it is unclear, ask which environment to use.
- Must make it very clear to the user which environment data has come from.
Hybrid setup with migration date
In this example, you have migrated from Managed to SaaS, but still have historic data in your self-hosted Managed environment.
You want your AI Assistant to have context on what data lives where. This will enable it to know which environments to target for the date range you ask for, e.g. Show me all Dynatrace problems from the last 7 days may require data from both environments (and thus use both MCP servers), or may all reside in just the Dynatrace SaaS.
# Dynatrace
- I have two separate Dynatraces:
1. Dynatrace Managed is self-hosted. It contains only historical data from before 29th November 2025.
It is accessed via the Dynatrace Managed MCP, named dynatrace-managed-mcp-server
2. Dynatrace SaaS is used for all live data.
It is accessed through the Dynatrace SaaS MCP, named dynatrace-saas-mcp-server
- Be careful of which MCP to use.
If it is unclear, ask which MCP to use.
- Must make it very clear to the user whether data has come from the Dynatrace Managed or Dynatrace SaaS.Hybrid setup running in tandem
In this example, you use Dynatrace Managed for some of your applications and Dynatrace SaaS for others, and want your MCP client to have context on where to find data for each one.
# Dynatrace
- I have two separate Dynatraces, which both contain live data:
1. Dynatrace Managed is self-hosted. It only contains observability data for some of my systems,
primarily the bookstore systems.
It is accessed via the Dynatrace Managed MCP, named dynatrace-managed-mcp-server
2. Dynatrace SaaS is used for observability of all my other systems.
It is accessed through the Dynatrace SaaS MCP, named dynatrace-saas-mcp-server
- Be careful of which MCP to use.
If it is unclear, ask which MCP to use.
- Must make it very clear to the user whether data has come from the Dynatrace Managed or Dynatrace SaaS.Example prompts
You can start with something as simple as "Ask Dynatrace to list problems", and follow up with more sophisticated examples.
Troubleshooting
Authentication Issues
In most cases, authentication issues stem from missing scopes or invalid tokens. Please ensure that you have added all required scopes as listed above.
When experiencing errors, you can ask the AI Assistant for the exact error returned by the MCP. For startup issues, check the AI Assistant logs.
You can also try running the MCP directly to see if it reports errors on startup:
```bash
npx @dynatrace-oss/dynatrace-managed-mcp-server@latest
```Telemetry
The Dynatrace MCP Server includes sending Telemetry Data via Dynatrace OpenKit to help improve the product. This includes:
Server start events
Tool usage (which tools are called, success/failure, execution duration)
Error tracking for debugging and improvement
Privacy and Opt-out:
Telemetry is enabled by default but can be disabled by setting
DT_MCP_DISABLE_TELEMETRY=trueNo sensitive data from your Dynatrace environment is tracked
Only anonymous usage statistics and error information are collected
Usage statistics and error data is transmitted to Dynatrace’s analytics endpoint
Configuration options:
DT_MCP_DISABLE_TELEMETRY(boolean, default:false) - Disable TelemetryDT_MCP_TELEMETRY_APPLICATION_ID(string, default:dynatrace-managed-mcp) - Application ID for trackingDT_MCP_TELEMETRY_ENDPOINT_URL(string, default: Dynatrace endpoint) - OpenKit endpoint URLDT_MCP_TELEMETRY_DEVICE_ID(string, default: auto-generated) - Device identifier for tracking
To disable usage tracking, add this to your configuration:
DT_MCP_DISABLE_TELEMETRY=trueAvailable Tools
18 toolsdynatrace_managed_discover_entitiesARead-only
Discover entities in the Managed cluster using EntitySelector syntax. REQUIRED: Must specify entitySelector with exactly ONE entity type only. Results include entity properties, tags, management zones, and relationship counts for comprehensive topology analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End time for entity observation timeframe (ISO format or relative like "now") | |
| from | No | Start time for entity observation timeframe (ISO format or relative like "now-3d") | |
| sort | No | Sort order for entities. Use "name" for ascending, "-name" for descending by display name. | |
| limit | No | Maximum number of entities to return. Use this when user specifies a count (e.g., "first 10 entities" → limit: 10). If not specified, returns up to API limit: 10. Cannot exceed 50 | |
| mzSelector | No | Optional management zone selector to further scope the query. Use mzId(123,456) for zone IDs or mzName("Bookstore-FS","Stocks") for zone names. Can combine: mzId(123),mzName("Production"). Works alongside entitySelector. | |
| entitySelector | Yes | Entity selector to filter the entities. CRITICAL: Must include exactly ONE entity type like type("SERVICE") - multiple types NOT supported. Examples: type("SERVICE"), entityId("ID1"), entityName.contains("name"), entityName.equals("exact"), tag("key:value"), mzName("zone"), healthState("HEALTHY"). | |
| environment_alias | Yes | Specify which environment to be queried, by supplying the environment alias as returned by get_environments_info. Can use `ALL_ENVIRONMENTS` to retrieve data from all environments in one request to MCP. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation. The description adds useful behavioral context by stating that results include entity properties, tags, management zones, and relationship counts, and it emphasizes the single-type constraint. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, front-loads the core purpose, and immediately surfaces the critical entitySelector constraint. The result-content sentence adds valuable context without unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a discovery tool with full schema documentation and a read-only annotation, the description covers the main behavior, the core constraint, and the shape of results. It does not describe pagination or return structure explicitly, but the schema's limit parameter and the listed result fields provide sufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all parameters and already documents entitySelector, mzSelector, time range, sort, limit, and environment_alias. The description mostly restates the entitySelector single-type rule already present in the schema, adding little new semantic meaning for parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Discover entities') with a specific resource ('Managed cluster') and method (EntitySelector syntax). It is distinguishable from sibling tools like get_entity_details because it implies a broader discovery/list operation, though it does not explicitly name any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear usage context: use it to discover entities via EntitySelector, and it highlights a critical prerequisite: exactly one entity type. However, it does not state when to prefer it over alternatives such as get_entity_details or get_entity_relationships, nor any when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dynatrace_managed_get_entity_detailsBRead-only
Get detailed information about a specific entity.
| Name | Required | Description | Default |
|---|---|---|---|
| entityId | Yes | The entity ID to get details for | |
| environment_alias | Yes | Specify which environment to be queried, by supplying the environment alias as returned by get_environments_info. Can use `ALL_ENVIRONMENTS` to retrieve data from all environments in one request to MCP. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the read-only safety profile, and the description does not contradict it. However, the description only adds the vague phrase 'detailed information' and does not disclose return shape, error behavior, or environment-specific behavior beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler and the core action is front-loaded. It is appropriately concise, though somewhat generic and lacking useful detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter read-only getter, the basic usage is clear and the schema fully documents parameters. However, with no output schema, 'detailed information' is vague and does not clarify what details are returned or how they differ from related entity tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both entityId and environment_alias already explained in the schema. The description itself adds no parameter-level meaning, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' and resource 'entity', and signals single-entity scope via 'a specific entity'. However, it does not differentiate from sibling tools like get_entity_type_details or get_entity_relationships, leaving the agent to infer which 'details' tool is intended.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as discover_entities, get_entity_relationships, or get_entity_type_details. There are no exclusions, prerequisites, or explicit condition-based recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dynatrace_managed_get_entity_relationshipsARead-only
Get relationships that a specific entity has "to" and "from" other entities.
| Name | Required | Description | Default |
|---|---|---|---|
| entityId | Yes | The entity ID to get relationships for | |
| environment_alias | Yes | Specify which environment to be queried, by supplying the environment alias as returned by get_environments_info. Can use `ALL_ENVIRONMENTS` to retrieve data from all environments in one request to MCP. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation, and the description aligns with this by using 'Get'. It adds some value by clarifying that both incoming ('from') and outgoing ('to') relationships are included, but it does not disclose response structure, pagination, or any other behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the primary action and resource, with no redundant words or filler. Every part of the sentence contributes meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only query with two clearly described parameters, the description is mostly adequate. However, with no output schema, the description does not clarify what shape the relationship data takes or whether results are grouped by direction, leaving some ambiguity for an agent trying to interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already well-documented. The tool description itself adds no additional meaning beyond the schema's parameter descriptions, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get'), the resource ('relationships'), and the scope ('a specific entity... to and from other entities'). This distinguishes it from sibling tools like get_entity_details or discover_entities by operation and resource type, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the appropriate use case: when an agent needs relationship data for a specific entity. However, it provides no explicit guidance about when to prefer this tool over related siblings such as get_entity_details or discover_entities, and no exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dynatrace_managed_get_entity_type_detailsBRead-only
Get details of an entity type.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Name of the entity type, such as SERVICE, APPLICATION, HOST, etc | |
| environment_alias | Yes | Specify which environment to be queried, by supplying the environment alias as returned by get_environments_info. Can use `ALL_ENVIRONMENTS` to retrieve data from all environments in one request to MCP. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares this is a read-only operation, but the description adds no behavioral context beyond restating that details are returned. There is no mention of response shape, environment handling, or error behavior, so the description does not meaningfully extend the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no filler or redundancy. It is appropriately minimal for a simple read-only getter and is easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity read-only tool with fully documented parameters, the single-sentence description is minimally viable. However, there is no output schema and the description does not clarify what 'details' includes, so the agent has limited ability to anticipate the response content.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters adequately documented in the input schema. The description does not add parameter-level detail, but it does not need to because the schema already carries the full semantic weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Get') and resource ('entity type details'), so the agent can tell this is a retrieval operation. It does not explicitly distinguish itself from siblings like get_entity_details or list_entity_types, but the 'entity type' scoping is clear enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to call this tool versus alternatives such as list_entity_types or get_entity_details. The tool name implies it is for a specific entity type, but the description provides no explicit context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dynatrace_managed_get_environments_infoARead-only
Get information about all connected Dynatrace Managed clusters and verify the connections and authentication services.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals this is a safe read operation. The description adds some useful context by mentioning verification of connections and authentication services, but it does not explain any caveats such as potential delays or what 'verification' entails in practice.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, focused sentence that front-loads the main purpose and includes the key behavioral detail about verifying connections. No filler or redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool, the description is reasonably complete: it tells the agent what information to expect and what verification is included. It could slightly benefit from naming the returned data shape, but this is not critical for invocations with no parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters and the schema is trivially fully covered, so there is no parameter semantics burden for the description. A baseline of 4 is appropriate because there is nothing additional the description needs to explain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Get information') and a specific resource ('all connected Dynatrace Managed clusters'), and adds the verification of connections and authentication services. This distinguishes it from sibling tools that focus on problems, metrics, logs, entities, events, SLOs, or security problems.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when this tool is useful—when the agent needs an overview of connected Dynatrace Managed clusters or connection/auth status. However, it does not explicitly mention alternatives or state when not to use it, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dynatrace_managed_get_event_detailsBRead-only
Get detailed information about a specific event.
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes | The event ID to get details for | |
| environment_alias | Yes | Specify which environment to be queried, by supplying the environment alias as returned by get_environments_info. Can use `ALL_ENVIRONMENTS` to retrieve data from all environments in one request to MCP. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=true and the description's 'Get' semantics are consistent with that — no contradiction. However, the description contributes no behavioral context beyond the annotation: no mention of response contents, error behavior, or the fact that ALL_ENVIRONMENTS aggregates results across environments. Since the safety profile is already carried by the annotation, the description adds nothing extra.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 10-word sentence with zero filler, front-loaded with the verb. The word 'specific' adds the lookup-vs-list distinction, so every word earns its place. It is appropriately sized for the information it conveys, though brevity comes at the cost of workflow guidance captured elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool, the 100%-covered schema and readOnlyHint annotation handle most needs, and the environment_alias parameter description is notably thorough. Gaps remain: there is no output schema, so return values are not described, and no guidance is given on the list-then-get workflow. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters are well documented in the schema: eventId identifies the target and environment_alias explains the get_environments_info cross-reference plus the ALL_ENVIRONMENTS special value. Per the baseline rule for high schema coverage, the description need not repeat parameter details, and it adds none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-resource pair: 'Get detailed information' about 'a specific event,' which clearly differentiates this from list-oriented siblings like dynatrace_managed_list_events and resource-specific detail tools like get_problem_details or get_slo_details. It does not explicitly name or contrast any sibling, so it stops short of a 5, but the resource term makes the intent unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to call this tool versus alternatives. It does not mention that dynatrace_managed_list_events is the natural precursor for obtaining an eventId, nor does it state any exclusions or selection criteria. Usage context must be inferred entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dynatrace_managed_get_metric_detailsCRead-only
Get detailed information about a specific metric.
| Name | Required | Description | Default |
|---|---|---|---|
| metricId | Yes | The metric ID to get details for | |
| environment_alias | Yes | Specify which environment to be queried, by supplying the environment alias as returned by get_environments_info. Can use `ALL_ENVIRONMENTS` to retrieve data from all environments in one request to MCP. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the safety profile, and the description adds no behavioral context beyond a generic 'Get detailed information.' It does not disclose what details are returned, whether the metric must exist, or any response characteristics. No contradiction exists, but the description contributes little beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler or redundancy. It is appropriately concise for the tool's simple purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should indicate what 'detailed information' includes or how the result differs from querying metric data. It also lacks any usage context or distinction from closely related metric tools, leaving an agent to guess the tool's exact role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description itself adds no parameter-level meaning, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and clearly identifies the target resource ('specific metric'), making the core purpose understandable. However, it does not differentiate from sibling tools like query_metrics_data or list_available_metrics, so the distinction must be inferred from the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives such as query_metrics_data or list_available_metrics. The environment_alias parameter references get_environments_info for obtaining aliases, but this is parameter-level instruction, not usage guidance for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dynatrace_managed_get_problem_detailsARead-only
Get detailed information about a specific problem including evidence details for root cause analysis, affected entities, entity tags, and management zones. Use the problemId (UUID format) from list_problems output, NOT the displayId.
| Name | Required | Description | Default |
|---|---|---|---|
| problemId | Yes | The internal problem ID (UUID format) from list_problems - NOT the displayId (P-XXXXX) | |
| environment_alias | Yes | Specify which environment to be queried, by supplying the environment alias as returned by get_environments_info. Can use `ALL_ENVIRONMENTS` to retrieve data from all environments in one request to MCP. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so no contradiction exists. The description adds useful context about the content returned (evidence details, affected entities, tags, management zones), but it does not discuss rate limits, authentication, pagination, or error behavior. Given the read-only annotation covers the safety profile, this is adequate but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences. The primary purpose is front-loaded, and the critical identifier caveat appears immediately after. There is no redundant phrasing or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only detail tool with two required parameters and no nested objects, the description provides the essential context: what data will be returned and which identifier to supply. The schema covers parameter semantics, and the readOnlyHint covers safety, so no critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters. The description repeats the key caveat about using UUID problemId rather than displayId, which is helpful reinforcement, but it adds little beyond what the schema already states. A score of 3 reflects that the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get detailed information about a specific problem.' It also lists the kinds of details returned (evidence, affected entities, tags, management zones) and explicitly distinguishes the identifier to use (UUID problemId from list_problems), which helps separate it from sibling detail and list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear contextual instruction: use the problemId from list_problems output, NOT the displayId. This effectively tells the agent where the required input comes from. It does not explicitly name alternative tools or state when not to use this tool, but the purpose and input source are unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dynatrace_managed_get_security_problem_detailsARead-only
Get detailed information about a specific security problem including CVE details, affected entities, vulnerable components, code locations, and comprehensive technical analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| environment_alias | Yes | Specify which environment to be queried, by supplying the environment alias as returned by get_environments_info. Can use `ALL_ENVIRONMENTS` to retrieve data from all environments in one request to MCP. | |
| securityProblemId | Yes | The security problem ID (UUID format) from list_security_problems - NOT the displayId (S-XXXXX) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds meaningful behavioral context by specifying what the response includes: CVE details, affected entities, vulnerable components, code locations, and technical analysis. No contradiction exists, and the added content detail goes beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence that leads with the action and target, then lists the key content areas. There is no filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description reasonably explains what information will be returned, listing several concrete categories. Combined with the thorough parameter descriptions and the readOnly annotation, the agent has enough context to call it correctly, though a note on response structure or error behavior would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so both parameters (securityProblemId and environment_alias) are already well documented. The tool description does not add parameter-level meaning, but with full schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get detailed information') and a specific resource ('a specific security problem'), and enumerates the content areas (CVE details, affected entities, vulnerable components, code locations). This clearly distinguishes it from sibling list/detail tools, especially list_security_problems and get_problem_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is used when a specific security problem's details are needed, and the schema parameter notes the ID comes from list_security_problems. However, it does not explicitly state when to prefer this over get_problem_details or list_security_problems, leaving routing partially to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dynatrace_managed_get_slo_detailsARead-only
Get detailed information about a specific SLO.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End time (ISO format or relative like "now"). Used when timeFrame="GTF" | |
| from | No | Start time (ISO format or relative like "now-1w"). Used when timeFrame="GTF" | |
| sloId | Yes | The SLO ID to get details for | |
| timeFrame | No | Time frame for SLO evaluation: "CURRENT" for SLO's own timeframe, "GTF" for custom timeframe specified by from and to parameters | |
| environment_alias | Yes | Specify which environment to be queried, by supplying the environment alias as returned by get_environments_info. Can use `ALL_ENVIRONMENTS` to retrieve data from all environments in one request to MCP. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true aligns with the read-only nature of 'Get detailed information,' so there is no contradiction. The description adds little behavioral context beyond the annotation, such as return format, rate limits, or prerequisites, but for a simple read-only detail tool the annotation covers the main safety trait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It states exactly what the tool does without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema and read-only annotation make the tool callable: required parameters are clear, and timeFrame/from/to/environment_alias semantics are documented. However, there is no output schema and the description does not summarize what 'details' include or mention that an SLO ID must first be obtained via list_slos, leaving some ambiguity for an agent evaluating whether this tool answers a specific question.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all five parameters documented including formats, conditional usage, and environment-alias behavior. The description itself adds no parameter semantics, so the baseline of 3 applies because the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('Get') and a specific resource ('detailed information about a specific SLO'). It differentiates itself from sibling list_slos by targeting one specific SLO, and from other get_* tools by naming the resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use guidance or alternatives. It implies the user already knows an SLO ID, but it does not mention using list_slos to obtain an ID or when to prefer this tool over list_slos. The only cross-tool reference, get_environments_info, appears in a parameter description rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dynatrace_managed_list_available_metricsARead-only
List available metrics in the Managed cluster, optionally filtered by entity. Results include aggregation types, dimension definitions, and technical metadata for advanced metric analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of metrics to return. Use this when user specifies a count (e.g., "first 16 metrics" → limit: 16, "500 metrics" → limit: 500). If not specified, returns up to API limit: 500. Cannot exceed 500 | |
| searchText | No | Text to search for in metric names and descriptions. **RECOMMENDED SEARCHES**: "response.time" (latency), "cpu.usage" (CPU), "memory" (memory), "error.rate" (errors), "throughput" (performance), "availability" (uptime) | |
| entitySelector | No | Entity selector to filter metrics. Must use at most one entity type per query. Examples include: * type(SERVICE) * entityId("id1","id2") * type(HOST) Can combine with things like: entityName.contains("name"), tag("key:value"), mzName("zone"). | |
| environment_alias | Yes | Specify which environment to be queried, by supplying the environment alias as returned by get_environments_info. Can use `ALL_ENVIRONMENTS` to retrieve data from all environments in one request to MCP. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and this description aligns with that. The description adds value by stating that results include aggregation types, dimension definitions, and technical metadata — useful behavioral context beyond the read-only flag. However, it does not mention pagination behavior or the possibility of a large result set beyond the limit parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One clean sentence that states the primary action, scope, optional filter, and result contents. Efficient and front-loaded with the verb and resource. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with 100% schema coverage and detailed parameter descriptions, the definition is mostly complete. It could mention that the output is a list of metric definitions rather than values, but the description's mention of technical metadata already hints at that. Given the absence of an output schema, a slightly clearer statement of the return shape would help, but overall it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds a bit about the overall output contents (aggregation types, dimensions, metadata) but does not materially enrich the individual parameter semantics beyond what the schema already provides. The parameter descriptions are already detailed and self-sufficient, so this is slightly above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists available metrics in the Managed cluster with optional entity filtering, and specifies that results include aggregation types, dimension definitions, and technical metadata. The verb 'List' plus the resource 'available metrics' distinguishes it well from sibling tools like query_metrics_data, get_metric_details, and list_entity_types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when the user wants to discover available metrics, optionally filtered by entity, rather than querying metric data or getting details of a single metric. It does not explicitly name alternatives or state exclusions, but the sibling names and tool name make the context reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dynatrace_managed_list_entity_typesARead-only
List all available entity types in the Managed cluster to understand what types of entities can be monitored.
| Name | Required | Description | Default |
|---|---|---|---|
| environment_alias | Yes | Specify which environment to be queried, by supplying the environment alias as returned by get_environments_info. Can use `ALL_ENVIRONMENTS` to retrieve data from all environments in one request to MCP. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds minimal behavioral context beyond that, such as the 'all available' scoping, but does not disclose output format, pagination, or other behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that states the verb, resource, scope, and purpose without any wasted words. It does not repeat schema or annotation information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with one well-documented parameter and a readOnly annotation, the description is nearly complete. It could be improved by naming related tools as a next step, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the environment_alias parameter description is rich, explaining how to obtain the alias and the ALL_ENVIRONMENTS option. The tool description itself adds no additional parameter meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List'), a clear resource ('all available entity types'), and a scope ('Managed cluster'), plus the intent ('to understand what types of entities can be monitored'). This clearly distinguishes it from sibling tools like get_entity_type_details or discover_entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose clause implies this is a discovery/prerequisite step, but the description does not explicitly state when to use this tool versus alternatives such as get_entity_type_details or discover_entities. No exclusions or routing guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dynatrace_managed_list_eventsBRead-only
List events from the Managed cluster within a specified timeframe. Results include event properties, management zones, severity/impact levels, and detailed metadata for comprehensive analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End time (ISO format or relative like "now") | |
| from | Yes | Start time (ISO format or relative like "now-1h") | |
| limit | No | Maximum number of events to return. Use this when user specifies a count (e.g., "first 20 events" → limit: 20). If not specified, returns up to API limit: 100. Cannot exceed 100 | |
| eventType | No | Filter by event type (e.g., "CONTAINER_RESTART" for certain container issues, "CUSTOM_DEPLOYMENT" for deployments, "RESOURCE_CONTENTION_EVENT" for resource issues) | |
| entitySelector | No | Entity selector to filter events. CRITICAL: Only ONE entity type per query. Use discover_entities() first to get exact names/IDs, then use entityId("exact-id") or type(SERVICE),entityName.equals("exact-name"). Examples: entityId("SERVICE-123"), type(SERVICE),entityName("payment-service"), type(AWS_LAMBDA_FUNCTION),tag("AWS_REGION:us-west-2") | |
| environment_alias | Yes | Specify which environment to be queried, by supplying the environment alias as returned by get_environments_info. Can use `ALL_ENVIRONMENTS` to retrieve data from all environments in one request to MCP. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is established. The description adds useful context about returned content (event properties, management zones, severity/impact levels, metadata) but does not disclose pagination, ordering, or other behavioral traits beyond what the annotation covers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that first states the operation and timeframe, then describes the result contents. It is concise, though 'for comprehensive analysis' is somewhat filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six parameters and no output schema, the description is adequate but not complete. It summarizes the expected result fields but doesn't address response format, pagination, or how this list operation relates to related detail tools such as dynatrace_managed_get_event_details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well documented. The description adds only the general notion of a timeframe and result contents, without adding meaning beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'List events from the Managed cluster within a specified timeframe.' It clearly indicates this is a listing operation for events, but it does not explicitly distinguish it from sibling read operations such as dynatrace_managed_get_event_details or list_problems.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus the many siblings. No alternatives are named, no exclusions are given, and the description only implies a use case rather than stating conditions under which it should be selected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dynatrace_managed_list_problemsBRead-only
List problems from the Managed cluster with optional filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End time (default: "now") | |
| from | No | Start time (default: "now-24h") | |
| sort | No | Sort order. Use "+status" (open first), "-status" (closed first), "+startTime" (old first), "-startTime" (new first), or "+relevance"/"-relevance" (with text search). | |
| limit | No | Maximum number of problems to return. Use this when user specifies a count (e.g., "first 10 problems" → limit: 10). If not specified, returns up to API limit: 50. Cannot exceed 50 | |
| status | No | Problem status - use "OPEN" for active issues, "CLOSED" for resolved problems | |
| impactLevel | No | Impact level - use "SERVICE" for application issues, "INFRASTRUCTURE" for host/container problems, "APPLICATION" for user-facing issues | |
| entitySelector | No | Entity selector to filter problems. CRITICAL: Only ONE entity type per query. Use discover_entities() first to get exact names/IDs, then use entityId("exact-id") or type(SERVICE),entityName.equals("exact-name"). Examples: entityId("SERVICE-123"), type(SERVICE),entityName("payment-service"), type(AWS_LAMBDA_FUNCTION),tag("AWS_REGION:us-west-2") | |
| environment_alias | Yes | Specify which environment to be queried, by supplying the environment alias as returned by get_environments_info. Can use `ALL_ENVIRONMENTS` to retrieve data from all environments in one request to MCP. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the safety profile, and the description is consistent with it. It adds the 'Managed cluster' scope and the notion of optional filtering, but does not disclose pagination, result shape, or time-window defaults beyond what the schema already states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no filler. It communicates the core action and optionality efficiently, and every word contributes to the meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation backed by a rich 100%-covered input schema, the description is nearly complete. It does not mention output shape or sibling-selection guidance, but these are largely inferable from the tool name and the sibling list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter with meaningful details, including enum values and entitySelector examples. The description itself adds no parameter-level semantics, but the full coverage justifies the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the verb 'List' and the resource 'problems' with a scope qualifier ('from the Managed cluster'). It clearly identifies the operation, but does not explicitly distinguish itself from siblings like get_problem_details or list_events, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance about when to use this tool versus alternatives such as get_problem_details for individual problems or list_events for event data. 'Optional filtering' is a generic hint that does not help an agent choose correctly among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dynatrace_managed_list_security_problemsARead-only
List security problems and vulnerabilities from the Managed cluster. Results include package names, technology details, vulnerable components, and comprehensive risk assessment data.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End time (default: "now") | |
| from | No | Start time (default: "now-30d") | |
| sort | No | Sort order. Examples: "+status" (open first), "-riskAssessment.riskScore" (highest risk first), "+firstSeenTimestamp" (newest first), "-lastUpdatedTimestamp" (recently updated first). | |
| limit | No | Maximum number of security problems to return. Use this when user specifies a count (e.g., "first 25 vulnerabilities" → limit: 25). If not specified, returns up to API limit: 100. Cannot exceed 100 | |
| status | No | Filter by status (OPEN, RESOLVED) | |
| riskLevel | No | Filter by risk level (NONE, LOW, MEDIUM, HIGH, CRITICAL) | |
| entitySelector | No | Entity selector to filter vulnerabilities. CRITICAL: Only ONE entity type per query. Use discover_entities() first to get exact names/IDs, then use entityId("exact-id") or type(SERVICE),entityName.equals("exact-name"). Examples: entityId("SERVICE-123"), type(SERVICE),entityName("payment-service"), type(AWS_LAMBDA_FUNCTION),tag("AWS_REGION:us-west-2") | |
| environment_alias | Yes | Specify which environment to be queried, by supplying the environment alias as returned by get_environments_info. Can use `ALL_ENVIRONMENTS` to retrieve data from all environments in one request to MCP. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the safety profile, so the description only needs to add value beyond that. It does add useful output context by listing the kinds of data returned (package names, technology details, vulnerable components, risk assessment). However, it does not disclose any behavioral quirks, defaults, limits, or relationship to environment aliases, though these are partially covered in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence that front-loads the verb and resource. It includes concrete output categories without unnecessary elaboration. The only slight filler is 'comprehensive,' but it does not meaningfully hurt clarity or conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should convey enough about the return value; it does list primary output categories, which is helpful. However, it omits any guidance about pagination limits, default time windows, or when to combine this with get_security_problem_details for deeper inspection. Given the schema covers most invocation details, the description is minimally viable but leaves several contextual gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the description does not need to repeat parameter details. The description does not add extra meaning to parameters like sort, limit, status, riskLevel, or entitySelector, but the schema already documents them thoroughly, including examples and constraints. The description's mention of risk assessment data loosely aligns with riskLevel but adds little beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('List') and the resource ('security problems and vulnerabilities from the Managed cluster'), and it distinguishes this tool from sibling list_problems (general problems) and get_security_problem_details (single-problem detail). The mention of package names, technology details, and risk assessment data further clarifies what kind of listing this is.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as list_problems or get_security_problem_details. The description does not state whether this should be used before fetching details, how it relates to the general problems API, or when filtering via entitySelector would be preferable. The usage context is only implicit from the tool name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dynatrace_managed_list_slosARead-only
List Service Level Objectives (SLOs) from the Managed cluster. Results include timeframe details, management zones, error budget burn rates, and comprehensive SLO configuration data. IMPORTANT: When evaluate=true, the query must be limited to 25 or fewer results using the limit parameter.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End time (ISO format or relative like "now"). Used when timeFrame="GTF" | |
| demo | No | Get demo SLOs instead of real ones. Default: false | |
| from | No | Start time (ISO format or relative like "now-2w"). Used when timeFrame="GTF" | |
| sort | No | Sorting of SLO entries: "name" for ascending order, "-name" for descending order. Default: "name" | |
| limit | No | Maximum number of SLOs to return. Use this when user specifies a count (e.g., "first 15 SLOs" → limit: 15). If not specified, returns up to API limit: 100. Cannot exceed 100 | |
| evaluate | No | Set to true to enable SLO evaluation. Required when using healthState in sloSelector. | |
| timeFrame | No | Time frame for SLO evaluation: "CURRENT" for SLO's own timeframe, "GTF" for custom timeframe specified by from/to parameters | |
| enabledSlos | No | Filter by SLO status: "true" for enabled SLOs only, "false" for disabled only, "all" for both. Default: "true" | |
| sloSelector | No | SLO selector to filter results. Syntax: id("id-1","id-2") for SLO IDs, name("Service Availability") for exact name match (case-sensitive), healthState("HEALTHY"|"UNHEALTHY") [requires evaluate=true], text("value") for case-insensitive text search, problemDisplayName("P-12345") for problem display names, managementZone("MZ-A") or managementZoneID("123") for management zones. Combine with commas. Escape special characters ~ and " with ~. | |
| showGlobalSlos | No | Include global SLOs in results regardless of other filters. Default: true | |
| environment_alias | Yes | Specify which environment to be queried, by supplying the environment alias as returned by get_environments_info. Can use `ALL_ENVIRONMENTS` to retrieve data from all environments in one request to MCP. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation already declares readOnlyHint=true, and the description does not contradict it. It adds useful non-obvious behavioral context: evaluate=true requires limiting results to 25 or fewer. It also discloses the categories of returned data, which is helpful since no output schema is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three compact sentences with no filler. It front-loads the core purpose, then summarizes return contents, and ends with a high-value constraint. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema documents all 11 parameters, and the description adds result-content context and a critical usage constraint. It does not describe the exact output shape or pagination behavior, but the absence of an output schema is partially compensated by the results summary. Overall, an agent has enough information to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful parameter interaction guidance beyond the schema by warning that evaluate=true forces a limit of 25 or fewer, which is not evident from the individual parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'List Service Level Objectives (SLOs) from the Managed cluster.' It also enumerates the kind of data returned, which distinguishes this listing operation from the sibling get_slo_details tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context by framing this as a listing operation and includes a critical evaluate/limit constraint, but it does not explicitly tell the agent when to use list_slos versus get_slo_details or any other alternative. The distinction is inferable from the tool name and siblings, but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dynatrace_managed_query_logsARead-only
Search logs using simple text queries. Results include event types, expanded metadata fields (up to 8 fields), and enhanced error detection. Managed clusters support basic text search but not structured syntax like "content:" or "loglevel:".
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End time (ISO format or relative like "now") | |
| from | Yes | Start time (ISO format or relative like "now-1h") | |
| sort | No | Sort order for logs. Use "-timestamp" for most recent first. | |
| limit | No | Maximum number of logs to return (default: 100). Cannot exceed 1000 | |
| query | Yes | Simple text to search for in log content (e.g., "error", "exception", "timeout"). Do NOT use structured syntax like "content:error" - just use "error". | |
| environment_alias | Yes | Specify which environment to be queried, by supplying the environment alias as returned by get_environments_info. Can use `ALL_ENVIRONMENTS` to retrieve data from all environments in one request to MCP. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so no safety contradiction exists. The description adds useful behavioral detail beyond annotations: results include event types, expanded metadata fields (up to 8), and enhanced error detection, plus the managed-cluster limitation about structured syntax.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action, then a precise limitation. No filler or repetition of schema content, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a rich 6-parameter schema covering all parameter semantics and a readOnly annotation, the description adds the key missing context: result shape and syntax limitations. It does not fully describe return structure, but for a log query tool this is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters including the 'query' guidance. The description reinforces the no-structured-syntax rule but does not add substantial meaning to individual parameters, keeping this at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search') and targets a clear resource ('logs'), making the tool's function immediately apparent. It does not explicitly name or contrast sibling tools, but the log resource is distinct from metrics/events/entity tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states how to use the tool: with simple text queries, not structured syntax. It also gives a concrete exclusion ('content:' or 'loglevel:'), helping the agent avoid invalid queries. It does not mention alternative tools, but there is no close log-query sibling to contrast with.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dynatrace_managed_query_metrics_dataARead-only
Query metric data for a specific time range and metric selector. Must limit the amount of data being retrieved: must use a specific entitySelector, such as using specific entityIds; must use a narrow timerange (with from and to); must use a resolution in line with the timerange, for example if getting data covering several days then the resolution should be hours rather than minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End time (ISO format or relative like "now") | |
| from | Yes | Start time (ISO format or relative like "now-1h") | |
| resolution | No | Data resolution. Use a bigger resolution when the timerange is larger. For example, use "5m" for detailed analysis of data over hour(s), use "1h" for trends of data over a day, use 6h or 1d for data over many days. | |
| entitySelector | No | Entity selector to filter metrics data. CRITICAL: Only ONE entity type per query. Use discover_entities() first to get exact names/IDs, then use entityId("exact-id") or type(SERVICE),entityName.equals("exact-name"). Examples: entityId("SERVICE-123"), type(SERVICE),entityName("payment-service"), type(AWS_LAMBDA_FUNCTION),tag("AWS_REGION:us-west-2") | |
| metricSelector | Yes | Metric selector (e.g., "builtin:service.response.time" for latency, "builtin:tech.generic.cpu.usage" for container CPU, "builtin:host.mem.usage" for memory). Consider first using the tool list_available_metrics to identity the right metric. | |
| environment_alias | Yes | Specify which environment to be queried, by supplying the environment alias as returned by get_environments_info. Can use `ALL_ENVIRONMENTS` to retrieve data from all environments in one request to MCP. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, and the description adds useful behavioral context about querying metrics: large amounts of data can be retrieved, so entitySelector, timerange, and resolution must be constrained. It does not describe output shape or failure modes, but for a read-only tool with annotations this is reasonable coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then presents constraints compactly. It is efficient and every clause adds value, though the opening 'Must limit the amount of data being retrieved' is somewhat redundant with the three following 'must' clauses.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, combined with the rich schema, covers the main invocation details and safety constraints. However, there is a notable mismatch: the description says entitySelector and resolution 'must' be used, while the schema marks them optional. It also does not describe the expected response shape, which is notable since there is no output schema. These gaps leave an agent somewhat uncertain about mandatory call requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds cross-parameter meaning beyond the schema by mandating a specific entitySelector, a narrow timerange, and a resolution aligned with that range (e.g., hours rather than minutes for multi-day data). This gives operational context not present in the individual parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation ('Query metric data') and its primary filters (time range, metric selector), which distinguishes it from siblings like list_available_metrics or get_metric_details. It does not explicitly name a sibling, but the resource and filtering criteria are unambiguous enough for an agent to understand what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit, actionable guidance: use a specific entitySelector, a narrow timerange, and a resolution matched to the timerange. However, it does not explicitly state when to avoid this tool or point to alternatives like list_available_metrics or discover_entities, so it stops short of full tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
18 tool updates
- First observed
dynatrace_managed_discover_entities - First observed
dynatrace_managed_get_entity_details - First observed
dynatrace_managed_get_entity_relationships - First observed
dynatrace_managed_get_entity_type_details - First observed
dynatrace_managed_get_environments_info - First observed
dynatrace_managed_get_event_details - First observed
dynatrace_managed_get_metric_details - First observed
dynatrace_managed_get_problem_details - First observed
dynatrace_managed_get_security_problem_details - First observed
dynatrace_managed_get_slo_details - First observed
dynatrace_managed_list_available_metrics - First observed
dynatrace_managed_list_entity_types - First observed
dynatrace_managed_list_events - First observed
dynatrace_managed_list_problems - First observed
dynatrace_managed_list_security_problems - First observed
dynatrace_managed_list_slos - First observed
dynatrace_managed_query_logs - First observed
dynatrace_managed_query_metrics_data
This server cannot be deployed
TDQS
Scored across 18 tools
Each tool targets a distinct resource-action pair: list/get pairs for problems, events, SLOs, security problems, entities, and metrics are clearly separated, while discovery, relationship, and query tools have unique purposes. There is no meaningful overlap that would cause an agent to select the wrong tool.
All tool names follow a consistent snake_case verb_noun pattern with the same dynatrace_managed_ prefix. Verbs are limited to list, get, query, and discover, making the API surface predictable and easy to navigate.
At 18 tools, the server is at the heavier end of the expected range. The count is justified by covering multiple Dynatrace domains, but the many list/get pairs make the set feel slightly larger than strictly necessary.
The toolset provides good read-only coverage across major Dynatrace Managed areas: entities, metrics, logs, problems, events, security problems, and SLOs. Minor gaps exist, such as no log detail retrieval or problem/event mutation, but these are largely outside the apparent monitoring-focused scope.
Maintenance
Related MCP Connectors
- mcpOAuthcom.vibgrate
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
Deploy, monitor, and manage your OpenClaw AI assistants via natural language.
The Cortex MCP server provides read-only access to real-time engineering context from the Cortex developer portal, allowing AI coding assistants to answer natural language questions about your organization's catalog (microservices, libraries, domains, teams, infrastructure), scorecards (engineering standards and best practices), initiatives (goals and deadlines), and Engineering Intelligence metrics. It includes tools for querying documentation, tracking personal entities, and accessing AI-assisted insights across the entire Cortex ecosystem.
Let AI agents query data and act across all your business apps via MCP.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceA remote MCP server that enables real-time interaction with the Dynatrace observability platform, bringing production-level monitoring data directly into development workflows.16,636 npm137MIT
- AlicenseBqualityBmaintenanceEnables LLM agents to query Dynatrace SaaS for observability data (logs, metrics, traces, entities, problems, vulnerabilities) and manage configurations (dashboards, notebooks, SLOs, synthetic monitors, settings).100MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Datadog's observability platform via natural language, covering metrics, logs, APM, monitors, dashboards, incidents, and infrastructure.996 npm1MIT
- AlicenseNot gradedqualityDmaintenanceThis remote MCP server allows interaction with the Dynatrace observability platform. Bring real-time observability data directly into your development workflow.MIT