mcpField
R
ROOT MCP Server

ROOT MCP Server

本地服务
github.com科研与教育148 周前更新

关于 ROOT MCP Server

ROOT MCP Server 让 MCP 客户端在进程内运行带 PyROOT 的 Python 和 C++ 代码,适用于 ROOT 分析,并支持交互式图形。

主要功能

  1. 01通过 PyROOT 执行 Python
  2. 02通过 cling 运行 C++
  3. 03检测 C++ 编译错误
  4. 04支持交互式 ROOT 图形
  5. 05记录代码与执行结果

适用场景

  1. 01使用 Python 和 ROOT 分析数据
  2. 02从 MCP 客户端运行 ROOT C++ 代码
  3. 03创建并查看交互式 ROOT 图表

MCP 相关

通过 stdio 向 MCP 客户端提供 `root_python` 和 `root_cpp` 工具,并返回执行输出与错误。ROOT 画布也可通过内嵌 HTTP 服务访问。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"omazapa-root": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"docker.io/omazapa/root-mcp:1.0.0"
]
}
}
}
启动命令docker run -i --rm docker.io/omazapa/root-mcp:1.0.0

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocidocker.io/omazapa/root-mcp:1.0.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

ROOT 标志

root_mcp_server:ROOT 的 MCP 服务

用于通过 PyROOT 执行 Python 和 C++ 代码的 Model Context Protocol 服务

ROOT MCP Python


精简的 MCP(Model Context Protocol)服务,可让大模型和其他 MCP 客户端直接使用 PyROOT 执行 Python 和 C++ 代码,无需 HTTP 端点或外部 API。

功能

  • 直接执行 Python:运行可自动使用 PyROOT 的 Python 代码
  • 直接执行 C++:通过 ROOT 的 cling 解释器运行 C++ 代码
  • 进程内执行:所有代码都在同一进程中运行(没有子进程隔离)
  • 错误检测:通过返回码和 stderr 自动检测 C++ 编译错误
  • 控制台日志:在 MCP 控制台中以美观格式输出执行的代码和结果
  • 图形支持:支持 TCanvas、ROOT 图形对象和事件循环

架构

以下是 root_mcp_server 项目的架构图。图中以可视化方式展示了各个组件及其交互。

架构图

说明:

  • MCP 客户端(VS Code / CLI / 程序化调用):连接到 MCP 服务并发送执行请求。客户端可以是交互式的(例如 VS Code + Copilot Chat),也可以是脚本化的 CLI 客户端。
  • FastMCP 服务:接收 MCP 工具调用(root_python、root_cpp),并将其分派给进程内执行器。
  • RootExecutor(进程内 PyROOT):使用 ROOT 运行时执行 Python 或 C++ 代码,管理图形模式,并可开放嵌入式 HTTP 服务(THttpServer),用于交互式画布。
  • ROOT Web Canvas(THttpServer / JSROOT):启用图形功能后,在 ROOT 会话中创建的画布可通过嵌入式 HTTP 服务访问;客户端可打开提供的 URL,以交互方式查看绘图。
  • 工件和输出:执行结果(stdout/stderr 和错误元数据)会返回给 MCP 客户端;交互式画布可通过 HTTP 端点访问。

此架构让 ROOT 在进程内运行,实现低延迟执行,同时提供基于 Web 的交互式可视化方式。

安装

前提条件
  • 已启用 PyROOT 的 ROOT(6.x 或更高版本)
  • Python 3.10+
安装软件包
pip install -e .

用法

选项 1:使用 GitHub Copilot Chat 的 VS Code

通过带有 GitHub Copilot Chat 的 VS Code 使用此 MCP 服务是最简单的方式。

1. 安装 GitHub Copilot Chat 扩展

确保已在 VS Code 中安装 GitHub Copilot Chat 扩展。

2. 在 VS Code 中配置 MCP 服务

将 MCP 服务配置添加到 VS Code 设置中。打开 settings.json(Ctrl/Cmd + Shift + P →“Preferences: Open User Settings (JSON)”)并添加:

{
  "github.copilot.chat.codeGeneration.instructions": [
    {
      "text": "Use ROOT MCP server for data analysis"
    }
  ],
  "mcp.servers": {
		"root/mcp-server": {
			"type": "stdio",
			"command": "root_mcp_server",
			"args": []
		}
  }
}

重要提示:将 /path/to/ROOT/build/bin/thisroot.sh 替换为 ROOT 安装目录中 thisroot.sh 脚本的实际路径。

3. 在 Copilot Chat 中使用

配置完成后,即可在 GitHub Copilot Chat 中使用 MCP 工具:

@workspace Use #root_python to execute Python code with PyROOT
@workspace Use #root_cpp to execute C++ code with ROOT

服务会自动将执行的代码和结果记录到 MCP 控制台(可在 VS Code 的“输出”面板中查看)。

选项 2:命令行

直接启动 MCP 服务:

root_mcp_server
选项 3:程序化调用
from mcp.client.stdio import stdio_client, StdioServerParameters
from mcp.client.session import ClientSession

server_params = StdioServerParameters(
    command="bash",
    args=["-lc", "source /path/to/thisroot.sh && python3 -m root_mcp_server.cli"],
    env=None
)

async with stdio_client(server_params) as (read, write):
    async with ClientSession(read, write) as session:
        await session.initialize()

        # Execute Python code
        result = await session.call_tool("root_python", arguments={
            "code": "import ROOT; print(ROOT.gROOT.GetVersion())"
        })
        print(result)

可用工具

该服务提供两个 MCP 工具:

1. root_python

执行 Python 代码,ROOT 会自动在作用域中可用。

参数:

  • code(字符串):要执行的 Python 代码

返回值:

{
  "ok": boolean,
  "stdout": string,
  "stderr": string,
  "error": string | null,
  "error_type": string | null
}

示例:

code = """
import ROOT
h = ROOT.TH1F("h", "Gaussian", 100, -5, 5)
for i in range(10000):
    h.Fill(ROOT.gRandom.Gaus(0, 1))
print(f"Mean: {h.GetMean():.3f}")
"""
2. root_cpp

通过 ROOT 的 cling 解释器执行 C++ 代码。

参数:

  • code(字符串):要执行的 C++ 代码

返回值:

{
  "ok": boolean,
  "stdout": string,
  "stderr": string,
  "error": string | null,
  "error_type": string | null
}

示例:

TH1F* h = new TH1F("h", "Gaussian;X;Y", 100, -5, 5);
for(int i=0; i<10000; i++) h->Fill(gRandom->Gaus(0,1));
TCanvas* c = new TCanvas("c", "Canvas", 900, 600);
h->Draw();
c->Update();
std::cout << "Mean: " << h->GetMean() << std::endl;

功能详情

错误检测

服务会自动检测 C++ 编译错误,方法如下:

  • 检查 ROOT.gInterpreter.ProcessLine() 的返回代码
  • 扫描 stderr 中的错误关键词(error:、Error:、fatal error:)

发生错误时,会通过 ok=false 和详细错误消息报告。

控制台日志

所有代码执行记录都会输出到 stderr(MCP 控制台),其中包括:

  • 带行号的美化代码
  • 执行状态(✓ 成功 / ❌ 失败)
  • 完整的 stdout、stderr 和错误详情

输出示例:

============================================================
EXECUTING PYTHON CODE:
  1 | import ROOT
  2 | print(ROOT.gROOT.GetVersion())
============================================================
✓ EXECUTION SUCCESS
STDOUT:
6.39/01
图形支持

服务会初始化 TApplication 并支持 ROOT 图形功能:

  • TCanvas 窗口(可禁用批处理模式)
  • 绘制直方图
  • 用于交互式图形的 ROOT 事件循环
  • 对象持久化,防止垃圾回收

开发

运行测试
# Test basic functionality
python test_mcp_client.py

# Test persistent graphics
python test_persistent_window.py

# Test histogram creation
python test_histogram.py
项目结构
root_mcp_server/
├── root_mcp_server/
│   ├── __init__.py
│   ├── cli.py          # Entry point
│   ├── executor.py     # Code execution 
│   └── server.py       # MCP server definition
├── test_mcp_client.py
├── test_persistent_window.py
├── test_histogram.py
└── README.md

许可证

请参阅 LICENSE 文件。

贡献

欢迎贡献!欢迎提交 Pull Request。

致谢

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。