list_silences
View active alert silences across Kubernetes clusters or filter by specific cluster to manage notification suppression in Karma Alert dashboard.
Instructions
List all active silences across clusters or for a specific cluster
Args: cluster: Optional cluster name to filter silences (e.g., 'teddy-prod')
Returns: Formatted list of active silences with details
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| cluster | No |
Implementation Reference
- src/karma_mcp/server.py:1151-1232 (handler)The `list_silences` tool implementation which fetches silences from the Karma API, optionally filters by cluster, and formats the output.
async def list_silences(cluster: str = "") -> str: """List all active silences across clusters or for a specific cluster Args: cluster: Optional cluster name to filter silences (e.g., 'teddy-prod') Returns: Formatted list of active silences with details """ try: async with httpx.AsyncClient() as client: response = await client.post( f"{KARMA_URL}/alerts.json", json={}, headers={"Content-Type": "application/json"}, timeout=10.0, ) if response.status_code == 200: data = response.json() silences = data.get("silences", {}) if not silences: return "No active silences found" # Filter by cluster if specified if cluster: cluster_lower = cluster.lower() filtered_silences = {} for cluster_name, cluster_silences in silences.items(): if cluster_lower in cluster_name.lower(): filtered_silences[cluster_name] = cluster_silences silences = filtered_silences if not silences: return f"No active silences found for cluster: {cluster}" # Format output result = f"Active Silences{f' in {cluster}' if cluster else ''}\n" result += "=" * 50 + "\n\n" total_count = 0 for cluster_name, cluster_silences in silences.items(): if cluster_silences: result += f"š Cluster: {cluster_name}\n" result += f" Silences: {len(cluster_silences)}\n\n" for silence_id, silence in list(cluster_silences.items())[ :5 ]: # Limit to 5 per cluster total_count += 1 result += f" š Silence ID: {silence_id[:8]}...\n" result += f" Created by: {silence.get('createdBy', 'unknown')}\n" result += f" Comment: {silence.get('comment', 'No comment')}\n" result += ( f" Starts: {silence.get('startsAt', 'unknown')}\n" ) result += f" Ends: {silence.get('endsAt', 'unknown')}\n" # Show matchers matchers = silence.get("matchers", []) if matchers: result += " Matchers:\n" for matcher in matchers[:3]: # Show first 3 matchers name = matcher.get("name", "") value = matcher.get("value", "") if len(value) > 50: value = value[:47] + "..." result += f" - {name}: {value}\n" result += "\n" if len(cluster_silences) > 5: result += f" ... and {len(cluster_silences) - 5} more silences\n\n" result += f"\nš Total: {total_count} active silence{'s' if total_count != 1 else ''}" return result else: return f"Error fetching silences: code {response.status_code}" except Exception as e: return f"Error connecting to Karma: {str(e)}"