mcpField
R
ROOT MCP Server

ROOT MCP Server

ローカル
github.com科学・教育148 週間前に更新

ROOT MCP Server について

ROOT MCP Serverは、MCPクライアントからPyROOTを使ったPythonとC++を、同一プロセス内のROOT環境で実行できます。ROOTによる分析に向けた構成で、実行結果に加えて対話型グラフィックスも扱えます。

主な機能

  1. 01PyROOTでPythonを実行
  2. 02clingでC++を実行
  3. 03C++のコンパイルエラー検出
  4. 04対話型ROOTグラフィックス
  5. 05コードと実行結果の記録

活用シーン

  1. 01PythonとROOTでデータを分析
  2. 02MCPクライアントからROOTのC++コードを実行
  3. 03対話型ROOTプロットの作成と確認

MCP 対応

stdio経由で`root_python`と`root_cpp`ツールをMCPクライアントに公開します。実行結果とエラーを返し、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


LLM やその他の MCP クライアントが、HTTP エンドポイントや外部 API を介さずに、PyROOT を使用して Python および C++ コードを直接実行できる、最小構成の MCP(Model Context Protocol)サーバーです。

特長

  • 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

この MCP サーバーを使う最も簡単な方法は、GitHub Copilot Chat を使用した VS Code です。

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)

利用可能なツール

サーバーは 2 つの MCP ツールを公開します。

1. root_python

ROOT をスコープ内で自動的に利用できる状態で Python コードを実行します。

引数:

  • 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 をお気軽に送信してください。

謝辞

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。