Datadog
MCP server: Datadog
Installation
npx mcp-server-datadogAsk AI about Datadog
Powered by Claude Β· Grounded in docs
I know everything about Datadog. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
MCP Datadog Server
A Model Context Protocol (MCP) server that exposes Datadog APIs to AI assistants and code editors via tools.
Overview
The server provides MCP tools for:
- Metrics β Query metrics, metadata, list metrics
- Logs β Search logs, get log details, aggregate logs
- Events β Search events, get event details
- Monitors β List monitors, get status, search monitors
- APM/Traces β Query traces, service health, service dependencies
- Services β Service dependencies (single and multi-environment)
Quick Start
Prerequisites
- Node.js 22+
- npm
Run with npx (recommended)
No clone or install needed. Add the server to your MCP client (e.g. Cursor, Claude) using stdio and run it from GitHub:
{
"datadog": {
"type": "stdio",
"command": "npx",
"args": ["-y", "github:micaelmalta/mcp-server-datadog"],
"env": {
"DATADOG_API_KEY": "your_api_key",
"DATADOG_APP_KEY": "your_app_key"
}
}
}
Set DATADOG_API_KEY and DATADOG_APP_KEY (and optionally DATADOG_SITE, default datadoghq.com). Restart the client so the tools appear.
To try from the terminal:
DATADOG_API_KEY=your_key DATADOG_APP_KEY=your_app_key npx -y github:micaelmalta/mcp-server-datadog
Run from source
For development or a fixed install:
git clone https://github.com/micaelmalta/mcp-server-datadog.git
cd mcp-server-datadog
npm install
cp .env.example .env
Edit .env and set DATADOG_API_KEY and DATADOG_APP_KEY. Then:
npm start
# or with NODE_ENV=local: npm run dev
In your MCP config, use stdio with node and the path to the entry point:
{
"datadog": {
"type": "stdio",
"command": "node",
"args": ["/path/to/mcp-server-datadog/src/index.js"],
"env": {
"DATADOG_API_KEY": "your_api_key",
"DATADOG_APP_KEY": "your_app_key"
}
}
}
Tools
| Tool | Purpose |
|---|---|
query_metrics | Query metrics data |
get_metric_metadata | Get metric metadata |
list_metrics | List metrics |
search_logs | Search logs with filter |
get_log_details | Get a single log by ID |
aggregate_logs | Aggregate logs |
search_events | Search events |
get_event_details | Get event by ID |
list_monitors | List monitors |
get_monitor_status | Get monitor status |
search_monitors | Search monitors |
query_traces | Query APM traces |
get_service_health | Service health metrics |
get_service_dependencies | Service dependencies |
get_service_dependencies_multi_env | Dependencies across environments |
Example prompts: "Show error logs from service X in the last hour" β search_logs. "What's CPU usage on production?" β query_metrics. "How is the API service doing?" β get_service_health.
Time ranges: Use ISO 8601 or Unix timestamps (seconds for metrics/events, milliseconds for logs/APM). Filters: Datadog syntax, e.g. service:api, status:error, env:production.
Project structure
mcp_datadog/
βββ src/
β βββ clients/ # Datadog API clients (SDK-based)
β βββ tools/ # MCP tool definitions and handlers
β βββ utils/ # Environment, errors, logger, toolErrors
β βββ index.js # Server entry point
βββ test/ # Vitest tests and fixtures
β βββ benchmark/ # Tool handler benchmarks (mocked)
β βββ mocks/ # Datadog SDK mocks
β βββ ...
βββ docs/ # Additional documentation
βββ package.json
Tech stack: Node.js 22+, JavaScript (ESM), JSDoc, Vitest, ESLint, Prettier, @modelcontextprotocol/sdk, @datadog/datadog-api-client.
Development
Commands
| Command | Description |
|---|---|
npm start | Run server |
npm run dev | Run with NODE_ENV=local |
npm test | Run tests |
npm run test:watch | Tests in watch mode |
npm run test:coverage | Tests with coverage |
npm run test:e2e | E2E tests (real Datadog API; see below) |
npm run benchmark | Run tool-handler benchmark (mocked) |
npm run lint | Lint |
npm run lint:fix | Fix lint issues |
npm run format | Format with Prettier |
npm run format:check | Check formatting (used in CI) |
npm run validate | Lint + test |
API client pattern
Clients return { data, error }:
const { data, error } = await client.queryMetrics(query, from, to);
if (error) {
console.error(error.message, error.statusCode);
} else {
console.log(data);
}
CI
GitHub Actions (.github/workflows/ci.yml) runs on push and pull requests to main/master: format check (prettier --check), lint (ESLint), and tests. Same commands locally: npm run format:check && npm run lint && npm test.
Testing
Tests use Vitest with mocked Datadog SDK (test/mocks/datadogApi.js) and fixtures in test/fixtures/. Run npm test before committing.
E2E tests (test/e2e/) run against the real Datadog API. They are skipped unless RUN_E2E=1 and real DATADOG_API_KEY/DATADOG_APP_KEY are set in .env. Example: RUN_E2E=1 npm run test:e2e. Use this to verify that document-center production error logs are visible (e.g. logsDocumentCenter.e2e.test.js).
Operational notes
- Logging: Tool calls are logged to stderr as JSON lines (
tool,durationMs,slow). Optional: setMCP_SLOW_TOOL_MS(default 2000) to mark slow calls. Some clients also write tomcp_datadog.log(seesrc/utils/logger.js). - Rate limiting: The server does not rate limit; high tool usage can hit Datadog API limits.
- Troubleshooting: Tools missing β check MCP config and env vars, restart client. 403/404 β permissions or plan. See Troubleshooting for "no data" cases.
Troubleshooting
Search returns 0 logs but I expect data
If search_logs (or aggregate_logs) returns no results for a service you know has traffic:
- Same Datadog org β The MCP server uses
DATADOG_API_KEY,DATADOG_APP_KEY, and optionallyDATADOG_SITE. Ensure these point to the same Datadog org and site where your app (e.g. document-center) sends logs. - Compare in Datadog β In Datadog Logs Explorer, run the same filter and time range (e.g.
service:document-center env:production status:error, last 7 days). If you see logs there but not via MCP, the env/site or keys are likely different. - Exact filter syntax β Confirm the attribute names and values your app sends (e.g.
service,env,status). Try withoutenv:productionor withenv:prod, or search onlyservice:document-centerto see if any logs appear. - Retention and indexes β Logs must be in an index that your API key can read; check log indexes and retention.
Documentation
- README (this file) β Setup, usage, structure.
- CLAUDE.md β Project conventions and patterns for contributors.
- docs/ β Additional guides (e.g. performance, security) when present.
Contributing
- Follow existing style (
npm run lint,npm run format). - Add tests for new behavior.
- Run
npm run validatebefore committing. - Use conventional commits:
feat,fix,docs,chore,refactor,test.
