About Datadog
Datadog is an MCP server published by micaelmalta in the Analytics category: mCP server: Datadog.
The repository has 4 stars and 1 forks, with the last commit 7 months ago. Six months or more without a commit doesn't mean the server is broken, but check the open issues before depending on it in production.
Install
git clone https://github.com/micaelmalta/mcp-server-datadogThis server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.
Tools (15)
aggregate_logsAggregate logs
Parameters not published.
get_event_detailsGet event by ID
Parameters not published.
get_log_detailsGet a single log by ID
Parameters not published.
get_metric_metadataGet metric metadata
Parameters not published.
get_monitor_statusGet monitor status
Parameters not published.
get_service_dependenciesService dependencies
Parameters not published.
get_service_dependencies_multi_envDependencies across environments
Parameters not published.
get_service_healthService health metrics
Parameters not published.
list_metricsList metrics
Parameters not published.
list_monitorsList monitors
Parameters not published.
Show all 15 tools
query_metricsQuery metrics data
Parameters not published.
query_tracesQuery APM traces
Parameters not published.
search_eventsSearch events
Parameters not published.
search_logsSearch logs with filter
Parameters not published.
search_monitorsSearch monitors
Parameters not published.
Ask AI
Ask AI about Datadog
Powered by Claude · Grounded in docs
Security checks
Static checks derived from the repository yesterday. Heuristics on the source, not an audit.
- ✓README presentThe repository ships documentation.
- !License declaredNo license file. Legally you have no right to use it in a product.
- ✓Tests presentA test suite exists in the repository.
- ✓Dependencies pinnedA lockfile pins dependency versions.
- ✓No dynamic code executionSource scan found no eval, dynamic Function, or shell execution.
- !Scoped permissionsDoesn't declare a permission scope. Assume it can do anything its process can.
README
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.
Links
README fetched from the repository yesterday. The original is authoritative.