使用说明
Datadog MCP服务器
A. 模型上下文协议 将AI代理(Cursor、Claude等)连接到Datadog的服务器。搜索日志、查询指标、管理仪表板、分析APM跟踪和管理监视器/停机时间——所有这些都可以通过您的AI助手,使用应用程序密钥的真实权限完成。
内置于 FastMCP 和Pydantic。没有删除,没有破坏性的仪表板/监视器删除,每个工具响应都是经过验证的Pydantic模型,具有一致的 success/error 形状。
建筑
server.py是一个薄的合成层:它连接每个域的register_<domain>_tools(mcp)变成一个FastMCP实例并定义资源/提示。它不包含工具实现。tools/*.py-每个Datadog域一个模块(日志、聚合、指标、apm、仪表板、监视器、停机时间)。每个模块都有自己的Pydantic模型_function(...)实现(显式注入身份验证,易于单元测试)及其register_<domain>_tools(mcp)功能与@mcp.tool装饰器+文档字符串。auth.py-theDatadogAuth/get_auth_instance()单身。与之前相同的环境变量(DD_API_KEY,DD_APP_KEY,DD_SITE);本次改造中没有更改身份验证行为。utils/response.py-共享Pydantic响应基础架构:入站DatadogModel(宽容,extra="ignore")与出境ToolResponse/PaginatedListResponse(严格,extra="forbid")基于大小的截断和Datadog错误分类(403→缺失范围,429→ 速率限制)。utils/annotations.py-分享,诚实ToolAnnotations预设(见下表)。
看 建筑.md 对于完整的请求流和 文档/范围验证.md 对于每种工具背后的范围研究。
工具
所有工具名称、响应字段名称和环境变量在本次改进中都是稳定的,以下内容均未被重命名。总共30个工具。
🔍 日志
- search_logs -搜索和查看日志条目(分页)
- get_log_details -按ID列出的单个日志的完整详细信息
- count_logs -快速计数与查询匹配的日志(无内容传输)
- count_唯一值 -统计字段的唯一值(例如不同的用户)
- aggregate_logs_by_field -使用统计数据对日志进行分组/聚合;可选的
interval时间序列细分
📊 指标
- query_metrics -使用聚合查询时间序列指标
- list_available_metrics -发现与前缀匹配的度量名称
- list_active_metrics -列出最近报告数据的指标
- 描述度量 -元数据(单位、类型、描述)+一个指标的已知标签,在一次调用中
- send_custom_metric -提交自定义指标(仪表、计数、费率)
📈 仪表盘
- list_all_dashboards -浏览所有仪表板
- get_dashboard_details -完整的仪表板配置和小部件(大型小部件列表用
warning,请参阅finalize_list_response) - create_new_dashboard -使用小部件/布局创建仪表板(常见的小部件类型经过飞行前验证-请参阅
datadog://widget-templates) - update_existing_dashboard -修改现有仪表板(覆盖给定字段;无撤消工具)
根据设计,仪表板不存在删除工具。
🔬 APM/痕迹
- search_apm_tracies -按服务、操作、标签进行搜索
- get_full_trace -通过专用的每个跟踪端点,按跟踪ID进行完整跟踪(所有跨度)
- list_apm_服务 -发现仪表化服务
- aggregate_span -按方面分组的延迟/错误统计信息,无需提取原始跨度
🚨 监视器
- list_all_监视器 -列出带有过滤器的监视器(状态、名称、标签)
- 搜索监视器 -全文/分面显示器搜索
- get_monitor_details -完整监视器配置
- validate_monitor -在创建监视器查询/类型之前对其进行验证
- create_alert_monitor -创建度量、日志、APM或复合监视器
- update_alert_monitor -修改现有监视器的配置
- 静音监视器 / unselence_monitor -将单个显示器静音/取消静音(一次性;请参阅计划/范围静音的停机时间)
根据设计,监视器不存在删除工具。
🌙 停机时间
- list_downtimes -列出计划/活动停机时间
- get_downtime -一次停机的完整细节
- schedule_downtime -在一个时间窗口内将监视器范围(或一个监视器)静音
- update_downtime -修改现有停机时间的计划/范围
不 cancel_downtime 工具:这是一个真实的、不可逆转的 DELETE 在团队明确签字之前,故意将其排除在外(见 utils/annotations.py).
资源
datadog://status-快速健康快照(提醒监视器计数/名称);只进行一个Datadog API调用datadog://widget-templates-即用型小部件JSONcreate_new_dashboard/update_existing_dashboard(时间序列、查询值、顶部列表、热图)
鼓励
- 调查错误(服务、环境、回顾) -跨日志/APM/监视器的引导性错误调查
- 性能分析(服务?,回顾) -引导性延迟/性能调查
- 试验警报监视器(环境?) -对当前处于警报状态的监视器进行优先分类
- create_monitoring(目标) -引导式监视器+仪表板创建
工具安全注释
每个工具都宣称诚实 ToolAnnotations 通过中的四个预设之一进行提示 utils/annotations.py:
| 预设 | 只读 | 破坏性 | 幂等 | 由使用 |
|---|---|---|---|---|
READ_ONLY |
✅ | ❌ | ✅ | 所有搜索/列表/获取/计数/聚合/验证工具 |
WRITE_ADDITIVE |
❌ | ❌ | ❌ | create_new_dashboard, create_alert_monitor, schedule_downtime, send_custom_metric |
WRITE_OVERWRITE |
❌ | ✅ | ✅ | update_existing_dashboard, update_alert_monitor, update_downtime (即使没有删除任何内容,也不存在撤消工具) |
STATE_TOGGLE |
❌ | ❌ | ✅ | silence_monitor / unsilence_monitor (可逆,存在匹配的反向工具) |
安装
先决条件
- Python 3.10+
- 紫外线 (推荐)
- 数据狗API密钥+应用程序密钥。此服务器使用的应用程序密钥只需要(请参阅 文档/范围验证.md 完整的理由):
- 阅读:
logs_read,metrics_read,dashboards_read,monitors_read,apm_read - 写:
metrics_write,dashboards_write,monitors_write,monitors_downtime_write
- 阅读:
1.安装依赖项
cd /path/to/datadog-mcp
uv sync --frozen
uv sync --frozen 安装固定的内容 uv.lock -CI测试的版本相同。只有下降 --frozen (然后跑 uv lock --upgrade 第一)故意破坏依赖关系时。
2.配置游标 mcp.json
凭据属于Cursor的 mcp.json不在这个项目中。 这 .env.example repo根目录下的文件仅用于本地开发(例如运行 scripts/verify_scopes.py 直接)。
{
"mcpServers": {
"datadog": {
"command": "uv",
"args": [
"--directory", "/absolute/path/to/datadog-mcp",
"run", "fastmcp", "run", "src/datadog_mcp/server.py"
],
"env": {
"DD_API_KEY": "${DD_API_KEY}",
"DD_APP_KEY": "${DD_APP_KEY}",
"DD_SITE": "datadoghq.com"
}
}
}
}
集 DD_API_KEY/DD_APP_KEY 在您的shell配置文件中,并引用它们 ${...} 如上所述,或直接将原始值内联到 mcp.json (不太安全,更简单)。
数据狗区域 (DD_SITE): datadoghq.com (US1,默认), us3.datadoghq.com, us5.datadoghq.com, datadoghq.eu, ap1.datadoghq.com.
3.重新启动游标
重新启动Cursor IDE(或重新加载MCP服务器)以获取新服务器。
固定版本以进行回滚
光标的 mcp.json 可以指出 --directory 在特定的git工作树/标签/提交中。如果此服务器的更改导致团队崩溃,请固定 datadog-mcp 签出到最后一个已知的良好标记/提交并重新运行 uv sync --frozen 没有-回滚不需要更改代码。
发展
在本地运行
uv run fastmcp run --reload src/datadog_mcp/server.py # dev server with auto-reload
uv run datadog-mcp # or: run the installed script directly
测试
uv run pytest # unit + MCP handshake + tool-schema snapshot tests
uv run pytest -m live # opt-in: real Datadog API calls, requires DD_API_KEY/DD_APP_KEY
- 握手测试 (
tests/test_handshake.py):通过以下方式在内存中启动服务器fastmcp.Client,断言每个基线工具/资源/提示名称仍然存在,并端到端地往返模拟工具调用。这是防止导入错误导致整个团队服务器崩溃的安全网。 - 架构快照测试 (
tests/test_tool_schemas.py):每个工具的输入/输出JSON模式都被捕获为黄金文件;任何形状变化都会显示在PR差异中,而不是悄无声息地到达客户端。通过使用它定义的更新标志运行一次测试,然后查看差异,重新生成有意更改的快照。 - 现场测试 (
pytest -m live):默认情况下跳过(包括在CI中)在真实凭据后面门控的少数只读烟雾调用。
过梁和类型检查
uv run ruff check .
uv run ruff format .
uv run pyright src
uv run mypy src # stricter, allowed to flag datadog-api-client's untyped calls (see inline `type: ignore[no-untyped-call]`)
CI(.github/workflows/ci.yml)跑拉夫, ruff format --check对锁定的依赖集的每个推送/PR进行pyright和pytest(uv sync --frozen). pre-commit 在提交之前,在本地运行相同的ruff/pyright检查。
添加一个新工具
- 添加Pydantic请求/响应模型和
_function(...)实施相关tools/<domain>.py(或新的域模块)。 - 注册
@mcp.tool(annotations=...)-该模块内的装饰包装register_<domain>_tools(mcp),文档字符串遵循中的约定.cursor/rules/documentation-standards.mdc. - 根据以下内容验证所需的Datadog范围
docs/SCOPE_VERIFICATION.md/scripts/verify_scopes.py之前 编写工具-此应用程序密钥是此服务器独有的,并且具有固定的窄范围集。 - 在下添加单元测试
tests/tools/,然后运行完整套件-如果出现倒退,握手和模式快照测试将大声失败。
使用示例
Search Datadog logs for errors in the api service in the last hour
→ search_logs(query="status:error service:api", from_time="now-1h", to_time="now")
Show me CPU usage for all hosts over the last 4 hours
→ query_metrics(query="avg:system.cpu.user{*}", from_time="now-4h", to_time="now")
Create a dashboard called "API Performance" with a timeseries widget for request latency
→ create_new_dashboard(...) using a template from datadog://widget-templates
Mute all monitors in staging this weekend
→ schedule_downtime(scope="env:staging", ...)
What's currently alerting?
→ the triage_alerting_monitors prompt
故障排除
服务器未出现在游标中
- 确认
--directory路径在mcp.json是绝对和正确的。 - 确认
DD_API_KEY/DD_APP_KEY解析为实际值(如果使用,请检查您的shell配置文件${...}插值)。 - 完全重新启动Cursor并检查其MCP日志。
身份验证/403错误
- 工具响应将403分类为可能缺失的范围-对照进行检查
docs/SCOPE_VERIFICATION.md. - 验证
DD_SITE匹配您的Datadog地区;不匹配的站点的行为类似于身份验证失败。
拉取更改后的导入错误
uv sync --frozen
API文档
许可证
MIT许可证-有关详细信息,请参阅许可证文件。