PMM MCP Server
Provides validated read-only SELECT access to PMM Query Analytics data stored in ClickHouse, with row and time-window limits.
Provides read-only access to MongoDB monitoring metrics through PromQL and Query Analytics via PMM, including slow queries and query details.
Provides read-only access to MySQL monitoring metrics through PromQL and Query Analytics via PMM, including slow queries, per-service load, and query distribution.
Provides read-only access to PostgreSQL monitoring metrics through PromQL and Query Analytics via PMM, including slow queries and query details.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@PMM MCP ServerShow me the slowest queries across all monitored databases"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
PMM MCP Server
A community-maintained Model Context Protocol server for Percona Monitoring and Management (PMM 2.x). It gives Claude and other MCP clients read-only access to MySQL, MongoDB and PostgreSQL metrics (PromQL) and Query Analytics (slowest queries, query details, ClickHouse SQL).
This is not an official Percona or Anthropic product.
โจ Features
Read-only by design: works with a Grafana Viewer token; the server never writes to PMM
Metrics: instant and range PromQL queries plus label discovery
Query Analytics (QAN): top queries, per-service load, single-query details and distribution over time
Safe SQL: free-form
SELECTagainst QAN's ClickHouse, strictly validated and cappedTLS verified by default, with custom CA bundle support
Cross-platform: Linux, macOS and Windows, with one-command installers
Related MCP server: mcp-read-only-sql
๐ Installation
Requirements
Python 3.11+ and
uvNetwork access to your PMM server (VPN if needed)
A PMM Grafana token: Administration โ Service accounts โ role Viewer โ Add token
Linux / macOS
git clone https://github.com/hakkiburakalks/pmm-mcp && cd pmm-mcp && ./install.shWindows (PowerShell)
git clone https://github.com/hakkiburakalks/pmm-mcp; cd pmm-mcp; powershell -ExecutionPolicy Bypass -File .\install.ps1The installer asks for your PMM URL and token, stores them in ~/.config/mcp/pmm.env (owner-only access) and registers the server with Claude Code under the name pmm. If claude is not installed, it prints the JSON snippet for Claude Desktop instead.
๐ฏ Quick Start
Claude Desktop / any MCP client
The server is a plain stdio MCP server. Run it with:
uv run --env-file /path/to/pmm.env --directory /path/to/pmm-mcp server.pyand register that command in your client, for example in claude_desktop_config.json:
{
"mcpServers": {
"pmm": {
"command": "uv",
"args": [
"run", "--quiet",
"--env-file", "C:\\Users\\you\\.config\\mcp\\pmm.env",
"--directory", "C:\\path\\to\\pmm-mcp",
"server.py"
]
}
}
}Use the full path to uv as command if your client does not inherit your PATH.
On macOS the config file is ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"pmm": {
"command": "/opt/homebrew/bin/uv",
"args": [
"run", "--quiet",
"--env-file", "/Users/you/.config/mcp/pmm.env",
"--directory", "/Users/you/pmm-mcp",
"server.py"
]
}
}
}Desktop apps don't inherit your shell PATH, so give the full path to uv (check with which uv; typically /opt/homebrew/bin/uv on Apple Silicon, /usr/local/bin/uv on Intel, ~/.local/bin/uv expanded to an absolute path if installed via the curl script). install.sh prints this snippet for you.
Claude Code
claude mcp add pmm -- uv run --quiet --env-file ~/.config/mcp/pmm.env --directory /path/to/pmm-mcp server.py๐ง Configuration
Set these environment variables (see pmm.env.example):
Variable | Required | Description |
| โ | PMM server URL |
| โ | Grafana service-account token, Viewer role |
| TLS verification, default | |
| Path to a custom CA bundle (preferred over disabling verification) | |
| HTTP timeout in seconds, default | |
| Grafana metrics datasource UID, only if it differs from PMM's default | |
| Grafana ClickHouse datasource UID, only if it differs from PMM's default |
๐ ๏ธ Available Tools
Inventory
Tool | Description |
| Monitored databases and their status |
Query Analytics
Tool | Description |
| How much query time each database spends |
| Heaviest queries |
| A single query's example and its distribution over time |
| Free-form, validated |
Metrics
Tool | Description |
| Instant PromQL query |
| Range PromQL query |
| List values of a metric label |
๐ฌ Example Queries
Overview
"Which databases does PMM monitor, and are they all healthy?"
"Which service spends the most time running queries?"
Query Analytics
"Show the 10 slowest queries on the production MySQL service"
"Give me the details and time distribution of this query ID"
Metrics
"What is the connection count on
db-prod-1over the last 6 hours?""Compare InnoDB buffer pool hit ratio across all MySQL nodes"
๐ Security
Use a Viewer token; the server never writes to PMM.
TLS certificates are verified by default.
pmm_qan_sqlaccepts only a single plainSELECT/WITH. Comments, quoted identifiers,SETTINGS/FORMAT/INTO, table functions (url,file,remote, ...) and system tables are rejected. Row counts and time windows are capped.Tool inputs (labels, service types, limits, time windows) are validated before being used in a query.
The token lives in
~/.config/mcp/pmm.env, created with owner-only permissions. Never commit it.
See SECURITY.md to report a vulnerability.
๐ Troubleshooting
Symptom | What to check |
Server not listed in the client | Use the full path to |
| Token is invalid, expired, or not a Grafana service-account token |
TLS / certificate errors | Set |
Timeouts | Check VPN/network access, or raise |
Datasource not found | Set |
๐ Debugging
Launch the server in the MCP Inspector:
npx @modelcontextprotocol/inspector uv run --env-file /path/to/pmm.env --directory /path/to/pmm-mcp server.py๐งช Development
uv sync --extra dev
uv run pytest๐ Notes
PMM's
/v1API rejects Viewer tokens, so everything goes through the Grafana datasource proxy.The same queryid can appear in several services; group by service when aggregating.
In MySQL QAN the
max_ms/p99fields are 0 (a perfschema limitation).
๐ License
MIT: free for anyone to use, modify and distribute, including commercially.
This server cannot be deployed
Maintenance
Related MCP Connectors
Read-only access to a Lumin project's logs, metrics, uptime checks, alerts and infrastructure.
Read-only MCP access to sessions, funnels, campaigns, errors, live visitors, and anomalies.
Read-only access to your Infrly services, deploys, logs, metrics and billing.
Provides read access to your GKE and Kubernetes resources.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables read-only MySQL database access, allowing listing databases, tables, describing schemas, and executing SELECT/SHOW/DESCRIBE/EXPLAIN queries.753 npm4MIT
- AlicenseNot gradedqualityBmaintenanceProvides secure read-only SQL access to PostgreSQL and ClickHouse databases with built-in safety features like read-only enforcement, timeouts, and managed result files.67 PyPIMIT
- AlicenseNot gradedqualityDmaintenanceEnables safe, read-only querying of PostgreSQL databases with defense-in-depth protections including single-statement SELECT guard, row caps, and per-identity audit logging.1MIT
- AlicenseNot gradedqualityBmaintenanceGives AI agents read-only access to any QuestDB instance, enabling schema discovery, time-series querying, and monitoring of partitions, WAL state, symbols, and ingestion health through MCP.Apache 2.0