Skip to main content
Glama
brukhabtu

Datadog MCP Server

by brukhabtu

GetSecurityMonitoringSignal

Retrieve detailed information about a specific security monitoring signal using its unique ID. This tool helps in analyzing and resolving security incidents by providing signal-specific data.

Instructions

Get a signal's details.

Path Parameters:

  • signal_id (Required): The ID of the signal.

Responses:

  • 200 (Success): OK

    • Content-Type: application/json

    • Response Properties:

    • Example:

{ "data": "unknown_type" }
  • 404: Not Found

    • Content-Type: application/json

    • Response Properties:

      • errors: A list of errors.

    • Example:

{ "errors": [ "Bad Request" ] }
  • 429: Too many requests

    • Content-Type: application/json

    • Response Properties:

      • errors: A list of errors.

    • Example:

{ "errors": [ "Bad Request" ] }

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
signal_idYesThe ID of the signal.

Implementation Reference

  • The route pattern for security monitoring endpoints, including GetSecurityMonitoringSignal, is whitelisted here as a safe read-only GET tool. This registers the tool via FastMCP OpenAPI route mapping.
    safe_endpoints = [ # Metrics and time-series data r"^/api/v2/metrics.*", # Query metrics data r"^/api/v2/query/.*", # Time-series queries # Dashboards and visualizations r"^/api/v2/dashboards.*", # Dashboard configurations r"^/api/v2/notebooks.*", # Notebook data # Monitoring and alerts r"^/api/v2/monitors.*", # Monitor configurations r"^/api/v2/downtime.*", # Scheduled downtimes r"^/api/v2/synthetics.*", # Synthetic tests # Logs and events r"^/api/v2/logs/events/search$", # Search logs r"^/api/v2/logs/events$", # List log events r"^/api/v2/logs/config.*", # Log pipeline configs # APM and traces r"^/api/v2/apm/.*", # APM data r"^/api/v2/traces/.*", # Trace data r"^/api/v2/spans/.*", # Span data # Infrastructure r"^/api/v2/hosts.*", # Host information r"^/api/v2/tags.*", # Tag management (read) r"^/api/v2/usage.*", # Usage statistics # Service management r"^/api/v2/services.*", # Service catalog r"^/api/v2/slos.*", # Service level objectives r"^/api/v2/incidents.*", # Incident management # Security and compliance r"^/api/v2/security_monitoring.*", # Security signals r"^/api/v2/cloud_workload_security.*", # CWS data # Teams and organization (read-only) r"^/api/v2/users.*", # User information r"^/api/v2/roles.*", # Role information r"^/api/v2/teams.*", # Team structure # API metadata r"^/api/v2/api_keys$", # List API keys (no create/delete) r"^/api/v2/application_keys$", # List app keys (no create/delete) ]
  • Creates RouteMap entries that explicitly mark matching security monitoring endpoints (including GetSecurityMonitoringSignal) as MCPType.TOOL, registering them as available tools.
    filters.extend( RouteMap( pattern=pattern, methods=["GET"], mcp_type=MCPType.TOOL, ) for pattern in safe_endpoints )
  • Initializes the FastMCP server with the OpenAPI spec and security route_maps, which exposes the GetSecurityMonitoringSignal tool (derived from Datadog API operationId) as an MCP tool.
    self.mcp_server = FastMCP.from_openapi( openapi_spec=openapi_spec, client=auth_client, route_maps=route_maps, )
  • Monkey patches FastMCP OpenAPI parser to handle parameter locations correctly, necessary for security monitoring tools (and others) to function properly.
    def patch_fastmcp_parameter_parsing() -> None: """Patch FastMCP to handle enum parameter locations correctly. This fixes an incompatibility where FastMCP expects parameter locations as strings (e.g., "path", "query") but receives enum objects from the OpenAPI spec parser (e.g., <ParameterLocation.PATH: 'path'>). """ try: import fastmcp.utilities.openapi as openapi_utils # Store original function original_convert = getattr(openapi_utils.OpenAPIParser, '_convert_to_parameter_location', None) def patched_convert_to_parameter_location(self, param_in): """Patched parameter location converter that handles enum values.""" # Convert enum to string if needed if hasattr(param_in, 'value'): param_in = param_in.value elif hasattr(param_in, 'name'): param_in = param_in.name.lower() # Call original function with string value if original_convert: return original_convert(self, param_in) else: # Fallback implementation if param_in in ["path", "query", "header", "cookie"]: return param_in return "query" # Apply the patch if hasattr(openapi_utils, 'OpenAPIParser'): openapi_utils.OpenAPIParser._convert_to_parameter_location = patched_convert_to_parameter_location except ImportError: # If we can't import the modules, the patch won't work but we'll continue pass # Apply patches when module is imported patch_fastmcp_parameter_parsing()

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/brukhabtu/datadog-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server