Metadata-Version: 2.4
Name: prometheus-mcp
Version: 0.4.3
Summary: MCP server for Prometheus and Alertmanager — query metrics, inspect alerts, explore targets, check cardinality, and investigate incidents (read-only).
Project-URL: Homepage, https://github.com/mshegolev/prometheus-mcp
Project-URL: Issues, https://github.com/mshegolev/prometheus-mcp/issues
Author: Mikhail Shchegolev
License-Expression: MIT
License-File: LICENSE
Keywords: anthropic,claude,mcp,metrics,monitoring,observability,prometheus,promql
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Monitoring
Requires-Python: >=3.10
Requires-Dist: mcp>=1.2
Requires-Dist: pydantic>=2.0
Requires-Dist: requests>=2.31
Requires-Dist: typing-extensions>=4.5; python_version < '3.12'
Requires-Dist: urllib3>=2.0
Provides-Extra: dev
Requires-Dist: pytest-cov>=4; extra == 'dev'
Requires-Dist: pytest>=7; extra == 'dev'
Requires-Dist: responses>=0.25; extra == 'dev'
Requires-Dist: ruff>=0.5; extra == 'dev'
Description-Content-Type: text/markdown

# prometheus-mcp

<!-- mcp-name: io.github.mshegolev/prometheus-mcp -->

[![PyPI version](https://img.shields.io/pypi/v/prometheus-mcp.svg)](https://pypi.org/project/prometheus-mcp/)
[![Python versions](https://img.shields.io/pypi/pyversions/prometheus-mcp.svg)](https://pypi.org/project/prometheus-mcp/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![Tests](https://github.com/mshegolev/prometheus-mcp/actions/workflows/test.yml/badge.svg)](https://github.com/mshegolev/prometheus-mcp/actions/workflows/test.yml)

**MCP server for [Prometheus](https://prometheus.io/) metrics and observability.**
Give Claude (or any MCP-capable agent) read access to your Prometheus instance — query metrics with PromQL, inspect active alerts, and explore scrape targets — without leaving the conversation.

## Why another Prometheus MCP?

The existing Prometheus integrations require custom scripts or direct API knowledge. This server:

- Speaks the standard [Model Context Protocol](https://modelcontextprotocol.io/) over **stdio** — works with Claude Desktop, Claude Code, Cursor, and any MCP client.
- Is **read-only**: all 5 tools carry `readOnlyHint: true` — zero risk of modifying Prometheus data.
- Returns **dual-channel output**: structured JSON (`structuredContent`) for programmatic use + Markdown (`content`) for human-readable display.
- Has **actionable error messages** that name the exact env var to fix and suggest a next step.
- Supports **Bearer token**, **HTTP Basic auth**, or **no auth** (common for internal deployments).

## Tools

| Tool | Endpoint | Description |
|------|----------|-------------|
| `prometheus_list_metrics` | `GET /api/v1/label/__name__/values` | List all metric names with optional substring filter (cap 500) |
| `prometheus_query` | `GET /api/v1/query` | Execute an instant PromQL query |
| `prometheus_query_range` | `GET /api/v1/query_range` | Execute a PromQL range query returning time-series |
| `prometheus_list_alerts` | `GET /api/v1/alerts` | List active and pending alerts |
| `prometheus_list_targets` | `GET /api/v1/targets` | List scrape targets by health and job |

## v4.0 Advanced Alert Correlation Features

Version 4.0 introduces powerful new capabilities for AI agents to autonomously investigate production errors:

### Cross-Instance Alert Correlation
- Automatically identify related alerts across multiple Prometheus instances
- Group alerts by service identifiers to understand incident scope
- Detect cascading alert patterns with directional dependency inference

### Root Cause Analysis
- Anomaly detection in metrics with automatic seasonality adjustment
- Dependency chain traversal from symptoms to potential root causes
- Change point detection correlating alerts with recent deployments or config changes
- Ranked root cause candidates based on evidence strength and impact analysis

### Dependency Mapping & Health
- Dynamic service dependency maps built from traffic correlation analysis
- Cross-cluster dependency visualization showing service interoperation
- Synthetic health probing to assess dependency resilience
- Load shedding recommendations based on dependency fragility

### Trend Analysis & Benchmarking
- Historical pattern recognition for recurring alert schedules
- Capacity forecasting to predict resource exhaustion
- MTTR benchmarking comparing resolution times against historical data
- Deviation detection triggering higher-priority notifications for pattern breaks

### Integrated Analysis Tool
- New `federation_analyze_alerts` tool combining all v4.0 features
- Unified output format optimized for AI agent consumption
- Comprehensive incident context in a single tool call

## Installation

```bash
pip install prometheus-mcp
```

Or run directly without installing:

```bash
uvx prometheus-mcp
```

## Configuration

All configuration is via environment variables:

| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| `PROMETHEUS_URL` | **Yes** | — | Prometheus server URL, e.g. `https://prometheus.example.com` (no trailing slash) |
| `PROMETHEUS_TOKEN` | No | — | Bearer token (takes precedence over Basic auth) |
| `PROMETHEUS_USERNAME` | No | — | HTTP Basic auth username |
| `PROMETHEUS_PASSWORD` | No | — | HTTP Basic auth password |
| `PROMETHEUS_SSL_VERIFY` | No | `true` | Set `false` for self-signed certificates |

Copy `.env.example` to `.env` and fill in your values.

## Claude Desktop / Claude Code setup

Add to your MCP config (`claude_desktop_config.json` or `.claude/mcp.json`):

```json
{
  "mcpServers": {
    "prometheus": {
      "command": "prometheus-mcp",
      "env": {
        "PROMETHEUS_URL": "https://prometheus.example.com",
        "PROMETHEUS_TOKEN": "your-token-here"
      }
    }
  }
}
```

Or with `uvx` (no install required):

```json
{
  "mcpServers": {
    "prometheus": {
      "command": "uvx",
      "args": ["prometheus-mcp"],
      "env": {
        "PROMETHEUS_URL": "https://prometheus.example.com"
      }
    }
  }
}
```

## Docker

```bash
docker run --rm -e PROMETHEUS_URL=https://prometheus.example.com prometheus-mcp
```

## Example queries

Once configured, ask Claude:

- "What metrics does Prometheus have about HTTP requests?"
- "What is the current request rate for the payment service?"
- "Show me CPU usage over the last hour with 5-minute resolution"
- "Are there any firing alerts? What's their severity?"
- "Which scrape targets are currently down and why?"
- "How many node-exporter instances are up?"

## Tool usage guide

### `prometheus_list_metrics`

Returns all metric names Prometheus knows about. Use `pattern` to filter by substring (case-insensitive). **Start here** when you don't know which metrics are available. Output is capped at 500 metrics with a truncation hint.

### `prometheus_query`

Execute an instant PromQL expression and get current values. Returns result type (vector/scalar/matrix/string), sample count, and per-sample labels and values.

Parameters:
- `query` (required) — PromQL expression, e.g. `up`, `rate(http_requests_total[5m])`
- `time` (optional) — RFC3339 or Unix timestamp; defaults to now

### `prometheus_query_range`

Execute a PromQL expression over a time window. Returns one series per matching time series with timestamped values. Total data points across all series are capped at 5000.

Parameters:
- `query` (required) — PromQL expression
- `start` / `end` (required) — RFC3339 or Unix timestamps
- `step` (required) — resolution like `15s`, `1m`, `5m`

Prometheus rejects steps that would produce > 11,000 points per series (HTTP 422). Increase step or narrow the range if this happens.

**Note:** The Prometheus range API does not support filtering by branch or commit — filters are expressed purely in PromQL label matchers.

### `prometheus_list_alerts`

Returns all active/pending alerts with labels (including `alertname`, `severity`), state, activation time, and current value. Includes a state summary (firing vs pending counts).

### `prometheus_list_targets`

Returns scrape targets with job name, instance address, health (`up`/`down`/`unknown`), last scrape duration in milliseconds, and any error message. Includes a per-job summary. Filter by `state`: `active` (default), `dropped`, or `any`.

## Performance characteristics

- All tools use a single persistent `requests.Session` with connection pooling.
- The session has `trust_env = False` to bypass environment proxies (Prometheus is typically an internal service).
- Requests time out after 30 seconds.
- `prometheus_query_range` caps output at 5000 total points across all series — use a larger step for long windows.
- `prometheus_list_metrics` returns up to 500 metrics after filtering.

## Development

```bash
git clone https://github.com/mshegolev/prometheus-mcp
cd prometheus-mcp
pip install -e '.[dev]'
pytest tests/ -v
ruff check src tests
ruff format src tests
```

## API Specification

This project includes an OpenAPI 3.0 specification in the `specs/` directory that documents all MCP tools exposed by the server.

To validate the specification:
```bash
python3 specs/validate_spec.py
```

## Automation

This repository includes automated scripts and GitHub Actions workflows to streamline the release process:

### Scripts

- `scripts/auto-commit-push.sh` - Automatically commit and push changes with optional release trigger
- `scripts/release.sh` - Full release automation including pipeline checking, version bumping, and tagging

### GitHub Actions Workflows

- `post-push-check.yml` - Monitors test pipeline status after each push and comments on the commit
- `auto-release.yml` - Manual workflow to create releases with version bumping (patch, minor, or major)

To trigger an automated release:
1. Go to the Actions tab in GitHub
2. Select "Auto Release" workflow
3. Run the workflow with your preferred version bump type

## License

MIT — see [LICENSE](LICENSE).
