NewAgent Observability is live.
Back to directory
Dynatrace logo

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.

Connector
Official, final release
Coverage
Logs, metrics, spans, problems, vulnerabilities
Tools
18, all on by default
Biggest risk for an agent
Tools that send email and Slack messages

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 workWhat Dynatrace has hereCan an agent reach it
Code, tests & reviewNoneNo code-review product
CI & releaseCustom deployment eventsPartial. send_event ingests deployment markers for tracking; there is no build or test pipeline here
Production observabilityGrail: logs, metrics, spans, events, entitiesYes. Core strength, queried through DQL, with Davis AI analysis on top
Agent observability & evalsNone in this connectorNo traces, evaluations or prompt versioning for your own agents through these 18 tools
AI cost managementNoneNo 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?

TaskToolsWorksWatch out for
Find what is broken right nowlist_problems get_environment_infoYesProblems are Dynatrace's own detections, not raw alerts
Query logs, metrics or spansexecute_dql verify_dqlYesGrail queries consume a byte budget. See the limits below
Write DQL from an English questiongenerate_dql_from_natural_language explain_dql_in_natural_languageYesGeneration is a suggestion. Verify before running against a large time range
Investigate a Kubernetes issueget_kubernetes_events find_entity_by_nameYesEntity lookup is by name, so the agent needs the name your environment uses
Check exposure to a vulnerabilitylist_vulnerabilities list_exceptionsYesReads Dynatrace's own security findings, not your dependency manifests
Ask Davis AI for an analysischat_with_davis_copilot execute_davis_analyzer list_davis_analyzersYesDavis Copilot availability depends on your Dynatrace subscription
Notify a team about an incidentsend_slack_message send_emailYesThese 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 setToolsTokens (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 registered183,909 to 5,1033,867 to 5,1065,521 to 7,3281.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. 1

    Pick the successor first

    This surface ended at 2.1.2. Dynatrace names dtctl with Dynatrace-for-AI for local development, and the hosted Remote MCP Server for remote and agent-to-agent use.

  2. 2

    Decide about the four acting tools

    send_email, send_slack_message, send_event and reset_grail_budget change something outside Dynatrace or inside your quota. There is no server-side read-only flag, so the gate is your client's allowlist.

  3. 3

    Set a Grail budget you can live with

    DT_GRAIL_QUERY_BUDGET_GB caps 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. 4

    Choose how you authenticate

    With only DT_ENVIRONMENT set, the server opens a browser for Dynatrace SSO. DT_PLATFORM_TOKEN skips 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.

Terminal
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.

Terminal
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.

Terminal
{"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.

Terminal
[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.

Terminal
{"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.

Terminal
{"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.

Terminal
{"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.

Terminal
{"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.

Terminal
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_TOKEN grants 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 --http or --server yourself. Its reasons are security and no infrastructure to run.

  • The server declares its own read-only tools

    12 of the 18 carry a readOnlyHint of 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_budget clears the tracked count, and DT_GRAIL_QUERY_BUDGET_GB sets the ceiling.
The server opens a browser window unexpectedly
With only DT_ENVIRONMENT set, the server authenticates through Dynatrace SSO in a browser. Set DT_PLATFORM_TOKEN for a headless setup.
Environment variables from `.env` are ignored
Since version 1.0.0 the server no longer loads .env files. Use your MCP client's own environment configuration.
An unexpected email or Slack message went out
send_email and send_slack_message are in the default tool set with no read-only mode. Remove them from your client's allowlist.

Dynatrace MCP server: Reference

ItemValue
Statusv2.1.2 on 20 July 2026, the final release · repository deprecated
Adoption134 stars · MIT license
Package@dynatrace-oss/dynatrace-mcp-server on npm
Successorsdtctl with Dynatrace-for-AI locally · hosted Remote MCP Server for remote use
AuthBrowser SSO with DT_ENVIRONMENT, or DT_PLATFORM_TOKEN
Tools18, all on by default · 12 marked read-only by the server
Read-onlyNo server-side flag. Gate the four acting tools in the client
Query budgetDT_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 checkedWhat it shows
Stars134
Final releasev2.1.2, 20 July 2026
LicenseMIT
Tools18, all on by default
Tools with side effects4 of 18

“MCP Server starts, but copilot never uses the MCP server. Any prompts about the exposed tools bring nothing from the MCP server.”

aborigene, GitHub issue, 20 May 2025 · A server that connects without its tools ever being called, with 10 comments.

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 observability

Frequently 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.

Changelog

  • 20 July 2026. dynatrace-oss/dynatrace-mcp v2.1.2 released, the most recent version.
  • 24 November 2025. v1.0.0 released, the first stable version.
  • 15 July 2025. First release, v0.3.0, with v0.4.0 following the same day.
  • 23 April 2025. dynatrace-oss/dynatrace-mcp created on GitHub.

Sources

Every number on this page traces to one of these

  1. Repository facts from the GitHub API · dynatrace-oss/dynatrace-mcp, retrieved 19 August 2026
  2. Deprecation notice, successors and self-hosting guidance from the repository README
  3. Tool counts and per-tool behavior from the server's own tools/list response on the published npm package
  4. Remote MCP Server availability from the Dynatrace Hub listing

Dynatrace’s own MCP documentation

Also production observability:

For the code and pipeline behind an incident: