Bagel
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| describe_data_sourceA | Inspect a robotics, drone, or IoT log first: returns source metadata, available topics, and instructions for summarizing them. Use describe_topic next for field schemas before SQL. Does not return message rows or detect anomalies. Paths are resolved on the Bagel server; runtime and schema support depend on the selected service. |
| describe_topicA | Inspect one known topic before writing SQL or event predicates. Returns its DuckDB schema, original message definition, and query instructions, without message rows. Discover topic names with describe_data_source. Confirm units from the definition or user; do not infer units from field names. |
| query_messagesA | Answer quantitative questions with read-only DuckDB SQL over one topic: filtering, aggregates, downsampling, and event evidence. Call describe_data_source and describe_topic first; use the returned schema and show the SQL to the user. Returns rows as dictionaries. Use read_loggings for textual diagnostics. Time bounds are inclusive source timestamps in seconds, not offsets from the first message. |
| read_loggingsA | Read textual INFO/WARN/ERROR diagnostics from a recorded source, optionally within inclusive source-time bounds in seconds. Returns logging records, or an empty list when no logging topics exist. Use query_messages for numerical signals, statistics, and threshold detection; empty diagnostics do not prove a healthy log. |
| list_live_topicsA | Discover topic names from a live broker or ROS bridge before subscribing. Supported type_ values: mqtt, ros1.bridge, ros2.bridge. Requires a reachable service; specify host and port when defaults do not fit. Returns topic names without starting a persistent recording. Use describe_data_source for an existing recorded log. |
| subscribe_live_topicsA | Start a background subscription to mqtt, ros1.bridge, or ros2.bridge and persist messages locally; returns the sink directory for subsequent analysis. Use list_live_topics first. An optional pipeline runs continuously on incoming messages and may write or upload artifacts. overwrite=True clears existing topic buffers. Stop it with unsubscribe_live_topics. Not for inspecting an existing file. |
| unsubscribe_live_topicsA | Stop topics started by subscribe_live_topics on a running mqtt, ros1.bridge, or ros2.bridge subscription (same type_, host and port). Omit topics to stop all of them. A standing pipeline finishes its queued runs and its end-of-stream run first, which may write or upload artifacts. Recorded messages stay in the returned sink directory for analysis. Once nothing is subscribed the connection is closed. Never opens a connection: errors if there is no running subscription there. |
| run_poml_capabilityA | Load reusable agent instructions from a POML or Markdown file; returns a prompt for the calling agent to follow. Discover paths with list_agent_capabilities. POML accepts template context; Markdown rejects nonempty context. Loading the prompt does not itself analyze data, execute a pipeline, or write reduction artifacts. Use run_pipeline for an approved executable pipeline config. |
| list_agent_capabilitiesA | List every capability available to run: the predefined |
| save_agent_capabilityA | Save a reusable workflow as a named capability so it can be discovered with |
| delete_capabilityA | Delete a capability previously saved with |
| list_pipeline_capabilitiesA | Discover available task and gate modules before authoring pipeline YAML. Returns module paths, constructor parameters, summaries, and availability. These are executable building blocks, not saved workflows: use list_pipelines for saved configs and list_agent_capabilities for reusable agent instructions. |
| preview_pipelineA | Preview an event-window reduction without writing artifacts. Inspect source and topic schemas first, then provide a SQL boolean predicate and nonnegative pre/post seconds. Detects false-to-true transitions, debounces nearby events, merges overlapping windows, and returns event timestamps, intervals, total seconds, and kept seconds/fraction. Report these results and obtain user confirmation before executing the reduction with run_pipeline or run_pipeline_batch. Does not predict output byte size. |
| preview_anomaliesA | Dry-run the on-robot anomaly screen over a recorded log without calling any decision model or writing artifacts. Learns a rolling baseline the way the |
| save_pipelineB | Persist a pipeline configuration to a YAML file so it can be reused, edited, or run later with |
| list_pipelinesA | List the pipeline YAML files saved by |
| get_pipelineA | Return the full configuration of one pipeline saved by |
| delete_pipelineA | Delete exactly one pipeline YAML file previously written by |
| run_pipelineA | Execute one pipeline config against its single config.path after configuration and input validation. For event reductions, first call preview_pipeline, report events and kept seconds, and obtain user confirmation. Returns pipeline status, run counts, and artifact paths; inspect status for failures. Tasks may write files or contact external services. Use save_pipeline to store without executing, or run_pipeline_batch for multiple sources. |
| run_pipeline_batchA | Execute one pipeline config for multiple explicit source paths or globs, overriding config.path for each source. Each source runs independently; returns per-source statuses/errors and totals. For event reductions, preview each source to be reduced and obtain confirmation of the batch scope before executing. Tasks may write files or contact external services. Use run_pipeline for a single source. A glob matching nothing is treated as a literal path. |
| export_for_plotjugglerA | Write a selected time window as flattened scalar CSV plus a PlotJuggler XML layout; returns paths, plotted curves, and an opening command. Choose this for scalar plotting in PlotJuggler, not native bag preservation. Inspect topic schemas and use inclusive source timestamps in seconds. Automatically selects up to eight numeric curves unless signals are specified. Requires the separate viewer to open; does not launch it. |
| export_for_rerunA | Write a selected time window as scalar time series in a Rerun .rrd recording; returns its path, signals, and an opening command. Choose this when the user requests Rerun. Requires rerun-sdk (uv sync --group viz) and a separate viewer. Inspect topic schemas and use source timestamps in seconds. This exporter does not produce camera or 3D scene replay and does not launch the viewer. |
| export_for_lichtblickA | Write a selected time window as JSON-encoded MCAP plus a plot layout for Lichtblick or Foxglove; returns paths, curves, and opening instructions. Choose this for those viewers, not byte-preserving native ROS/CDR export. Inspect topic schemas and use source timestamps in seconds. Automatically selects up to eight numeric plot curves unless signals are specified. Requires a separate viewer; does not launch it. |
| export_for_lerobotA | Write selected event windows as a LeRobotDataset v3.0: one episode per window, scalar signals grouped into feature vectors and resampled to a uniform fps using last observation carried forward. Returns the dataset directory, episode/frame counts, and loading instructions. Choose this for robot-learning dataset preparation, not interactive viewing or model training. Beta: load compatibility tested; actual training-run validation remains outstanding. |
| snap_hardwareA | Auto-detect the robot's current hardware, firmware, and software using waffle-iron and return the resulting hardware state. Requires the waffle CLI on PATH (cargo install waffle-iron). The WaffleForm it writes is immediately queryable as a data source. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 25 tools
Each tool targets a distinct resource or action: capabilities, pipelines, data-source inspection, live-topic subscriptions, and exports are all clearly separated. Similar-sounding tools such as run_poml_capability versus run_pipeline, list_pipelines versus list_pipeline_capabilities, and query_messages versus read_loggings are explicitly cross-referenced and disambiguated in their descriptions.
The set overwhelmingly follows a verb_noun snake_case pattern with consistent list/save/delete/run/preview/export verbs. Minor deviations include run_poml_capability supporting Markdown despite the POML-specific name, delete_capability breaking the save_agent_capability/list_agent_capabilities symmetry, and the somewhat vague snap_hardware verb.
With 25 tools the server sits exactly in the heavy 16-25 range, making it borderline even though the domain is fairly broad. The pipeline and capability management clusters plus the four exporter tools add significant surface area, though none of the tools feel entirely redundant.
Core lifecycles are covered well: capabilities have list/save/run/delete, pipelines have save/get/list/delete/run/batch/preview, and data inspection covers schemas, SQL queries, and textual logs. Minor gaps remain, such as no tool to enumerate recorded data sources or produce byte-preserving native bag exports, but agents can work around these.