pyroscope-mcp
Provides tools to query continuous profiling data from Grafana Pyroscope, including flamegraphs, hotspot functions, memory allocations, and label discovery.
Click on "Install 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., "@pyroscope-mcpShow the hottest CPU functions for api-gateway in the last 30 minutes"
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.
pyroscope-mcp
A read-only Model Context Protocol (MCP) server for Grafana Pyroscope. Lets AI assistants query continuous profiling data — flamegraphs, hotspot functions, memory allocations, label discovery — directly from any MCP-compatible client.
Note: This server is query-only. Profile ingestion is expected to be handled by your application profilers (Pyroscope SDKs, agents, or exporters).
Tools
Tool | Description |
| Flamegraph + timeline data from |
| List all label names in a time range |
| List values for a given label (e.g. |
| List available profile types (cpu, memory, goroutines…) |
| Fetch matching label sets for a selector |
| Raw access to any |
Related MCP server: Polar Signals Remote MCP
Prerequisites
Node.js 20+
A running Pyroscope instance (local, self-hosted, or Grafana Cloud)
Setup
git clone https://github.com/your-org/pyroscope-mcp
cd pyroscope-mcp
npm install
npm run buildConfiguration
All settings are provided via environment variables:
Variable | Default | Description |
|
| Pyroscope server URL |
| — | Bearer token (Grafana Cloud or Azure AD) |
| — | Multi-tenant org ID ( |
|
| Request timeout in milliseconds |
Copy .env.example to .env and fill in your values:
cp .env.example .envAdding to MCP Clients
VS Code (GitHub Copilot)
Create or edit .vscode/mcp.json in your workspace:
{
"servers": {
"pyroscope": {
"type": "stdio",
"command": "node",
"args": ["${workspaceFolder}/dist/index.js"],
"env": {
"PYROSCOPE_BASE_URL": "http://localhost:4040"
}
}
}
}Then open the MCP: List Servers command in VS Code (Cmd+Shift+P) and start the server. Copilot Chat will automatically discover the tools.
For a global (user-level) config instead of per-workspace, add the same block to your VS Code settings.json under "mcp":
{
"mcp": {
"servers": {
"pyroscope": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/pyroscope-mcp/dist/index.js"],
"env": {
"PYROSCOPE_BASE_URL": "http://localhost:4040"
}
}
}
}
}Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"pyroscope": {
"command": "node",
"args": ["/absolute/path/to/pyroscope-mcp/dist/index.js"],
"env": {
"PYROSCOPE_BASE_URL": "http://localhost:4040",
"PYROSCOPE_AUTH_TOKEN": ""
}
}
}
}Restart Claude Desktop. A hammer icon will appear in the chat input when the server is active.
On Windows, wrap the command:
{
"mcpServers": {
"pyroscope": {
"command": "cmd",
"args": ["/c", "node", "C:\\path\\to\\pyroscope-mcp\\dist\\index.js"],
"env": {
"PYROSCOPE_BASE_URL": "http://localhost:4040"
}
}
}
}Cursor
Open Cursor Settings → MCP and add a new server entry, or edit ~/.cursor/mcp.json:
{
"mcpServers": {
"pyroscope": {
"command": "node",
"args": ["/absolute/path/to/pyroscope-mcp/dist/index.js"],
"env": {
"PYROSCOPE_BASE_URL": "http://localhost:4040"
}
}
}
}Reload Cursor. The tools appear automatically in the Composer agent context.
Zed
Add to your Zed settings.json (open via Zed → Settings):
{
"context_servers": {
"pyroscope": {
"command": {
"path": "node",
"args": ["/absolute/path/to/pyroscope-mcp/dist/index.js"],
"env": {
"PYROSCOPE_BASE_URL": "http://localhost:4040"
}
}
}
}
}Any MCP-compatible client (generic stdio config)
{
"mcpServers": {
"pyroscope": {
"command": "node",
"args": ["/absolute/path/to/pyroscope-mcp/dist/index.js"],
"env": {
"PYROSCOPE_BASE_URL": "http://localhost:4040",
"PYROSCOPE_AUTH_TOKEN": "your-bearer-token-if-needed",
"PYROSCOPE_TENANT_ID": "your-org-id-if-needed"
}
}
}
}Example prompts once connected
"List all services sending profiles in the last hour."
"Show the hottest CPU functions for
media-agentin the last 30 minutes.""What is the memory allocation hotspot in
api-gateway?""Compare CPU usage between
worker-serviceanddata-pipeline.""What profile types are available for
checkout-api?"
Notes
For multi-tenant Pyroscope, set
PYROSCOPE_TENANT_IDor passtenantIdper tool call.pyroscope_connect_querygives raw access to advanced endpoints:/querier.v1.QuerierService/SelectMergeStacktraces/querier.v1.QuerierService/SelectSeries/querier.v1.QuerierService/Diff
For Grafana Cloud Pyroscope, set
PYROSCOPE_BASE_URLto your stack URL andPYROSCOPE_AUTH_TOKENto a service account token.
Query smoke test
Start Pyroscope locally:
docker run -d --name pyroscope -p 4040:4040 grafana/pyroscope:latestQuery label names from the last hour:
NOW_MS=$(($(date +%s)*1000))
START_MS=$((NOW_MS-3600000))
curl -sS -H 'Content-Type: application/json' \
-d "{\"start\":$START_MS,\"end\":$NOW_MS}" \
http://localhost:4040/querier.v1.QuerierService/LabelNamesQuery service names from the last hour:
NOW_MS=$(($(date +%s)*1000))
START_MS=$((NOW_MS-3600000))
curl -sS -H 'Content-Type: application/json' \
-d "{\"name\":\"service_name\",\"start\":$START_MS,\"end\":$NOW_MS}" \
http://localhost:4040/querier.v1.QuerierService/LabelValuesMaintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/mahigadamsetty/pyroscope-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server