Prometheus
STDIO查询Prometheus的MCP服务器
查询Prometheus的MCP服务器
Query Prometheus from the CLI or any MCP client
Discovery helpers, retries, caching, and an optional metrics exporter.
| Cursor | VS Code | 
|---|---|
--network host and http://localhost:9090 in your config.A minimal Model Context Protocol (MCP) server focused on reading from Prometheus. It exposes Prometheus discovery and query tools to MCP-compatible apps and includes a convenient CLI for local queries.
Highlights
Images are published to both Docker Hub and GHCR:
brenoepics/prometheus-mcpghcr.io/brenoepics/prometheus-mcpPick your preferred install method.
prometheus-mcp binary):cargo install prometheus-mcp prometheus-mcp --help
Prebuilt binaries (GitHub Releases):
Docker (pull from Docker Hub or GHCR):
# Docker Hub docker pull brenoepics/prometheus-mcp:latest # or GHCR docker pull ghcr.io/brenoepics/prometheus-mcp:latest # Run the MCP server against a local Prometheus (pick one image) docker run --rm -it brenoepics/prometheus-mcp:latest --mcp \ --prometheus-url http://host.docker.internal:9090
Build from source (Rust):
cargo build --release # binary at ./target/release/prometheus-mcp
Or build a Docker image locally:
docker build -t prometheus-mcp:latest .
The CLI mirrors the tools exposed over MCP.
prometheus-mcp query --query 'up' --prometheus-url http://localhost:9090 # optionally set an evaluation time prometheus-mcp query --query 'up' --time '2025-09-27T12:00:00Z'
prometheus-mcp range --query 'rate(http_requests_total[5m])' \ --start '2025-09-27T12:00:00Z' --end '2025-09-27T13:00:00Z' --step '30s'
prometheus-mcp list-metrics
prometheus-mcp metadata --metric 'up'
prometheus-mcp series --selector 'up' --selector 'node_cpu_seconds_total{mode="idle"}'
prometheus-mcp label-values --label 'job'
Start the MCP server over stdio:
prometheus-mcp --mcp --prometheus-url http://localhost:9090
Optional: enable internal metrics at /metrics (default off):
prometheus-mcp --mcp --metrics-exporter --metrics-port 9091
Use the published image from Docker Hub (or GHCR alternative shown):
# Start the MCP server (macOS/Windows: host.docker.internal works; Linux see alternatives below) docker run --rm -it brenoepics/prometheus-mcp:latest --mcp \ --prometheus-url http://host.docker.internal:9090
Linux alternatives when Prometheus runs on the host:
# Use host networking (Linux only) docker run --rm -it --network host brenoepics/prometheus-mcp:latest --mcp \ --prometheus-url http://localhost:9090 # Without host network: map host gateway and use host.docker.internal docker run --rm -it --add-host=host.docker.internal:host-gateway \ brenoepics/prometheus-mcp:latest --mcp \ --prometheus-url http://host.docker.internal:9090
One-off CLI in the container:
# Instant query docker run --rm brenoepics/prometheus-mcp:latest query --query 'up' \ --prometheus-url http://host.docker.internal:9090 # Range query docker run --rm brenoepics/prometheus-mcp:latest range --query 'rate(http_requests_total[5m])' \ --start '2025-09-27T12:00:00Z' --end '2025-09-27T13:00:00Z' --step '30s' \ --prometheus-url http://host.docker.internal:9090
Pass credentials via environment variables or CLI flags.
export PROMETHEUS_URL=https://prom.example.com export PROMETHEUS_USERNAME=api export PROMETHEUS_PASSWORD=secret prometheus-mcp --mcp
prometheus-mcp --mcp \ --prometheus-url https://prom.example.com \ --prometheus-username api \ --prometheus-password secret
docker run --rm -it \ -e PROMETHEUS_URL=https://prom.example.com \ -e PROMETHEUS_USERNAME=api \ -e PROMETHEUS_PASSWORD=secret \ brenoepics/prometheus-mcp:latest --mcp
All settings can be provided via environment variables; some also via flags.
| Name | Type | Default | CLI flag | Description | 
|---|---|---|---|---|
| PROMETHEUS_URL | string (URL) | http://localhost:9090 | --prometheus-url | Base URL of your Prometheus server | 
| PROMETHEUS_TIMEOUT | integer (seconds) | 10 | — | HTTP request timeout | 
| PROMETHEUS_RETRIES | integer | 3 | — | Number of retries for Prometheus API calls | 
| PROMETHEUS_RETRY_BACKOFF_MS | integer (ms) | 500 | — | Time to wait between retries | 
| PROMETHEUS_MIN_INTERVAL_MS | integer (ms) | — | — | Minimum interval between query requests (basic rate limit) | 
| PROMETHEUS_CACHE_TTL_SECS | integer (seconds) | — | — | TTL for simple in-process caches (list metrics and label values) | 
| PROMETHEUS_USERNAME | string | — | --prometheus-username | Basic auth username | 
| PROMETHEUS_PASSWORD | string | — | --prometheus-password | Basic auth password | 
| — | boolean | false | --mcp | Start MCP server over stdio | 
| — | boolean | false | --metrics-exporter | Enable internal Prometheus metrics at /metrics | 
| — | integer (port) | 9091 | --metrics-port | Port for /metrics when exporter is enabled | 
See docs/configuration.md for notes and examples.
Follow the official guide to locate claude_desktop_config.json:
https://modelcontextprotocol.io/quickstart/user#for-claude-desktop-users
Minimal Docker-based entry:
{ "mcpServers": { "prometheus": { "command": "docker", "args": ["run", "--rm", "-i", "brenoepics/prometheus-mcp:latest"] } } }
With host Prometheus and exporter (macOS/Windows):
{ "mcpServers": { "prometheus": { "command": "docker", "args": [ "run", "--rm", "-i", "-p", "9091:9091", "brenoepics/prometheus-mcp:latest", "--mcp", "--prometheus-url", "http://host.docker.internal:9090", "--metrics-exporter", "--metrics-port", "9091" ] } } }
With Basic Auth via environment variables:
{ "mcpServers": { "prometheus": { "command": "docker", "args": [ "run", "--rm", "-i", "-e", "PROMETHEUS_URL=https://prom.example.com", "-e", "PROMETHEUS_USERNAME=api", "-e", "PROMETHEUS_PASSWORD=secret", "brenoepics/prometheus-mcp:latest", "--mcp" ] } } }
More examples: see docs/claude-desktop.md.
Use the MCP Inspector to exercise the server interactively:
npx @modelcontextprotocol/inspector
Connect with transport "STDIO", command prometheus-mcp, and optional args --mcp --prometheus-url http://localhost:9090.
Logs are appended to /tmp/mcp.jsonl; tail it with:
tail -f /tmp/mcp.jsonl
Apache-2.0