
如何把 Tracy MCP Server 接入 AI 助手以自动化分析 .tracy 捕获文件【免费下载链接】tracyFrame profiler项目地址: https://gitcode.com/GitHub_Trending/tr/tracy手里已经有.tracy捕获文件但每次都要打开 Tracy GUI 手动翻 zone 统计、帧时间或者想让 AI 助手自动核对这次优化到底降没降低帧时间——Tracy 自带一个可选的 MCPModel Context ProtocolServer可以把这些分析能力暴露给支持 MCP 的 AI 编码助手。它以一个独立的 Python sidecar 进程运行不依赖 Tracy Assist运行 Tracy 本身也不需要 Python 解释器只有接入这个 sidecar 时才需要。接入完成后AI 助手可以按路径加载.tracy文件并对Worker绑定执行任意 Python 分析代码。整条路径是构建 Python 绑定 → 启动 MCP Server → 把它的 URL 写进 AI 助手的 MCP 配置 → 让助手用load_captureeval完成分析。官方文档中这一节的入口是 MCP Server 文档核心实现在 extra/mcp/tracy_mcp.py。准备条件构建 Tracy Server Python 绑定MCP Server 依赖 Tracy 的 Python 绑定TracyServerBindings模块它通过 CMake 选项TRACY_CLIENT_PYTHON与客户端绑定一起构建cmake -B build -DTRACY_CLIENT_PYTHONON cmake --build build --config Release绑定产物会落在build/python/下目录名带配置后缀如Release。构建细节见 python/CMakeLists.txt该构建会查找 Python 3.6 及以上版本并引入 pybind11。记下你实际使用的配置后缀Release或Debug后面设置PYTHONPATH时要对上。启动 MCP Server先安装 Python 依赖。仓库自带的依赖清单 extra/mcp/requirements.txt 只有一个条目mcp2.0.0,3文档正文给的是pip install mcp两者等价pip install mcp启动前设置环境变量或 export 到 shell 中。PYTHONPATH指向上一步产出TracyServerBindings.so/.pyd的目录/path/to/tracy需要替换为你实际检出 Tracy 源码的目录PYTHONPATH/path/to/tracy/build/python/Release TRACY_CAPTURES_DIR/path/to/captures # 可选设置后 list_captures 才能列出文件 TRACY_MCP_PORT47380 # 可选默认 47380 TRACY_MCP_TRANSPORTstreamable-http # 可选streamable-http 或 sse其中TRACY_CAPTURES_DIR不是必需项只有当你希望助手用list_captures列出目录里的*.tracy文件时才需要。TRACY_MCP_TRANSPORT默认是streamable-http设为sse则使用旧版 SSE 传输。然后从 Tracy 仓库根目录启动python extra/mcp/tracy_mcp.py仓库还提供一个 POSIX shell 便捷脚本 extra/mcp/start_mcp.sh它会把PYTHONPATH自动设为脚本旁的../../build/python/Release并允许你在同目录创建start_mcp.local.sh脚本注释说明该文件不入库来本机覆盖TRACY_CAPTURES_DIR、TRACY_MCP_PORT等变量最后exec同一个tracy_mcp.py。注意脚本内写死了Release后缀注释也提示如果你的 CMake 配置是 Debug需要自行调整这个后缀。确认服务器起来了服务器启动时会打印监听地址并把端口写入extra/mcp/tracy_mcp.port。文档给出的示例输出Tracy MCP listening on http://127.0.0.1:47380/mcp这一行同时是验证方式端口以TRACY_MCP_PORT为准默认 47380路径由传输方式决定streamable-http为/mcpsse为/sse。记下这个 URL下一步要用。关于单进程行为服务器以单例方式运行无论开多少个编辑器窗口只有一个进程会加载TracyServerBindings再次启动时检测到端口被占用会直接退出并提示Tracy MCP already running on port ...。这不是错误所有客户端共享同一实例。把服务器接入 AI 助手用上面得到的 URL 配置你的 AI 助手。文档给出的 JSON 形态 MCP 配置示例{ mcpServers: { tracy: { url: http://127.0.0.1:47380/mcp } } }如果你的客户端使用sse传输则把 URL 换成对应的/sse地址。验证接入成功接入后的判断依据都来自文档实际描述的行为而不是猜日志让助手调用list_captures需已设置TRACY_CAPTURES_DIR或list_instances。能拿到返回列表哪怕是空列表说明 MCP 通道已通。让助手调用load_capture加载一个真实的.tracy文件。加载成功时返回形如Loaded as instance_name...的提示文本并提醒先读取tracy://prompt与tracy://eval-guide两个资源这两个资源分别对应 Tracy Assist 的分析指引 system.prompt.md 和绑定层查询指南 extra/mcp/eval_guide.md。加载成功后再执行一段eval代码能打印出 zone 统计或帧时间整条链路即验证完成。让 AI 助手加载并分析捕获文件有两个容易踩的点都来自文档的明确说明Tracy GUI 里打开文件不等于服务器已加载。捕获必须通过 MCP 显式加载用load_capture传.tracy文件的完整路径Windows 下用反斜杠路径或者在设置了TRACY_CAPTURES_DIR时先调list_captures再加载。load_capture返回时统计可能还没建完。文件读完后zone/符号统计由后台线程填充。查询list_instances里该实例的background_done字段为false时get_all_zone_stats()这类统计查询可能返回空或部分结果小捕获通常很快完成大文件可能需要数秒。分析本身走eval工具把 Python 代码发给它代码里ctx绑定到该实例的Worker对象所有时间值单位是纳秒。下面是 eval_guide.md 中给出的两个常用查询示例文档示例直接可作为eval的代码内容发给助手# top 10 hottest zones by total time top sorted(ctx.get_all_zone_stats().items(), keylambda kv: kv[1].total, reverseTrue)[:10] for k, v in top: print(f{v.total/1e6:.2f}ms count{v.count} {k})# primary frame set timing times ctx.get_frame_times() # ns per frame print(fframes{len(times)} avg{sum(times)/len(times)/1e6:.2f}ms fp99{sorted(times)[int(len(times)*0.99)]/1e6:.2f}ms)注意键格式get_all_zone_stats()返回的dict键是形如name (addr)[arch] srcloc_id的不透明标签末尾的srcloc_id就是get_zone_stats(int)等方法接受的 source-location ID需要按名字关联查询时用这个 ID 做 joineval_guide.md建议用正则解析。长查询可以给eval传async_modeTrue立即拿到{task_id, status: running}再用task工具poll结果。分析完做 A/B 对比时文档给出的路径是用save_trace把实例快照成.tracy文件默认async_modeTrue成功返回压缩率、耗时等字段切换构建后再save_trace然后分别load_capture两份文件做 diff。收尾动作是显式调用unload_capture(instance_id)每个已加载实例会把整条 tracezones、messages、callstacks、memory events常驻在服务器进程内存里直到卸载或进程结束。自动驱逐只是兜底不是主要清理手段。排查与限制绑定找不到load_capture/live_connect返回Error: Tracy Server bindings not found.时检查PYTHONPATH是否指向真实的TracyServerBindings.so/.pyd所在目录以及Release/Debug后缀是否与 CMake 配置一致。旧进程卡死启动脚本的自检除了检查 PID还会对端口发 HTTP ping。若发现旧进程活着但不响应脚本会打印该进程 likely hung/deadlocked 的提示并在新端口启动新服务器旧进程仍占着端口和TracyServerBindings.pyd文件锁需要你在方便时手动 kill 掉那个 PID。实例容量与内存TRACY_MCP_MAX_INSTANCES默认 4达到上限时会按 LRU 驱逐可驱逐实例不会驱逐仍连接的 live 实例空闲超过TRACY_MCP_FILE_IDLE_TTL_S默认 1800s的文件捕获会被自动丢弃——文档说明这对文件捕获是安全的因为文件在磁盘上重新load_capture即可。文档与实现的差异MCP Server 文档 的工具列表里有一个connect_instance设置活跃实例而 tracy_mcp.py 当前实现中没有该工具eval直接接收instance_id参数。以实际实现为准调用eval时带上实例 ID 即可。文档中Worker API小节概述get_all_zone_stats()为以 zone 名做键而 eval_guide.md 给出的键格式是上述不透明标签本文按更贴近实际查询的eval_guide.md描述。整条链路的终点是AI 助手能列出你指定目录下的.tracy文件、按路径加载其中一份、在background_done为 true 后执行eval并打印出真实的 zone/帧时间统计。后续如果要在同一份捕获上做更多查询直接复用已加载的instance_id发eval即可无需重新加载。【免费下载链接】tracyFrame profiler项目地址: https://gitcode.com/GitHub_Trending/tr/tracy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考