MCP server for querying and analyzing Prometheus metrics to help identify performance issues and bugs in codebases
Prometheus MCP demonstrates solid definition quality with well-structured tool definitions, comprehensive parameter schemas, and actionable descriptions. All 8 tools are explicitly registered with detailed input schemas using Pydantic models. Most tools include response_format enum parameters enabling format choice. Error handling is production-grade with context-aware messages. However, output schemas are not explicitly documented in the code, and some parameter descriptions could be more concise and LLM-optimized (several exceed recommended 200 char length). Tool naming follows verb_noun convention appropriately. No critical security issues detected for this read-only API-focused server.
Query label names or the values of a specific label from Prometheus.
List all available metric names known to Prometheus, optionally filtered by a substring.
Retrieve metadata (type and help text) for metrics from Prometheus.
Retrieve information about the Prometheus server, including version, build info, runtime stats, and TSDB status.
Run an instant PromQL query against Prometheus and get the current metric values at a specific time.
Show common PromQL queries and usage tips to help learn Prometheus query syntax.
Query Prometheus over a time range and return metric data points at regular intervals (a time series).
Output schemas not explicitly documented in code. While tool descriptions state return formats (markdown/json), the actual response structure, field names, and types are not declared in the tool registration. This forces LLMs to infer output structure and risks incorrect field extraction or chaining.
Some parameter descriptions exceed 200 characters and include verbose explanation, reducing LLM efficiency. Example: query_range 'step' parameter description is 198 chars with rule-of-thumb guidance that could be condensed. Descriptions should be 50-200 chars for optimal token efficiency.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. While all tools are clearly read-only operations, explicit tool annotations per MCP 2026-07-28 spec would enable better client-side UI/UX rendering and prevent agents from attempting writes.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 62 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Find all unique time series matching one or more selectors in Prometheus, returning their label sets.
Error handling returns human-readable text strings rather than structured error objects with codes and recovery guidance. While the _handle_error() function produces helpful contextual messages, they could be wrapped in a structured format (error_code, error_message, recovery_hint) to enable programmatic error handling and retry logic.
Parameter descriptions for 'time', 'start', 'end' note RFC3339 and Unix timestamp formats but include comment '(relative not supported, use Unix)' for query_range. This reads as a limitation description rather than actionable constraint. Could be clearer: 'Unix timestamps or RFC3339 strings only; relative formats like "now-1h" are not supported.'