Bagel Robotics MCP Server について
Bagel Robotics MCP Serverは、ロボット、ドローン、IoTの記録データを自然言語で分析するツールです。監査可能なDuckDB SQL計算とイベントに基づくデータ削減を提供し、LLMをロボットの制御ループに入れません。
主な機能
- 01自然言語によるログ分析
- 02監査可能なDuckDB SQL計算
- 03イベントベースのエッジデータ削減
- 04ROS、飛行ログ、IoT形式への対応
- 05書き込み前のパイプラインプレビュー
活用シーン
- 01センサーやロボットの状態調査
- 02ROSや飛行ログの要約
- 03イベント周辺を残して他のデータを削除
MCP 対応
MCPサーバーを通じて、ロボットデータの分析と削減機能をMCPクライアントに公開します。記録データではstdio、DockerデプロイではSSEエンドポイントで動作します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm ghcr.io/extelligence-ai/bagel/ros2-kilted:2.4.1ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/extelligence-ai/bagel/ros2-kilted:2.4.1SSEツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
ビットから原子へ。
原子からビットへ。
まだ parse_bag_final_v7.py というスクリプトを使っているなら、お話ししましょう。
Extelligence の Bagel を使えば、ロボティクス、ドローン、IoT のデータについて、自然な英語で質問できます。 メッセージデータに対する計算はすべてモデルの推測ではなく DuckDB SQL で行われ、 Bagel はクエリを表示するため、内容を監査できます。
IMU センサーが過熱していますか?
Bagel には、インテリジェントなエッジデータ削減パイプラインもあります。イベントを説明すると、 Bagel はロボット上で検出を実行し、重要な時間枠を保持して、残りを破棄します。MCP サーバーを使えば、 すべてを LLM から利用できます。Claude Code、Gemini、Cursor、または完全ローカルのモデルに対応しています。
Bagel は、ロボティクスデータ向けの実用的な分析ツールキットを初めて提供した MCP サーバーです。 LLM をあるべき場所、つまりログの前に置き、ロボットの制御ループには決して介入させません。
📦 インストール
Bagel は bagel-mcp として PyPI で公開されています。記録済みデータの処理に Docker
も ROS のインストールも必要ありません。
Claude Code の場合は 1 行でインストールできます(uv が必要です)。
claude mcp add bagel -- uvx --from "bagel-mcp[ros]" bagel-mcp --transport stdio
pip を使う場合は、Python 3.10~3.12 の任意の環境にインストールできます。
pip install "bagel-mcp[ros]"
次に、インストールされた bagel-mcp コマンドを MCP クライアントに指定します(Claude Desktop、Cursor、Codex の設定は
クイックスタートをご覧ください)。
エージェントを開いて、次のように質問してください。
"~/logs/run_42.mcap" のバッグを要約してください。
ros エクストラは ROS 1 と ROS 2 のバッグを読み込みます。フライトログ、CAN / MDF4、ライブ MQTT
などにもエクストラがあります。ライブ ROS
ロボット(rosbridge)とフリート/エッジパイプラインはDockerで実行します。
🥯 主な機能
- 平易な言葉で質問:専門分野の深い知識は必要ありません。
- 透明性の高い計算:決定論的な SQL クエリを使用します。ブラックボックスの LLM による計算はありません。
- 自然言語のパイプライン:「強いブレーキの前後 10 秒を残し、それ以外は削除」: 1 文の指示が、監査可能な パイプラインになります。データを 1 バイトも書き込む前にプレビューでき、1 回だけ、フリート全体、またはエッジ上で継続的に実行できます。
- 幅広い LLM に対応:Claude Code、Gemini、Cursor、Codex など。
- 好みの方法でインストール:記録済みデータには
pip/uvx、稼働中のロボットやエッジには Docker イメージを使用できます。 - 拡張可能な機能:Bagel に新しい技を教えることができます。
- 幅広い形式に対応:お使いのデータ形式に対応していませんか?チケットを作成してください。
🥯 60 秒で試す
MCP クライアントも LLM も設定も不要です。バンドルされたサンプルログに対して同じ決定論的なチェックを実行し、ロボットの健全性レポートをターミナルに直接表示できます。
docker run -it --rm ghcr.io/extelligence-ai/bagel/px4:latest demo
sample.ulg - 41.5s, 2018 messages, 77 topics
Power ⚠️ min 21.07V, largest drop 2.37V at ~t=+4.8s, end 23.45V (battery_status_0)
IMU ✅ accel_z stddev 1.6x the log baseline at ~t=+36.8s (sensor_combined_0)
GPS — skipped: no GPS topic
Data gaps ✅ no gap > 1.05x median interval (checked battery_status_0, sensor_combined_0)
...
ROS2 イメージ(ros2-kilted、ros2-jazzy、ros2-iron、ros2-humble)でも、同じ方法で demo を実行できます。より軽量なバンドル済みサンプルを使用します(すべてのチェックを表示できる、十分な情報量のフライトログが付属するのは px4 です)。demo /path/to/log でお手元のログを指定する場合は、先に -v でマウントしてください。詳しい MCP のセットアップについては、以下をお読みください。
⚡️ クイックスタート
Bagel の実行方法は 2 種類あります。データに合わせて選択してください。
| 使用するデータ | Bagel の実行方法 |
|---|---|
記録済みデータ:ROS 1 .bag および ROS 2 .db3 / .mcap のバッグ、フライトログ(PX4、ArduPilot、Betaflight)、CAN / MDF4、CSV / JSON / Parquet、ROS テキストログ。稼働中の MQTT ロボット | 下記の uvx または pip:Docker も ROS のインストールも不要です |
| 稼働中の ROS ロボット(rosbridge)、フリートおよびエッジへのデプロイ | 下記の Docker:イメージに ROS スタックと継続実行用のパイプラインランタイムが含まれます |
🐍 uvx または pip でインストール(Docker 不要)
MCP クライアントが stdio 経由でサーバーを自身で起動するため、何かを起動したり、実行し続けたりする必要はありません。uvx(管理するものはありません。初回使用時に Bagel を取得してキャッシュします)または pip(通常のインストールで、自分で管理します)を選んでください。
uvx を使用する場合。 uv
をインストールし(macOS と Linux では curl -LsSf https://astral.sh/uv/install.sh | sh)、次の手順を実行します。
Claude Code:
claude mcp add bagel -- uvx --from "bagel-mcp[ros]" bagel-mcp --transport stdio
JSON MCP 設定に対応するクライアント(Claude Desktop、Cursor、Codex など):
{
"mcpServers": {
"bagel": {
"command": "uvx",
"args": ["--from", "bagel-mcp[ros]", "bagel-mcp", "--transport", "stdio"]
}
}
}
pip を使用する場合。 Python 3.10~3.12 を使用します。仮想環境を使うとすっきり管理できます。
python3 -m venv ~/.bagel-venv
~/.bagel-venv/bin/pip install "bagel-mcp[ros]"
claude mcp add bagel -- ~/.bagel-venv/bin/bagel-mcp --transport stdio
JSON 設定では、コマンドにフルパスを指定してください:
"command": "/Users/you/.bagel-venv/bin/bagel-mcp", "args": ["--transport", "stdio"]。
Apple Silicon 搭載 Mac: Rosetta 経由で実行する Intel 版 Python ではなく、ARM 版 Python を使用してください。python3 -c "import platform; print(platform.machine())" を実行して確認します。arm64 と表示される必要があります。x86_64 と表示された場合は、ネイティブ環境を別途作成してください。
uv venv --seed --python cpython-3.12-macos-aarch64-none ~/.bagel-arm-venv
~/.bagel-arm-venv/bin/python -m pip install "bagel-mcp[ros]"
claude mcp add bagel -- ~/.bagel-arm-venv/bin/bagel-mcp --transport stdio
これにより、cryptography のソースビルドを回避できます。上流ではバージョン 49 で Intel 版 macOS のサポートが削除されました。
現在、新規インストールでは依存関係チェーンが bagel-mcp → mcp → pyjwt[crypto] → cryptography となる MCP 1.30.0 が選択されます。これは基本パッケージと bagel-mcp[ros] の両方に適用され、upload エクストラを指定しない場合も同様です。
Intel Mac で cryptography のビルド中にインストールが失敗した場合は、以下の Docker を使う方法を利用してください。古いホイールを復元するために cryptography をダウングレードしないでください。古いリリースにはセキュリティ修正が反映されていません。
フォーマットのサポートはエクストラとして提供されるため、PX4 ユーザーが自動車用パーサーをダウンロードすることはありません。必要なものをカンマ区切りで指定してください:
uvx --from "bagel-mcp[ros,px4,automotive]" bagel-mcp --transport stdio、または
pip install "bagel-mcp[ros,px4,automotive]"。エクストラが不足しているフォーマットについて問い合わせると、Bagel のエラーに追加するための正確なコマンドが表示されます。
| エクストラ | 追加される機能 |
|---|---|
ros | ROS 1 .bag および ROS 2 .db3 バッグ(読み込み、reduce/スニペットの書き込み)。純粋な Python で動作 |
px4 | PX4 .ulg |
ardupilot | ArduPilot .bin |
betaflight | Betaflight .bbl/.bfl |
automotive | CAN キャプチャ(.blf、.asc + DBC)および ASAM MDF4 |
iot | ライブ MQTT(Sparkplug B を含む)および InfluxDB ソース |
viz | Rerun エクスポート |
upload | GCS および Azure Blob アップロードタスク |
cloudini | Cloudini 点群タスク |
MCAP、CSV/JSON/Parquet、ROS テキストログ、PlotJuggler/Lichtblick/LeRobot のエクスポート、S3 アップロードにはエクストラは不要です。
PX4 ログの解析に Git は不要です。Git とネットワークアクセスは、オプションのフィールド説明を取得する場合にのみ使用されます。これらの説明の取得を省略するには、ツールの args に download_description: false を渡してください。
アップグレードするには、インストール時に指定したエクストラを再度指定してください。依存関係も合わせて更新されます。uvx は新しいリリースを自動的に取得します(強制する場合は uvx --refresh --from "bagel-mcp[ros,px4]" bagel-mcp --help を実行します)。pip の場合は、独自のエクストラ一覧を指定して pip install -U "bagel-mcp[ros,px4]" を実行してください。
プロンプトで、自分のファイルを指定します。
MCAP バッグ「~/logs/run_42.mcap」のメタデータを要約してください。
メモ
バッグファイルを扱うのに ROS のインストールは不要です。
rosエクストラは純粋な Python の rosbags ライブラリを使って読み書きします(sqlite3 および MCAP ストレージ、zstd/bz2/lz4 圧縮、バッグ自体または Humble 以降のすべてのディストリビューションに対応する同梱インターフェース定義からのメッセージ型)。ライブ ROS トピック(rosbridge)とフリート/エッジのランタイムには Docker を使用します。
🐳 Docker で実行(ライブロボット、フリートとエッジ、ディストリビューション固有の ROS)
ヒント
Claude Code をすでにお使いですか? このリポジトリへのリンクを貼り付け、希望する環境を Claude に伝えるだけです。
ROS2 Kilted 用に https://github.com/Extelligence-ai/bagel をセットアップしてください。
Claude がリポジトリをクローンし、Docker を起動して、MCP 接続を設定します。
📋 前提条件
Docker Desktopと Claude Code(またはMCP対応のLLM)をインストールします。
メモ
arm64ホスト(Apple Silicon、Raspberry Pi、Jetson、Graviton): デフォルトのサービスであり、
server.jsonで指定されているros2-kiltedはマルチアーキテクチャイメージとして提供されているため、Dockerはネイティブのarm64ビルドをプルします。追加の設定は不要です。ほかのサービスはamd64のみで公開されています。Docker Desktopは自動的にエミュレーションするため、Apple Siliconでも動作します(速度は遅くなりますが、使用できます)。arm64のLinuxで通常のDocker Engineを使う場合、デフォルトではエミュレーションがなく、
exec format errorですぐに失敗します。まずQEMU/binfmtをインストールしてください。docker run --privileged --rm tonistiigi/binfmt --install amd64
1. Bagelをクローンして起動する
git clone https://github.com/Extelligence-ai/bagel.git && cd bagel
docker compose run --service-ports ros2-kilted
ヒント
ポート8000がすでに使用中ですか?
MCP_SERVER_PORTを別のポートに設定します。たとえば、MCP_SERVER_PORT=8100 docker compose run --service-ports ros2-kiltedのように指定し、手順2でもそのポートを使用します。
環境に合ったサービスを選択します。
| サービス | 用途 |
|---|---|
ros2-kilted | ROS2 Kilted(最新) |
ros2-jazzy | ROS2 Jazzy |
ros2-jazzy-jev | ROS2 Jazzy + ロボット上の意思決定モデル(GPU、ベータ版) |
ros2-iron | ROS2 Iron |
ros2-humble | ROS2 Humble |
ros1-noetic | ROS1 Noetic |
ros1-noetic-cv | ROS1 Noetic + CV |
px4 | PX4のフライトログ |
ardupilot | ArduPilotのフライトログ |
betaflight | Betaflightのフライトログ |
iot | IoT / MQTT(ライブ) |
-jevイメージ(ベータ版)には、ロボット上で意思決定モデルを実行するためのPyTorchが追加されています
(異常検知ゲートのbackend: local)。ほかのサービスも同じ方法で
--build-arg JEV_MODE=trueを指定してビルドできます。CPUのみのロボットでは不要です。ホスト型のJevバックエンドは、すべてのイメージで動作します。
ヒント
Bagelからローカルファイルにアクセスできるようにするには、Dockerの起動前に
compose.yamlを編集します。 使用するサービスのvolumesセクションのコメントを解除し、内容を更新してください。
次の出力が表示されるまで待ちます。
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
2. Claude Codeを接続する
新しいターミナルで次を実行します。
claude mcp add --transport sse bagel http://localhost:8000/sse
メモ
セキュリティのため、MCPエンドポイントは
localhostのみにバインドされており、LANには公開されません。 ほかのマシンと共有するには、compose.yamlから127.0.0.1のプレフィックスを削除し、 認証付きプロキシを前段に配置してください。詳細はSECURITY.mdを参照してください。
3. プロンプトを入力する
claude
ROS2 bag "./data/sample/ros2/mcap"のメタデータを要約してください。
これで完了です。データについてチャットできます。
🔒 完全オフラインで使いたい場合
手順2をローカルモデルに切り替えると、データもLLMもマシン上に留まります。
brew install ollama && ollama serve & # or ollama.com
ollama pull qwen3:8b
uvx ollmcp --mcp-server-url http://localhost:8000/sse --model qwen3:8b
モデルの選び方、想定事項、トラブルシューティングについては、ローカルLLMガイドを参照してください。
📚 別のLLMを使用しますか?
Bagelは、MCP対応のあらゆるLLMで動作します。動作確認済みの代替ツールのセットアップガイドはこちらです。
- Claude Code(詳細ガイド)
- Gemini CLI
- Codex
- Cursor
- Copilot
お使いのLLMが見つかりませんか?チケットを作成してください。
Bagel にはエージェントプラグインが付属しています。サーバーをいつ、どのように操作するかをエージェントに教える4つのスキル(ログのトリアージ、パイプラインの作成、ライブシンク、可視化のエクスポート)と、MCP 接続が自動的に組み込まれています。同じ plugin/ ディレクトリが Claude Code と OpenAI Codex の両方に対応しています。
/plugin marketplace add Extelligence-ai/bagel
/plugin install bagel@bagel
Codex と ChatGPT のユーザーは、OpenAI Plugins Directory から Bagel をワンクリックでインストールするか、リポジトリをクローンしてプラグインマーケットプレイスとして追加してください(リポジトリには .agents/plugins/marketplace.json が含まれています)。ディレクトリからのインストールではスキルのみがバンドルされます(このディレクトリが受け付けるのは公開 HTTPS MCP サーバーのみで、Bagel はお使いのマシン上で実行されるためです)。そのため、codex mcp add bagel --url http://localhost:8000/mcp を実行するか、~/.codex/config.toml に次の設定を追加して、サーバーにも一度接続してください。
[mcp_servers.bagel]
url = "http://localhost:8000/mcp"
リポジトリのマーケットプレイス経由でのインストールと Claude Code へのインストールでは、この接続が自動的に設定されます。メンテナーは uv run python scripts/package_codex_directory.py を実行して、ディレクトリ用の ZIP を作成できます。
次に、データ形式に応じたコンテナーを起動してください(クイックスタートを参照)。プラグインはデフォルトで http://localhost:8000/mcp に接続します。ほかの MCP クライアントも list_agent_capabilities ツールを使って、同じワークフローをサーバー側で確認できます。
重要なデータだけを残し、あとは削除する
ロボットは、移動させるには多すぎるデータを記録します。Bagel は質問を検出器に変換し、データの記録場所で実行して、実際のイベントの前後の区間だけを転送します。
1回の会話で実現できます。
イベントを事前に把握できない場合は、異常検知ゲート (ベータ版)がロボットの正常な状態を学習し、Jev に正常でないものの名前を付けさせ、それぞれに JSON ラベルを付けた該当区間だけを、S3、GCS、Azure、MinIO、R2 のいずれのバケットにも保存します。
上のセッションは、20分(1,200秒)の記録に対して、「−10 m/s² を超える減速のたびに、その前後10秒を残す」というプロンプトを指定した例です。プレビューでは7件のイベントが検出され、4つの区間にまとめられます。1,200秒のうち92秒(7.6%)が残り、実行後のバッグファイルは2.1 GBから161 MBになります。これらは説明用のデモ出力であり、測定済みのベンチマークではありません。割合はイベント区間の長さを全体の長さで割った値なので、ワークロードによって大きく異なります。
✅ 対応データ形式
| 業界 | 形式 |
|---|---|
| ロボティクス | ROS1、ROS2、MCAP(すべてのプロファイル)、Copper(MCAP エクスポート経由)、ROS テキストログ(~/.ros/log) |
| ロボット学習 | Gantry Bench のエビデンスバンドル — データセット評価の作業結果(クリップごとの信号チェック、ロボットテストの段階的評価、調査結果)をクエリ可能なテーブルとして提供 |
| ドローン | PX4、ArduPilot、Betaflight |
| 自動車 | ASAM MDF4(.mf4)、CAN キャプチャ(.blf/.asc + DBC) · ベータ版 |
| IoT | MQTT(ライブ、Sparkplug B)、PostgreSQL / TimescaleDB、InfluxDB 3 |
| ハードウェア状態 | WaffleForm のスナップショット(.waffleform.yaml)。waffle-iron によって自動検出 · ベータ版 |
🆚 Bagel と、すでに使っているツールの比較
すでに ros2 *、PlotJuggler、grep を使っています。Bagel はこれらを置き換えるものではありません。これらのツールを使って自分で調べなければならない質問に答え、その後は適切なツールに引き継ぎます。
| 現在のやり方 | 代わりに Bagel に尋ねること |
|---|---|
メタデータを確認するために ros2 bag info を実行する | 「この bag を要約して」:同じプロンプトが PX4、ArduPilot、MCAP、MQTT、Postgres でも使えます |
ros2 topic echo /imu を実行し、生の値を目で確認する | 「/imu の z 軸減速度の最大値は? 5 秒間の移動平均は?」 · 裏側では実際の SQL を使い、最大値、移動平均、パーセンタイル、トピック間の相関を計算します |
| イベントを探して PlotJuggler のタイムラインをスクラブする | 「−10 m/s² 未満の減速度をすべて見つけて、前後 30 秒のスニペットを切り出して」:その後、あらかじめ表示範囲を設定したレイアウトで結果を PlotJuggler で開きます |
rqt_console を使うか、~/.ros/log を grep する | 「~/.ros/log から ERROR を読み取り、何が起きたのか教えて」:スタックトレースも含めて確認でき、bag は不要です |
| 2 つのターミナルで 2 つのトピックを echo し、スプレッドシートで相関を調べる | 「電流と電圧の相関は?」:トピックは 1 つの SQL リレーションとして扱えるため、結合や corr() もひとつの質問で済みます |
ros2 bag record -a を実行して、ディスクの状態を監視する | 常時稼働するエッジパイプライン:連続記録し、イベントの時間帯だけを残して、ほかは破棄します |
| 200 個の bag を処理する bash ループを使う | 「フォルダー内のすべての bag でこのパイプラインを実行して」:パイプラインひとつで、フリート全体を処理し、統合レポートを作成します |
データをロボットから転送するために scp/aws s3 sync のスクリプトを使う | パイプラインのステップとして S3、GCS、Azure にアップロードできます。転送先にすでにあるファイルはチェックサムで判別してスキップします |
| 形式ごとに異なるビューアーを使う:PX4 には FlightPlot、ArduPilot には MAVExplorer、Betaflight には Blackbox Explorer | すべての形式で同じ会話ができ、ROS、MCAP、MQTT、Postgres、InfluxDB にも対応します |
| 質問ごとに使い捨ての pandas スクリプトを書く | 質問するだけで、Bagel がクエリを作成して実行します |
明日には削除するスクリプトとコマンドのパイプラインを使う代わりに、平易な言葉でひとこと尋ねれば、答えがひとつ返ってきます。
💬 どんなプロンプトを使えますか?
Bagel には、ほとんど何でも尋ねられます。たとえば、次のような質問ができます。
/spot/status/battery_statesトピックの電流と電圧の相関は?
ロボットが道路の穴にぶつかった気がします。確認のために、z 軸の急な減速を調べてもらえますか?
ドローンが -10 m/s² を超える減速をするたびに、前後 10 秒を残して、それ以外はすべて破棄してください。
先週から、このロボットに何か変化はありましたか?
Bagel の実力を試してみましょう。宙返りするドローンを検出できるでしょうか? その答えは……🎉 もちろんできます。
質問すると、Bagel はデータソースのメタデータとトピックを分析し、 全体像を把握します。
プロンプトに基づき、さらに詳しく調べる必要がある場合は、Bagel が最も関連性の高いトピックを特定し、 その意味と構造を解釈します。その後、関連するトピックのメッセージを Apache Arrow ファイルに書き込み、DuckDBを使用してクエリを生成・実行します。
このプロセスを必要に応じて繰り返し、新しいクエリを実行しながら、質問に対する最適な回答を Bagel が見つけます。
LLM は言語処理に優れていますが、数学は苦手です。Bagel は決定論的な DuckDB SQL クエリを生成することで、この問題を解決します。これらのクエリは 監査できるよう表示され、誤りがあれば Bagel に修正を指示できます。
🐶 Bagel に新しい技を教える
Bagel はPOML ファイルを通じて新しい機能を学習します。POML ファイルは、「技」を説明する構造化された指示の集合です。 たとえば、レイテンシ統計の計算などです。
✍️ .poml ファイルを作成する
たとえば、./bagel_mcp/agent/examples/woof.pomlを定義します。
<poml>
<task>
Count the topics in the data source.
If the count is odd, say "woof", else say "meow".
</task>
<output-format>
Return the sound, the topic count, and a few cute emojis. Nothing else.
</output-format>
</poml>
🗣️ 機能を使う
Bagel に次のようにプロンプトを送ります。
ROS2 bag "./data/sample/ros2/mcap" に対して、POML 機能 "./bagel_mcp/agent/examples/woof.poml" を実行してください。
結果:
meow 🐱 4 topics 🐱💤🎯
独自の技を教える(再ビルド不要)
Bagel は ~/.bagel/capabilities/ から独自の機能を検出します。
- 会話から: ワークフローを一度実行してから、*「これを battery-triage という名前の
機能として保存して」*と伝えます。Claude が
save_agent_capabilityを呼び出し、以降のセッションで再利用できるようになります。 - ファイルから: 手順を記述した Markdown ファイル(パラメーター化された
テンプレートが必要な場合はPOMLファイルも可。
プロジェクトで採用しているスタイルについては
bagel_mcp/agent/compose/pipeline.pomlを参照してください)を~/.bagel/capabilities/に配置します。
どちらの方法でも、機能は list_agent_capabilities に user/<name> として表示され、
run_poml_capability で実行できます。Claude Code、Claude Desktop、または任意の MCP
クライアントから利用できます。チームで使う場合は、このディレクトリを独自の git リポジトリに保存し、すべての
ロボットに同期してください。ファイルを配置するだけです。Linux では、コンテナを起動する前に一度
mkdir -p ~/.bagel/capabilitiesを実行し、マウント先が root ではなく自分の所有になるようにしてください。
📚 ガイド
- 自然言語パイプライン · モデル:ケイデンス、ゲート、タスク。プレビュー → 実行 → 保存 → バッチ処理 → エッジでの常時運用
- イベント駆動型のデータ削減 · イベントを検出し、その周辺のウィンドウを保持します(スニペットまたは削減済みのバッグ1つ)。フリート全体でバッチ処理し、クラウドにアップロードします
- Jevによる異常検知 (ベータ版) · ロボット上で正常な状態を学習し、Jevにそれ以外の状態をラベル付けさせます。JSONラベルを付けて該当するスライスだけをアップロードします。
preview_anomaliesで画面を事前にドライランできます - rosbridge経由でROS2ロボットにライブ接続 · ステップごとのチュートリアル
- ROSテキストログ · バッグを開かずに
~/.ros/logのエラーと警告を確認します - MQTT · ライブIoTトピック、Sparkplug B、エッジ記録
- PostgreSQL / TimescaleDB · すべてのテーブルがトピックです
- InfluxDB 3 · すべての測定値がトピックです
- Automotive MDF4とCAN (ベータ版) · チャネルグループとDBCメッセージがトピックです。単位も一緒に扱えます
- ローカルLLM · Ollamaで完全オフラインに。データもモデルもマシンの外に出ません
📦 インテグレーション
- Rerun · 「Rerunでそのイベントを見せて」:任意の時間ウィンドウを、すぐに開ける記録として出力します
- Lichtblick / Foxglove · イベントウィンドウをMCAPとして出力し、どちらのビューアーにも対応するフレーム設定済みレイアウトを用意します
- PlotJuggler · BagelのMCAP出力を直接開きます。1文でフレーム設定済みのセッションを作成でき、フラット化したCSV/Parquetにエクスポートできます
- Cloudini · cloudini圧縮されたポイントクラウドをデコードするか、バッグのPointCloud2トピックをCompressedPointCloud2に圧縮します
- Slack · パイプラインの発火時に運用チャンネルへ投稿します:「🚨 {asset} で急ブレーキ」
- LeRobot (ベータ版) · 検出したイベントをトレーニングエピソードに変換します:LeRobotDataset v3.0
🚧 制限事項
把握している注意点をまとめました。事前に知っておくことで、思わぬ問題を避けられます。
- 2つのフォーマットはベータ版です。 自動車向けMDF4/CANリーダーは、読み込みに使用するライブラリ(
asammdf、python-can)で生成したファイルを使って検証していますが、実際のCANape/INCA/Vector製のキャプチャはまだテストできていません。LeRobotのエクスポートは、実際のlerobotパッケージでロードテストに問題なく合格していますが、Bagelのエクスポートからポリシーを学習したことはまだありません。 - Jevとの統合はベータ版であり、実際のデプロイから知見を得ている間はベータ版のままです。 これには、
anomalyとdecideのゲート(記録済みログとライブサブスクリプション)、preview_anomalies、ロボット上のlocalバックエンド、およびros2-jazzy-jevイメージが含まれます。Jevバックエンドは、実際の走行、合成故障ログ、ライブMQTTストリームで、Vercel AI Gateway経由のライブJevに対して実行されています。TypeSafeキーを直接使ったテストはまだ行われておらず、既知のインシデントがあるログで検出精度も測定されていません。ライブサブスクリプションでは、フラグが付いたウィンドウはParquet(write_topics_to_file)として保持されます。MCAP/rosbagのスニペットには記録済みログが必要であり、ライブサブスクリプションでは拒否されます。ベースラインは実行ごとに学習され、プロセスの再起動時にリセットされるため、画面モードでは各実行の最初の数分間はフラグが付けられません。ラベル、設定、デフォルト値はリリースごとに変更される可能性があります。 - 削減率はワークロードに依存し、ベンチマークで検証されていません。 削減率は、イベントウィンドウの長さを全体の長さで割った値です。静かな録画では大幅に削減されますが、イベントの多い録画では削減幅が小さくなります。このREADMEに記載された数値はデモ出力の例であり、測定済みのベンチマークではありません。
- MCPエンドポイントには認証がありません。 設計上、localhostのみにバインドされます。データベースのソケットと同様に扱い、お使いのマシンの外部に共有する前にSECURITY.mdをご確認ください。
- 小型のローカルモデルは複数ステップのパイプラインが苦手です。 4~8Bモデルはツールの選択や簡単なSQLには対応できます。イベントウィンドウによる削減や複数トピックの結合には、より大きなモデルが必要です。ローカルLLMガイドをご覧ください。
- ライブデータベースを使ったエンドツーエンドテストはCIの外で実行されます。 InfluxDBおよびPostgresのテストスイートでは、ライブ接続を必要としないテストがCIで実行されます。ライブ接続を使うエンドツーエンドテストは、接続先として指定したインスタンスに対してのみ実行されます。ROS bagの書き込み経路を含むその他すべてのテストはCIで実行されます。
🫶 コントリビューション
ぜひご協力ください!プロジェクトを応援する最も簡単な方法は、GitHubで⭐を付けることです。
その他の貢献方法:
- 新機能をリクエストする
- バグを報告する
- ドキュメントを改善する
- 新しい機能を追加する
コントリビューションの前に、ガイドラインをご確認ください。
Discordサーバーでぜひご参加ください。 定期的に交流しています。
📄 ライセンス
BagelはApache License 2.0に基づくオープンソースです。
エージェントの発見と再現可能なワークフロー
メンテナー向け:発見の監査と評価、 リスティングのメンテナンス、および 再現可能なユーザーレポート。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。