
How to add Bagel to Windsurf
Chat with your robotics, drone, and IoT data — deterministic SQL over ROS, PX4, ArduPilot & Betaflight logs. Paste the config into ~/.codeium/windsurf/mcp_config.json and restart Windsurf.
Last updated June 14, 2026 · 383★ · sse · no auth
Windsurf config for Bagel
git clone https://github.com/Extelligence-ai/bagel.git && cd bagel && docker compose run --service-ports ros2-kilted{
"mcpServers": {
"bagel": {
"serverUrl": "http://0.0.0.0:8000/sse"
}
}
}Remote server — no local install needed. Restart the client after saving the config.
Setup steps
- 1Open Windsurf → Cascade → the hammer/MCP icon → Configure (or edit ~/.codeium/windsurf/mcp_config.json).
- 2Paste the Bagel config below.
- 3Fill in placeholder secrets, then save.
- 4Click Refresh in the MCP panel.
- 5Bagel's tools become available to Cascade.
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
What Bagel can do in Windsurf
describe_data_sourceSummarize 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_topicGenerate 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_messagesRun 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_loggingsExtract INFO, WARN, and ERROR log messages from a data source, with optional time filtering. Useful for debugging and diagnostics.
list_live_topicsConnect to a live data stream (e.g. a ROS bridge or PX4 telemetry) and list the topics currently available for subscription.
subscribe_live_topicsConnect 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_capabilityRun 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'.
Security
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 + Windsurf FAQ
Where is the Windsurf config file?
Windsurf reads MCP servers from ~/.codeium/windsurf/mcp_config.json. Paste the Bagel config there under the "mcpServers" key and restart the client.
Is Bagel safe to use with Windsurf?
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.
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.