{
  "markdown": "# Dynatrace MCP Server\n\n[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/dynatrace-oss/dynatrace-ai-agent-instrumentation-examples/badge)](https://scorecard.dev/viewer/?uri=github.com/dynatrace-oss/dynatrace-mcp)\n\n<h4 align=\"center\">\n  <a href=\"https://github.com/dynatrace-oss/dynatrace-mcp/releases\">\n    <img src=\"https://img.shields.io/github/release/dynatrace-oss/dynatrace-mcp\" />\n  </a>\n  <a href=\"https://github.com/dynatrace-oss/dynatrace-mcp/blob/main/LICENSE\">\n    <img src=\"https://img.shields.io/badge/license-mit-blue.svg\" alt=\"Dynatrace MCP Server is released under the MIT License\" />\n  </a>\n  <a href=\"https://vscode.dev/redirect/mcp/install?name=dynatrace-mcp-server&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40dynatrace-oss%2Fdynatrace-mcp-server%22%5D%2C%22env%22%3A%7B%7D%7D\">\n    <img src=\"https://img.shields.io/badge/Install_in-VS_Code-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white\" />\n  </a>\n  <a href=\"[https://vscode.dev/redirect/mcp/install?name=dynatrace-mcp-server&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40dynatrace-oss%2Fdynatrace-mcp-server%22%5D%2C%22env%22%3A%7B%7D%7D](https://cursor.com/en/install-mcp?name=dynatrace-mcp-server&config=eyJuYW1lIjoiZHluYXRyYWNlLW1jcC1zZXJ2ZXIiLCJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBkeW5hdHJhY2Utb3NzL2R5bmF0cmFjZS1tY3Atc2VydmVyIl0sImVudiI6e319)\">\n    <img src=\"https://img.shields.io/badge/Install_in-Cursor-000000?style=flat-square&logoColor=white\" />\n  </a>\n  <a href=\"https://www.npmjs.com/package/@dynatrace-oss/dynatrace-mcp-server\">\n    <img src=\"https://img.shields.io/npm/dm/@dynatrace-oss/dynatrace-mcp-server?logo=npm&style=flat&color=red\" alt=\"npm\" />\n  </a>\n  <a href=\"https://github.com/dynatrace-oss/dynatrace-mcp\">\n    <img src=\"https://img.shields.io/github/stars/dynatrace-oss/dynatrace-mcp\" alt=\"Dynatrace MCP Server Stars on GitHub\" />\n  </a>\n  <a href=\"https://github.com/dynatrace-oss/dynatrace-mcp\">\n    <img src=\"https://img.shields.io/github/contributors/dynatrace-oss/dynatrace-mcp?color=green\" alt=\"Dynatrace MCP Server Contributors on GitHub\" />\n  </a>\n</h4>\n\n## ⚠️ DEPRECATED\n\n> **This repository is deprecated. Version 2.1.2 was the final release — no further updates will be made.**\n\nPlease migrate to one of the actively maintained alternatives:\n\n| Use case                                                             | Recommended tool                                                                                                       |\n| -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |\n| **Local development** (VS Code, IntelliJ, Claude Code, Cursor, …)    | [Dynatrace-for-AI](https://github.com/Dynatrace/dynatrace-for-ai/) + [`dtctl`](https://github.com/dynatrace-oss/dtctl) |\n| **Agent-to-agent / remote** (Atlassian Rovo, GitHub Coding Agent, …) | [Dynatrace Remote MCP Server](https://www.dynatrace.com/hub/detail/dynatrace-mcp-server/) — no local setup required    |\n\nSee the [migration guide](docs/remote-mcp-migration.md) for a step-by-step comparison and migration instructions.\n\nThe local _Dynatrace MCP server_ allows AI Assistants to interact with the [Dynatrace](https://www.dynatrace.com/) observability platform,\nbringing real-time observability data directly into your development workflow.\n\n> Note: This product is not officially supported by Dynatrace.\n\nIf you need help, please contact us via [GitHub Issues](https://github.com/dynatrace-oss/dynatrace-mcp/issues) if you have feature requests, questions, or need help.\n\nhttps://github.com/user-attachments/assets/25c05db1-8e09-4a7f-add2-ed486ffd4b5a\n\n## Prerequisites\n\n- **Node.js v24 or newer** is required to run the Dynatrace MCP Server.\n\n## Quickstart\n\nYou can add this MCP server to your MCP Client like VSCode, Claude, Cursor, Amazon Q, Windsurf, ChatGPT, or Github Copilot via the command is `npx -y @dynatrace-oss/dynatrace-mcp-server` (type: `stdio`). For more details, please refer to the [configuration section below](#configuration).\n\nFurthermore, you need to configure the URL to a Dynatrace environment:\n\n- `DT_ENVIRONMENT` (string, e.g., `https://abc12345.apps.dynatrace.com`) - URL to your Dynatrace Platform (do not use Dynatrace classic URLs like `abc12345.live.dynatrace.com`)\n\nAuthentication will be handled via Authorization Code Flow in your browser, you don't need to define a Platform Token nor an OAuth Client to get started. After the initial authentication, your token is securely stored in the **OS keychain** (macOS Keychain, Windows Credential Manager, or Linux Secret Service) and reused on subsequent server starts, so the browser only opens once per token lifetime.\n\nIf you are running in a headless/container environment where the OS keychain is unavailable, set `DT_MCP_TOKEN_STORAGE=file` to persist tokens in `~/.config/dynatrace-mcp/` instead.\n\nOnce you are done, we recommend looking into [example prompts](#-example-prompts-), like `Get all details of the entity 'my-service'` or `Show me error logs`. Please mind that these prompts lead to executing DQL statements which may incur [costs](#costs) in accordance to your licence.\n\n**VSCode**\n\n```json\n{\n  \"servers\": {\n    \"npx-dynatrace-mcp-server\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dynatrace-oss/dynatrace-mcp-server@latest\"],\n      \"env\": {\n        \"DT_ENVIRONMENT\": \"https://abc12345.apps.dynatrace.com\"\n      }\n    }\n  }\n}\n```\n\n## Architecture\n\n![Architecture](https://github.com/dynatrace-oss/dynatrace-mcp/blob/main/assets/dynatrace-mcp-arch.png?raw=true)\n\n## Use cases\n\n- **Real-time observability** - Fetch production-level data for early detection and proactive monitoring\n- **Contextual debugging** - Fix issues with full context from monitored exceptions, logs, and anomalies\n- **Security insights** - Get detailed vulnerability analysis and security problem tracking\n- **Natural language queries** - Use AI-powered DQL generation and explanation\n- **Multi-phase incident investigation** - Systematic 4-phase approach with automated impact assessment\n- **Advanced transaction analysis** - Precise root cause identification with file/line-level accuracy\n- **Cross-data source correlation** - Connect problems → spans → logs with trace ID correlation\n- **DevOps automation** - Deployment health gates with automated promotion/rollback logic\n- **Security compliance monitoring** - Multi-cloud compliance assessment with evidence-based investigation\n\n## Capabilities\n\n- Observability & Problem Management (e.g., `list_problems`, `list_vulnerabilities`, `list_exceptions`, `get_kubernetes_events`)\n- Querying Data from Grail (e.g., `execute_dql`, `verify_dql`, `generate_dql_from_natural_language`, `explain_dql_in_natural_language`)\n- Entity Discovery (e.g., `find_entity_by_name`)\n- [Dynatrace Intelligence](https://www.dynatrace.com/platform/artificial-intelligence/) (e.g., `chat_with_davis_copilot`, `list_davis_analyzers`, `execute_davis_analyzer`)\n- Automation & Notifications (e.g., `send_slack_message`, `send_email`, `send_event`)\n- Share results (e.g., `create_dynatrace_notebook`)\n\n### Costs\n\n**Important:** While this local MCP server is provided for free, using certain capabilities to access data in Dynatrace Grail may incur additional costs based\non your Dynatrace consumption model. This affects `execute_dql` tool and other capabilities that **query** Dynatrace Grail storage, and costs\ndepend on the volume (GB scanned).\n\n**Before using this MCP server extensively, please:**\n\n1. Review your current Dynatrace consumption model and pricing\n2. Understand the cost implications of the specific data you plan to query (logs, events, metrics) - see [Dynatrace Pricing and Rate Card](https://www.dynatrace.com/pricing/)\n3. Start with smaller timeframes (e.g., 12h-24h) and make use of [buckets](https://docs.dynatrace.com/docs/discover-dynatrace/platform/grail/data-model#built-in-grail-buckets) to reduce the cost impact\n4. Set an appropriate `DT_GRAIL_QUERY_BUDGET_GB` environment variable (default: 1000 GB) to control and monitor your Grail query consumption\n\n**Grail Budget Tracking:**\n\nThe MCP server includes built-in budget tracking for Grail queries to help you monitor and control costs:\n\n- Set `DT_GRAIL_QUERY_BUDGET_GB` (default: 1000 GB) to define your session budget limit\n- The server tracks bytes scanned across all Grail queries in the current session\n- You'll receive warnings when approaching 80% of your budget\n- Budget exceeded alerts help prevent unexpected high consumption\n- Budget resets when you restart the MCP server session\n\n**To understand costs that occured:**\n\nExecute the following DQL statement in a notebook to see how much bytes have been queried from Grail (Logs, Events, etc...):\n\n```\nfetch dt.system.events\n| filter event.kind == \"QUERY_EXECUTION_EVENT\" and contains(client.client_context, \"dynatrace-mcp\")\n| sort timestamp desc\n| fields timestamp, query_id, query_string, scanned_bytes, table, bucket, user.id, user.email, client.client_context\n| maketimeSeries sum(scanned_bytes), by: { user.email, user.id, table }\n```\n\n### AI-Powered Assistance\n\n- **Natural Language to DQL** - Convert plain English queries to Dynatrace Query Language\n- **DQL Explanation** - Get plain English explanations of complex DQL queries\n- **AI Chat Assistant** - Get contextual help and guidance for Dynatrace questions\n\n## Configuration\n\nYou can add this MCP server (using STDIO) to your MCP Client like VS Code, Claude, Cursor, Amazon Q Developer CLI, Windsurf Github Copilot via the package `@dynatrace-oss/dynatrace-mcp-server`.\n\nWe recommend to always set it up for your current workspace instead of using it globally.\n\n**VS Code**\n\n```json\n{\n  \"servers\": {\n    \"npx-dynatrace-mcp-server\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dynatrace-oss/dynatrace-mcp-server@latest\"],\n      \"env\": {\n        \"DT_ENVIRONMENT\": \"https://abc12345.apps.dynatrace.com\"\n      }\n    }\n  }\n}\n```\n\n**Claude Desktop**\n\n```json\n{\n  \"mcpServers\": {\n    \"dynatrace-mcp-server\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dynatrace-oss/dynatrace-mcp-server@latest\"],\n      \"env\": {\n        \"DT_ENVIRONMENT\": \"https://abc12345.apps.dynatrace.com\"\n      }\n    }\n  }\n}\n```\n\n**Amazon Q Developer CLI**\n\nThe [Amazon Q Developer CLI](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-mcp-configuration.html) provides an interactive chat experience directly in your terminal. You can ask questions, get help with AWS services, troubleshoot issues, and generate code snippets without leaving your command line environment.\n\n```json\n{\n  \"mcpServers\": {\n    \"dynatrace-mcp-server\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dynatrace-oss/dynatrace-mcp-server@latest\"],\n      \"env\": {\n        \"DT_ENVIRONMENT\": \"https://abc12345.apps.dynatrace.com\"\n      }\n    }\n  }\n}\n```\n\nThis configuration should be stored in `<your-repo>/.amazonq/mcp.json`.\n\n**Amazon Kiro**\n\nThe [Amazon Kiro](https://kiro.dev/) is an agentic IDE that helps you do your best work with features such as specs, steering, and hooks.\n\n```json\n{\n  \"mcpServers\": {\n    \"dynatrace-mcp-server\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dynatrace-oss/dynatrace-mcp-server@latest\"],\n      \"env\": {\n        \"DT_ENVIRONMENT\": \"https://abc12345.apps.dynatrace.com\"\n      }\n    }\n  }\n}\n```\n\nThis configuration should be stored in `<your-repo>/.kiro/settings/mcp.json`.\n\n**Google Gemini CLI**\n\nThe [Google Gemini CLI](https://github.com/google-gemini/gemini-cli) is Google's official command-line AI assistant that supports MCP server integration. You can add the Dynatrace MCP server using either the built-in management commands or manual configuration.\n\nUsing `gemini` CLI directly (recommended):\n\n```bash\ngemini extensions install https://github.com/dynatrace-oss/dynatrace-mcp\nexport DT_PLATFORM_TOKEN=... # optional\n```\n\nThe command will ask for the value Dynatrace Environment.\n\nVerify that the server is running via\n\n```bash\ngemini mcp list\n```\n\nOr manually in your `~/.gemini/settings.json` or `.gemini/settings.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"dynatrace\": {\n      \"command\": \"npx\",\n      \"args\": [\"@dynatrace-oss/dynatrace-mcp-server@latest\"],\n      \"env\": {\n        \"DT_ENVIRONMENT\": \"https://abc12345.apps.dynatrace.com\"\n      },\n      \"timeout\": 30000,\n      \"trust\": false\n    }\n  }\n}\n```\n\n### HTTP Server Mode (Alternative)\n\n> **💡 Recommendation:** Instead of self-hosting with `--http` / `--server`, consider using the official [Dynatrace Remote MCP Server](https://www.dynatrace.com/hub/detail/dynatrace-mcp-server/) — it is more secure, always up to date, and requires no infrastructure management.\n\nFor scenarios where you need to run the MCP server as an HTTP service instead of using stdio (e.g., for stateful sessions, load balancing, or integration with web clients), you can use the HTTP server mode:\n\n**Running as HTTP server:**\n\nPlease secure your server with a bearer token:\n\n```bash\nexport MCP_BEARER_TOKEN=<bearer-token>\n```\n\n```bash\n# Get help and see all available options\nnpx -y @dynatrace-oss/dynatrace-mcp-server@latest --help\n\n# Run with HTTP server on default port 3000\nnpx -y @dynatrace-oss/dynatrace-mcp-server@latest --http\n\n# Run with custom port (using short or long flag)\nnpx -y @dynatrace-oss/dynatrace-mcp-server@latest --server -p 8080\nnpx -y @dynatrace-oss/dynatrace-mcp-server@latest --http --port 3001\n\n# Run with custom host/IP (using short or long flag)\nnpx -y @dynatrace-oss/dynatrace-mcp-server@latest --http --host 127.0.0.1 # recommended for local computers\nnpx -y @dynatrace-oss/dynatrace-mcp-server@latest --http --host 0.0.0.0 # required for container (binds all interfaces; omitting --host defaults to 127.0.0.1)\nnpx -y @dynatrace-oss/dynatrace-mcp-server@latest --http -H 192.168.0.1 # recommended when sharing connection over a local network\n\n# Static OAuth callback port (useful when the port must be exposed, e.g., when running the MCP in a container)\nnpx -y @dynatrace-oss/dynatrace-mcp-server@latest --oauth-redirect-port 5344\n\n# Check version\nnpx -y @dynatrace-oss/dynatrace-mcp-server@latest --version\n```\n\n**Configuration for MCP clients that support HTTP transport:**\n\n```json\n{\n  \"mcpServers\": {\n    \"dynatrace-http\": {\n      \"url\": \"http://localhost:3000\",\n      \"transport\": \"http\",\n      \"headers\": {\n        \"Authorization\": \"Bearer <bearer-token>\"\n      }\n    }\n  }\n}\n```\n\n#### Bearer Token Authentication (`MCP_BEARER_TOKEN`)\n\n`MCP_BEARER_TOKEN` is **required** when running in HTTP mode. The server will refuse to start if this variable is not set.\n\nEvery HTTP request must include an `Authorization: Bearer <token>` header. Requests without a valid token receive `401 Unauthorized`.\n\n**Generating a secure token:**\n\n```bash\nexport MCP_BEARER_TOKEN=$(openssl rand -base64 32)\nnpx -y @dynatrace-oss/dynatrace-mcp-server@latest --http\n```\n\n**Configuring the MCP client to send the token:**\n\n```json\n{\n  \"mcpServers\": {\n    \"dynatrace-http\": {\n      \"url\": \"http://localhost:3000\",\n      \"transport\": \"http\",\n      \"headers\": {\n        \"Authorization\": \"Bearer <your-token>\"\n      }\n    }\n  }\n}\n```\n\n### MCP Bundle (MCPB)\n\nEach release publishes a pre-built MCP Bundle file (`.mcpb`) that you can install directly in Claude Desktop without any manual JSON configuration.\n\n**Installing in Claude Desktop:**\n\n1. Go to the [GitHub Releases](https://github.com/dynatrace-oss/dynatrace-mcp/releases) page and download the latest `dynatrace-mcp-server-<version>.mcpb` file.\n2. Double-click the downloaded `.mcpb` file, or open Claude Desktop → **Settings** → **Developer** and drag the file into the MCP servers list.\n3. Follow the prompts to set your `DT_ENVIRONMENT` variable (e.g. `https://abc12345.apps.dynatrace.com`).\n\nThis repository also includes an MCP Bundle-compatible [manifest.json](manifest.json) for local installation.\nThe bundle runs the compiled local server entrypoint via stdio:\n\n- `server.type`: `node`\n- `server.entry_point`: `dist/index.js`\n- `mcp_config.command`: `node`\n- `mcp_config.args`: `[\"${__dirname}/dist/index.js\"]`\n\n### Rule File\n\nFor efficient result retrieval from Dynatrace, please consider creating a rule file (e.g., [.github/copilot-instructions.md](https://docs.github.com/en/copilot/how-tos/configure-custom-instructions/add-repository-instructions), [.amazonq/rules/](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/context-project-rules.html)), instructing coding agents on how to get more details for your component/app/service. Here is an example for [easytrade](https://github.com/Dynatrace/easytrade), please adapt the names and filters to fit your use-cases and components:\n\n```\n# Observability\n\nWe use Dynatrace as an Observability solution. This document provides instructions on how to get data for easytrade from Dynatrace using DQL.\n\n## How to get any data for my App\n\nDepending on the query and tool used, the following filters can be applied to narrow down results:\n\n* `contains(entity.name, \"easytrade\")`\n* `contains(affected_entity.name, \"easytrade\")`\n* `contains(container.name, \"easytrade\")`\n\nFor best results, you can combine these filters with an `OR` operator.\n\n## Logs\n\nTo fetch logs for easytrade, execute `fetch logs | filter contains(container.name, \"easyatrade\")`.\nFor fetching just error-logs, add `| filter loglevel == \"ERROR\"`.\n```\n\n## Environment Variables\n\n> **Breaking Change in v1.0.0:** The MCP server no longer automatically loads `.env` files. To use environment variables from a `.env` file, you need to configure your MCP client to load environment variables using the native `envFile` configuration option. See the [configuration examples](#configuration) below for details.\n\n- `DT_ENVIRONMENT` (**required**, string, e.g., `https://abc12345.apps.dynatrace.com`) - URL to your Dynatrace Platform (do not use Dynatrace classic URLs like `abc12345.live.dynatrace.com`)\n- `DT_PLATFORM_TOKEN` (optional, string, e.g., `dt0s16.SAMPLE.abcd1234`) - Dynatrace Platform Token\n- `OAUTH_CLIENT_ID` (optional, string, e.g., `dt0s02.SAMPLE`) - Alternative: Dynatrace OAuth Client ID (for advanced use cases)\n- `OAUTH_CLIENT_SECRET` (optional, string, e.g., `dt0s02.SAMPLE.abcd1234`) - Alternative: Dynatrace OAuth Client Secret (for advanced use cases)\n- `DT_SSO_URL` (optional, string, e.g., `https://sso.dynatrace.com`) - Override the SSO URL for OAuth authentication. By default, the SSO URL is automatically discovered from your Dynatrace environment.\n- `DT_GRAIL_QUERY_BUDGET_GB` (optional, number, default: `1000`) - Budget limit in GB (base 1000) for Grail query bytes scanned per session. The MCP server tracks your Grail usage and warns when approaching or exceeding this limit.\n\nWhen just providing `DT_ENVIRONMENT`, the local MCP server will try to open a browser window to authenticate against the Dynatrace SSO.\n\nFor more information about the other authentication methods, please have a look at the documentation about\n[creating a Platform Token in Dynatrace](https://docs.dynatrace.com/docs/manage/identity-access-management/access-tokens-and-oauth-clients/platform-tokens), as well as\n[creating an OAuth Client in Dynatrace](https://docs.dynatrace.com/docs/manage/identity-access-management/access-tokens-and-oauth-clients/oauth-clients) for advanced scenarios (service-users, backend-to-backend communication).\n\nIn addition, depending on the features you use, the following variables can be configured:\n\n- `SLACK_CONNECTION_ID` (string) - connection ID of a [Slack Connection](https://docs.dynatrace.com/docs/analyze-explore-automate/workflows/actions/slack)\n\n### Proxy Configuration\n\nThe MCP server honors system proxy settings for corporate environments:\n\n- `https_proxy` or `HTTPS_PROXY` (optional, string, e.g., `http://proxy.example.com:8080`) - Proxy server URL for HTTPS requests\n- `http_proxy` or `HTTP_PROXY` (optional, string, e.g., `http://proxy.example.com:8080`) - Proxy server URL for HTTP requests\n- `no_proxy` or `NO_PROXY` (optional, string, e.g., `localhost,127.0.0.1,.local`) - Comma-separated list of hostnames or domains that should bypass the proxy\n- `NODE_EXTRA_CA_CERTS` (optional, string, e.g., `C:\\some-path\\certificate.pem`) - When set, the well known \"root\" CAs (like VeriSign) will be extended with the extra certificates\n\n**Note:** The `no_proxy` environment variable is currently logged for informational purposes but not fully enforced by the underlying HTTP client. If you need to bypass the proxy for specific hosts, consider configuring your proxy server to handle these exclusions.\n\nExample configuration with proxy:\n\n```bash\nexport HTTPS_PROXY=http://proxy.company.com:8080\nexport NO_PROXY=localhost,127.0.0.1,.company.local\nexport DT_ENVIRONMENT=https://abc12345.apps.dynatrace.com\n```\n\n### Scopes for Authentication\n\nDepending on the features you are using, the following scopes are needed:\n\n**Available for both Platform Tokens and OAuth Clients:**\n\n- `app-engine:apps:run` - needed for almost all tools\n- `app-settings:objects:read` - read app-settings - needed for `send_slack_message` tool to read connection details from App-Settings\n- `storage:buckets:read` - needed for `execute_dql` tool to read all system data stored on Grail\n- `storage:logs:read` - needed for `execute_dql` tool to read logs for reliability guardian validations\n- `storage:metrics:read` - needed for `execute_dql` tool to read metrics for reliability guardian validations\n- `storage:bizevents:read` - needed for `execute_dql` tool to read bizevents for reliability guardian validations\n- `storage:spans:read` - needed for `execute_dql` tool to read spans from Grail\n- `storage:entities:read` - needed for `execute_dql` tool to read Entities from Grail\n- `storage:events:read` - needed for `execute_dql` tool to read Events from Grail\n- `storage:security.events:read`- needed for `execute_dql` tool to read Security Events from Grail\n- `storage:system:read` - needed for `execute_dql` tool to read System Data from Grail\n- `storage:user.events:read` - needed for `execute_dql` tool to read User events from Grail\n- `storage:user.sessions:read` - needed for `execute_dql` tool to read User sessions from Grail\n- `storage:smartscape:read` - needed for `execute_dql` tool to read Smartscape Data\n- `storage:files:read` - needed for `execute_dql` tool to use DQL `load` statements for lookup data (e.g., `/lookups/http_status_codes`)\n- `storage:events:write` - needed for `send_event` tool to send event data to Dynatrace\n- `davis-copilot:conversations:execute` - execute conversational skill (chat with Copilot)\n- `davis-copilot:nl2dql:execute` - execute Davis Copilot Natural Language (NL) to DQL skill\n- `davis-copilot:dql2nl:execute` - execute DQL to Natural Language (NL) skill\n- `davis:analyzers:read` - needed for listing and getting Davis analyzer definitions\n- `davis:analyzers:execute` - needed for executing Davis analyzers\n- `email:emails:send` - needed for `send_email` tool to send emails\n- `document:documents:read` - needed for `list_documents` and `read_document` tools to list and read Dynatrace documents (Notebooks, Dashboards, Launchpads, etc.)\n- `document:documents:write` - needed for `create_document` tool to create new documents\n\n**Notes**:\n\n- Versions before 0.12.0 required the scope `app-engine:functions:run`, which is no longer required.\n- Versions before 0.13.0 required the scopes `settings:objects:read` and `environment-api:entities:read`, which are no longer required.\n\n## ✨ Example prompts ✨\n\nYou can start with something as simple as \"Is my component monitored by Dynatrace?\", and follow up with more sophisticated [examples](examples/).\n\n## Troubleshooting\n\n### Authentication Issues\n\nIn most cases, authentication issues are related to missing scopes or invalid tokens. Please ensure that you have added all required scopes as listed above.\n\n**For Platform Tokens:**\n\n1. Verify your Platform Token has all the necessary scopes listed in the \"Scopes for Authentication\" section\n2. Ensure your token is valid and not expired\n3. Check that your user has the required permissions in your Dynatrace Environment\n\n**For OAuth Clients:**\nIn case of OAuth-related problems, you can troubleshoot SSO/OAuth issues based on our [Dynatrace Developer Documentation](https://developer.dynatrace.com/develop/access-platform-apis-from-outside/#get-bearer-token-and-call-app-function).\n\nIt is recommended to test access with the following API (which requires minimal scopes `app-engine:apps:run` and, e.g., `storage:logs:read`):\n\n1. Use OAuth Client ID and Secret to retrieve a Bearer Token (only valid for a couple of minutes):\n\n```bash\ncurl --request POST 'https://sso.dynatrace.com/sso/oauth2/token' \\\n  --header 'Content-Type: application/x-www-form-urlencoded' \\\n  --data-urlencode 'grant_type=client_credentials' \\\n  --data-urlencode 'client_id={your-client-id}' \\\n  --data-urlencode 'client_secret={your-client-secret}' \\\n  --data-urlencode 'scope=app-engine:apps:run storage:logs:read'\n```\n\n2. Use `access_token` from the response of the above call as the bearer-token in the next call:\n\n```bash\ncurl -X GET https://abc12345.apps.dynatrace.com/platform/management/v1/environment \\\n  -H 'accept: application/json' \\\n  -H 'Authorization: Bearer {your-bearer-token}'\n```\n\n3. You should retrieve a result like this:\n\n```json\n{\n  \"environmentId\": \"abc12345\",\n  \"createTime\": \"2023-01-01T00:10:57.123Z\",\n  \"blockTime\": \"2025-12-07T00:00:00Z\",\n  \"state\": \"ACTIVE\"\n}\n```\n\n### Problem accessing data on Grail\n\nGrail has a dedicated section about permissions in the Dynatrace Docs. Please refer to https://docs.dynatrace.com/docs/discover-dynatrace/platform/grail/data-model/assign-permissions-in-grail for more details.\n\n## Telemetry\n\nThe Dynatrace MCP Server sends telemetry data using Dynatrace OpenKit BizEvents to help improve the product. This includes:\n\n- Server start events (`com.dynatrace-oss.mcp.server-start`)\n- Client initialization events (`com.dynatrace-oss.mcp.client-initialization`) - which MCP client is connecting (e.g., VS Code, Claude Desktop, Cursor)\n- Tool usage events (`com.dynatrace-oss.mcp.tool-usage`) - which tools are called, success/failure, execution duration\n- Error events (`com.dynatrace-oss.mcp.error`) - error tracking for debugging and improvement\n\nAll telemetry data is sent as **Business Events** and is accessible via Grail for analysis:\n\n```dql\nfetch bizevents\n| filter startsWith(event.type, \"com.dynatrace-oss.mcp\")\n| sort timestamp DESC\n```\n\n**Privacy and Opt-out:**\n\n- Telemetry is **enabled by default** but can be disabled by setting `DT_MCP_DISABLE_TELEMETRY=true`\n- No sensitive data from your Dynatrace environment is tracked\n- Only anonymous usage statistics and error information are collected\n- Usage statistics and error data are transmitted to Dynatrace’s analytics endpoint\n\n**Configuration options:**\n\n- `DT_MCP_DISABLE_TELEMETRY` (boolean, default: `false`) - Disable Telemetry\n- `DT_MCP_TELEMETRY_APPLICATION_ID` (string, default: `dynatrace-mcp-server`) - Application ID for tracking\n- `DT_MCP_TELEMETRY_ENDPOINT_URL` (string, default: Dynatrace endpoint) - OpenKit endpoint URL\n- `DT_MCP_TELEMETRY_DEVICE_ID` (string, default: auto-generated) - Device identifier for tracking\n\nTo disable usage tracking, add this to your environment:\n\n```bash\nDT_MCP_DISABLE_TELEMETRY=true\n```\n",
  "bytes": 27380,
  "sha": "df921f778ad7e48e59bd871c6bcf7eac9d3e43c9e31aaf5d2d075b974369e0cc",
  "repo_slug": "dynatrace-oss/dynatrace-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_dynatrace_oss_dynatrace_mcp_f4287128/readme"
}