mcp-cloudwatch-explorer
by sarteta
README.md
# mcp-cloudwatch-explorer
MCP-native AWS CloudWatch explorer. Lets an AI agent (Claude, etc) query
metrics, alarms, and logs over MCP — read-only by design — so you can
ask "what's wrong with prod?" in a chat and get a useful answer instead
of a 4-tab CloudWatch console session.
```mermaid
flowchart LR
A[Claude / MCP client] -- tool call --> S[mcp-cloudwatch-explorer]
S -- boto3 cloudwatch / logs --> CW[CloudWatch metrics<br/>alarms · logs]
CW --> S
S -- ranked findings --> A
```
## Tools exposed (implemented)
| Tool | Returns |
|---|---|
| `list_alarms_in_alarm(region)` | All CloudWatch alarms currently in `ALARM` state |
| `get_metric_stats(namespace, metric, dimensions, period_min, hours)` | Datapoints for a metric over the last N hours |
| `recent_log_errors(log_group, hours)` | Recent ERROR / Exception lines from a log group |
| `summarize_health(region)` | One-shot health snapshot: alarms in ALARM + count by namespace |
## Roadmap
- `top_metrics_by_breach(region, hours)` — metrics that breached their threshold most in last N hours (needs CloudWatch metric history aggregation)
## Why MCP
Standard CloudWatch usage:
1. SSH or open Console.
2. Click through dashboards.
3. Filter by service.
4. Try to remember the metric name.
5. Eyeball the graph.
With MCP:
```
> Hey, looks like prod is slow. Anything alarming?
[claude calls list_alarms_in_alarm + summarize_health]
Yes — 2 alarms in ALARM right now in us-east-1:
- ALB-5xx-rate (api-prod) breached 3 times in last hour
- RDS-CPUUtilization (db-prod-1) at 87% sustained
Top recent log errors in /aws/lambda/api-prod:
- ConnectionPool exhausted (47x)
- DDB throttling on Users.GetItem (12x)
Probable root cause: connection pool saturation under high traffic
caused by the 5xx rate.
```
That's a 30-second triage instead of 5 minutes of console-clicking.
## Quick start
```bash
pip install -e .
# AWS creds via your usual mechanism
export AWS_PROFILE=mycompany-readonly
python -m mcp_cloudwatch_explorer.server
```
For Claude Desktop, add to your MCP config:
```json
{
"mcpServers": {
"cloudwatch-explorer": {
"command": "python",
"args": ["-m", "mcp_cloudwatch_explorer.server"],
"env": {"AWS_PROFILE": "mycompany-readonly"}
}
}
}
```
## Safety
- Scoped IAM: needs only `cloudwatch:Describe*`, `cloudwatch:Get*`,
`logs:Describe*`, `logs:FilterLogEvents`. Never write.
- No mutation tools. By design.
- Pagination + AWS API throttle handling on every `describe_*` call.
## Related projects
- [`mcp-postgres-doctor`](https://github.com/sarteta/mcp-postgres-doctor) — read-only Postgres diagnostics over MCP.
- [`mcp-aws-cost-doctor`](https://github.com/sarteta/mcp-aws-cost-doctor) — AWS cost-leak finder over MCP.
The three together cover Postgres + AWS cost + AWS observability for one
agent session — a single Claude conversation can audit your DB, your
spend, and your alarms.
## License
MIT
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues