符合MCP标准的Datadog客户端
使用Anthropic的官方MCP库连接到Datadog的MCP服务器的Python客户端 完全符合MCP授权规范 和 持久令牌缓存.
该实施提供了:
- ✅ 完成符合MCP的OAuth 2.1流程
- ✅ 自动令牌缓存和刷新
- ✅ 访问所有15个Datadog MCP工具
- ✅ 动态客户端注册
- ✅ 安全令牌管理
✅ MCP合规特性
此实施遵循 MCP授权规范 包括:
- 🔍 OAuth 2.0受保护资源元数据(RFC 9728) -自动发现授权服务器
- 🚀 动态客户端注册(RFC 7591) -无需手动注册客户端
- 🎯 资源指示器(RFC 8707) -适当的令牌受众绑定以确保安全
- 🔒 PKCE 与 S256 -授权码保护所需的安全性
- 🔄 授权服务器元数据发现 -RFC 8414和OpenID连接发现1.0支持
- ⚡ 状态参数验证 -CSRF保护
- 💾 持久令牌缓存 -具有自动刷新功能的安全令牌存储
🚀 快速开始
- 安装依赖项:
pip install -r requirements.txt- 运行客户端(第一次将打开OAuth浏览器):
python main.py # Basic demo with server info and tool listing
python working_example.py # Multiple tool call examples
python test_caching.py # Test token caching functionality- 后续运行使用缓存令牌(无需浏览器!)
🏆 可用的数据狗工具
客户端提供对所有15个Datadog MCP工具的访问:
| 工具 | 说明 |
|---|---|
ask_docs | 搜索Datadog文档 |
get_events | 查询Datadog事件 |
get_incident | 获取事件详细信息 |
get_metrics | 检索度量数据 |
get_monitors | 列表和查询监视器 |
get_synthetics_tests | 获取Synthetics测试数据 |
get_trace | 检索APM跟踪 |
list_dashboards | 列出可用仪表板 |
list_hosts | 获取主机库存 |
list_incidents | 列出事件 |
list_metrics | 发现可用指标 |
list_services | 列出服务 |
list_spans | 查询APM跨度 |
search_logs | 搜索日志数据 |
search_rum_events | 查询RUM事件 |
💾 令牌缓存和管理
客户端通过安全缓存自动处理OAuth令牌:
- 🗄️ 永久存储:令牌缓存到
~/.datadog-mcp/oauth_tokens.json - 🔒 安全权限:缓存受保护的文件
600权限 - 🔄 自动刷新:使用刷新令牌自动刷新过期令牌
- ⚡ 快速启动:后续运行跳过OAuth流程(无需浏览器)
- 🗑️ 智能清理:自动清除并重新验证无效令牌
令牌生命周期:
- 首次运行:完整的OAuth流程→ 浏览器打开→ 缓存令牌
- 后续运行:已使用缓存令牌→ 无需浏览器
- 令牌到期:使用刷新令牌自动刷新
- 刷新失败:使用新的OAuth流自动重新身份验证
🔧 MCP OAuth流程
客户端自动执行完整的符合MCP的OAuth流程:
- 服务器发现:通过受保护的资源元数据发现Datadog的授权服务器
- 元数据发现:获取授权服务器功能和端点
- 动态注册:自动注册为OAuth客户端(支持回退)
- 授权流程:使用资源指示器执行受PKCE保护的授权
- 许可证管理:通过适当的受众验证处理令牌刷新
- 会话管理:维护MCP会话ID,以便进行正确的工具调用
⚙️ 配置(可选)
对于动态客户端注册失败的环境,您可以提供回退凭据:
cp .env.example .env
# Edit .env with your credentials (optional)DATADOG_CLIENT_ID:后备Datadog OAuth应用程序客户端IDDATADOG_CLIENT_SECRET:后备Datadog OAuth应用程序客户端密钥DATADOG_REDIRECT_URIOAuth 重定向 URI(默认:http://localhost:8080/callback)DATADOG_SITE:您的Datadog站点(默认值:datadoghq.com)
🛡️ 安全功能
- 🎯 令牌受众绑定:令牌绑定到特定的MCP服务器资源
- 🔒 PKCE保护:防止拦截攻击的授权码保护
- ⚡ 状态参数:OAuth流期间的CSRF保护
- 🔄 自动令牌刷新:安全的令牌生命周期管理
- 🚀 动态客户端注册:不需要硬编码凭据
- 💾 安全缓存:存储在存储库外部具有限制权限的令牌
- 🗑️ 自动清理:令牌无效,缓存自动管理
📖 使用示例
基本用法:
from datadog_mcp_client import DatadogMCPClient
async def example():
client = DatadogMCPClient()
await client.initialize() # OAuth flow (browser on first run)
await client.get_server_info() # Establish MCP session
# Query documentation
docs = await client.call_tool("ask_docs", {
"query": "How do I create a dashboard?"
})
# List dashboards
dashboards = await client.call_tool("list_dashboards", {
"query": "system"
})
await client.close()高级用法:
# Search logs
logs = await client.call_tool("search_logs", {
"query": "status:error service:web",
"from": "now-1h"
})
# Get metrics
metrics = await client.call_tool("get_metrics", {
"query": "system.cpu.user{*}",
"from": "now-1h"
})
# List monitors
monitors = await client.call_tool("get_monitors", {
"query": "status:alert"
})🧪 测试
测试客户端的各个方面:
# Test basic functionality
python main.py
# Test multiple tool calls
python working_example.py
# Test token caching (run twice to see caching in action)
python test_caching.py
# Test token refresh functionality
python test_token_refresh.py🗂️ 文件结构
sample-python-datadog-mcp/
├── datadog_mcp_client.py # Main MCP client implementation
├── oauth_handler.py # MCP-compliant OAuth handler with caching
├── main.py # Basic demo
├── working_example.py # Multiple tool call examples
├── test_caching.py # Token caching tests
├── test_token_refresh.py # Token refresh tests
├── examples.py # Advanced usage examples
├── requirements.txt # Python dependencies
├── .env.example # Environment template
├── .gitignore # Secure git ignore rules
└── README.md # This file🔗 OAuth应用程序设置(可选)
要为回退凭据创建Datadog OAuth应用程序,请执行以下操作:
- 访问:https://app.datadoghq.com/account/settings#api
- 点击“OAuth应用程序”并创建新应用程序
- 将重定向URI设置为:
http://localhost:8080/callback - 将客户端ID和密码复制到
.env文件
备注:动态客户端注册通常有效,因此通常不需要手动设置。
🎯 后续步骤
你可以:
- 将其集成到您的应用程序中
- 使用Datadog MCP工具构建自定义工具
- 为您的特定用例扩展功能
- 自信地在生产环境中部署
所有MCP授权规范要求均已实施和测试! 🚀
