# DataDog MCP Server - Available Tools
This document lists all the tools that can be implemented in the DataDog MCP server, organized by API version. Tools are prefixed with their API version (e.g., `v1_`, `v2_`) to ensure clear segregation and avoid conflicts.
## Implementation Status Legend
- ✅ **Implemented** - Tool is fully implemented and working
- ❌ **Not Implemented** - Tool is available in API but not yet implemented
- ⚠️ **Partially Implemented** - Tool exists but may have limitations
- 🔧 **Available in API** - Confirmed available in generated client
---
## 📊 **Dashboard Tools (API v1)**
### ✅ v1_list_dashboards
**Retrieve a list of dashboards from DataDog (API v1).**
- **Inputs:**
- `filter` (optional string): Filter dashboards by name or tag
- **Returns:** Array of dashboards with URL references
- **API Method:** `ListDashboardsWithResponse`
### ✅ v1_get_dashboard
**Retrieve a specific dashboard from DataDog (API v1).**
- **Inputs:**
- `dashboard_id` (string): ID of the dashboard to fetch
- **Returns:** Dashboard details including title, widgets, etc.
- **API Method:** `GetDashboardWithResponse`
### ❌ v1_create_dashboard
**Create a new dashboard in DataDog (API v1).**
- **Inputs:**
- `title` (string): Dashboard title
- `widgets` (array): Array of dashboard widgets
- `layout_type` (string): Dashboard layout type
- **Returns:** Created dashboard details
- **API Method:** `CreateDashboardWithResponse`
### ❌ v1_update_dashboard
**Update an existing dashboard in DataDog (API v1).**
- **Inputs:**
- `dashboard_id` (string): ID of the dashboard to update
- `title` (optional string): New dashboard title
- `widgets` (optional array): Updated widgets
- **Returns:** Updated dashboard details
- **API Method:** `UpdateDashboardWithResponse`
### ❌ delete_dashboard
**Delete a dashboard from DataDog.**
- **Inputs:**
- `dashboard_id` (string): ID of the dashboard to delete
- **Returns:** Deletion confirmation
- **API Method:** `DeleteDashboardWithResponse`
---
## 📅 **Event Tools (API v1)**
### ✅ v1_list_events
**List events from DataDog (API v1).**
- **Inputs:**
- `start` (optional number): Start time in epoch seconds
- `end` (optional number): End time in epoch seconds
- `priority` (optional string): Filter by priority (normal, low)
- `tags` (optional string): Filter by tags
- **Returns:** Array of matching events
- **API Method:** `ListEventsWithResponse`
### ✅ v1_create_event
**Create a new event in DataDog (API v1).**
- **Inputs:**
- `title` (string): Event title
- `text` (string): Event description
- `priority` (optional string): Event priority (normal, low)
- `tags` (optional array): Event tags
- **Returns:** Created event details
- **API Method:** `CreateEventWithResponse`
### ❌ get_event
**Retrieve a specific event from DataDog.**
- **Inputs:**
- `event_id` (number): ID of the event to fetch
- **Returns:** Event details including title, status, timestamps, etc.
- **API Method:** `GetEventWithResponse`
---
## 🔍 **Monitor Tools**
### ❌ list_monitors
**Fetch the status of DataDog monitors.**
- **Inputs:**
- `group_states` (optional array): States to filter (e.g., alert, warn, no data, ok)
- `name` (optional string): Filter by name
- `tags` (optional array): Filter by tags
- **Returns:** Monitors data and a summary of their statuses
- **API Method:** `ListMonitorsWithResponse`
### ❌ get_monitor
**Retrieve detailed information about a specific DataDog monitor.**
- **Inputs:**
- `monitor_id` (number): Monitor ID to fetch details for
- **Returns:** Detailed monitor information (title, status, timestamps, etc.)
- **API Method:** `GetMonitorWithResponse`
### ❌ create_monitor
**Create a new monitor in DataDog.**
- **Inputs:**
- `type` (string): Monitor type (metric, log, service check, etc.)
- `query` (string): Monitor query
- `name` (string): Monitor name
- `message` (string): Alert message
- **Returns:** Created monitor details
- **API Method:** `CreateMonitorWithResponse`
### ❌ update_monitor
**Update an existing monitor in DataDog.**
- **Inputs:**
- `monitor_id` (number): ID of the monitor to update
- `query` (optional string): Updated monitor query
- `name` (optional string): Updated monitor name
- `message` (optional string): Updated alert message
- **Returns:** Updated monitor details
- **API Method:** `UpdateMonitorWithResponse`
### ❌ delete_monitor
**Delete a monitor from DataDog.**
- **Inputs:**
- `monitor_id` (number): ID of the monitor to delete
- **Returns:** Deletion confirmation
- **API Method:** `DeleteMonitorWithResponse`
---
## 📈 **Metrics Tools**
### ❌ query_metrics
**Retrieve metrics data from DataDog.**
- **Inputs:**
- `query` (string): Metrics query string
- `from` (number): Start time in epoch seconds
- `to` (number): End time in epoch seconds
- **Returns:** Metrics data for the queried timeframe
- **API Method:** `QueryMetricsWithResponse`
### ❌ list_metrics
**List available metrics in DataDog.**
- **Inputs:**
- `from` (optional number): Start time in epoch seconds
- `to` (optional number): End time in epoch seconds
- `host` (optional string): Filter by host
- **Returns:** List of available metrics
- **API Method:** `ListMetricsWithResponse`
### ❌ submit_metrics
**Submit metrics to DataDog.**
- **Inputs:**
- `series` (array): Array of metric series to submit
- **Returns:** Submission confirmation
- **API Method:** `SubmitMetricsWithBodyWithResponse`
### ❌ get_metric_metadata
**Get metadata for a specific metric.**
- **Inputs:**
- `metric_name` (string): Name of the metric
- **Returns:** Metric metadata including description, type, etc.
- **API Method:** `GetMetricMetadataWithResponse`
---
## 🖥️ **Host Tools**
### ❌ list_hosts
**Get list of hosts from DataDog.**
- **Inputs:**
- `filter` (optional string): Filter string for search results
- `sort_field` (optional string): Field to sort hosts by
- `sort_dir` (optional string): Sort direction (asc/desc)
- `start` (optional number): Starting offset for pagination
- `count` (optional number): Max number of hosts to return (max: 1000)
- `from` (optional number): Search hosts from this UNIX timestamp
- `include_muted_hosts_data` (optional boolean): Include muted hosts status and expiry
- `include_hosts_metadata` (optional boolean): Include host metadata
- **Returns:** Array of hosts with details including name, ID, aliases, apps, mute status
- **API Method:** `ListHostsWithResponse`
### ❌ get_active_hosts_count
**Get the total number of active hosts in DataDog.**
- **Inputs:**
- `from` (optional number): Number of seconds from which you want to get total number of active hosts (defaults to 2h)
- **Returns:** Count of total active and up hosts
- **API Method:** `GetHostTotalsWithResponse`
### ❌ mute_host
**Mute a host in DataDog.**
- **Inputs:**
- `hostname` (string): The name of the host to mute
- `message` (optional string): Message to associate with the muting of this host
- `end` (optional number): POSIX timestamp for when the mute should end
- `override` (optional boolean): If true and the host is already muted, replaces existing end time
- **Returns:** Success status and confirmation message
- **API Method:** `MuteHostWithResponse`
### ❌ unmute_host
**Unmute a host in DataDog.**
- **Inputs:**
- `hostname` (string): The name of the host to unmute
- **Returns:** Success status and confirmation message
- **API Method:** `UnmuteHostWithResponse`
---
## ⏸️ **Downtime Tools**
### ❌ list_downtimes
**List scheduled downtimes from DataDog.**
- **Inputs:**
- `current_only` (optional boolean): Return only currently active downtimes when true
- `monitor_id` (optional number): Filter by monitor ID
- **Returns:** Array of scheduled downtimes with details including scope, monitor information, and schedule
- **API Method:** `ListDowntimesWithResponse`
### ❌ schedule_downtime
**Schedule a downtime in DataDog.**
- **Inputs:**
- `scope` (string): Scope to apply downtime to (e.g. 'host:my-host')
- `start` (optional number): UNIX timestamp for the start of the downtime
- `end` (optional number): UNIX timestamp for the end of the downtime
- `message` (optional string): A message to include with the downtime
- `timezone` (optional string): The timezone for the downtime (e.g. 'UTC', 'America/New_York')
- `monitor_id` (optional number): The ID of the monitor to mute
- `monitor_tags` (optional array): A list of monitor tags for filtering
- **Returns:** Scheduled downtime details including ID and active status
- **API Method:** `CreateDowntimeWithResponse`
### ❌ cancel_downtime
**Cancel a scheduled downtime in DataDog.**
- **Inputs:**
- `downtime_id` (number): The ID of the downtime to cancel
- **Returns:** Confirmation of downtime cancellation
- **API Method:** `CancelDowntimeWithResponse`
### ❌ get_downtime
**Get details of a specific downtime.**
- **Inputs:**
- `downtime_id` (number): ID of the downtime to fetch
- **Returns:** Downtime details including scope, schedule, and status
- **API Method:** `GetDowntimeWithResponse`
---
## 📋 **Log Tools**
### ❌ get_logs
**Search and retrieve logs from DataDog.**
- **Inputs:**
- `query` (string): Datadog logs query string
- `from` (number): Start time in epoch seconds
- `to` (number): End time in epoch seconds
- `limit` (optional number): Maximum number of logs to return (defaults to 100)
- **Returns:** Array of matching logs
- **API Method:** `ListLogsWithResponse`
### ❌ list_log_indexes
**List log indexes in DataDog.**
- **Inputs:** None
- **Returns:** List of log indexes with their configurations
- **API Method:** `ListLogIndexesWithResponse`
### ❌ get_log_index
**Get details of a specific log index.**
- **Inputs:**
- `name` (string): Name of the log index
- **Returns:** Log index configuration and details
- **API Method:** `GetLogsIndexWithResponse`
---
## 🔍 **Trace Tools**
### ❌ list_traces
**Retrieve a list of APM traces from DataDog.**
- **Inputs:**
- `query` (string): Datadog APM trace query string
- `from` (number): Start time in epoch seconds
- `to` (number): End time in epoch seconds
- `limit` (optional number): Maximum number of traces to return (defaults to 100)
- `sort` (optional string): Sort order for traces (defaults to '-timestamp')
- `service` (optional string): Filter by service name
- `operation` (optional string): Filter by operation name
- **Returns:** Array of matching traces from DataDog APM
- **API Method:** Not available in v1 API (requires v2 API)
---
## 📱 **RUM Tools**
### ❌ get_rum_applications
**Get all RUM applications in the organization.**
- **Inputs:** None
- **Returns:** List of RUM applications
- **API Method:** Not available in v1 API (requires v2 API)
### ❌ get_rum_events
**Search and retrieve RUM events from DataDog.**
- **Inputs:**
- `query` (string): Datadog RUM query string
- `from` (number): Start time in epoch seconds
- `to` (number): End time in epoch seconds
- `limit` (optional number): Maximum number of events to return (default: 100)
- **Returns:** Array of RUM events
- **API Method:** Not available in v1 API (requires v2 API)
### ❌ get_rum_grouped_event_count
**Search, group and count RUM events by a specified dimension.**
- **Inputs:**
- `query` (optional string): Additional query filter for RUM search (default: "*")
- `from` (number): Start time in epoch seconds
- `to` (number): End time in epoch seconds
- `group_by` (optional string): Dimension to group results by (default: "application.name")
- **Returns:** Grouped event counts
- **API Method:** Not available in v1 API (requires v2 API)
### ❌ get_rum_page_performance
**Get page (view) performance metrics from RUM data.**
- **Inputs:**
- `query` (optional string): Additional query filter for RUM search (default: "*")
- `from` (number): Start time in epoch seconds
- `to` (number): End time in epoch seconds
- `metric_names` (array of strings): Array of metric names to retrieve
- **Returns:** Performance metrics including average, min, max, and count for each metric
- **API Method:** Not available in v1 API (requires v2 API)
### ❌ get_rum_page_waterfall
**Retrieve RUM page (view) waterfall data filtered by application name and session ID.**
- **Inputs:**
- `application_name` (string): Application name to filter events
- `session_id` (string): Session ID to filter events
- **Returns:** Waterfall data for the specified application and session
- **API Method:** Not available in v1 API (requires v2 API)
---
## 🔧 **Utility Tools**
### ✅ v1_test_connection
**Test DataDog API v1 connectivity and authentication.**
- **Inputs:** None
- **Returns:** Connection status and authentication confirmation
- **API Method:** Uses `ListDashboardsWithResponse` for connectivity test
---
## 📊 **Implementation Summary**
| Category | Implemented | Not Implemented | Total |
|----------|-------------|-----------------|-------|
| **Dashboard (v1)** | 2 | 3 | 5 |
| **Event (v1)** | 2 | 1 | 3 |
| **Monitor (v1)** | 0 | 5 | 5 |
| **Metrics (v1)** | 0 | 4 | 4 |
| **Host (v1)** | 0 | 4 | 4 |
| **Downtime (v1)** | 0 | 4 | 4 |
| **Log (v1)** | 0 | 3 | 3 |
| **Trace** | 0 | 1 | 1 |
| **RUM** | 0 | 5 | 5 |
| **Utility** | 1 | 0 | 1 |
| **TOTAL** | **5** | **30** | **35** |
---
## 🚀 **Next Steps**
1. **Priority 1:** Implement Monitor tools (list_monitors, get_monitor)
2. **Priority 2:** Implement Metrics tools (query_metrics, submit_metrics)
3. **Priority 3:** Implement Host tools (list_hosts, mute_host, unmute_host)
4. **Priority 4:** Implement Downtime tools (list_downtimes, schedule_downtime)
5. **Priority 5:** Implement Log tools (get_logs)
6. **Future:** Consider implementing v2 API for RUM, Trace, and Incident tools
---
## 🚀 **Future API v2 Support**
The codebase is structured to support multiple API versions:
- **Current Implementation**: All tools use DataDog API v1 with `v1_` prefix
- **Future v2 Support**: Tools will be prefixed with `v2_` when implemented
- **Namespace Structure**: Code is organized in `internal/tools/v1/` and future `internal/tools/v2/`
- **Clear Segregation**: No conflicts between API versions, allowing both to coexist
## 📝 **Notes**
- **v1 API Limitation:** RUM and Trace tools require the DataDog API v2
- **Current Focus:** The implemented tools cover the most commonly used DataDog operations
- **Modular Design:** The refactored code structure makes it easy to add new tools by concern
- **Testing:** All implemented tools have corresponding test coverage
- **Version Prefixing:** All tools are prefixed with their API version for clear identification