Datadog

# Datadog Model Context Protocol (MCP) πŸ”

[![smithery badge](https://smithery.ai/badge/@didlawowo/mcp-collection)](https://smithery.ai/server/@didlawowo/mcp-collection)

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 πŸ”§

### Installing via Smithery

To install Datadog for Claude Desktop automatically via [Smithery](https://smithery.ai/server/@didlawowo/mcp-collection):

```bash
npx -y @smithery/cli install @didlawowo/mcp-collection --client claude
```

Required packages:

```text
datadog-api-client
fastmcp
loguru
icecream
python-dotenv
uv
```

## Environment Setup πŸ”‘

Create a `.env` file with your Datadog credentials:

```env
DD_API_KEY=your_api_key
DD_APP_KEY=your_app_key
```

## Setup Claude Desktop Setup for MCP πŸ–₯️

1. Install Claude Desktop

```bash
# Assuming you're on macOS
brew install claude-desktop

# Or download from official website
https://claude.ai/desktop
```

2. Set up Datadog MCP config:

```bash
# 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 πŸ’»

![get logs](assets/logs.gif)

![get monitor](assets/monitor.gif)

## 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

<https://medium.com/@pedro.aquino.se/how-to-use-mcp-tools-on-claude-desktop-app-and-automate-your-daily-tasks-1c38e22bc4b0>

## How it works - Available Functions πŸ› οΈ

the LLM use provided function to get the data and use it

### 1. Get Monitor States

```python
get_monitor_states(
    name: str,           # Monitor name to search
    timeframe: int = 1   # Hours to look back
)
```

Example:

```python

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

```python
get_k8s_logs(
    cluster: str,            # Kubernetes cluster name
    timeframe: int = 5,      # Hours to look back
    namespace: str = None    # Optional namespace filter
)
```

Example:

```python
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"
}
```

```bash
# Install as MCP extension
cd datadog
task install-mcp
```

## 4. Verify Installation

### In Claude chat desktop

 check datadog connection in claude

![setup claude](assets/config.png)

## 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

```bash
# 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

1. **API Authentication Errors**

   ```bash
   Error: (403) Forbidden
   ```

   ➑️ Check your DD_API_KEY and DD_APP_KEY in .env

2. **MCP Connection Issues**

   ```bash
   Error: Failed to connect to MCP server
   ```

   ➑️ Verify your claude_desktop_config.json path and content

3. **Monitor Not Found**

   ```bash
   Error: No monitor found with name 'xxx'
   ```

   ➑️ Check monitor name spelling and case sensitivity

4. **logs can be found here**

![alt text](assets/logs.png)

## Contributing 🀝

Feel free to:

1. Open issues for bugs
2. Submit PRs for improvements
3. 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