ops-mcp-server
by @shaowenchen
Query observability data and execute operational procedures via the ops-mcp-server MCP interface. Covers Kubernetes events, Prometheus metrics, Elasticsearch...
clawhub install ops-mcp-serverπ About This Skill
name: ops-mcp-server description: | Query observability data and execute operational procedures via the ops-mcp-server MCP interface. Covers Kubernetes events, Prometheus metrics, Elasticsearch logs, Jaeger distributed traces, and SOPS runbooks. triggers: - ops - ops-mcp-server - kubernetes - k8s - prometheus - metrics - elasticsearch - logs - jaeger - traces - tracing - observability - monitoring - incident - sops - events - cluster - pod - deployment - namespace - alert - latency - error rate - outage
Ops MCP Server Skill
Access your infrastructure's observability data and execute operational procedures through a unified MCP interface.
Capabilities at a Glance
| Module | Tools | What it answers |
|--------|-------|----------------|
| Events (Kubernetes) | list-events-from-ops, get-events-from-ops | What happened to a pod/deployment/node? |
| Metrics (Prometheus) | list-metrics-from-prometheus, query-metrics-from-prometheus, query-metrics-range-from-prometheus | Is CPU/memory/traffic normal? What changed over time? |
| Logs (Elasticsearch) | list-log-indices-from-elasticsearch, search-logs-from-elasticsearch, query-logs-from-elasticsearch | What errors are in the logs? What did service X log? |
| Traces (Jaeger) | get-services-from-jaeger, get-operations-from-jaeger, find-traces-from-jaeger, get-trace-from-jaeger | Why is this request slow? Where did it fail? |
| SOPS | list-sops-from-ops, list-sops-parameters-from-ops, execute-sops-from-ops | Run a standard operational procedure |
Setup (first-time)
# 1. Use mcporter with npx (no installation needed)
Or install globally: npm i -g mcporter
2. Register the server
cd ~/.openclaw/workspace
npx mcporter config add ops-mcp-server --url http://localhost/mcp3. Authenticate (if needed)
npx mcporter auth ops-mcp-server
On failure, add to ~/.openclaw/workspace/config/mcporter.json:
"headers": { "Authorization": "Bearer YOUR_TOKEN" }
4. Verify
npx mcporter list ops-mcp-server
npx mcporter call ops-mcp-server list-events-from-ops page_size=55. Set env var
export OPS_MCP_SERVER_URL="http://localhost/mcp"
How to Investigate: Decision Guide
When a user describes a problem, use this guide to choose starting tools and build a complete picture.
π΄ "Something is broken / service is down"
1. Kubernetes Events first β check if pods crashed, restarted, or got evicted
get-events-from-ops subject_pattern="ops.clusters.*.namespaces..pods.*.events"
2. Logs β search for errors around the time of the incident
query-logs-from-elasticsearch query="FROM logs-* | WHERE @timestamp > NOW() - 30 minutes | WHERE level == 'error' | LIMIT 50"
3. Traces β find failed or slow requests
find-traces-from-jaeger serviceName= tags={"error":"true"}
π‘ "Performance is degraded / requests are slow"
1. Metrics β check resource saturation
query-metrics-from-prometheus query="100 - (avg(rate(node_cpu_seconds_total{mode='idle'}[5m])) * 100)"
query-metrics-range-from-prometheus query="node_memory_MemAvailable_bytes" time_range="1h" step="1m"
2. Traces β find slow spans
find-traces-from-jaeger serviceName= durationMin=1000
3. Logs β look for timeouts or slow query warningsπ΅ "I need to run a procedure / restart something"
1. List available SOPs
list-sops-from-ops
2. Get parameters
list-sops-parameters-from-ops sops_id=
3. Execute
execute-sops-from-ops sops_id= parameters='{...}'
π’ "General health check / nothing specific"
Start with events + a key metrics query, then go deeper based on what you find.
Tool Quick Reference
Events β NATS subject pattern format
# Namespace resources
ops.clusters.{cluster}.namespaces.{ns}.{resourceType}.{name}.{observation}Node level
ops.clusters.{cluster}.nodes.{nodeName}.{observation}Notifications
ops.notifications.providers.{provider}.channels.{channel}.severities.{severity}
Wildcards: * = one segment, > = everything remaining (tail only)
Observation types: status | events | alerts | findings
Time is Unix milliseconds: $(date +%s)000
Logs β ES|QL query patterns
-- Recent errors
FROM logs-* | WHERE @timestamp > NOW() - 30 minutes | WHERE level == 'error' | LIMIT 100-- Top errors by frequency
FROM logs-* | WHERE @timestamp > NOW() - 1 hour | WHERE level == 'error'
| STATS count() BY message | SORT count DESC | LIMIT 10
-- Specific service
FROM logs-* | WHERE service == 'checkout-service' | WHERE @timestamp > NOW() - 1 hour | LIMIT 50
Metrics β PromQL patterns
# CPU usage
100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) * 100)Memory available
node_memory_MemAvailable_bytesHTTP error rate
rate(http_requests_total{status=~"5.."}[5m])
Detailed Examples & Reference Files
For complete parameter lists, output formats, and advanced patterns, read the relevant file:
examples/events.mdexamples/metrics.mdexamples/logs.mdexamples/traces.mdexamples/sops.mdreferences/design.mdRead the relevant example file before making complex tool calls you're unsure about.