Dynatrace MCP server: tools, limits and what replaced it
Dynatrace runs three MCP servers. Four of its 18 tools act rather than read, and that is what decides how far you let an agent go.
Last verified 1 September 2026 · from Dynatrace's repository, its documentation and the server's own tools/list response
This page is one of 90 in a directory of monitoring and developer tools. Each page checks what an AI coding agent can get out of the tool through its MCP server, the connector that lets the agent query the tool directly.
Summary
Dynatrace publishes an official open-source MCP server, and it has had its last release. The README states that version 2.1.2 was the final one and no further updates will be made.
Two named successors exist, both first-party. dtctl with Dynatrace-for-AI is the route for local development. The hosted Dynatrace Remote MCP Server is the route for remote use. It also covers agent-to-agent use, where one agent calls another with no editor in the loop.
The 18 tools reach further than most observability connectors, including Davis AI analysis and Kubernetes events. Davis AI is Dynatrace's own causal and predictive AI. Four of the 18 act rather than read: two send messages, one ingests events, and one resets a query budget.
What is the Dynatrace MCP server?
It is Dynatrace's server for the Model Context Protocol. The agent gains tools for querying Grail, listing problems and vulnerabilities, and asking Davis AI for an analysis.
Grail is Dynatrace's data store and DQL is the query language over it. Three of the tools exist to help an agent write DQL rather than to run it: one generates a query from English, one explains a query, and one verifies a query before it runs.
There are three surfaces. This open-source server is finished at 2.1.2. `dtctl` is the successor for local development. The Remote MCP Server is hosted, generally available, and needs no local setup.
Dynatrace covers production observability broadly, reaches part of the way into release through deployment events, and reaches nothing in code review, agent observability or cost.
| Part of the work | What Dynatrace has here | Can an agent reach it |
|---|---|---|
| Code, tests & review | None | No code-review product |
| CI & release | Custom deployment events | Partial. send_event ingests deployment markers for tracking; there is no build or test pipeline here |
| Production observability | Grail: logs, metrics, spans, events, entities | Yes. Core strength, queried through DQL, with Davis AI analysis on top |
| Agent observability & evals | None in this connector | No traces, evaluations or prompt versioning for your own agents through these 18 tools |
| AI cost management | None | No token or model spend data. The Grail budget tool is query cost, not AI cost |
In practice, Dynatrace answers questions about the running system in depth, and nothing about the code that produced it or the agents you operate. An agent connected here can find a problem, query the logs around it and ask Davis AI for an analysis. It cannot see the pull request that caused it, so this connector pairs with a source-control one.
What can an AI agent do with Dynatrace?
| Task | Tools | Works | Watch out for |
|---|---|---|---|
| Find what is broken right now | list_problems get_environment_info | Yes | Problems are Dynatrace's own detections, not raw alerts |
| Query logs, metrics or spans | execute_dql verify_dql | Yes | Grail queries consume a byte budget. See the limits below |
| Write DQL from an English question | generate_dql_from_natural_language explain_dql_in_natural_language | Yes | Generation is a suggestion. Verify before running against a large time range |
| Investigate a Kubernetes issue | get_kubernetes_events find_entity_by_name | Yes | Entity lookup is by name, so the agent needs the name your environment uses |
| Check exposure to a vulnerability | list_vulnerabilities list_exceptions | Yes | Reads Dynatrace's own security findings, not your dependency manifests |
| Ask Davis AI for an analysis | chat_with_davis_copilot execute_davis_analyzer list_davis_analyzers | Yes | Davis Copilot availability depends on your Dynatrace subscription |
| Notify a team about an incident | send_slack_message send_email | Yes | These leave Dynatrace and reach people. See the limits below |
The last row is the one to read twice. Most observability connectors only report; this one can also send. An agent that decides a problem is worth escalating has the tools to escalate it.
18 tools registered, all on by default, of which the server marks 12 read-only
- Querying Grail2
execute_dqlverify_dql- Writing DQL2
generate_dql_from_natural_languageexplain_dql_in_natural_language- Finding problems3
list_problemslist_exceptionslist_vulnerabilities- Entities and environment3
find_entity_by_nameget_environment_infoget_kubernetes_events- Davis AI3
chat_with_davis_copilotexecute_davis_analyzerlist_davis_analyzers- Notebooks1Write
create_dynatrace_notebook- Acting on the world4Write
send_emailsend_slack_messagesend_eventreset_grail_budget
The write marks are the server's own readOnlyHint annotations: 12 of the 18 declare themselves read-only and 6 do not. Counted from the server's own tools/list response on 19 August 2026.
What connecting costs before the first question
A context window is the amount of text a model can hold at once, and connecting uses some of it before the agent asks anything. Every tool the server registers sends its name, description and input schema to the model when the session starts. The tool list is charged whether or not a single tool is called.
Dynatrace is efficient here relative to its reach. 18 tools cost about 3,909 tokens, roughly a quarter of what Grafana's default set costs. That still covers logs, metrics, spans, problems and vulnerabilities.
| Tool set | Tools | Tokens (GPT-5.6, GPT-5.5) | Tokens (GPT-4, GPT-3.5) | Tokens (Claude Haiku 4.5 to Opus 5) | Share of a 200,000-token window |
|---|---|---|---|---|---|
| Every tool, as registered | 18 | 3,909 to 5,103 | 3,867 to 5,106 | 5,521 to 7,328 | 1.9% to 3.7% |
Encodings: GPT-5.6, GPT-5.5 o200k_base; GPT-4, GPT-3.5 cl100k_base; Claude Haiku 4.5 to Opus 5 count_tokens. Counted 19 August 2026 from tools/list on the published @dynatrace-oss/dynatrace-mcp-server package. It was run locally with a placeholder environment and token.
Registration is static, so no Dynatrace tenant was involved. Figures cover name, description and input schema. The two models in column one share the o200k_base encoding, so they get one count. The spread is formatting, about 31%. Reasoning tokens are output, spent per request. This count is input, charged once at connection.
The Claude figures are measured rather than encoded. Anthropic publishes no local tokenizer. The definitions were sent to the API's count_tokens endpoint, and a no-tools baseline was subtracted. The range covers two tokenizer generations rather than two serializations. Haiku 4.5 and Opus 4.6 sit at the low end. Opus 5 and Sonnet 5 sit at the high end. The gap between them is about a third.
Dynatrace MCP server limits: where answers come back incomplete
Dynatrace documents the limits below; the first is unusual enough among observability connectors to lead with.
The agent says: “I let the on-call team know.” It sent a real email and a real Slack message.
Four of the eighteen tools act rather than read. send_email sends through the Dynatrace Email API from no-reply@apps.dynatrace.com, to a maximum of ten recipients. send_slack_message posts to a channel through the Slack Connector. send_event ingests a custom event that can trigger alerting. reset_grail_budget clears the tracked byte count.
None of these is gated by a server-side read-only flag, because the server has none. An agent investigating an incident has the means to escalate it to humans without being asked to.
Guard: Allowlist read tools only. In Claude Code, run /permissions and leave send_email, send_slack_message, send_event and reset_grail_budget unapproved.
The agent says: “The query returned nothing.” The Grail budget was exhausted.
Grail queries are metered by bytes scanned, and the server tracks a budget against that. Once it is exhausted, further queries do not run. An agent exploring a broad time range can spend the budget before it finds anything, and a blocked query and an empty result read alike.
Guard: Have the agent state the time range it queried, and treat an empty result after a wide query as unproven rather than as an answer.
The agent says: “Dynatrace is connected.” It is, and this server is finished.
Version 2.1.2 was the final release, published 20 July 2026, and the README states no further updates will be made. Deprecation does not break a connector, so nothing in the agent's behavior signals it.
Dynatrace names two replacements by use case: dtctl with Dynatrace-for-AI for local development, and the hosted Remote MCP Server for remote and agent-to-agent use. It also recommends the hosted server over self-hosting the HTTP transport.
Guard: Pick the successor that matches how you connect. For an editor on a laptop that is dtctl; for a remote agent it is the Remote MCP Server.
How to configure Dynatrace MCP for agents
- 1
Pick the successor first
This surface ended at 2.1.2. Dynatrace names
dtctlwith Dynatrace-for-AI for local development, and the hosted Remote MCP Server for remote and agent-to-agent use. - 2
Decide about the four acting tools
send_email,send_slack_message,send_eventandreset_grail_budgetchange something outside Dynatrace or inside your quota. There is no server-side read-only flag, so the gate is your client's allowlist. - 3
Set a Grail budget you can live with
DT_GRAIL_QUERY_BUDGET_GBcaps how many bytes queries may scan. Too low and exploration stops early; too high and one broad query can spend the day's budget. - 4
Choose how you authenticate
With only
DT_ENVIRONMENTset, the server opens a browser for Dynatrace SSO.DT_PLATFORM_TOKENskips that, which is what a headless setup needs.
Paste this into your agent’s instructions
Two of Dynatrace's limits produce the same empty answer: a query that found nothing, and a query that was stopped by the byte budget. The block makes the agent separate them, and makes any message it sends visible.
When you answer using Dynatrace MCP tools, state: - The DQL you ran and the time range it covered. - Whether the Grail query budget was reached. A stopped query and an empty result are not the same finding. - Whether you sent anything. send_email, send_slack_message and send_event leave Dynatrace and reach people or alerting. Never state that data does not exist. State that none was returned under the constraints above. Write your answer in ASD-STE100 Simplified Technical English. Use short sentences with one idea in each.
Do you need the MCP server at all?
Partly. The Dynatrace API covers Grail queries and problem lists, and a coding agent can call it directly with the same token.
The connector adds the DQL authoring tools, which have no API equivalent worth the name: generating a query from English, explaining one, and verifying it before it runs against a metered store.
The deprecation changes the choice rather than removing it. Between an unmaintained local package and two maintained successors, the successors win, and both keep the MCP shape.
Use dtctl locally or the Remote MCP Server for anything hosted. Call the API directly when the query is fixed and you do not need help writing DQL.
Dynatrace MCP server setup
The package runs with npx and needs DT_ENVIRONMENT, your Dynatrace environment URL. Authentication is either browser-based SSO or a platform token.
From version 1.0.0 the server no longer loads .env files automatically. Use your client's own environment configuration instead.
Claude Code
With only DT_ENVIRONMENT set, the server opens a browser for Dynatrace SSO on first use, so no token appears in the config.
claude mcp add-json "dynatrace" '{"command":"npx",
"args":["-y","@dynatrace-oss/dynatrace-mcp-server"],
"env":{"DT_ENVIRONMENT":"https://abc12345.apps.dynatrace.com"}}'Cursor
In ~/.cursor/mcp.json. A platform token avoids the browser flow.
{"mcpServers":{"dynatrace":{"command":"npx",
"args":["-y","@dynatrace-oss/dynatrace-mcp-server"],
"env":{"DT_ENVIRONMENT":"https://abc12345.apps.dynatrace.com",
"DT_PLATFORM_TOKEN":"<your-token>"}}}}Codex CLI
Codex reads TOML, so the JSON blocks above will not transfer.
[mcp_servers.dynatrace]
command = "npx"
args = ["-y", "@dynatrace-oss/dynatrace-mcp-server"]
env = { DT_ENVIRONMENT = "https://abc12345.apps.dynatrace.com", DT_PLATFORM_TOKEN = "<your-token>" }Every other client
Each block below is the configuration for one client, with the file path and the key that client expects.
Claude Desktop
macOS ~/Library/Application Support/Claude/claude_desktop_config.json. Windows %APPDATA%\Claude\claude_desktop_config.json. There is no CLI. Edit through Settings, Developer, Edit Config.
Quit and restart fully for changes to load. Paths in args must be absolute. Logs at ~/Library/Logs/Claude/mcp.log.
{"mcpServers":{"dynatrace":{"command":"npx",
"args":["-y","@dynatrace-oss/dynatrace-mcp-server"],
"env":{"DT_ENVIRONMENT":"https://abc12345.apps.dynatrace.com","DT_PLATFORM_TOKEN":"<your-token>"}}}}Gemini CLI
~/.gemini/settings.json globally, or .gemini/settings.json per project. Key mcpServers. CLI: gemini mcp add.
{"mcpServers":{"dynatrace":{"command":"npx",
"args":["-y","@dynatrace-oss/dynatrace-mcp-server"],
"env":{"DT_ENVIRONMENT":"https://abc12345.apps.dynatrace.com","DT_PLATFORM_TOKEN":"<your-token>"}}}}VS Code Copilot
.vscode/mcp.json per workspace, or your user profile. CLI: code --add-mcp.
{"servers":{"dynatrace":{"command":"npx",
"args":["-y","@dynatrace-oss/dynatrace-mcp-server"],
"env":{"DT_ENVIRONMENT":"https://abc12345.apps.dynatrace.com","DT_PLATFORM_TOKEN":"<your-token>"}}}}The key is `servers`, not `mcpServers`. VS Code is the only client that uses that name, and copying a config from anywhere else fails silently.
Windsurf
~/.codeium/windsurf/mcp_config.json, which is the path Windsurf documents. Key mcpServers, the same JSON shape as Cursor, carrying the same platform token.
Zed
~/.config/zed/settings.json, carrying the same platform token as the blocks above.
The key is `context_servers`. Zed does not call them MCP servers in config, so searching its settings for mcp finds nothing.
Google Antigravity
~/.gemini/config/mcp_config.json globally, or .agents/mcp_config.json per project. Key mcpServers. There is no CLI. Use the /mcp overlay in the editor. Supports stdio, streamable HTTP, SSE and websocket.
{"mcpServers":{"dynatrace":{"command":"npx",
"args":["-y","@dynatrace-oss/dynatrace-mcp-server"],
"env":{"DT_ENVIRONMENT":"https://abc12345.apps.dynatrace.com","DT_PLATFORM_TOKEN":"<your-token>"}}}}Amp (Sourcegraph)
~/.config/amp/settings.json or .amp/settings.json, carrying the same platform token. The amp mcp CLI covers approve, doctor and oauth.
The key is `amp.mcpServers`, namespaced. A bare mcpServers block is ignored.
Cline
~/.cline/mcp.json per the docs. The source also reads ~/.cline/data/settings/cline_mcp_settings.json. Key mcpServers, standard JSON shape, carrying the same platform token. Supports stdio, streamable HTTP and SSE.
Goose (Block)
~/.config/goose/config.yaml, carrying the same platform token.
YAML, and servers are called `extensions`. Goose does not use the MCP vocabulary in config at all. Add one interactively with goose configure, or per session with goose session --with-extension.
Kiro (AWS)
.kiro/settings/mcp.json per workspace, or ~/.kiro/settings/mcp.json globally. Key mcpServers, standard JSON shape, carrying the same platform token.
Warp
~/.warp/.mcp.json or .warp/.mcp.json. Key mcpServers, standard shape, carrying the same platform token. Also addable through the /agent-add-mcp skill.
JetBrains Junie
.junie/mcp/mcp.json per project, or ~/.junie/mcp/mcp.json. Key mcpServers, carrying the same platform token. Use /mcp in the CLI to manage.
Roo Code
.roo/mcp.json per project. The global file is mcp_settings.json, opened from the Roo Code MCP settings view with Edit Global MCP. Key mcpServers, carrying the same platform token.
Continue
.continue/mcpServers/*.yaml, one file per server, carrying the same platform token.
YAML, and `mcpServers` is a list, not an object. Every JSON client keys servers by name. Continue takes an array, so a converted config will not parse.
Trae
.trae/mcp.json per project, or paste into the UI under Raw Config (JSON). Key mcpServers, standard shape, carrying the same platform token.
Devin
Devin has no config file to edit. Servers are added through a web form in the settings UI, and Devin's documentation states you do not need to write or paste JSON. The block below is the shape those fields describe, shown for reference. Either route uses the same platform token.
With a query budget
Caps how many gigabytes Grail queries may scan before the server stops running them.
DT_ENVIRONMENT=https://abc12345.apps.dynatrace.com \ DT_PLATFORM_TOKEN=<your-token> \ DT_GRAIL_QUERY_BUDGET_GB=10 \ npx -y @dynatrace-oss/dynatrace-mcp-server
Read-only access, permissions and security
Six tools carry no read-only mark
Four of them act on the world: two send messages to people, one ingests events that can trigger alerting, and one resets a query budget. A fifth creates a notebook. There is no server-side read-only flag.
The token carries your platform permissions
DT_PLATFORM_TOKENgrants whatever that token was scoped to, and the agent inherits it for every tool including the sending ones.Self-hosting the HTTP transport is discouraged
Dynatrace recommends the hosted Remote MCP Server over running
--httpor--serveryourself. Its reasons are security and no infrastructure to run.The server declares its own read-only tools
12 of the 18 carry a
readOnlyHintof true, so a client that respects annotations can gate on Dynatrace's own declaration.
Troubleshooting
- A query returns nothing after working earlier
- The Grail byte budget may be exhausted.
reset_grail_budgetclears the tracked count, andDT_GRAIL_QUERY_BUDGET_GBsets the ceiling. - The server opens a browser window unexpectedly
- With only
DT_ENVIRONMENTset, the server authenticates through Dynatrace SSO in a browser. SetDT_PLATFORM_TOKENfor a headless setup. - Environment variables from `.env` are ignored
- Since version 1.0.0 the server no longer loads
.envfiles. Use your MCP client's own environment configuration. - An unexpected email or Slack message went out
send_emailandsend_slack_messageare in the default tool set with no read-only mode. Remove them from your client's allowlist.
Dynatrace MCP server: Reference
| Item | Value |
|---|---|
| Status | v2.1.2 on 20 July 2026, the final release · repository deprecated |
| Adoption | 134 stars · MIT license |
| Package | @dynatrace-oss/dynatrace-mcp-server on npm |
| Successors | dtctl with Dynatrace-for-AI locally · hosted Remote MCP Server for remote use |
| Auth | Browser SSO with DT_ENVIRONMENT, or DT_PLATFORM_TOKEN |
| Tools | 18, all on by default · 12 marked read-only by the server |
| Read-only | No server-side flag. Gate the four acting tools in the client |
| Query budget | DT_GRAIL_QUERY_BUDGET_GB, measured in bytes scanned |
What engineers report
Dynatrace's connector is first-party, MIT licensed and listed on the Dynatrace Hub, with 134 stars. Its public footprint is small and its ending is clear, so the useful signals are releases rather than opinions.
| What was checked | What it shows |
|---|---|
| Stars | 134 |
| Final release | v2.1.2, 20 July 2026 |
| License | MIT |
| Tools | 18, all on by default |
| Tools with side effects | 4 of 18 |
“MCP Server starts, but copilot never uses the MCP server. Any prompts about the exposed tools bring nothing from the MCP server.”
Repository facts from the GitHub API, retrieved 19 August 2026. Tool counts and behavior from the server's own tools/list response on the published npm package, not from the README.
Should you connect an agent to Dynatrace?
Yes, though it is no longer actively maintained. Best for dynatrace teams connecting dtctl or the Remote MCP Server, with the four acting tools left off the allowlist.
- Strongest fit
- Dynatrace teams who want an agent querying Grail with help writing DQL, and Davis AI analysis in the same conversation.
- Main advantage
- Wide reach for a small tool list, and DQL authoring tools that make an unfamiliar query language usable by an agent.
- Main weakness
- This surface is finished at 2.1.2, so the choice is really between its two successors.
- Operational risk
- Four tools have side effects, two of which contact people. There is no server-side read-only mode.
From Oodle
One platform for agent traces and infrastructure
Agent traces usually sit in a different product from the rest of your telemetry, so when a slow database makes an agent slow the symptom is in one tool and the cause is in another. Oodle keeps both in one query surface, from $10 per million spans.
See agent observabilityFrequently asked questions
Is the Dynatrace MCP server deprecated?
The open-source one is. The README states version 2.1.2 was the final release. Dynatrace names dtctl with Dynatrace-for-AI for local development and the hosted Remote MCP Server for remote use.
How many tools does it have?
18, all enabled on connection. Counted from the server's own tools/list response on the published npm package, 19 August 2026.
Can an agent send messages to my team?
Yes. send_email and send_slack_message both leave Dynatrace and reach people, and the server has no read-only mode. Restrict them in your MCP client.
What is DQL and does the agent need to know it?
DQL is Dynatrace Query Language, used to query the Grail data store. Three tools help an agent write, explain and verify a query, so it does not need to know DQL in advance.
Why did a query return nothing?
Possibly the Grail byte budget was exhausted rather than the data being absent. A blocked query and an empty result look the same to an agent.