mcp张量板
一个基于stdio的最小MCP服务器 TensorBoard数据服务器 查询作为MCP工具。
这个项目 不运行TensorBoard web UI相反,它启动了TensorBoard的 *数据服务器* 子进程(Rust二进制文件),并使用TensorBoard的Python API通过gRPC查询它。
之所以采用数据服务器方法,是因为它比迭代的“纯Python”方法快得多 events.out.tfevents.* 文件直接。在一个实际案例中,通过纯Python方法加载一个约1GB的事件文件需要约2分钟。
协议:此服务器尝试实现MCP协议修订 2025-03-26 (Zed兼容)。请参阅规格:https://modelcontextprotocol.io/specification/2025-03-26
AI友好型输出(紧凑型点)
大多数时间序列工具返回 紧凑点阵列 为了减小响应大小:
- 标量/标量张量:
{"points": [[step, value], ...]} - 柱状图:
{"points": [[step, values], ...]}哪里values是该步骤的基础数字数组(较大;更喜欢下面的分布) - 图像系列:
{"points": [[step, blob_key], ...]}哪里blob_key可以通过以下方式获取tensorboard-get_image - 可选的
wall_time默认情况下省略,可以通过以下方式包含include_wall_time=true
笔记:
step和wall_time不是圆形的。- 数值四舍五入为
float_precision=5默认情况下(如适用)。
特性
- Stdio JSON-RPC 2.0传输(每行一个JSON对象)。
- 为给定对象启动TensorBoard数据服务器
--logdir. - 用于常见查询的基于工具的API:
- 列表运行 - 列表标签(标量/张量/直方图/图像/分布) - 获取标量和张量时间序列(紧凑点) - 获取直方图系列(紧凑的点;仍然可以很大) - 获取 分布列 (压缩直方图;小而AI友好) - 获取图像系列(blob键)+获取单个图像(MCP图像内容)
安装
运行而不发布(来自git的uvx)
您可以使用以下命令运行该工具,而无需发布到PyPI uvx:
uvx --from git+https://github.com/jchacks/mcp-tensorboard mcp-tensorboard --logdir /path/to/tensorboard/logdir --debug如果你喜欢SSH:
uvx --from git+ssh://git@github.com/jchacks/mcp-tensorboard.git mcp-tensorboard --logdir /path/to/tensorboard/logdir --debug安装(可编辑)
从repo根目录:
pip install -e .使用开发工具:
pip install -e ".[dev]"跑步
该服务器是一个stdio服务器:它从stdin读取JSON行并将JSON行写入stdout。
使用控制台脚本运行:
mcp-tensorboard --logdir /path/to/tensorboard/logdir --debug或者作为模块运行:
python -m mcp_tensorboard --logdir /path/to/tensorboard/logdir --debug您还可以设置环境变量:
export TENSORBOARD_LOGDIR=/path/to/tensorboard/logdir
mcp-tensorboard --debug工具名称
工具名称如下:
tensorboard-list_runstensorboard-list_scalar_tagstensorboard-get_scalar_seriestensorboard-get_scalar_series_batchtensorboard-get_scalar_lasttensorboard-list_tensor_tagstensorboard-get_tensor_seriestensorboard-list_histogram_tagstensorboard-get_histogram_seriestensorboard-list_distribution_tags(直方图标签的别名)tensorboard-get_distribution_seriestensorboard-list_image_tagstensorboard-get_image_seriestensorboard-get_image
图像注释
图像获取是一个两步过程,以保持响应较小:
tensorboard-get_image_series回报points作为[[step, blob_key], ...]tensorboard-get_image需要ablob_key并返回 MCP图像内容 (content: [{type:"image", mimeType, data}])在哪里data是base64编码的图像字节。
协议(基于stdio的JSON-RPC)
消息是每行一个JSON对象。
列出工具
请求:
{"jsonrpc":"2.0","id":"1","method":"tools/list","params":{}}答复:
{"jsonrpc":"2.0","id":"1","result":{"tools":[{"name":"tensorboard-list_runs","description":"...","inputSchema":{...}}],"nextCursor":null}}调用工具
请求:
{
"jsonrpc": "2.0",
"id": "2",
"method": "tools/call",
"params": {
"name": "tensorboard-list_runs",
"arguments": {}
}
}响应(形状):
{
"jsonrpc": "2.0",
"id": "2",
"result": {
"content": [
{ "type": "text", "text": "{\"runs\":[\".\",\"runA\"]}" }
],
"structuredContent": { "runs": [".", "runA"] },
"isError": false
}
}例子
1) 列表运行
{"jsonrpc":"2.0","id":"1","method":"tools/call","params":{"name":"tensorboard-list_runs","arguments":{}}}2) 列出跑步的标量标记
{"jsonrpc":"2.0","id":"2","method":"tools/call","params":{"name":"tensorboard-list_scalar_tags","arguments":{"run":"."}}}3) 获取标量序列(最后200个点)
退货 points 作为 [[step, value], ...] (可选 [[step, value, wall_time], ...] 如果 include_wall_time=true).
{"jsonrpc":"2.0","id":"3","method":"tools/call","params":{"name":"tensorboard-get_scalar_series","arguments":{"run":".","tag":"loss","max_points":200}}}4) 在一次调用中获取多个标量序列
退货 pointsByTag 每个标签点数紧凑。
{"jsonrpc":"2.0","id":"4","method":"tools/call","params":{"name":"tensorboard-get_scalar_series_batch","arguments":{"run":".","tags":["loss","accuracy"],"max_points":200}}}5) 获取最后一个标量值
{"jsonrpc":"2.0","id":"5","method":"tools/call","params":{"name":"tensorboard-get_scalar_last","arguments":{"run":".","tag":"loss"}}}6) 列出张量标签
{"jsonrpc":"2.0","id":"6","method":"tools/call","params":{"name":"tensorboard-list_tensor_tags","arguments":{"run":"."}}}7) 获取张量“系列”(仅标量张量)
退货 points 作为 [[step, value], ...] 仅适用于标量张量。
{"jsonrpc":"2.0","id":"7","method":"tools/call","params":{"name":"tensorboard-get_tensor_series","arguments":{"run":".","tag":"some_tensor","max_points":200}}}8) 列出直方图(和分布)标签
直方图标签也用于分布。您可以通过以下任一工具列出它们:
{"jsonrpc":"2.0","id":"8","method":"tools/call","params":{"name":"tensorboard-list_histogram_tags","arguments":{"run":"."}}}或(别名):
{"jsonrpc":"2.0","id":"8b","method":"tools/call","params":{"name":"tensorboard-list_distribution_tags","arguments":{"run":"."}}}9) 获取直方图系列(原始)
直方图点可以很大。响应很紧凑,但每一步 values 数组可能仍然很大:
points:[[step, values], ...]哪里values是该步骤的基础数字数组
{"jsonrpc":"2.0","id":"9","method":"tools/call","params":{"name":"tensorboard-get_histogram_series","arguments":{"run":".","tag":"weights","max_points":50}}}10) 提取分布序列(压缩直方图;推荐用于AI)
这将直方图桶压缩为固定的基点(默认为TensorBoard的“正常”集): (0, 668, 1587, 3085, 5000, 6915, 8413, 9332, 10000)
响应形状:
bps:基点(x轴标签)data:每一步{step, values}哪里values[i]对应于bps[i]
{"jsonrpc":"2.0","id":"10","method":"tools/call","params":{"name":"tensorboard-get_distribution_series","arguments":{"run":".","tag":"weights","max_points":50}}}11) 列出图像标签
{"jsonrpc":"2.0","id":"11","method":"tools/call","params":{"name":"tensorboard-list_image_tags","arguments":{"run":"."}}}12) 获取图像系列(blob键)
退货 points 作为 [[step, blob_key], ...].
{"jsonrpc":"2.0","id":"12","method":"tools/call","params":{"name":"tensorboard-get_image_series","arguments":{"run":".","tag":"samples","max_points":10}}}13) 获取单个图像(MCP图像内容)
使用一个 blob_key 返回由 tensorboard-get_image_series.
{"jsonrpc":"2.0","id":"13","method":"tools/call","params":{"name":"tensorboard-get_image","arguments":{"blob_key":"PUT_BLOB_KEY_HERE"}}}存储库布局(当前)
mcp_tensorboard/server.py--stdio JSON-RPC服务器入口点mcp_tensorboard/tools.py--工具实现+数据服务器生命周期mcp_tensorboard/tool_args.py--参数解包+类型验证装饰器tests/--单元测试(假提供者)
发展
运行测试:
pytest格式/lint(如果安装在dev-extras中):
ruff check .故障排除
- 未找到跑步记录:确保
--logdir指向包含runs/event文件的目录。 - 导入错误:tensorboard:安装依赖项(
pip install -e .). - 数据服务器无法启动:验证TensorBoard是否已安装并与您的环境兼容。
