query_timeseries
Query a Datadog metric timeseries over a time range using the metrics query language.
torequiredfromrequiredqueryrequired
io.github.CloudCorpRecordsPublished by GitHub account CloudCorpRecordsv0.1.0Updated Nov 1, 2026
Datadog metrics, dashboards, logs, incidents, and monitors from your MCP client.
Read-only MCP server that lets an assistant query Datadog metrics, dashboards, logs, incidents, monitors and downtimes from your account.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Follow the launch instructions in the repository.
metricwatch gives an MCP client or a terminal read access to a Datadog account: metric timeseries queries and metric metadata, dashboards, log search, incidents, monitors, and downtimes. It is a clean-room rebuild of the Datadog MCP tool surface from Datadog's public API documentation, covering the read core listed below.
Two credentials are required, because the Datadog API requires both on
every call: an API key in DATADOG_API_KEY and an application key in
DATADOG_APP_KEY. They are sent as the DD-API-KEY and
DD-APPLICATION-KEY headers and never appear in output. Set
DATADOG_SITE (for example datadoghq.eu) to target a different
Datadog site; the default is datadoghq.com and calls go to
https://api.<site>. When either key is missing, every call fails with
an error that names the missing variable.
Or run the container image:
The container defaults to the MCP server (see below). Pass CLI arguments to use it as a CLI instead.
Every MCP tool is also a CLI subcommand. Tool arguments are passed as
one JSON object with --json:
Results print as JSON. Exit codes: 0 on success, 1 when an API call
fails (including a missing key), 2 for usage errors.
One bin serves both faces. The mcp subcommand starts a stdio MCP
server:
MCP client configuration:
Out of scope for this read core: APM trace/span detail, synthetics, RUM, notebooks, SLO administration, event writes, incident creation or mutation, and on-call — see BUILD-REPORT.md.
MIT — see LICENSE.
Source: README.md at commit fbed34a
Query a Datadog metric timeseries over a time range using the metrics query language.
torequiredfromrequiredqueryrequiredList metric names available in the Datadog account.
fromlimitGet metadata for one metric: its type, unit, and description.
metric_namerequiredList dashboards in the Datadog account.
limitGet one dashboard by id, including its widgets and layout.
dashboard_idrequiredSearch Datadog log events with a log query over an optional time range.
tofromlimitqueryrequiredList Datadog incidents.
limitGet one incident by id.
incident_idrequiredList monitors, optionally filtered by name.
namelimitGet one monitor by its integer id.
monitor_idrequiredList downtimes (scheduled monitor silences).
current_only90% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
npx @reneturcios/metricwatch list_metricsdocker run -i -e DATADOG_API_KEY -e DATADOG_APP_KEY ghcr.io/cloudcorprecords/metricwatchexport DATADOG_API_KEY=<redacted>export DATADOG_APP_KEY=<redacted>
metricwatch query_timeseries --json '{"from": 1700000000, "to": 1700003600, "query": "avg:system.cpu.user{*}"}'metricwatch list_metrics --json '{"limit": 20}'metricwatch get_dashboard --json '{"dashboard_id": "abc-123"}'metricwatch search_logs --json '{"query": "service:web status:error", "limit": 25}'metricwatch list_monitorsmetricwatch get_monitor --json '{"monitor_id": 42}'
metricwatch --versionnpx -y @reneturcios/metricwatch mcp{ "mcpServers": { "metricwatch": { "command": "npx", "args": ["-y", "@reneturcios/metricwatch", "mcp"], "env": { "DATADOG_API_KEY": "your Datadog API key", "DATADOG_APP_KEY": "your Datadog application key" } } }}npm installnpm run build # tsc -> dist/npm test # node test runner over test/*.test.ts, no network (fake fetch fixtures)npm run dev # run the CLI from source via tsx