Token导航 LogoToken导航TokenDH.com
Pprof Analyzer MCP logo
开发工具stdio官方级别未说明来源级核验

Pprof Analyzer MCP

MCP Server

This is a Model Context Protocol (MCP) server implemented in Go, providing a tool to analyze Go pprof performance profiles.

工具数

5

提示词数

0

GitHub Stars

50

资源数

0
性能分析GoClineClineVS Code

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

ZephyrDeng

提供方

ZephyrDeng

最后核验

2026/5/18 04:05

运行时

Docker

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

docker run -i --rm pprof-analyzer-mcp

详细介绍

简体中文 |英语

Pprof分析仪MCP服务器

](https://smithery.ai/server/@ZephyrDeng/pprof-analyzer-mcp) ![](https://badge.mcpx.dev?type=server&features=tools "MCP server with tools") ![Build Status](https://github.com/ZephyrDeng/pprof-analyzer-mcp/actions) ![License](<>) ](https://golang.org) ![GoDoc](https://pkg.go.dev/github.com/ZephyrDeng/pprof-analyzer-mcp)

这是一个在Go中实现的模型上下文协议(MCP)服务器,提供了一个分析Go性能配置文件的工具。与官方合作建造 模型上下文协议Go SDK.

特性

  • analyze_pprof 工具:

- 分析指定的Go-prof文件并返回序列化分析结果(例如,Top N列表或JSON火焰图)。 - 支持的配置文件类型: - cpu:分析代码执行期间的CPU时间消耗,以找到热点。 - heap:分析当前内存使用情况(堆分配),以找到内存消耗高的对象和函数。通过对象计数、分配站点和类型信息进行了增强。 - goroutine:显示所有当前goroutine的堆栈跟踪,用于诊断死锁、泄漏或过度使用goroutine。 - allocs:分析程序执行过程中的内存分配(包括释放的内存),以定位频繁分配的代码。提供详细的分配站点和对象计数信息。 - mutex:分析互斥体上的争用,以查找导致阻塞的锁。提供详细的统计数据,包括争用计数、延迟时间和百分比。 - block:分析导致goroutine阻塞的操作(例如,通道等待、系统调用)。提供全面的阻塞统计数据和平均延迟计算。 - 支持的输出格式: text, markdown, json (前N个列表), flamegraph-json (分层火焰图数据,默认)。 - text, markdown:人类可读的文本或Markdown格式。 - json:以结构化JSON格式输出前N个结果(为 cpu, heap, goroutine, allocs, mutex, block). - flamegraph-json:以JSON格式输出分层火焰图数据,与d3火焰图兼容(实现用于 cpu, heap, allocs,默认格式)。输出紧凑。 - 前N个结果的可配置数量(top_n,默认为5,有效期为 text, markdown, json 格式)。

  • generate_flamegraph 工具:

- 用途 go tool pprof 为指定的pprf文件生成火焰图(SVG格式),将其保存到指定路径,并返回路径和SVG内容。 - 支持的配置文件类型: cpu, heap, allocs, goroutine, mutex, block. - 要求用户指定输出SVG文件路径。 - 重要提示: 此功能取决于 Graphviz 正在安装。

  • open_interactive_pprof 工具(仅限macOS):

- 尝试发射 go tool pprof 指定pprf文件的后台交互式web UI。使用端口 :8081 默认情况下,如果 http_address 未提供。 - 返回后台的进程ID(PID) pprof 成功启动后的流程。 - 仅限macOS: 此工具仅适用于macOS。 - 依赖关系: 需要 go 命令在系统的PATH中可用。 - 限制: 背景错误 pprof 进程不会被服务器捕获。从远程URL下载的临时文件在进程终止之前不会自动清理(可以通过手动方式 disconnect_pprof_session 或者当MCP服务器退出时)。

  • detect_memory_leaks 工具:

- 比较两个堆配置文件快照以识别潜在的内存泄漏。 - 按对象类型和分配位置分析内存增长。 - 提供有关内存增长的详细统计信息,包括绝对值和百分比变化。 - 可配置的增长阈值和结果限制。 - 通过比较在不同时间点获取的配置文件来帮助识别内存泄漏。

  • disconnect_pprof_session 工具:

- 尝试终止后台 pprof 之前启动的进程 open_interactive_pprof,使用其PID。 - 首先发送中断信号,如果中断失败,则发送终止信号。

  • compare_profiles 工具:

- 比较两个配置文件(例如,基线与目标),以确定性能回归或改进。 - 支持所有配置文件类型(cpu、堆、allocs、互斥、块)。 - 提供详细的差异统计数据,包括改进/回归函数、添加/删除函数。 - 视觉指示器:🔴 回归,🟢 改进,🆕 补充,❌ 远离的。 - 支持文本、markdown和JSON输出格式。

  • analyze_heap_time_series 工具:

- 随着时间的推移分析多个堆配置文件,以确定内存增长趋势和潜在泄漏。 - 需要按时间顺序提供至少3个堆配置文件。 - 计算增长率(字节数、百分比、MB/分钟)。 - 使用方向指示器识别趋势对象类型(📈 增加的,📉 减少,➡️ 稳定)。 - 支持每个时间点的自定义标签或自动生成默认标签。 - 支持文本、markdown和JSON输出格式。

安装(作为库/工具)

您可以使用直接安装此软件包 go install:

go install github.com/ZephyrDeng/pprof-analyzer-mcp@latest

这将安装 pprof-analyzer-mcp 可执行到您的 $GOPATH/bin$HOME/go/bin 目录。确保此目录位于系统的PATH中,以便直接运行该命令。

从源头构建

确保您安装了Go环境(建议使用Go 1.18或更高版本)。

在项目根目录中(pprof-analyzer-mcp),运行:

go build

这将生成一个名为的可执行文件 pprof-analyzer-mcp (或 pprof-analyzer-mcp.exe 在Windows上)在当前目录中。

使用 go install (推荐)

您还可以使用 go install 将可执行文件安装到您的 $GOPATH/bin$HOME/go/bin 目录。这可以让你跑步 pprof-analyzer-mcp 直接从命令行(如果目录已添加到系统的PATH环境变量中)。

# Installs the executable using the module path defined in go.mod
go install .
# Or directly using the GitHub path (recommended after publishing)
# go install github.com/ZephyrDeng/pprof-analyzer-mcp@latest

使用Docker运行

使用Docker是运行服务器的一种便捷方式,因为它捆绑了必要的Graphviz依赖关系。

  1. 构建Docker镜像:

在项目根目录中( Dockerfile 位于),运行:

   docker build -t pprof-analyzer-mcp .
  1. 运行Docker容器:
   docker run -i --rm pprof-analyzer-mcp

- 这 -i 标志保持STDIN打开,这是此MCP服务器使用的stdio传输所必需的。 - 这 --rm 当容器退出时,标志会自动移除容器。

  1. 为Docker配置MCP客户端:

要将您的MCP客户端(如Roo-Cline)连接到在Docker中运行的服务器,请更新您的 .roo/mcp.json:

   {
     "mcpServers": {
       "pprof-analyzer-docker": {
         "command": "docker run -i --rm pprof-analyzer-mcp"
       }
     }
   }

确保 pprof-analyzer-mcp 在客户端尝试运行此命令之前,映像已在本地构建。

发布(通过GitHub操作自动完成)

此项目使用 GoRelease 以及GitHub Actions,以自动化发布过程。当Git标签与模式匹配时,会自动触发发布 v* (例如。, v0.1.0, v1.2.3)被推送到存储库。

预发布检查表:

在创建发布标签之前,请确保:

  • ✅ 所有测试均通过: go test ./...
  • ✅ 代码编译成功: go build
  • ✅ 文档是最新的(README、CHANGELOG等)
  • ✅ 提交消息如下 约定式提交 格式

释放步骤:

  1. 进行更改: 开发新功能或修复错误。
  2. 提交更改: 使用提交更改 约定式提交 格式(例如。, feat: ..., fix: ..., docs: ...).这对于自动生成变更日志非常重要。
   git add .
   git commit -m "feat: Add awesome new feature"
   # or
   git commit -m "fix: Resolve issue #42"
   # or
   git commit -m "docs: Update README for new feature"
  1. 推送更改: 将您的提交推送到GitHub上的主分支。
   git push origin main
  1. 运行预发布测试: (可选)在标记之前在本地运行测试:
   go test ./... -v
   go build -v
  1. 创建并推送标签: 准备发布时,创建一个新的Git标签并将其推送到GitHub。
   # Example: Create tag v0.2.0
   git tag v0.2.0

   # Push the tag to GitHub
   git push origin v0.2.0
  1. 自动释放: 按下标签将触发 GoReleaser GitHub操作定义于 .github/workflows/release.yml。此操作将:

- 为Linux、macOS和Windows(amd64和arm64)构建二进制文件。 - 根据自上次标记以来的常规提交生成更改日志。 - 使用变更日志创建一个新的GitHub版本,并将构建的二进制文件和校验和作为资产附加。

监控发布:

您可以在GitHub存储库的“操作”选项卡中查看发布工作流进度。一旦完成,该版本将在以下网址发布:

https://github.com/ZephyrDeng/pprof-analyzer-mcp/releases

配置MCP客户端

此服务器使用 stdio 传输协议。您需要在MCP客户端中配置它(例如,用于VS Code的Roo-Cline扩展)。

通常,这涉及将以下配置添加到 .roo/mcp.json 项目根目录中的文件:

{
  "mcpServers": {
    "pprof-analyzer": {
      "command": "pprof-analyzer-mcp"
    }
  }
}

注: 调整 command 基于构建方法的值(go buildgo install)以及可执行文件的实际位置。确保MCP客户端可以找到并执行此命令。

配置后,重新加载或重新启动MCP客户端,它应该会自动连接到 PprofAnalyzer 服务器。

依赖项

  • Graphviz:The generate_flamegraph 该工具需要Graphviz来生成SVG火焰图( go tool pprof 命令调用 dot 生成SVG时)。确保Graphviz已安装在您的系统上 dot 命令在系统的PATH环境变量中可用。

安装Graphviz:

- macOS(使用Homebrew):

    brew install graphviz

- Debian/Ubuntu:

    sudo apt-get update && sudo apt-get install graphviz

- CentOS/Fedora:

    sudo yum install graphviz
    # or
    sudo dnf install graphviz

- Windows(使用巧克力):

    choco install graphviz

- 其他系统: 请参阅 Graphviz官方下载页面.

使用示例(通过MCP客户端)

服务器连接后,您可以调用 analyze_pprofgenerate_flamegraph 工具使用 file://, http://,或 https:// 配置文件的URI。

示例:分析CPU配置文件(文本格式,前5名)

{
  "tool_name": "analyze_pprof",
  "arguments": {
    "profile_uri": "file:///path/to/your/cpu.pprof",
    "profile_type": "cpu"
  }
}

示例:分析堆配置文件(Markdown格式,前10名)

{
  "tool_name": "analyze_pprof",
  "arguments": {
    "profile_uri": "file:///path/to/your/heap.pprof",
    "profile_type": "heap",
    "top_n": 10,
    "output_format": "markdown"
  }
}

示例:分析Goroutine配置文件(文本格式,前5名)

{
  "tool_name": "analyze_pprof",
  "arguments": {
    "profile_uri": "file:///path/to/your/goroutine.pprof",
    "profile_type": "goroutine"
  }
}

示例:为CPU配置文件生成火焰图

{
  "tool_name": "generate_flamegraph",
  "arguments": {
    "profile_uri": "file:///path/to/your/cpu.pprof",
    "profile_type": "cpu",
    "output_svg_path": "/path/to/save/cpu_flamegraph.svg"
  }
}

示例:为堆配置文件生成火焰图(inuse_space)

{
  "tool_name": "generate_flamegraph",
  "arguments": {
    "profile_uri": "file:///path/to/your/heap.pprof",
    "profile_type": "heap",
    "output_svg_path": "/path/to/save/heap_flamegraph.svg"
  }
}

示例:分析CPU配置文件(JSON格式,前3名)

{
  "tool_name": "analyze_pprof",
  "arguments": {
    "profile_uri": "file:///path/to/your/cpu.pprof",
    "profile_type": "cpu",
    "top_n": 3,
    "output_format": "json"
  }
}

示例:分析CPU配置文件(默认火焰图JSON格式)

{
  "tool_name": "analyze_pprof",
  "arguments": {
    "profile_uri": "file:///path/to/your/cpu.pprof",
    "profile_type": "cpu"
    // output_format defaults to "flamegraph-json"
  }
}

示例:分析堆配置文件(显式火焰图JSON格式)

{
  "tool_name": "analyze_pprof",
  "arguments": {
    "profile_uri": "file:///path/to/your/heap.pprof",
    "profile_type": "heap",
    "output_format": "flamegraph-json"
  }
}

示例:分析远程CPU配置文件(来自HTTP URL)

{
  "tool_name": "analyze_pprof",
  "arguments": {
    "profile_uri": "https://example.com/profiles/cpu.pprof",
    "profile_type": "cpu"
  }
}

示例:分析在线CPU配置文件(来自GitHub原始URL)

{
  "tool_name": "analyze_pprof",
  "arguments": {
    "profile_uri": "https://raw.githubusercontent.com/google/pprof/refs/heads/main/profile/testdata/gobench.cpu",
    "profile_type": "cpu",
    "top_n": 5
  }
}

示例:为在线堆配置文件生成火焰图(来自GitHub原始URL)

{
  "tool_name": "generate_flamegraph",
  "arguments": {
    "profile_uri": "https://raw.githubusercontent.com/google/pprof/refs/heads/main/profile/testdata/gobench.heap",
    "profile_type": "heap",
    "output_svg_path": "./online_heap_flamegraph.svg"
  }
}

示例:打开用于在线CPU配置文件的交互式Pprof UI(仅限macOS)

{
  "tool_name": "open_interactive_pprof",
  "arguments": {
    "profile_uri": "https://raw.githubusercontent.com/google/pprof/refs/heads/main/profile/testdata/gobench.cpu"
    // Optional: "http_address": ":8082" // Example of overriding the default port
  }
}

示例:检测两个堆配置文件之间的内存泄漏

{
  "tool_name": "detect_memory_leaks",
  "arguments": {
    "old_profile_uri": "file:///path/to/your/heap_before.pprof",
    "new_profile_uri": "file:///path/to/your/heap_after.pprof",
    "threshold": 0.05,  // 5% growth threshold
    "limit": 15         // Show top 15 potential leaks
  }
}

示例:断开Pprof会话的连接

{
  "tool_name": "disconnect_pprof_session",
  "arguments": {
    "pid": 12345 // Replace 12345 with the actual PID returned by open_interactive_pprof
  }
}

未来改进(TODO)

  • 基于以下内容在MCP结果中添加MIME类型处理 output_format.
  • 添加更强大的错误处理和日志级别控制。
  • 添加端到端MCP工具交互的集成测试。
  • 大型配置文件(>1GB)的性能优化。

最近完成(v0.3.0)

  • ✅ ~~实施差异火焰图,以可视化轮廓之间的变化。~~(完成- compare_profiles 工具)
  • ✅ ~~为内存配置文件添加时间序列分析,以跟踪多个快照的增长情况。~~(完成- analyze_heap_time_series 工具)
  • ✅ 在每个PR上添加带有GitHub Actions测试的自动化CI/CD。
  • ✅ ~~实施完整的分析逻辑 mutex, block 个人资料。~~(在v0.2.0中完成)
  • ✅ ~~实施 json 输出格式 mutex, block 配置文件类型。~~(在v0.2.0中完成)
  • ✅ 迁移到官方 模型上下文协议Go SDK.
  • ✅ ~~考虑支持远程审批文件URI(例如。, http://, https://).~~(在v0.2.0中完成)
  • ✅ ~~实施完整的分析逻辑 allocs 个人资料。~~(在v0.2.0中完成)
  • ✅ ~~实施 json 输出格式 allocs 配置文件类型。~~(在v0.2.0中完成)
  • ✅ ~~添加内存泄漏检测功能。~~(在v0.2.0中完成)

目录标签

目录标签

性能分析GoClinedeveloper-tools本地部署pprofGo语言火焰图内存泄漏检测

支持客户端

ClineVS Code

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

none

运行时(runtime,运行环境)

Docker

工具数量(toolCount,工具数)

5

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdionone部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP