
List all visualization dashboards for monitoring infrastructure, applications, and business metrics. Returns dashboard summaries with IDs, titles, and URLs. Error: Check API credentials if no dashboards returned.
Create a new visualization dashboard with custom widgets for monitoring metrics, logs, and application performance. Specify title, widgets, and layout type. Returns created dashboard with ID and URL. Error: Verify widget configuration if creation fails.
Get detailed dashboard configuration including all widgets, layout, and template variables by ID. Returns complete dashboard details. Error: Use list_dashboards to find valid dashboard IDs if not found.
Update existing dashboard configuration including title, widgets, layout, and template variables. Provide dashboard_id and fields to update. Returns updated dashboard. Error: Use get_dashboard first to verify dashboard exists.
Permanently delete a dashboard by ID removing all widgets and configuration. This action cannot be undone. Returns confirmation with deleted dashboard ID. Error: Verify dashboard_id with list_dashboards if deletion fails.
List all scheduled downtimes with filtering and pagination. Returns downtime configurations for maintenance windows. Use current_only to filter active downtimes. Error: Check filters if no downtimes returned.
Create a scheduled downtime for maintenance windows. Specify scope, start/end times, and optional message. Returns created downtime with ID. Error: Check scope format and timestamps if creation fails.
Get a specific downtime by ID with full configuration. Returns downtime schedule, scope, and status. Error: Use list_downtimes to find valid downtime IDs if not found.
Update an existing downtime's configuration including scope, time range, or message. Provide downtime_id and fields to update. Returns updated downtime. Error: Use get_downtime first to verify downtime exists.
Delete a downtime schedule permanently by ID. This removes the maintenance window. Returns confirmation with deleted downtime ID. Error: Verify downtime_id with list_downtimes if deletion fails.
List all incidents with pagination. Returns incidents with titles, impact status, custom fields, and timestamps. Use page_size and page_offset for pagination. Error: Check API credentials if no incidents returned.
Create a new incident with title and impact status. Specify customer impact flag, optional impact description, and custom fields for severity/state. Returns created incident with ID. Error: Check required fields if creation fails.
Search incidents with advanced query filters. Supports filtering by state, severity, customer impact, and custom fields. Returns matching incidents. Error: Check query syntax if search fails.
List all log indexes with filtering and pagination. Returns index configurations including retention settings and daily limits. Use page and page_size for pagination. Error: Check API credentials if no indexes returned.
Search log events using Datadog query syntax (e.g. 'service:web status:error'). Supports time range and index filtering. Error: Verify query syntax if no results.
List all active metrics being reported to Datadog. Returns metric names available for querying. Use from_time to filter metrics active since a timestamp. Error: Check time range if no metrics returned.
Get metadata for a specific metric including type, description, and unit. Provide the metric name to retrieve details. Error: Use list_metrics to find valid metric names if not found.
Update metadata for a metric including description, type, and unit. Provide metric name and fields to update. Returns updated metric metadata. Error: Use get_metric first to verify metric exists.
Query timeseries data for metrics over a time range. Specify metric query, start time, and end time. Returns series data with timestamps and values. Error: Check query syntax and time range if no data returned.
Submit custom metric data points to Datadog. Provide series with metric name, points (array of {timestamp, value} objects), type (0=gauge, 1=count, 2=rate), and tags. Returns submission status. Error: Check series format if submission fails.
List all monitoring alerts with filtering and pagination. Returns monitors with alert configs, thresholds, and states. Use page and page_size for pagination. Supports filtering by name, tags, and state. Error: Use list_monitors without filters if no results found.
Create a new monitoring alert with thresholds and notification settings. Specify monitor type (metric alert, service check, etc.), query, thresholds, and message. Returns created monitor with ID. Error: Check query syntax and threshold values if creation fails.
Get a specific monitor by ID with full configuration details. Returns monitor with thresholds, query, message, and current state. Error: Use list_monitors to find valid monitor IDs if not found.
Update an existing monitor's configuration including query, thresholds, or notification settings. Provide monitor_id and fields to update. Returns updated monitor. Error: Use get_monitor first to verify monitor exists.
Delete a monitor permanently by ID. This removes all alert configuration and history. Returns confirmation with deleted monitor ID. Error: Verify monitor_id with list_monitors if deletion fails.
Mute a monitor to suppress notifications temporarily or indefinitely for maintenance windows. Specify optional scope and end time. Monitor continues evaluating. Error: Use list_monitors to find valid monitor IDs.
Unmute a previously muted monitor to resume sending notifications. Specify optional scope to unmute. Error: Use list_monitors to find muted monitors.
List all roles with pagination (admin-only: requires user_access_manage permission). Returns roles with names, user counts, and timestamps. Use page_size and page_number for pagination. Error: Check permissions if access denied.
Create a new custom role (admin-only: requires user_access_manage permission). Specify unique role name. Returns created role with ID. Error: Check role name uniqueness if creation fails.
Get role details by ID (admin-only: requires user_access_manage permission). Returns role with name, user count, and timestamps. Error: Use list_roles to find valid role IDs if not found.
Update role name and description (admin-only: requires user_access_manage permission). Provide role_id and new name. Returns updated role. Error: Use get_role first to verify role exists.
Delete custom role permanently by ID (admin-only: requires user_access_manage permission). This removes all role configurations and user associations. Returns confirmation with deleted role ID. Error: Use list_roles to find valid role IDs.
List permissions for a role (admin-only: requires user_access_manage permission). Returns permission IDs, names, descriptions, and categories. Error: Use list_roles to find valid role IDs.
Grant permission to role (admin-only: requires user_access_manage permission). Provide role_id and permission_id to add. Returns updated permission list. Error: Use list_all_permissions to find valid permission IDs.
Revoke permission from role (admin-only: requires user_access_manage permission). Provide role_id and permission_id to remove. Returns updated permission list. Error: Use list_role_permissions to find granted permissions.
List users with this role (admin-only: requires user_access_manage permission). Returns user IDs assigned to the role. Error: Use list_roles to find valid role IDs.
Assign user to role (admin-only: requires user_access_manage permission). Provide role_id and user_id. Returns updated user list for role. Error: Use list_users to find valid user IDs.
Remove user from role (admin-only: requires user_access_manage permission). Provide role_id and user_id. Returns updated user list for role. Error: Use get_role_users to find assigned users.
List all available permissions in Datadog. Returns permission IDs, names, descriptions, and categories for role assignment. Error: Check API credentials if no permissions returned.
Search permissions by keyword. Provide search query to filter permissions by name or description. Returns matching permissions. Error: Try broader search terms if no results found.
List all synthetic monitoring tests with pagination. Returns API and browser tests with configurations, locations, and status. Use page and page_size for pagination. Error: Check API credentials if no tests returned.
Create a new synthetic monitoring test (API or browser test). Specify test name, type, config with request/assertions, and testing locations. Returns created test with public ID. Error: Check config format and location codes if creation fails.
List all global variables for synthetics tests with pagination. Returns variables that can be reused across tests. Use page and page_size for pagination. Error: Check API credentials if no variables returned.
Create a new global variable for reuse across synthetics tests. Specify variable name, value config (secure flag, actual value), and optional tags. Returns created variable with ID. Error: Check value format if creation fails.
List all available testing locations for synthetics tests. Returns location IDs, names, regions, and active status. Use to discover valid location codes for test creation. Error: Check API credentials if no locations returned.
List all users with filtering and pagination (admin-only: requires user_access_manage permission). Returns users with emails, names, status, and verification state. Filter by status. Error: Check permissions if access denied.
Create a new user account (admin-only: requires user_access_manage permission). Specify email (used as handle), optional name and title. Returns created user with ID. Error: Check email format and permissions if creation fails.
Update user profile including name, email, or disabled status (admin-only: requires user_access_manage permission). Provide user_id and fields to update. Returns updated user. Error: Use list_users to find valid user IDs.
Send email invitations to new users (admin-only: requires user_access_manage permission). Provide list of email addresses. Returns invitation results. Error: Check email format if invitation fails.
Validate Datadog API credentials by testing authentication with a lightweight API call

In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}It’s a server that exposes data and functionality from Datadog through tools. Your agents can use these tools to update dashboards, cancel a scheduled downtime, fetch APM services, and more.
Here are just a few use cases (these use cases can also apply to other observability MCP servers):
Merge Agent Handler differentiates itself at the platform layer:
Yes, Merge Agent Handler supports custom security rules through its Security Gateway and Data Loss Protection (DLP) system. These rules can inspect both tool inputs and outputs and automatically block, redact, or mask sensitive data before it is returned to the agent.
Here are just a few examples:
You can follow these steps:
1. Create your Agent Handler account. Sign up for a free account here.
2. Create a Tool Pack. Navigate to "Tool Packs" in the left sidebar and click "Create New Tool Pack." Give it a descriptive name (e.g., "Datadog Monitoring Pack").
3. Add the Datadog connector. Browse the available connectors and add Datadog to your Tool Pack.
4. Configure authentication. Choose your authentication method:
5. Select specific tools.Choose which Datadog tools you want to make available to your agent, or enable all tools by default.
6. Register a User. Navigate to "Registered Users" in the sidebar and create a new registered user. This represents the identity that will perform actions through your agent.
7. Save your Tool Pack. Review and save all your Tool Pack settings.
8. Connect to your agent or IDE. Copy the MCP entry URL from your Tool Pack settings and add it to your IDE's MCP configuration file (e.g., mcp.json for Cursor or the MCP settings for Windsurf/Claude Desktop). Include your API key in the authorization header. After restarting your IDE or agent, you'll have access to all the Datadog tools you configured.
Yes, Agent Handler for Employees lets your employees connect Claude, ChatGPT, Microsoft Copilot, Cursor, and other MCP-compatible AI tools to Datadog without bypassing IT governance.
Instead of setting up direct connections with personal credentials that IT can't monitor or revoke, each employee authenticates through Agent Handler and gets individual credentials tied to their identity.
IT also provisions access by role or group via SCIM. An SRE, for instance, gets Datadog to query metrics and investigate incidents, PagerDuty to manage on-call response, and ServiceNow to log infrastructure changes; while an engineer gets Datadog to search logs and monitor service health, GitLab to track code changes, and Slack to coordinate with the team.
Every tool call an employee's AI makes to Datadog is also inspected against your DLP rules and logged to a searchable audit trail, giving security teams full visibility into what data was accessed and by whom.
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now