Command Palette

Search for a command to run...

UnylyUnyly
Browse all

Datadog Server

FreeNot checked

Enables AI assistants to interact with Datadog APIs for querying metrics, logs, events, monitors, and APM traces.

GitHubEmbed

About

Enables AI assistants to interact with Datadog APIs for querying metrics, logs, events, monitors, and APM traces.

README

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: set MCP_SLOW_TOOL_MS (default 2000) to mark slow calls. Some clients also write to mcp_datadog.log (see src/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:

  1. Same Datadog org – The MCP server uses DATADOG_API_KEY, DATADOG_APP_KEY, and optionally DATADOG_SITE. Ensure these point to the same Datadog org and site where your app (e.g. document-center) sends logs.
  2. 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.
  3. Exact filter syntax – Confirm the attribute names and values your app sends (e.g. service, env, status). Try without env:production or with env:prod, or search only service:document-center to see if any logs appear.
  4. 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

  1. Follow existing style (npm run lint, npm run format).
  2. Add tests for new behavior.
  3. Run npm run validate before committing.
  4. Use conventional commits: feat, fix, docs, chore, refactor, test.

Links

from github.com/micaelmalta/mcp-server-datadog

Installing Datadog Server

This server has no published package — it is built from source. Open the repository and follow its README.

▸ github.com/micaelmalta/mcp-server-datadog

FAQ

Is Datadog Server MCP free?

Yes, Datadog Server MCP is free — one-click install via Unyly at no cost.

Does Datadog Server need an API key?

No, Datadog Server runs without API keys or environment variables.

Is Datadog Server hosted or self-hosted?

A hosted option is available: Unyly runs the server in the cloud, no local setup required.

How do I install Datadog Server in Claude Desktop, Claude Code or Cursor?

Open Datadog Server on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.

Related MCPs

Compare Datadog Server with

Not sure what to pick?

Find your stack in 60 seconds

Author?

Embed badge for your README

Browse similar

All ai MCPs