datadog
by didlawowo
Datadog Model Context Protocol (MCP) 🔍
A Python-based tool to interact with Datadog API and fetch monitoring data from your infrastructure. This MCP provides easy access to monitor states and Kubernetes logs through a simple interface.
Datadog Features 🌟
- Monitor State Tracking: Fetch and analyze specific monitor states
- Kubernetes Log Analysis: Extract and format error logs from Kubernetes clusters
Prerequisites 📋
- Python 3.11+
- Datadog API and Application keys (with correct permissions)
- Access to Datadog site
Installation 🔧
Copy
pip install -r requirements.txt
Required packages:
Copy
datadog-api-client
fastmcp
loguru
icecream
python-dotenv
uv
Environment Setup 🔑
Create a .env
file with your Datadog credentials:
Copy
DD_API_KEY=your_api_key
DD_APP_KEY=your_app_key
Setup Claude Desktop Setup for MCP 🖥️
- Install Claude Desktop
Copy
# Assuming you're on macOS
brew install claude-desktop
# Or download from official website
https://claude.ai/desktop
- Set up Datadog MCP config:
Copy
# on mac is
~/Library/Application\ Support/Claude/claude_desktop_config.json
# Add this to your claude config json
```json
"Datadog-MCP-Server": {
"command": "uv",
"args": [
"run",
"--with",
"datadog-api-client",
"--with",
"fastmcp",
"--with",
"icecream",
"--with",
"loguru",
"--with",
"python-dotenv",
"fastmcp",
"run",
"/your-path/mcp-collection/datadog/main.py"
],
"env": {
"DD_API_KEY": "xxxx",
"DD_APP_KEY": "xxx"
}
},
Usage 💻
Architecture 🏗
- FastMCP Base: Utilizes FastMCP framework for tool management
- Modular Design: Separate functions for monitors and logs
- Type Safety: Full typing support with Python type hints
- API Abstraction: Wrapped Datadog API calls with error handling
I'll add a section about MCP and Claude Desktop setup:
Model Context Protocol (MCP) Introduction 🤖
What is MCP?
Model Context Protocol (MCP) is a framework allowing AI models to interact with external tools and APIs in a standardized way. It enables models like Claude to:
- Access external data
- Execute commands
- Interact with APIs
- Maintain context across conversations
some examples of MCP servers
https://github.com/punkpeye/awesome-mcp-servers?tab=readme-ov-file
Tutorial for setup MCP
How it works - Available Functions 🛠️
the LLM use provided function to get the data and use it
1. Get Monitor States
Copy
get_monitor_states(
name: str, # Monitor name to search
timeframe: int = 1 # Hours to look back
)
Example:
Copy
response = get_monitor_states(name="traefik")
# Sample Output
{
"id": "12345678",
"name": "traefik",
"status": "OK",
"query": "avg(last_5m):avg:traefik.response_time{*} > 1000",
"message": "Response time is too high",
"type": "metric alert",
"created": "2024-01-14T10:00:00Z",
"modified": "2024-01-14T15:30:00Z"
}
2. Get Kubernetes Logs
Copy
get_k8s_logs(
cluster: str, # Kubernetes cluster name
timeframe: int = 5, # Hours to look back
namespace: str = None # Optional namespace filter
)
Example:
Copy
logs = get_k8s_logs(
cluster="prod-cluster",
timeframe=3,
namespace="default"
)
# Sample Output
{
"timestamp": "2024-01-14T22:00:00Z",
"host": "worker-1",
"service": "nginx-ingress",
"pod_name": "nginx-ingress-controller-abc123",
"namespace": "default",
"container_name": "controller",
"message": "Connection refused",
"status": "error"
}
Copy
# Install as MCP extension
cd datadog
task install-mcp
4. Verify Installation
In Claude chat desktop
check datadog connection in claude
5. Use Datadog MCP Tools
Security Considerations 🔒
- Store API keys in
.env
- MCP runs in isolated environment
- Each tool has defined permissions
- Rate limiting is implemented
Troubleshooting 🔧
Using MCP Inspector
Copy
# Launch MCP Inspector for debugging
task run-mcp-inspector
The MCP Inspector provides:
- Real-time view of MCP server status
- Function call logs
- Error tracing
- API response monitoring
Common issues and solutions
- API Authentication Errors➡️ Check your DD_API_KEY and DD_APP_KEY in .envCopyError: (403) Forbidden
- MCP Connection Issues➡️ Verify your claude_desktop_config.json path and contentCopyError: Failed to connect to MCP server
- Monitor Not Found➡️ Check monitor name spelling and case sensitivityCopyError: No monitor found with name 'xxx'
- logs can be found here
Contributing 🤝
Feel free to:
- Open issues for bugs
- Submit PRs for improvements
- Add new features
Notes 📝
- API calls are made to Datadog EU site
- Default timeframe is 1 hour for monitor states
- Page size limits are set to handle most use cases
provide access to monitor and cluster logs from datadog
- Datadog Features 🌟
- Prerequisites 📋
- Installation 🔧
- Environment Setup 🔑
- Setup Claude Desktop Setup for MCP 🖥️
- Usage 💻
- Architecture 🏗
- Model Context Protocol (MCP) Introduction 🤖