by Extelligence (open source) Claude Desktop, Claude Code, OpenCode, любой MCP-клиент, Python 3.10+, DuckDB, Windows, macOS, Linux
Запросы к данным робототехники, дронов и IoT на естественном языке через MCP-сервер, с интеллектуальным edge-пайплайном сокращения данных, оставляющим только значимое.
Claude управляет умным домом через Home Assistant: включает свет, меняет температуру, запускает сценарии автоматизации, читает показания …
MCP-сервер, соединяющий языковые модели (Claude, GPT, Gemini) с реальными роботами через ROS — двусторонняя связь: публикация/подписка …
MCP-сервер для управления умным домом через Home Assistant. Позволяет Claude читать состояния устройств, управлять автоматизациями и …
MCP-сервер для доступа к актуальной документации библиотек прямо в контексте LLM. Вместо устаревших обучающих данных — …
# Требуются Docker Desktop и Claude Code (или другая LLM с поддержкой MCP) git clone https://github.com/Extelligence-ai/bagel.git && cd bagel docker compose run --service-ports ros2-kilted # Порт 8000 занят? Используйте: MCP_SERVER_PORT=8100 docker compose run --service-ports ros2-kilted claude mcp add --transport sse bagel http://localhost:8000/sse claude # Полностью автономный режим (вместо шага с claude mcp add): brew install ollama && ollama serve & ollama pull qwen3:8b uvx ollmcp --mcp-server-url http://localhost:8000/sse --model qwen3:8b

Bagel позволяет задавать вопросы о данных робототехники, дронов и Интернета вещей на простом английском языке. Каждое вычисление над вашими данными сообщений — это DuckDB SQL, а не предположения модели, и Bagel показывает вам запрос, чтобы вы могли его проверить.
Не перегревается ли мой IMU-датчик?
Bagel также имеет интеллектуальный конвейер сокращения периферийных данных: опишите событие, и Bagel запускает обнаружение на роботе, сохраняя значимые окна и отбрасывая остальное. MCP-сервер передаёт всё это в руки вашей LLM: Claude Code, Gemini, Cursor или полностью локальной модели.
Bagel был первым MCP-сервером, который предоставил реальный набор инструментов анализа для данных робототехники, и он держит LLM там, где ей место: перед вашими журналами, но никогда в контуре управления роботом.
[!TIP] Уже используете Claude Code? Просто вставьте ссылку на этот репозиторий и скажите Claude, какая среда вам нужна:
Настройте https://github.com/Extelligence-ai/bagel для ROS2 Kilted.
Claude склонирует репозиторий, запустит Docker и настроит MCP-подключение за вас.
Установите Docker Desktop и Claude Code (или другую LLM с поддержкой MCP).
git clone https://github.com/Extelligence-ai/bagel.git && cd bagel
docker compose run --service-ports ros2-kilted
[!TIP] Порт 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-iron |
ROS2 Iron |
ros2-humble |
ROS2 Humble |
ros1-noetic |
ROS1 Noetic |
ros1-noetic-cv |
ROS1 Noetic + компьютерное зрение |
px4 |
Полётные журналы PX4 |
ardupilot |
Полётные журналы ArduPilot |
betaflight |
Полётные журналы Betaflight |
iot |
IoT / MQTT (в реальном времени) |
[!TIP] Чтобы предоставить Bagel доступ к вашим локальным файлам, отредактируйте файл
compose.yamlперед запуском Docker: раскомментируйте и обновите разделvolumesдля выбранного сервиса.
Дождитесь следующего вывода:
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
В новом терминале:
claude mcp add --transport sse bagel http://localhost:8000/sse
[!ПРИМЕЧАНИЕ] Конечная точка MCP привязана только к
localhost(не доступна из локальной сети) из соображений безопасности. Чтобы открыть доступ для других машин, удалите префикс127.0.0.1вcompose.yamlи поместите перед ней аутентифицирующий прокси: см. SECURITY.md.
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 работает с любой LLM, поддерживающей MCP. Инструкции по настройке для протестированных альтернатив:
Не нашли свою LLM? Откройте тикет.
Bagel поставляется с плагином для агентов: четыре навыка, которые обучают агента тому, когда и как
управлять сервером (разбор логов, создание конвейеров, живые выходные потоки, экспорт визуализации)
плюс MCP-соединение, настраиваемое автоматически. Одна и та же директория plugin/
обслуживает как Claude Code, так и OpenAI Codex.
/plugin marketplace add Extelligence-ai/bagel
/plugin install bagel@bagel
Пользователи Codex и ChatGPT: установите bagel из
Каталога плагинов OpenAI
(в один клик) или склонируйте репозиторий и добавьте его как маркетплейс плагинов (в репозитории
есть .agents/plugins/marketplace.json). Установки из каталога включают только
навыки, поэтому также подключите сервер один раз в ~/.codex/config.toml:
[mcp_servers.bagel]
url = "http://localhost:8000/mcp"
Установки из репозитория-маркетплейса и Claude Code настраивают это соединение автоматически.
Затем запустите контейнер для вашего формата данных (см. Краткое руководство): плагин
по умолчанию подключается к http://localhost:8000/mcp. Любой другой MCP-клиент может
обнаружить те же серверные рабочие процессы через инструмент list_agent_capabilities.
Робот записывает больше данных, чем вы можете себе позволить перемещать. Bagel превращает вопрос в детектор, запускает его там, где записаны данные, и переносит только окна вокруг реальных событий.
Вот это в одном разговоре:
Сессия выше: запись длительностью 20 минут (1200 с) и промпт "сохранить 10 секунд до и после каждого замедления сильнее −10 м/с²". Предпросмотр обнаруживает 7 событий, объединяет их в 4 окна и сохраняет 92 с из 1200 (7,6%); запуск записывает bag-файл размером 2,1 ГБ в 161 МБ. Эти цифры являются иллюстративным демо-выводом, а не измеренным бенчмарком: соотношение — это длительность окна события к общей длительности, поэтому оно полностью зависит от вашей рабочей нагрузки.
| Отрасль | Форматы |
|---|---|
| Робототехника | ROS1, ROS2, MCAP (любой профиль), Copper (через экспорт в MCAP), текстовые логи ROS (~/.ros/log) |
| Дроны | PX4, ArduPilot, Betaflight |
| Автомобилестроение | ASAM MDF4 (.mf4), захваты CAN (.blf/.asc + DBC) · бета |
| Интернет вещей | MQTT (живой режим, Sparkplug B), PostgreSQL / TimescaleDB, InfluxDB 3 |
| Состояние оборудования | WaffleForm снимки (.waffleform.yaml), автоопределение через waffle-iron · бета |
| ## 🆚 Bagel и инструменты, которые вы уже используете |
У вас уже есть ros2 *, PlotJuggler и grep. Bagel не заменяет их: он отвечает на вопросы, на которые они заставляют вас работать, а затем передаёт им управление:
| Вы делаете это сегодня | Вместо этого спросите Bagel |
|---|---|
ros2 bag info для метаданных |
«Суммируй этот мешок»: один и тот же запрос работает с PX4, ArduPilot, MCAP, MQTT, Postgres |
ros2 topic echo /imu и просмотр сырых значений |
«Каково пиковое замедление по оси z в /imu? Скользящее среднее за 5 с?» · под капотом настоящий SQL: пики, скользящие средние, процентили, корреляции между темами |
| Прокрутка временных шкал PlotJuggler в поисках события | «Найди каждое замедление ниже −10 м/с² и вырежи фрагменты по ±30 с»: затем откройте результат в PlotJuggler с предварительно подготовленным макетом |
rqt_console или grep ~/.ros/log |
«Прочитай сообщения об ошибках из ~/.ros/log и скажи, что пошло не так»: включая трассировки, мешок не нужен |
| Эхо двух тем в двух терминалах, корреляция в электронной таблице | «Какова корреляция между током и напряжением?»: темы живут в одном SQL-отношении, поэтому объединения и corr() — это один вопрос |
ros2 bag record -a и присмотр за диском |
Постоянный граничный конвейер: записывайте непрерывно, сохраняйте только окна событий, отбрасывайте остальное |
| Цикл bash по 200 мешкам | «Запусти этот конвейер для каждого мешка в папке»: один конвейер, весь парк, с общим отчётом |
Скрипты scp/aws s3 sync для выгрузки данных с робота |
Загрузка в S3, GCS или Azure как шаг конвейера, с пропуском файлов по контрольной сумме, если они уже там |
| Разные просмотрщики для разных форматов: FlightPlot для PX4, MAVExplorer для ArduPilot, Blackbox Explorer для Betaflight | Один и тот же разговор для всех них, а также ROS, MCAP, MQTT, Postgres, InfluxDB |
| Написание одноразового pandas-скрипта для каждого вопроса | Задайте вопрос; Bagel напишет и выполнит запрос |
Одно предложение на простом языке, один ответ — вместо конвейера команд и скрипта, который вы удалите завтра.
Вы можете спросить Bagel почти всё что угодно. Например:
Какова корреляция между током и напряжением в теме
/spot/status/battery_states?Я думаю, робот наехал на яму. Можешь проверить резкое замедление по оси z, чтобы подтвердить?
Каждый раз, когда дрон замедляется сильнее, чем -10 м/с², сохраняй 10 секунд до и после. Всё остальное отбрасывай.
Изменилось ли что-нибудь на этом роботе с прошлой недели?
Пришло время испытать Bagel: сможет ли он поймать дрон, выполняющий бочки? Спойлер: 🎉 Он точно может.
Когда вы задаёте вопрос, Bagel анализирует метаданные и темы вашего источника данных, чтобы сформировать высокоуровневое понимание.
Если на основе вашего запроса требуется дальнейшее изучение, Bagel определяет наиболее релевантные темы и интерпретирует их смысл и структуру. Затем Bagel записывает сообщения соответствующих тем в файл Apache Arrow и использует DuckDB для генерации и выполнения запросов к нему.
Этот процесс повторяется по мере необходимости: выполняются новые запросы, пока Bagel не найдёт наилучший ответ на ваш вопрос.
LLM отлично справляются с языком, но испытывают трудности с математикой. Bagel преодолевает это, генерируя детерминированные SQL-запросы DuckDB. Эти запросы отображаются для вашей проверки, и вы можете направлять Bagel для исправления любых ошибок.
Bagel осваивает новые возможности с помощью файлов POML: структурированных наборов инструкций, описывающих «трюк». такие как вычисление статистики задержек.
Например, определим ./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>
Запросите Bagel:
Запустите POML-возможность "./src/agent/examples/woof.poml" на мешке ROS2 "./data/sample/ros2/mcap".
Результат:
meow 🐱 4 topics 🐱💤🎯
~/.ros/log без открытия мешкаИзвестные нам шероховатости, чтобы вы не столкнулись с ними на собственном опыте:
asammdf, python-can); реальные записи, созданные CANape/INCA/Vector, ещё не прошли наш тестовый стенд. Экспорт LeRobot проходит нагрузочное тестирование с настоящим пакетом lerobot, но ни одна политика ещё не была обучена на экспорте Bagel.Мы будем рады вашей помощи! Самый простой способ поддержать проект — поставить ему ⭐ на GitHub.
Другие отличные способы внести вклад:
Прежде чем вносить вклад, пожалуйста, ознакомьтесь с рекомендациями.
Присоединяйтесь к обсуждению на нашем Discord-сервере. Мы регулярно там бываем.
Bagel — это open-source проект на условиях лицензии Apache 2.0.