MCP Directory

Bagel

Chat with your robotics, drone, and IoT data — deterministic SQL over ROS, PX4, ArduPilot & Betaflight logs.

Unverified
SSE (remote)
No auth
Python

Add to your client

Copy the config for your MCP client and paste it into its config file.

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

Paste into ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "bagel": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "http://0.0.0.0:8000/sse"
      ]
    }
  }
}

Claude Desktop connects to remote servers through the `mcp-remote` proxy (installed on first run via npx). Restart Claude Desktop after saving.

Step-by-step guides: Add to Claude Desktop · Add to Cursor · Add to Windsurf

Before you start

  • Docker Desktop
  • An MCP-enabled LLM client (e.g. Claude Code, Gemini CLI, Codex, Cursor, Copilot)
  • A supported data source: ROS1/ROS2 bags, or PX4 / ArduPilot / Betaflight flight logs

About Bagel

Bagel turns trapped physical-world data into something you can chat with. When you ask a question, it inspects the data source's metadata and available topics, then drills into the relevant topics, materializes their messages into an Apache Arrow file, and runs deterministic DuckDB SQL to compute the answer — iterating with new queries until it converges. The generated SQL is shown so you can audit and correct it. Bagel runs entirely inside Docker images keyed to your robotics/drone stack and connects to any MCP-enabled LLM over SSE.

Tools & capabilities (7)

describe_data_source

Summarize a data source without returning its messages: a brief summary, basic metadata (start time, message count, config parameters), and a list of available topics grouped by semantic meaning.

describe_topic

Generate a structured summary of a single topic: short summary, DuckDB schema (columns and types), original IDL definition, and guidelines for writing DuckDB SQL queries against it. Does not return actual data.

query_messages

Run a DuckDB SQL query against messages from a single topic, with optional start/end time windowing. Used to filter, aggregate, and downsample message data and answer questions about it.

read_loggings

Extract INFO, WARN, and ERROR log messages from a data source, with optional time filtering. Useful for debugging and diagnostics.

list_live_topics

Connect to a live data stream (e.g. a ROS bridge or PX4 telemetry) and list the topics currently available for subscription.

subscribe_live_topics

Connect to a live data stream and subscribe to one or more topics, persisting the messages to a local sink directory whose path can be fed into the other tools.

run_poml_capability

Run a predefined capability described in a .poml file (task instructions plus output format), optionally injecting context values to parameterize it. This is how Bagel learns new 'tricks'.

What this server can do

Bagel provides tools for these capabilities — tap one to see every MCP server that does the same:

When to use it

  • Ask plain-language questions about ROS bags or flight logs, e.g. correlating current and voltage on a battery_states topic
  • Confirm a physical event — like checking for sudden z-axis deceleration after a robot hits a pothole
  • Diagnose hardware issues such as whether an IMU sensor is overheating
  • Tune a drone's PID by analyzing recorded telemetry
  • Pull INFO/WARN/ERROR logs from a data source for debugging
  • Define and run custom analysis capabilities (POML 'tricks') over a data source

Security notes

Runs locally via Docker and binds the SSE endpoint to http://0.0.0.0:8000/sse with no authentication, so anyone who can reach that port can query the server. To grant Bagel access to local data files, you must explicitly uncomment and edit the volumes section in compose.yaml. MCP tool outputs can be large; the docs suggest raising MAX_MCP_OUTPUT_TOKENS in Claude Code to avoid token-limit errors.

Bagel FAQ

Does Bagel let the LLM do the math?

No. Bagel writes the relevant topic messages to an Apache Arrow file and generates deterministic DuckDB SQL queries to compute answers. The SQL is displayed so you can audit it and guide corrections, avoiding black-box LLM arithmetic.

Which data formats and stacks are supported?

Robotics: ROS1 and ROS2 (Noetic, Humble, Iron, Jazzy, Kilted images, plus a ROS1 Noetic + CV variant). Drones: PX4, ArduPilot, and Betaflight flight logs. IoT formats are listed as coming soon.

How do I connect it to Claude Code?

Start the matching Docker service (e.g. `docker compose run --service-ports ros2-kilted`), wait for Uvicorn to report it is running on http://0.0.0.0:8000, then run `claude mcp add --transport sse bagel http://0.0.0.0:8000/sse`. It also works with Gemini CLI, Codex, Cursor, and Copilot via the provided runbooks.

Can I teach Bagel new capabilities?

Yes. Capabilities are authored as POML files that specify a task and an output format. You then invoke them with the run_poml_capability tool, pointing at your .poml file and the target data source.

Alternatives to Bagel

Compare all alternatives →

Official MCP server providing persistent, file-backed knowledge-graph memory across sessions.

Verified
stdio (local)
No auth
TypeScript
9 tools
Updated 5 months agoRepo

Structured step-by-step reasoning tool for breaking problems into revisable thought sequences.

Verified
stdio (local)
No auth
TypeScript
1 tool
Updated 6 months agoRepo

Fully managed remote server for AWS docs, blogs, What's-New and Well-Architected guidance — no key.

Verified
HTTP (remote)
No auth
Hosted
6 tools
Updated 5 months agoRepo