bagel

by Extelligence-aiVerified

Query robotics, drone, and IoT data in plain English through an MCP server, with an intelligent edge data reduction pipeline that keeps only the data that matters.

394
Stars
30
Forks
Python
Language
8/23/2026
Added
View on GitHubDownload ZIP

⚠️ Third-Party Software Notice

This skill is third-party open-source software developed and hosted independently on GitHub. SkillTip is an informational directory and does not control or maintain the underlying repository. Any security checks displayed are automated and limited in scope. Review the source code before installing.

Read the Terms of Service

Installation

Add to your Claude Code skills directory:

# Add to your Claude Code skills
git clone https://github.com/Extelligence-ai/bagel

Getting Started

Guides for using skills like bagel.

Security Report

Verified

Last scanned: —

{
  "status": "PASSED",
  "issues": []
}

README.md

Bagel lets you ask questions about robotics, drone, and IoT data in plain English. Every calculation over your message data is DuckDB SQL, not model guesswork, and Bagel shows you the query so you can audit it.

Is my IMU sensor overheating?

Bagel also has an intelligent edge data reduction pipeline: describe an event and Bagel runs the detection on the robot, keeping the windows that matter and dropping the rest. An MCP server puts all of it in your LLM's hands: Claude Code, Gemini, Cursor, or a fully local model.

Bagel was the first MCP server to ship a real analysis toolkit for robotics data, and it keeps the LLM where it belongs: in front of your logs, never in your robot's control loop.

🥯 Key Features

  • Ask in plain language: No deep domain expertise needed.
  • Transparent calculations: Deterministic SQL queries. No black-box LLM math.
  • Natural-language pipelines: "Keep 10s around every hard brake, drop the rest": one sentence becomes an auditable pipeline: previewed before a byte is written, then run once, across a fleet, or standing at the edge.
  • Broad LLM support: Claude Code, Gemini, Cursor, Codex, and more.
  • Dockerized environments: No local dependencies required.
  • Extensible capabilities: Bagel can learn new tricks.
  • Wide format coverage: Missing your data format? Open a ticket.

⚡️ Quickstart

[!TIP] Already have Claude Code? Just paste the link to this repo and tell Claude what environment you want:

Set up https://github.com/Extelligence-ai/bagel for ROS2 Kilted.

Claude will clone the repo, start Docker, and wire up the MCP connection for you.

📋 Prerequisites

Install Docker Desktop and Claude Code (or another MCP-enabled LLM).

1. Clone and start Bagel

git clone https://github.com/Extelligence-ai/bagel.git && cd bagel
docker compose run --service-ports ros2-kilted

[!TIP] Port 8000 already in use? Set MCP_SERVER_PORT to something else, for example MCP_SERVER_PORT=8100 docker compose run --service-ports ros2-kilted, and use that port in step 2.

Pick the service that matches your environment:

ServiceUse case
ros2-kiltedROS2 Kilted (latest)
ros2-jazzyROS2 Jazzy
ros2-ironROS2 Iron
ros2-humbleROS2 Humble
ros1-noeticROS1 Noetic
ros1-noetic-cvROS1 Noetic + CV
px4PX4 flight logs
ardupilotArduPilot flight logs
betaflightBetaflight flight logs
iotIoT / MQTT (live)

[!TIP] To give Bagel access to your local files, edit compose.yaml before starting Docker: uncomment and update the volumes section under your chosen service.

Wait for this output:

INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

2. Connect Claude Code

In a new terminal:

claude mcp add --transport sse bagel http://localhost:8000/sse

[!NOTE] The MCP endpoint is bound to localhost only (not exposed to the LAN) for security. To share it with other machines, drop the 127.0.0.1 prefix in compose.yaml and put an authenticated proxy in front: see SECURITY.md.

3. Prompt

claude

Summarize the metadata of the ROS2 bag "./data/sample/ros2/mcap".

That’s it: you’re chatting with your data.

🔒 Prefer fully offline?

Swap step 2 for a local model: your data and your LLM stay on the machine:

brew install ollama && ollama serve &                                  # or ollama.com
ollama pull qwen3:8b
uvx ollmcp --mcp-server-url http://localhost:8000/sse --model qwen3:8b

Model picks, expectations, and troubleshooting: Local LLMs guide.

📚 Using a different LLM?

Bagel works with any MCP-enabled LLM. Setup runbooks for tested alternatives:

Can’t find your LLM? Open a ticket.

🔌 Agent plugins (Claude Code and Codex)

Bagel ships an agent plugin: four skills that teach the agent when and how to drive the server (log triage, pipeline authoring, live sinks, visualization export) plus the MCP connection, wired automatically. The same plugin/ directory serves both Claude Code and OpenAI Codex.

/plugin marketplace add Extelligence-ai/bagel
/plugin install bagel@bagel

Codex and ChatGPT users: install bagel from the OpenAI Plugins Directory (one click), or clone the repo and add it as a plugin marketplace (the repo carries .agents/plugins/marketplace.json). Directory installs bundle the skills only, so also connect the server once in ~/.codex/config.toml:

[mcp_servers.bagel]
url = "http://localhost:8000/mcp"

Repo-marketplace and Claude Code installs wire this connection automatically.

Then start the container for your data format (see Quickstart): the plugin connects to http://localhost:8000/mcp by default. Any other MCP client can discover the same workflows server-side via the list_agent_capabilities tool.

Keep what matters, drop the rest

A robot records more data than you can afford to move. Bagel turns a question into a detector, runs it where the data is recorded, and ships only the windows around real events.

Here it is in one conversation:

The session above: a 20-minute (1,200 s) recording and the prompt "keep 10 seconds before and after every deceleration harder than −10 m/s²". The preview detects 7 events, merges them into 4 windows, and keeps 92 s of the 1,200 (7.6%); the run writes a 2.1 GB bag down to 161 MB. These figures are illustrative demo output, not a measured benchmark: the ratio is event-window duration over total duration, so it depends entirely on your workload.

✅ Supported Data Formats

IndustryFormats
RoboticsROS1, ROS2, MCAP (any profile), Copper (via MCAP export), ROS text logs (~/.ros/log)
DronesPX4, ArduPilot, Betaflight
AutomotiveASAM MDF4 (.mf4), CAN captures (.blf/.asc + DBC) · beta
IoTMQTT (live, Sparkplug B), PostgreSQL / TimescaleDB, InfluxDB 3
Hardware stateWaffleForm snapshots (.waffleform.yaml), auto-detected via waffle-iron · beta

🆚 Bagel vs. the Tools You Already Use

You already have ros2 *, PlotJuggler, and grep. Bagel doesn't replace them: it answers the questions they make you work for, then hands off to them:

You do this todayAsk Bagel instead
ros2 bag info for metadata"Summarize this bag": same prompt works on PX4, ArduPilot, MCAP, MQTT, Postgres
ros2 topic echo /imu and eyeball raw values"What's the peak z-deceleration in /imu? Running average over 5 s?" · real SQL underneath: peaks, running averages, percentiles, cross-topic correlations
Scrub PlotJuggler timelines hunting for the event"Find every deceleration under −10 m/s² and cut ±30 s snippets": then open the result in PlotJuggler with a pre-framed layout
rqt_console, or grep ~/.ros/log"Read the ERRORs from ~/.ros/log and tell me what went wrong": tracebacks included, no bag needed
Echo two topics in two terminals, correlate in a spreadsheet"What's the correlation between current and voltage?": topics live in one SQL relation, so joins and corr() are one question
ros2 bag record -a and babysit the diskA standing edge pipeline: record continuously, keep only event windows, drop the rest
A bash loop over 200 bags"Run this pipeline on every bag in the folder": one pipeline, whole fleet, with a combined report
scp/aws s3 sync scripts to ship data off the robotUpload to S3, GCS, or Azure as a pipeline step, checksum-skipping files already there
A different viewer per format: FlightPlot for PX4, MAVExplorer for ArduPilot, Blackbox Explorer for BetaflightThe same conversation for all of them, and ROS, MCAP, MQTT, Postgres, InfluxDB
Write a one-off pandas script per questionAsk the question; Bagel writes and runs the query

One sentence of plain language, one answer, instead of a pipeline of commands and a script you'll delete tomorrow.

💬 What Can I Prompt?

You can ask Bagel almost anything. For example:

What’s the correlation between current and voltage in the /spot/status/battery_states topic?

I think the robot hit a pothole. Can you check for sudden deceleration on the z-axis to confirm?

Every time the drone decelerates harder than -10 m/s², keep 10 seconds before and after. Drop everything else.

Did anything change on this robot since last week?

Time to put Bagel to the test: can it catch a drone doing barrel rolls? Spoiler: 🎉 It totally can.

💡 How Bagel Works

When you ask a question, Bagel analyzes your data source’s metadata and topics to build a high-level understanding.

Based on your prompt, if further inspection is needed, Bagel identifies the most relevant topics and interprets their meaning and structure. Bagel then writes the relevant topic messages to an Apache Arrow file and uses DuckDB to generate and execute queries against it.

This process is repeated as needed, running new queries until Bagel finds the best answer to your question.

LLMs excel at language but struggle with math. Bagel overcomes this by generating deterministic DuckDB SQL queries. These queries are displayed for you to audit, and you can guide Bagel to correct any errors.

🐶 Teach Bagel a New Trick

Bagel learns new capabilities through POML files: a structured set of instructions that describe a “trick,” such as computing latency statistics.

✍️ Create a .poml file

For example, let’s define ./src/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>

🗣️ Use the capability

Prompt Bagel:

Run the POML capability "./src/agent/examples/woof.poml" on the ROS2 bag "./data/sample/ros2/mcap".

Result:

meow 🐱 4 topics 🐱💤🎯

📚 Guides

📦 Integrations

  • Rerun · "show me that event in Rerun": any time window as a ready-to-open recording
  • Lichtblick / Foxglove · event windows as MCAP + pre-framed layouts for either viewer
  • PlotJuggler · open Bagel's MCAP outputs directly; one-sentence pre-framed sessions, flattened CSV/Parquet exports
  • Cloudini · decode cloudini-compressed pointclouds, or compress a bag's PointCloud2 topics into CompressedPointCloud2
  • Slack · pipelines post to your ops channel when they fire: "🚨 hard brake on {asset}"
  • LeRobot (beta) · detected events become training episodes: a LeRobotDataset v3.0

🚧 Limitations

Rough edges we know about, so you don't find them the hard way:

  • Two formats are beta. The automotive MDF4/CAN readers are verified against files we generate with the same libraries that read them (asammdf, python-can); real CANape/INCA/Vector-produced captures haven't crossed our test bench yet. LeRobot exports load-test clean with the real lerobot package, but no policy has been trained from a Bagel export yet.
  • Reduction ratios are workload-dependent, and unbenchmarked. The ratio is event-window duration over total duration: quiet recordings reduce dramatically, eventful ones much less. The figures in this README are illustrative demo output, not a measured benchmark.
  • No authentication on the MCP endpoint. By design it binds to localhost only; treat it like a database socket and see SECURITY.md before sharing it beyond your machine.
  • Small local models struggle with multi-step pipelines. A 4-8B model handles tool selection and simple SQL; event-windowed reduction and multi-topic joins want a bigger model. See the Local LLMs guide.
  • Live-database end-to-end tests run outside CI. The InfluxDB and Postgres suites' pure tests run in CI; their live end-to-end cases only execute against an instance you point them at. Everything else, including the ROS bag write paths, runs in CI.

🫶 Contributing

We’d love your help! The easiest way to support the project is by giving it a ⭐ on GitHub.

Other great ways to contribute:

  • Request new features
  • Report bugs
  • Improve documentation
  • Add new capabilities

Before contributing, please review the guidelines.

Join the conversation in our Discord server. We hang out there regularly.

📄 License

Bagel is open source under the Apache License 2.0.

Frequently Asked Questions

What is bagel?

bagel is an open-source mcp servers skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by Extelligence-ai. Query robotics, drone, and IoT data in plain English through an MCP server, with an intelligent edge data reduction pipeline that keeps only the data that matters. It has 394 GitHub stars.

Is bagel safe to use?

Yes. bagel passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.

How do I install bagel?

Clone the repository with "git clone https://github.com/Extelligence-ai/bagel" and add it to your Claude Code skills directory (see the Installation section above).

What programming language is bagel written in?

bagel is primarily written in Python. It is open-source under Extelligence-ai on GitHub, so you can review or fork the full source.

Are there alternatives to bagel?

Yes. SkillsLLM lists many other MCP Servers skills you can browse and compare side by side. Open the MCP Servers category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh bagel against similar tools.

Comments (0)

No comments yet. Be the first to share your thoughts!

n8n

by n8n-io

12

Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

201,88160,308TypeScript
MCP Serversapisai-tools
View details

Scrapling

by D4Vinci

🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!

75,9137,581Python
MCP Servers
View details

TrendRadar

by sansan0

⭐AI-driven public opinion & trend monitor with multi-platform aggregation, RSS, and smart alerts.🎯 告别信息过载,你的 AI 舆情监控助手与热点筛选工具!聚合多平台热点 + RSS 订阅,支持关键词精准筛选。AI 智能筛选新闻 + AI 翻译 + AI 分析简报直推手机,也支持接入 MCP 架构,赋能 AI 自然语言对话分析、情感洞察与趋势预测等。支持 Docker ,数据本地/云端自持。集成微信/飞书/钉钉/Telegram/邮件/ntfy/bark/slack 等渠道智能推送。

61,65224,883Python
MCP Servers
View details

context7

by upstash

Context7 Platform -- Up-to-date code documentation for LLMs and AI code editors

61,0602,938TypeScript
MCP Servers
View details

High-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph — average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.

39,9393,219C
MCP Servers
View details

Developers Also Liked

Based on votes and bookmarks from developers who liked this skill

ECC

by affaan-m

10

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

242,21936,702JavaScript
AI Agentsai-agentsanthropicclaude-code
View details
15

An agentic skills framework & software development methodology that works.

234,96620,863Shell
AI Agentsai-agentsbrainstorming
View details

n8n

by n8n-io

12

Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

201,88160,308TypeScript
MCP Serversapisai-tools
View details

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

185,94028,768JavaScript
AI Agentsai-agentsanthropicclaude-code
View details

cc-switch

by farion1231

3

A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io

128,8688,826Rust
AI Agentsclaude-codeai-tools
View details