关于 datadog-mcp
datadog-mcp 向 AI 助手开放 Datadog 可观测性 API,涵盖日志、指标、追踪、监控器等。支持本地 stdio 和远程 HTTP 传输,也可配置为只读模式。
主要功能
- 01搜索并聚合日志与追踪
- 02查询和检查指标
- 03管理监控器与仪表板
- 04处理事件、事故与 SLO
- 05使用 stdio 或 HTTP 传输
适用场景
- 01关联日志与追踪以调查错误
- 02查看指标趋势和监控活动
- 03通过 AI 客户端管理 Datadog 资源
MCP 相关
该 MCP 服务向兼容客户端提供 Datadog API 工具,用于可观测性查询和资源管理,并支持 stdio 与 HTTP 传输。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
19收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | string | 否 | 监控器 ID(get/update/delete/mute/unmute 必填) |
| end | number | 否 | 静默结束时间戳(用于 mute 操作) |
| name | string | 否 | 按名称筛选(用于 list 操作) |
| tags | array | 否 | 按标签筛选 |
| limit | number | 否 | 要返回的监控器数量上限 |
| query | string | 否 | 搜索操作的查询 |
| action | enum | 是 | 要执行的操作list | get | search | create | update | delete | mute | unmute |
| config | object | 否 | 监控器配置(用于 create/update) |
| message | string | 否 | 静默消息(用于 mute 操作) |
| groupStates | array | 否 | 按组状态筛选:alert、warn、no data、ok |
详细介绍
Datadog MCP 服务
免责声明:这是一个由社区维护的项目,与 Datadog, Inc. 没有官方关联,也未获得其认可或支持。此 MCP 服务使用 Datadog API,但由独立团队开发。
为 AI 助手提供完整 Datadog 可观测性访问能力的 MCP 服务。功能包括类似 grep 的日志搜索、按持续时间/状态/错误查询筛选 APM 跟踪、提升 Token 效率的智能采样模式,以及日志、跟踪和指标之间的交叉关联。支持 stdio(本地)和 http(远程/Kubernetes)传输方式。
快速开始
Claude Desktop/VS Code/Cursor 的最简配置——仅需两个必填项:
{
"mcpServers": {
"datadog": {
"command": "npx",
"args": ["-y", "datadog-mcp"],
"env": {
"DD_API_KEY": "your-api-key",
"DD_APP_KEY": "your-app-key"
}
}
}
}
添加可选配置(EU 站点、自定义默认限制、延长日志时间范围):
{
"mcpServers": {
"datadog": {
"command": "npx",
"args": ["-y", "datadog-mcp"],
"env": {
"DD_API_KEY": "your-api-key",
"DD_APP_KEY": "your-app-key",
"DD_SITE": "datadoghq.eu",
"MCP_DEFAULT_LIMIT": "50",
"MCP_DEFAULT_LOG_LINES": "200",
"MCP_DEFAULT_METRIC_POINTS": "1000",
"MCP_DEFAULT_TIME_RANGE": "24"
}
}
}
}
如需作为 HTTP 服务运行(例如在容器或 Kubernetes Pod 中),请在同一 env 块中添加传输变量:
"env": {
"DD_API_KEY": "your-api-key",
"DD_APP_KEY": "your-app-key",
"MCP_TRANSPORT": "http",
"MCP_PORT": "3000",
"MCP_HOST": "0.0.0.0"
}
配置
必需的环境变量
DD_API_KEY=your-api-key
DD_APP_KEY=your-app-key
可选环境变量
DD_SITE=datadoghq.com # Default. Use datadoghq.eu for EU, etc.
# Limit defaults (fallbacks when the AI doesn't specify)
MCP_DEFAULT_LIMIT=50 # General tools default limit
MCP_DEFAULT_LOG_LINES=200 # Logs tool default limit
MCP_DEFAULT_METRIC_POINTS=1000 # Metrics timeseries data points
MCP_DEFAULT_TIME_RANGE=24 # Default time range in hours
# Transport (alternative to CLI flags — useful in Kubernetes)
MCP_TRANSPORT=stdio # stdio | http
MCP_PORT=3000 # HTTP port
MCP_HOST=0.0.0.0 # HTTP host
可选标志
--site=datadoghq.com # Datadog site (overrides DD_SITE)
--transport=stdio|http # Transport mode (default: stdio)
--port=3000 # HTTP port when using http transport
--host=0.0.0.0 # HTTP host when using http transport
--read-only # Block all write operations
--disable-tools=synthetics,rum,security # Comma-separated list of tools to disable
传输方式
| 传输方式 | 使用场景 | 端点 |
|---|---|---|
stdio(默认) | 本地 MCP 客户端——Claude Desktop、Cursor、VS Code | n/a(进程 stdin/stdout) |
http | 远程/容器/Kubernetes | POST /mcp · GET /mcp(SSE)· DELETE /mcp · GET /health |
使用 --transport=http 或 MCP_TRANSPORT=http 进行选择。
部署
Docker
{
"mcpServers": {
"datadog": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "DD_API_KEY",
"-e", "DD_APP_KEY",
"-e", "DD_SITE",
"ghcr.io/tantiope/datadog-mcp"
],
"env": {
"DD_API_KEY": "your-api-key",
"DD_APP_KEY": "your-app-key",
"DD_SITE": "datadoghq.com"
}
}
}
}
Kubernetes
使用环境变量而非容器参数来配置传输方式:
env:
- name: DD_API_KEY
value: "your-api-key"
- name: DD_APP_KEY
value: "your-app-key"
- name: MCP_TRANSPORT
value: "http"
- name: MCP_PORT
value: "3000"
- name: MCP_HOST
value: "0.0.0.0"
注意: Kubernetes 的
args:会替换整个 Dockerfile CMD,导致 Node.js 接收这些标志而不是应用程序。使用环境变量可以避免此问题。
工具
| 工具 | 操作 | 类别 | 描述 | 所需权限范围 |
|---|---|---|---|---|
monitors | list | 告警 | 列出监视器,可选筛选条件 | monitors_read |
monitors | get | 告警 | 按 ID 获取监视器 | monitors_read |
monitors | search | 告警 | 根据查询搜索监视器 | monitors_read |
monitors | create | 告警 | 创建新监视器;config 会根据涵盖已记录选项(notifyNoData、renotifyInterval、thresholds 等)的类型化架构进行验证;未知键会显示在 warnings 中。传入 dry_run: true 可在不创建监视器的情况下进行验证(使用 /api/v1/monitor/validate,只读模式下允许)。 | monitors_write |
monitors | update | 告警 | 更新现有监视器;使用与 create 相同的已验证架构;接受部分配置;验证错误会在任何 HTTP 调用之前终止操作,并返回 EINVALID_MONITOR_CONFIG: | monitors_write |
monitors | preview | 告警 | 渲染监视器模板(内联 message 或通过 monitor_id/id 指定),可选传入包含变量和条件语句的 context。返回 {rendered, variablesUsed, variablesMissing, conditionalsResolved, tagConditionalsResolved}。支持 Datadog Mustache 子集:变量替换、六种已记录的条件语句(is_alert、is_warning、is_no_data、is_recovery、is_alert_to_warning、is_warning_to_alert),以及标签条件语句 {{#is_match "tag" "val"}}/{{#is_exact_match "tag" "val"}}(以及 ^ 否定形式);{{#each}}/partials 会抛出 EUNSUPPORTED_TEMPLATE_SYNTAX。只读。 | monitors_read |
monitors | test_notification | 告警 | 已知限制:返回 ENOT_SUPPORTED — Datadog 没有用于触发测试通知的公开 REST 端点。响应中提供文档链接。 | 不适用 |
monitors | delete | 告警 | 删除监视器 | monitors_write |
monitors | mute | 告警 | 静默监视器 | monitors_write |
monitors | unmute | 告警 | 取消静默监视器 | monitors_write |
monitors | top | 告警 | 按告警频率列出前 N 个监视器,并提供真实监视器名称和上下文细分。警告:total_count 包含重新通知/重新评估(处于 Alert 状态时,Datadog 每隔 renotify_interval 分钟就会发出一个重新通知事件)。如需查看真实触发次数,请使用 action=history。 | monitors_read |
monitors | history | 告警 | 统计并列出某个监视器在指定时间范围内的真实状态转换。按 transitionType 筛选(默认值为 ["alert","alert recovery"] — 触发+恢复,不包括重新通知),也可选按 group 筛选。返回 {transitions: [...], count, meta},其中 count 是真实状态转换的数量(例如,对于一个始终处于 Alert 状态的燃烧率监视器,在 7d 内有 98 个原始事件,但只有 38 次真实状态转换)。 | monitors_read、events_read |
dashboards | list | 可视化 | 列出所有仪表板 | dashboards_read |
dashboards | get | 可视化 | 按 ID 获取仪表板 | dashboards_read |
dashboards | create | 可视化 | 创建新仪表板 | dashboards_write |
dashboards | update | 可视化 | 更新仪表板 | dashboards_write |
dashboards | delete | 可视化 | 删除仪表板 | dashboards_write |
logs | search | 日志 | 使用查询语法和筛选条件搜索日志 | logs_read_data、logs_read_index_data |
logs | aggregate | 日志 | 使用 groupBy 聚合日志数据 | logs_read_data |
logs_pipelines | list, get | 日志配置 | 检查日志处理管道及其处理器 | logs_read_config |
logs_pipelines | create, update, delete, reorder | 日志配置 | 编写管道和处理器链 | logs_write_config |
logs_pipelines | get_order | 日志配置 | 读取管道评估顺序 | logs_read_config |
logs_indexes | list, get | 日志配置 | 检查索引(筛选条件、保留期限、Flex 层、排除筛选条件);根据 Datadog 的规定,create/delete 仅可通过 UI 操作,因此不提供 | logs_read_config |
logs_indexes | update, reorder | 日志配置 | 更新索引筛选条件/保留期限/配额并重新排序评估顺序 | logs_write_config |
logs_indexes | get_order | 日志配置 | 读取索引评估顺序 | logs_read_config |
logs_archives | list, get | 日志配置 | 检查日志归档(S3 / GCS / Azure 目标);各提供商的凭据字段会原样转发 | logs_read_archives |
logs_archives | create, update, delete, reorder | 日志配置 | 管理归档目标;在调用 SDK 前,destination.type 会根据 `s3 | gcs |
logs_archives | get_order | 日志配置 | 读取归档评估顺序 | logs_read_archives |
metrics | query | 指标 | 查询时间序列数据。响应中的 meta 包含 rollupRequested(从 rollup(method, seconds) 解析得出,并包含 methodInferred 标记)、rollupEffective(根据返回的 pointlist 间隔得出的间隔,以及多序列情况下去重后的 intervalsObserved)和 rollupOverridden: boolean,以便调用方检测 Datadog 是否进行了未提示的降采样。 | metrics_read、timeseries_query |
metrics | search | 指标 | 按名称搜索指标 | metrics_read |
metrics | list | 指标 | 列出活跃指标 | metrics_read |
metrics | metadata | 指标 | 获取指标元数据 | metrics_read |
traces | search | APM | 使用筛选条件搜索跨度 | apm_read |
traces | aggregate | APM | 聚合追踪数据 | apm_read |
traces | services | APM | 列出 APM 服务 | apm_service_catalog_read |
events | list | 事件 | 列出事件 | events_read |
events | get | 事件 | 按 ID 获取事件 | events_read |
events | create | 事件 | 创建事件 | events_read |
events | search | 事件 | 使用 v2 API 和游标分页搜索事件。可选的 transitionType 筛选条件(例如 ["alert","alert recovery"])可将结果限定为监视器状态转换事件 — 不使用该筛选条件时,source:alert 会包含重新通知。要查看特定监视器的触发事件,请使用 monitors action=history。可选的 timezone 会为每个时间戳添加 *Local ISO 8601 同级字段。无结果的响应会包含 diagnostics 数组,提示可能的原因(UNINDEXED_TAG_PREFIX、NARROW_TIME_RANGE、RESTRICTIVE_SOURCE_FILTER)。 | events_read |
events | histogram | 事件 | 在服务端按 IANA timezone 中的 hour_of_day、day_of_week 或 day_of_month 对事件分桶(通过 Intl.DateTimeFormat 安全处理夏令时)。接受与 search 相同的 transitionType 筛选条件,因此监视器直方图可以排除重新通知。对底层搜索使用游标分页;上限为 limits.maxEventsForHistogram(默认值为 5000,可通过 MCP_MAX_EVENTS_HISTOGRAM 环境变量配置)。达到上限时,会返回 bucketCountIncomplete: true 和用于继续查询的 nextCursor。 | events_read |
events | aggregate | 事件 | 在客户端按 monitor_name、source 等聚合 | events_read |
events | top | 事件 | 按数量列出前 N 个事件组,支持通用 groupBy(部署、配置、告警等)。不含上下文标签的组会列为 "no_context" | events_read |
events | timeseries | 事件 | 按时间分桶的告警趋势(每小时/每日计数) | events_read |
events | incidents | 事件 | 将告警去重并归并为事件,配对 Trigger/Recover | events_read |
incidents | list | 事件 | 列出事件 | incident_read |
incidents | get | 事件 | 按 ID 获取事件 | incident_read |
incidents | search | 事件 | 搜索事件 | incident_read |
incidents | create | 事件 | 创建事件 | incident_write |
incidents | update | 事件 | 更新事件 | incident_write |
incidents | delete | 事件 | 删除事件 | incident_write |
slos | list | SLO | 列出 SLO。每个项目都会公开 query、monitorIds、monitorTags、groups 和 UI url,确保往返操作(get → edit → update)能够保留定义字段。 | slos_read |
slos | get | SLO | 按 ID 获取 SLO(投影方式与 list 相同)。 | slos_read |
slos | create | SLO | 创建 SLO | slos_write |
slos | update | SLO | 更新 SLO | slos_write |
slos | delete | SLO | 删除 SLO | slos_write |
slos | history | SLO | 获取 SLO 历史记录 | slos_read |
synthetics | list | 合成监控 | 列出合成测试 | synthetics_read |
synthetics | get | 合成监控 | 按公开 ID 获取测试 | synthetics_read |
synthetics | create | 合成监控 | 创建测试 | synthetics_write |
synthetics | update | 合成监控 | 更新测试 | synthetics_write |
synthetics | delete | 合成监控 | 删除测试 | synthetics_write |
synthetics | trigger | 合成监控 | 触发测试运行 | synthetics_write |
synthetics | results | 合成监控 | 获取测试结果 | synthetics_read |
downtimes | list | 停机时间 | 列出停机时间 | monitors_downtime |
downtimes | get | 停机时间 | 按 ID 获取停机时间 | monitors_downtime |
downtimes | create | 停机时间 | 创建停机时间 | monitors_downtime |
downtimes | update | 停机时间 | 更新停机时间 | monitors_downtime |
downtimes | cancel | 停机时间 | 取消停机时间 | monitors_downtime |
downtimes | listByMonitor | 停机时间 | 列出某监视器的停机时间 | monitors_downtime |
hosts | list | 基础设施 | 列出主机 | hosts_read |
hosts | totals | 基础设施 | 获取主机总数 | hosts_read |
hosts | mute | 基础设施 | 静默主机 | hosts_read |
hosts | unmute | 基础设施 | 取消静默主机 | hosts_read |
rum | applications | RUM | 列出 RUM 应用 | rum_read |
rum | events | RUM | 搜索 RUM 事件 | rum_read |
rum | aggregate | RUM | 聚合 RUM 数据 | rum_read |
rum | performance | RUM | 获取 Core Web Vitals(LCP、FCP、CLS、FID、INP) | rum_read |
rum | waterfall | RUM | 获取包含资源/操作/错误的会话时间线 | rum_read |
security | rules | 安全 | 列出安全规则 | security_monitoring_rules_read |
security | signals | 安全 | 搜索安全信号 | security_monitoring_signals_read |
security | findings | 安全 | 列出安全发现 | security_monitoring_findings_read |
notebooks | list | 笔记本 | 列出笔记本 | notebooks_read |
notebooks | get | 笔记本 | 按 ID 获取笔记本 | notebooks_read |
notebooks | create | 笔记本 | 创建笔记本 | notebooks_write |
notebooks | update | 笔记本 | 更新笔记本 | notebooks_write |
notebooks | delete | 笔记本 | 删除笔记本 | notebooks_write |
users | list | 管理 | 列出用户 | user_access_read |
users | get | 管理 | 按 ID 获取用户 | user_access_read |
teams | list | 管理 | 列出团队 | teams_read |
teams | get | 管理 | 按 ID 获取团队 | teams_read |
teams | members | 管理 | 列出团队成员 | teams_read |
tags | list | 基础设施 | 列出所有标签 | hosts_read |
tags | get | 基础设施 | 获取主机标签 | hosts_read |
tags | add | 基础设施 | 为主机添加标签 | hosts_read |
tags | update | 基础设施 | 更新主机标签 | hosts_read |
tags | delete | 基础设施 | 删除主机标签 | hosts_read |
usage | summary | 账单 | 使用情况摘要 | usage_read |
usage | hosts | 账单 | 主机使用情况 | usage_read |
usage | logs | 账单 | 日志使用情况 | usage_read |
usage | custom_metrics | 账单 | 自定义指标使用情况 | usage_read |
usage | indexed_spans | 账单 | 已索引跨度使用情况 | usage_read |
usage | ingested_spans | 账单 | 已摄取跨度使用情况 | usage_read |
auth | validate | 身份验证 | 测试 API 密钥和 App 密钥是否有效 | — |
限制控制
AI 助手可以完全控制查询限制。MCP_DEFAULT_* 环境变量仅在 AI 未指定限制时设置回退值,并不会限制 AI 可以请求的上限。
| 工具 | 默认值 | 参数 | 描述 |
|---|---|---|---|
| 日志 | 200 | limit | 返回的日志行数 |
| 指标(时间序列) | 1000 | pointLimit | 每个序列的数据点数(控制分辨率) |
| 通用工具 | 50 | limit | 返回的结果数 |
工具级别的令牌缩减功能(日志上的 compact: true、sample: "diverse" | "spread" | "first"、字段投影、诊断信息)会显示在每个工具的 MCP 描述中,由 AI 在调用时选择。
值得注意的行为
以下是一些值得了解的模式;AI 可以从工具描述中了解其他内容。
- 重新通知与实际触发。
monitors top和带有source:alert的events search会统计 Datadog 发出的每次重新通知(当监控器处于 Alert 状态时,每隔一个renotify_interval发出一次)。要获取实际的状态转换,请使用monitors history(默认值为transitionType: ["alert","alert recovery"]),或向events search传入transitionType。 - 适配夏令时的时间分桶。
events histogram使用Intl.DateTimeFormat,通过任意 IANAtimezone按hour_of_day/day_of_week/day_of_month分桶。底层搜索采用游标分页;上限由MCP_MAX_EVENTS_HISTOGRAM控制(默认值为 5000),超出时会返回bucketCountIncomplete和nextCursor。 - 创建前先验证。 使用
dry_run: true调用monitors create时,会调用/api/v1/monitor/validate,而不是持久化数据。此操作允许在--read-only模式下执行。 - 监控器模板预览。
monitors preview会使用context负载渲染通知,包括变量替换、Datadog 文档中记录的六种条件(is_alert、is_warning、is_no_data、is_recovery、is_alert_to_warning、is_warning_to_alert),以及标签条件{{#is_match "tag" "val"}}(子字符串匹配)和{{#is_exact_match "tag" "val"}}(精确匹配),支持^取反和多个比较值的 OR 逻辑(根据context.variables解析;区分大小写)。{{#each}}和 partials 会抛出EUNSUPPORTED_TEMPLATE_SYNTAX。 - SLO 往返。
slos get会投影query、monitorIds、monitorTags、groups和 UIurl,方便你编辑后传回slos update,而不会丢失定义字段。 - 交叉关联。
logs(sample:"diverse")→ 提取dd.trace_id→traces(query:"trace_id:<id>")→metrics(query:"p95:trace.express.request{service:...}")(计算百分位数时使用不带.duration的根指标)。
深层链接
每个查询响应都包含一个 datadog_url 字段,该字段根据你配置的 DD_SITE 构建,支持 datadoghq.com(默认值)、.eu、us3 / us5 / ap1.datadoghq.com 或 ddog-gov.com。支持 logs、metrics、traces、events、monitors、rum、slos。
贡献
欢迎贡献!如果你有任何建议、错误报告或改进提议,欢迎提交 issue 或 pull request。
许可证
本项目基于 Apache License, Version 2.0 授权。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。