Skip to main content
Glama
ntk148v

alertmanager-mcp-server

get_alert_groups

Retrieve alert groups from Alertmanager to monitor active, silenced, or inhibited alerts for system oversight.

Instructions

Get a list of alert groups

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
silencedNo
inhibitedNo
activeNo
countNo
offsetNo

Implementation Reference

  • The core handler function for the 'get_alert_groups' MCP tool. It validates pagination parameters, constructs query parameters based on filters (silenced, inhibited, active), fetches data from Alertmanager's /api/v2/alerts/groups endpoint using make_request helper, applies pagination using paginate_results, and returns the structured response. The @mcp.tool decorator registers it as a tool.
    @mcp.tool(description="Get a list of alert groups") async def get_alert_groups(silenced: Optional[bool] = None, inhibited: Optional[bool] = None, active: Optional[bool] = None, count: int = DEFAULT_ALERT_GROUP_PAGE, offset: int = 0): """Get a list of alert groups Params ------ silenced If true, include silenced alerts. inhibited If true, include inhibited alerts. active If true, include active alerts. count Number of alert groups to return per page (default: 3, max: 5). Alert groups can be large as they contain all alerts within the group. offset Number of alert groups to skip before returning results (default: 0). To paginate through all results, make multiple calls with increasing offset values (e.g., offset=0, offset=3, offset=6, etc.). Returns ------- dict A dictionary containing: - data: List of AlertGroup objects for the current page - pagination: Metadata about pagination (total, offset, count, has_more) Use the 'has_more' flag to determine if additional pages are available. """ # Validate pagination parameters count, offset, error = validate_pagination_params( count, offset, MAX_ALERT_GROUP_PAGE) if error: return {"error": error} params = {"active": True} if silenced is not None: params["silenced"] = silenced if inhibited is not None: params["inhibited"] = inhibited if active is not None: params["active"] = active # Get all alert groups from the API all_groups = make_request(method="GET", route="/api/v2/alerts/groups", params=params) # Apply pagination and return results return paginate_results(all_groups, count, offset)
  • Helper function used by get_alert_groups to apply client-side pagination to the list of alert groups fetched from the API, generating metadata like total count, current offset, page size, and whether more results are available.
    def paginate_results(items: List[Any], count: int, offset: int) -> Dict[str, Any]: """Apply pagination to a list of items and generate pagination metadata. Parameters ---------- items : List[Any] The full list of items to paginate count : int Number of items to return per page (must be >= 1) offset : int Number of items to skip (must be >= 0) Returns ------- Dict[str, Any] A dictionary containing: - data: List of items for the current page - pagination: Metadata including total, offset, count, requested_count, and has_more """ total = len(items) end_index = offset + count paginated_items = items[offset:end_index] has_more = end_index < total return { "data": paginated_items, "pagination": { "total": total, "offset": offset, "count": len(paginated_items), "requested_count": count, "has_more": has_more } }
  • Helper function used by get_alert_groups to validate the count and offset pagination parameters against configured limits (e.g., MAX_ALERT_GROUP_PAGE=5), returning an error message if invalid.
    def validate_pagination_params(count: int, offset: int, max_count: int) -> tuple[int, int, Optional[str]]: """Validate and normalize pagination parameters. Parameters ---------- count : int Requested number of items per page offset : int Requested offset for pagination max_count : int Maximum allowed count value Returns ------- tuple[int, int, Optional[str]] A tuple of (normalized_count, normalized_offset, error_message). If error_message is not None, the parameters are invalid and should return an error to the caller. """ error = None # Validate count parameter if count < 1: error = f"Count parameter ({count}) must be at least 1." elif count > max_count: error = ( f"Count parameter ({count}) exceeds maximum allowed value ({max_count}). " f"Please use count <= {max_count} and paginate through results using the offset parameter." ) # Validate offset parameter if offset < 0: error = f"Offset parameter ({offset}) must be non-negative (>= 0)." return count, offset, error
  • Core helper function used by get_alert_groups to make authenticated HTTP requests to the Alertmanager API, handling basic auth, multi-tenant headers (X-Scope-OrgId), URL joining, error handling, and JSON parsing.
    def make_request(method="GET", route="/", **kwargs): """Make HTTP request and return a requests.Response object. Parameters ---------- method : str HTTP method to use for the request. route : str (Default value = "/") This is the url we are making our request to. **kwargs : dict Arbitrary keyword arguments. Returns ------- dict: The response from the Alertmanager API. This is a dictionary containing the response data. """ try: route = url_join(config.url, route) auth = ( requests.auth.HTTPBasicAuth(config.username, config.password) if config.username and config.password else None ) # Add X-Scope-OrgId header for multi-tenant setups # Priority: 1) Request header from caller (via ContextVar), 2) Static config tenant headers = kwargs.get("headers", {}) tenant_id = _current_scope_org_id.get() or config.tenant_id if tenant_id: headers["X-Scope-OrgId"] = tenant_id if headers: kwargs["headers"] = headers response = requests.request( method=method.upper(), url=route, auth=auth, timeout=60, **kwargs ) response.raise_for_status() result = response.json() # Ensure we always return something (empty list is valid but might cause issues) if result is None: return {"message": "No data returned"} return result except requests.exceptions.RequestException as e: return {"error": str(e)}

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/ntk148v/alertmanager-mcp-server'

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