The label and metric listing tools are why this is more than a query proxy: a model that cannot see your metric names and label values writes PromQL that returns an empty result set with no error to explain it. Everything is read-only and the three groups toggle independently, so giving an agent discovery without the ability to run expensive range queries is a supported configuration.
A Prometheus server exposing read-only tools in three groups: discovery of what exists, information about the server itself, and query execution.
- Discovery: prometheus_list_metrics for every metric name, prometheus_metric_metadata for one metric's metadata, prometheus_list_labels and prometheus_label_values for the label schema
- Targets: prometheus_list_targets for every scrape target, prometheus_scrape_pool_targets for the targets in one pool
- Queries: prometheus_query for an instant query, prometheus_query_range for a range with a start, an end and a resolution step
- Server information: prometheus_runtime_info and prometheus_build_info
- Each group can be switched off independently, so a deployment can expose discovery without queries or the reverse
- Every tool is marked read-only
Node, and network access to a Prometheus server whose address you configure. It runs over stdio or HTTP, and a container image is published. It carries no credentials of its own — whatever protects your Prometheus still applies.
One command — npx prometheus-mcp@latest stdio
