Skip to main content
Glama
README.md11.2 kB
# PMCP - Prometheus Model Context Protocol Server **🚀 A Golang-based Model Context Protocol (MCP) server implementation for Prometheus that enables natural language interactions with Prometheus metrics and queries.** **Built with Go**, PMCP provides a robust, type-safe interface that maintains full consistency with the Prometheus HTTP API, allowing you to query and manage your Prometheus instance through natural language conversations with MCP-compatible clients. --- ## Table of Contents 1. [Features](#features) 2. [Architecture](#architecture) 3. [Requirements](#requirements) 4. [Installation](#installation) 5. [Usage](#usage) * [Command Line Flags](#command-line-flags) 6. [API Compatibility](#api-compatibility) 7. [Binding Blocks](#binding-blocks) * [Tools](#tools) * [Prompts](#prompts) 8. [Contributing](#contributing) 9. [License](#license) 10. [Acknowledgments](#acknowledgments) --- ## Features * **🔥 Golang Implementation**: Built with Go 1.23+ for performance, reliability, and type safety * **📊 Complete Prometheus API Coverage**: Full compatibility with Prometheus HTTP API v1 * **⚡ Instant Query**: Execute Prometheus queries at a specific point in time * **📈 Range Query**: Retrieve historical metric data over defined time ranges * **🔍 Metadata Query**: Discover time series, label names, and label values * **🎯 Target & Rule Management**: Monitor targets, rules, and alerting configurations * **🛠️ TSDB Administration**: Advanced database operations including snapshots and series deletion * **🌐 Multiple Transport Options**: Support for HTTP, Server-Sent Events (SSE), and stdio * **🤖 MCP Integration**: Seamless communication with MCP-compatible clients like Claude Desktop --- ## Architecture PMCP is designed as a **Golang microservice** that acts as a bridge between MCP clients and Prometheus servers. It provides: * **Type-safe API bindings** using Go structs that mirror Prometheus API responses * **Modular package structure** for maintainability and extensibility * **Comprehensive error handling** with proper Go error propagation * **Clean separation of concerns** between transport, API client, and business logic --- ## Requirements * **Go 1.23.0** or higher * A running **Prometheus server** (v2.x) * Compatible MCP client (Claude Desktop, custom implementations, etc.) --- ## Installation ### Using Docker (Recommended) Pull the pre-built image from GitHub Container Registry: ```bash # Pull the latest image docker pull ghcr.io/yshngg/pmcp:latest # Run with stdio transport (for desktop clients) docker run --rm ghcr.io/yshngg/pmcp:latest --prom-addr="http://host.docker.internal:9090" # Run with HTTP transport docker run --rm -p 8080:8080 ghcr.io/yshngg/pmcp:latest --prom-addr="http://host.docker.internal:9090" --transport=http --mcp-addr="0.0.0.0:8080" ``` Alternatively, build locally: ```bash docker build -t pmcp . docker run -p 8080:8080 pmcp --prom-addr="http://prometheus:9090" --transport=http ``` ### Download Pre-built Binary Download the latest release from GitHub: 1. Go to [PMCP Releases](https://github.com/yshngg/pmcp/releases) 2. Download the appropriate binary for your platform from the **Assets** section 3. Extract and run: ```bash # Linux/macOS example tar -xzf pmcp-<version>.linux-amd64.tar.gz ./pmcp --prom-addr="http://localhost:9090" # Windows example unzip pmcp-<version>.windows-amd64.zip pmcp.exe --prom-addr="http://localhost:9090" ``` ### Building from Source ```bash git clone https://github.com/yshngg/pmcp.git cd pmcp make build # Binary will be available as ./pmcp ``` ### Using Go Install Install the `pmcp` binary directly from source: ```bash go install github.com/yshngg/pmcp@latest ``` Ensure `$GOPATH/bin` is in your `$PATH`. --- ## Usage Run the server by specifying your Prometheus address and preferred transport: ```bash # Default (stdio transport) - ideal for desktop clients pmcp --prom-addr="http://localhost:9090" # HTTP transport - for web-based integrations pmcp --prom-addr="http://localhost:9090" --transport=http --mcp-addr="localhost:8080" # SSE transport - for real-time streaming (deprecated, use HTTP) pmcp --prom-addr="http://localhost:9090" --transport=sse --mcp-addr="localhost:8080" ``` ### Command Line Flags | Flag | Description | Default | | ------------ | ------------------------------------------------- | ----------------------- | | `-help` | Show help information. | N/A | | `-mcp-addr` | Address for the MCP server to listen on. | `localhost:8080` | | `-prom-addr` | Prometheus server URL. | `http://localhost:9090` | | `-transport` | Communication transport (`stdio`, `http`, `sse`). | `stdio` | | `-version` | Print version and exit. | N/A | --- ## API Compatibility PMCP maintains **100% compatibility** with the Prometheus HTTP API v1. Every tool and endpoint corresponds directly to the official Prometheus API: ### Query & Data Retrieval | PMCP Tool | Prometheus Endpoint | HTTP Method | Purpose | |-----------|-------------------|-------------|---------| | Instant Query | `/api/v1/query` | GET/POST | Execute instant queries | | Range Query | `/api/v1/query_range` | GET/POST | Execute range queries | ### Metadata & Discovery | PMCP Tool | Prometheus Endpoint | HTTP Method | Purpose | |-----------|-------------------|-------------|---------| | Find Series by Labels | `/api/v1/series` | GET/POST | Find matching time series | | List Label Names | `/api/v1/labels` | GET/POST | List all label names | | List Label Values | `/api/v1/label/:name/values` | GET | List values for a specific label | | Target Discovery | `/api/v1/targets` | GET | Get target information | | Target Metadata Query | `/api/v1/targets/metadata` | GET | Get metadata from targets | | Metric Metadata Query | `/api/v1/metadata` | GET | Get metric metadata | ### Rules & Alerts | PMCP Tool | Prometheus Endpoint | HTTP Method | Purpose | |-----------|-------------------|-------------|---------| | Alert Query | `/api/v1/alerts` | GET | Get all active alerts | | Rule Query | `/api/v1/rules` | GET | Get recording/alerting rules | | Alertmanager Discovery | `/api/v1/alertmanagers` | GET | Get alertmanager information | ### Status & Configuration | PMCP Tool | Prometheus Endpoint | HTTP Method | Purpose | |-----------|-------------------|-------------|---------| | Config | `/api/v1/status/config` | GET | Get current configuration | | Flags | `/api/v1/status/flags` | GET | Get runtime flags | | Build Information | `/api/v1/status/buildinfo` | GET | Get build information | | Runtime Information | `/api/v1/status/runtimeinfo` | GET | Get runtime information | | TSDB Stats | `/api/v1/status/tsdb` | GET | Get TSDB statistics | | WAL Replay Stats | `/api/v1/status/walreplay` | GET | Get WAL replay status | ### TSDB Administration | PMCP Tool | Prometheus Endpoint | HTTP Method | Purpose | |-----------|-------------------|-------------|---------| | TSDB Snapshot | `/api/v1/admin/tsdb/snapshot` | POST/PUT | Create TSDB snapshot | | Delete Series | `/api/v1/admin/tsdb/delete_series` | POST/PUT | Delete time series data | | Clean Tombstones | `/api/v1/admin/tsdb/clean_tombstones` | POST/PUT | Clean deleted data | ### Management APIs | PMCP Tool | Prometheus Endpoint | HTTP Method | Purpose | |-----------|-------------------|-------------|---------| | Health Check | `/-/healthy` | GET/HEAD | Check Prometheus health | | Readiness Check | `/-/ready` | GET/HEAD | Check if ready to serve | | Reload | `/-/reload` | PUT/POST | Reload configuration | | Quit | `/-/quit` | PUT/POST | Graceful shutdown | **All query parameters, response formats, and error codes match the official Prometheus API specification.** --- ## Binding Blocks ### Tools **Expression Queries** (Core Prometheus functionality): * **Instant Query**: Evaluate an instant query at a single point in time * **Range Query**: Evaluate an expression query over a range of time **Metadata Queries** (Series and label discovery): * **Find Series by Labels**: Return the list of time series that match a certain label set * **List Label Names**: Return a list of label names * **List Label Values**: Return a list of label values for a provided label name * **Target Metadata Query**: Return metadata about metrics currently scraped from targets * **Metric Metadata Query**: Return metadata about metrics currently scraped from targets (without target information) **Discovery & Monitoring**: * **Target Discovery**: Return an overview of the current state of the Prometheus target discovery * **Alert Query**: Return a list of all active alerts * **Rule Query**: Return a list of alerting and recording rules that are currently loaded * **Alertmanager Discovery**: Return an overview of the current state of the Prometheus alertmanager discovery **Status & Configuration**: * **Config**: Return currently loaded configuration file * **Flags**: Return flag values that Prometheus was configured with * **Runtime Information**: Return various runtime information properties about the Prometheus server * **Build Information**: Return various build information properties about the Prometheus server * **TSDB Stats**: Return various cardinality statistics about the Prometheus TSDB * **WAL Replay Stats**: Return information about the WAL replay **TSDB Admin APIs** (Advanced operations): * **TSDB Snapshot**: Create a snapshot of all current data into snapshots/`<datetime>`-`<rand>` * **Delete Series**: Delete data for a selection of series in a time range * **Clean Tombstones**: Remove the deleted data from disk and cleans up the existing tombstones **Management APIs**: * **Health Check**: Check Prometheus health * **Readiness Check**: Check if Prometheus is ready to serve traffic (i.e. respond to queries) * **Reload**: Trigger a reload of the Prometheus configuration and rule files * **Quit**: Trigger a graceful shutdown of Prometheus ### Prompts * **All Available Metrics**: Return a list of every metric exposed by the Prometheus instance --- ## Contributing Contributions are welcome! This is a **Golang project**, so please ensure: * Follow Go best practices and conventions * Add appropriate tests for new functionality * Maintain API compatibility with Prometheus * Update documentation as needed Please submit a pull request or open an issue to discuss improvements. ### Development Setup ```bash git clone https://github.com/yshngg/pmcp.git cd pmcp go mod download make build ``` --- ## License This project is licensed under the Apache License 2.0. See the [LICENSE](LICENSE) file for details. --- ## Acknowledgments * **Built with Go** using the official [Prometheus Go client library](https://github.com/prometheus/client_golang) * Powered by [Model Context Protocol Go SDK](https://github.com/modelcontextprotocol/go-sdk) * Inspired by [Prometheus](https://prometheus.io/) - the de facto standard for monitoring and alerting

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/yshngg/pmcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server