redbees-modem-mcp
MCP-сервер для модема Redbees (Zephyr RTOS): пошаговая генерация и проверка Lua-скриптов, полный доступ к устройству по SMP (mcumgr) через serial/BLE/UDP-DTLS и прошивка через esptool. Подключается к любому MCP-хосту (Claude Desktop, IDE, Codex и т.д.). Работает офлайн.
🚀 Новичку — начните с раздела «Быстрый старт с нуля» ниже: установка на чистой Windows/Linux (VS Code + Cline), простым языком, по шагам. Всё, что после него, — технический справочник.
Быстрый старт с нуля
Это раздел для тех, кто начинает с чистой системы — ничего заранее
устанавливать не нужно. К концу у вас будет: редактор VS Code с ИИ-ассистентом
Cline, подключённый к нему MCP-сервер redbees-modem-mcp (генерация Lua,
доступ к модему, прошивка) и выбранная модель ИИ. Займёт ~20–30 минут (в
основном ожидание загрузок).
- Что понадобится
- Шаг 1. Установить VS Code
- Шаг 2. Установить расширение Cline
- Шаг 3. Установить uv
- Шаг 4. Скачать MCP-сервер
- Шаг 5. Скачать поисковую модель
- Шаг 6. Прописать MCP-сервер в Cline
- Шаг 7. Подключить модель ИИ (LLM) в Cline
- Шаг 8. Проверка
Что понадобится
- Компьютер с Windows 10/11 или Linux и доступом в интернет.
- Модем Redbees и USB-кабель — понадобится для команд к устройству (генерацию Lua можно пробовать и без модема).
- Доступ к модели ИИ. Cline сам ИИ не содержит — он обращается к провайдеру.
Варианты:
- Anthropic (Claude) — ключ на https://console.anthropic.com → API Keys;
- OpenRouter (https://openrouter.ai) — один ключ на много моделей;
- Ollama с облачной моделью — большие модели считаются в облаке Ollama, своя мощная видеокарта не нужна (см. вариант в шаге 7).
Две разные «модели» не перепутайте:
- модель ИИ (LLM) — «мозг» ассистента, подключается ключом в Cline (шаг 7);
- поисковая модель (эмбеддинги) — нужна серверу для поиска по базе знаний, скачивается в шаге 5. Её настраивать не надо.
Шаг 1. Установить VS Code
Windows:
- Откройте https://code.visualstudio.com и нажмите Download for Windows.
- Запустите скачанный установщик, жмите Далее со значениями по умолчанию.
Linux:
# Ubuntu / Debian — через snap (проще всего):
sudo snap install code --classic
Если snap нет — скачайте .deb с https://code.visualstudio.com и установите
двойным кликом или sudo apt install ./code_*.deb.
Запустите VS Code.
Шаг 2. Установить расширение Cline
- В VS Code слева нажмите значок Extensions (или
Ctrl+Shift+X). - В поиске введите Cline.
- У расширения Cline нажмите Install.
- Слева появится новый значок Cline — на него будем нажимать дальше.
Шаг 3. Установить uv
uv — маленькая программа, которая сама развернёт окружение сервера и запустит
его одной командой. Свой Python ставить не нужно.
Откройте терминал (Windows: меню Пуск → «PowerShell»; Linux: «Terminal»).
Windows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
После установки закройте и снова откройте терминал, затем проверьте:
uvx --version
Должна появиться строка с версией. Если «команда не найдена» — см. «Устранение проблем».
Шаг 4. Скачать MCP-сервер
Установите сам сервер заранее — иначе при первом подключении Cline может не дождаться его загрузки (~2 ГБ на диске, в основном PyTorch) и отключиться по таймауту.
В терминале:
uv tool install redbees-modem-mcp
Дождитесь строк вида:
Installed redbees-modem-mcp
Installed 2 executables: redbees-modem-mcp, redbees-modem-mcp-download-model
Первый раз — несколько минут, зависит от скорости интернета. Повторные переустановки ничего заново не качают — всё берётся из кэша uv.
Понадобится ~2 ГБ свободного места на системном диске. Если места мало, загрузка оборвётся с ошибкой «Недостаточно места на диске» (os error 112).
Шаг 5. Скачать поисковую модель
Модель для семантического поиска по базе знаний (~1 ГБ) тоже стоит скачать заранее, а не ждать первого запроса в Cline.
В том же терминале команда из шага 4 уже добавила нужную команду — просто запустите:
redbees-modem-mcp-download-model
Дождитесь строки Done! Model saved to: ... (первый раз — несколько минут).
Модель сохранится в кэш (~/.cache/redbees-modem-mcp) и повторно скачиваться
не будет.
Шаг 6. Прописать MCP-сервер в Cline
- В VS Code нажмите значок Cline слева.
- В окне Cline нажмите значок MCP Servers (вверху), затем Configure MCP
Servers — откроется файл
cline_mcp_settings.json. - Вставьте в него это (если в файле уже есть
{ }— впишите блокredbees-modemвнутрьmcpServers) и сохраните (Ctrl+S):
{
"mcpServers": {
"redbees-modem": {
"command": "redbees-modem-mcp",
"args": [],
"env": { "RB_TRANSPORT": "stdio" },
"disabled": false,
"autoApprove": [],
"timeout": 3600
}
}
}
"RB_TRANSPORT": "stdio"прописан не для красоты. Сервер выбирает stdio только потому, что переменной нет, а блокenvхоста накладывается поверх унаследованного окружения. ЕслиRB_TRANSPORT=streamable-httpкогда-нибудь окажется в системных переменных (естественный шаг, когда гоняешь HTTP-сервер), то без этой строки хост запустит сервер, а тот вместо ответа на stdin поднимет HTTP-порт — и хост отвалится по таймауту.
Команда redbees-modem-mcp — тот же исполняемый файл, который установил
шаг 4 (uv tool install); используем его напрямую,
а не через uvx, чтобы не ставить те же ~2 ГБ зависимостей второй раз в
отдельную временную среду.
После сохранения Cline сам запустит сервер. В списке MCP напротив redbees-modem
должен загореться зелёный индикатор. Первый запуск может занять до минуты
(модель грузится в память).
Если Cline пишет «redbees-modem-mcp not found» — см. «Устранение проблем».
Шаг 7. Подключить модель ИИ (LLM) в Cline
- В окне Cline нажмите значок шестерёнки (Settings).
- В API Provider выберите провайдера (например, Anthropic).
- Вставьте свой API-ключ (из раздела «Что понадобится»).
- Выберите модель (например, свежую модель Claude) и сохраните.
Теперь у ассистента есть «мозг». Проверять — на следующем шаге.
Вариант: Ollama с облачной моделью. Если не хотите платный API-ключ Anthropic/OpenAI, можно подключить Ollama и запускать большие модели в облаке Ollama — тяжёлую модель считают серверы Ollama, локальная видеокарта не нужна, а Cline обращается к локальному Ollama как обычно.
- Установите Ollama с https://ollama.com/download (Windows/Linux/macOS).
- Войдите в аккаунт Ollama (нужно для облачных моделей) — в терминале:
(или просто следуйте подсказке при первом запуске облачной модели).ollama signin - Скачайте облачную модель — у неё суффикс
-cloud, например:
Другие варианты:ollama pull gpt-oss:120b-cloudqwen3-coder:480b-cloud,deepseek-v3.1:671b-cloud. - В настройках Cline выберите API Provider = Ollama, оставьте Base URL
http://localhost:11434и выберите скачанную облачную модель.
Ollama умеет работать и полностью локально (маленькая модель на вашем компьютере, без входа в аккаунт и без облака) — но для сложной генерации Lua облачные модели заметно сильнее.
Шаг 8. Проверка
-
Подключите модем по USB.
- Windows: он появится как порт
COM3/COM5и т.п. (посмотреть можно в «Диспетчере устройств» → «Порты (COM и LPT)»). - Linux: обычно
/dev/ttyUSB0или/dev/ttyACM0.
- Windows: он появится как порт
-
В окне чата Cline напишите простой запрос, например:
Сгенерируй Lua-скрипт, который выводит статус модема.
или, с подключённым модемом:
Запусти диагностику устройства на COM5.
-
Cline вызовет инструменты сервера. При первом вызове может думать чуть дольше. Когда инструмент «пишет» в устройство (прошивка, запись настроек), сервер сначала покажет превью и выполнит действие только после подтверждения — это нормально и безопасно.
Готово 🎉 Обновление сервера до новой версии не автоматическое (он установлен
через uv tool install): uv tool upgrade redbees-modem-mcp, затем
перезапустите сервер в Cline.
Развёртывание на другом ПК
Клонировать репозиторий не нужно: и код, и база знаний (векторный стор + 48 Lua-примеров) целиком лежат в wheel на PyPI. По сети докачивается только модель эмбеддингов (~1 ГБ, один раз). Нужен uv — если его нет, см. Шаг 3.
Если сервер запускает MCP-хост (stdio)
uv tool install redbees-modem-mcp
redbees-modem-mcp-download-model
Дальше — блок в mcp_config.json хоста, см.
stdio через uv tool install.
Вторая команда не обязательна, но без неё модель качается при первом запросе, и
хост может отвалиться по таймауту.
Если нужен локальный HTTP-сервер
uv tool install redbees-modem-mcp
RB_TRANSPORT=streamable-http RB_PORT=8082 redbees-modem-mcp
PowerShell:
uv tool install redbees-modem-mcp
$env:RB_TRANSPORT="streamable-http"; $env:RB_PORT="8082"; redbees-modem-mcp
Клиенты подключаются к http://127.0.0.1:8082/mcp. Лаунчеры run_server.* и
.env тут не участвуют — они живут в репозитории, а переменные задаются прямо в
окружении. Если хочется именно конфиг-файл, ставь из исходников
и запускай run_server.*.
Linux: PyPI тянет CUDA-сборку torch
На Linux torch с PyPI приезжает с CUDA — это +15 пакетов nvidia-* и лишние
~3 ГБ, которые серверу не нужны: эмбеддинги считаются на CPU. Ставь в venv с
явным CPU-бэкендом:
uv venv
UV_TORCH_BACKEND=cpu uv pip install redbees-modem-mcp
RB_TRANSPORT=streamable-http .venv/bin/redbees-modem-mcp
На Windows и macOS обход не нужен: колесо torch с PyPI там и так без CUDA,
хватает обычного uv tool install.
UV_TORCH_BACKENDдействует наuv pip install, но не заявлена дляuv tool install— поэтому здесь venv, а не tool. Установка из репозитория (git+…) тоже даёт CPU-сборку: она закреплена вpyproject.tomlчерез[tool.uv.sources], и на исходники это правило распространяется, в отличие от метаданных на PyPI.
Установка (другие способы)
Кроме uv tool install из раздела выше, сервер можно поставить и так:
Через uvx (без установки)
uvx redbees-modem-mcp
uvx (часть uv) сам скачивает и запускает пакет
эфемерно — отдельный venv не создаётся, но каждый запуск заново резолвит
окружение (из уже скачанного кэша, не по сети).
Через pip
pip install redbees-modem-mcp
Из исходников (для разработки)
Рекомендуется использовать uv — он автоматически настроит .venv и установит легковесную CPU-сборку PyTorch:
uv sync # рекомендуемый способ: быстрое развёртывание окружения
# или классический способ:
pip install -e . # RAG-зависимости теперь в core (torch и пр. включены)
Запуск
Проще всего — готовые скрипты-лаунчеры в корне проекта: поднимают локальный
HTTP-сервер (streamable-http) на http://127.0.0.1:8082/mcp. Сами находят
среду Python (uv run, затем .venv, затем системный) — отдельный exe не нужен.
Все настройки живут в .env рядом с лаунчерами; шаблон со всеми переменными
и комментариями — .env.example. При первом запуске лаунчер
создаст .env из шаблона сам. .env в git не коммитится (в нём локальные пути
и HF_TOKEN) — коммитится только .env.example.
.env— приоритетный источник настроек: сервер загружает его с переопределением переменных окружения (load_dotenv(override=True)). Настройки из.envнадежно перекрывают любые унаследованные системные переменные ОС, предотвращая конфликты (например, со старымRB_MODEL_DIRна удаленную папку). Следствие: разовыйRB_PORT=9000 ./run_server.shне сработает — правьте.env.
.\run_server.ps1 # Windows PowerShell
run_server.bat # Windows: двойной клик или cmd
./run_server.sh # Linux/macOS (chmod +x один раз)
stdio-лаунчера нет намеренно: в stdio-режиме сервер поднимает сам MCP-хост через
mcp_config.json(см. ниже) — запускать его руками не нужно.
Нет файла
redbees-modem-mcp.exe, только.py? Это нормально. Exe не хранится в репозитории — это генерируемый console-script, который создаётpip install -e .в папкеScriptsтвоего venv (а.venv/в.gitignore). Лаунчеры иpython -mего не требуют.
Вручную, без лаунчера. redbees-modem-mcp — это console-script; откуда он
вызывается, зависит от способа установки:
uv tool install/ uvx: команда сама резолвит и запускает пакет.- pip / из исходников: скрипт кладётся в папку Scripts твоего venv
(
\.venv\Scripts\redbees-modem-mcp.exe). Голое имяredbees-modem-mcpсработает, только если этот venv активирован. Иначе — ошибка «команда не распознана».
Надёжные способы (Windows PowerShell, установка из исходников):
# 1) активировать venv, потом звать по имени
.\.venv\Scripts\Activate.ps1
redbees-modem-mcp
# 2) без активации — полный путь к exe в venv
.\.venv\Scripts\redbees-modem-mcp.exe
# 3) без активации — через python -m (тот же venv)
.\.venv\Scripts\python.exe -m redbees_modem_mcp
# HTTP-режим без лаунчера (лаунчер делает то же, взяв значения из .env):
$env:RB_TRANSPORT="streamable-http"; $env:RB_PORT="8082"; .\.venv\Scripts\python.exe -m redbees_modem_mcp
Транспорты
Сервер поддерживает два транспорта (выбор через RB_TRANSPORT):
stdio(по умолчанию) — по одному серверу на хост, запускает сам хост. Обычно руками не запускается (см.mcp_config.jsonниже).streamable-http/sse— один локальный сервер, много клиентов: один процесс → одна загруженная модель эмбеддингов на всех (меньше RAM, чем в stdio, где каждый хост поднимает свою копию). Клиенты подключаются кhttp://127.0.0.1:8082/mcp(дляsse— эндпоинт/sse, только legacy). Слушает толькоlocalhost; аутентификации нет — пока сервер запущен, любой локальный процесс может к нему обращаться.
⚠️ Не привязывайте сервер к внешнему интерфейсу. По умолчанию
RB_HOST=127.0.0.1(только localhost). Если выставитьRB_HOST=0.0.0.0, управление устройством — включая прошивку и стирание flash — станет доступно из сети без всякой авторизации. Для доступа извне поднимайте аутентифицирующий обратный прокси.
Подключение в mcp_config.json
Раздел «Быстрый старт с нуля» уже показывает конкретно Cline. Здесь — общий формат и другие хосты/транспорты.
stdio через uv tool install (рекомендуется)
uv tool install redbees-modem-mcp
{
"mcpServers": {
"redbees-modem": {
"command": "redbees-modem-mcp",
"args": []
}
}
}
Обновление до новой версии не автоматическое: uv tool upgrade redbees-modem-mcp.
stdio через uvx (эфемерно, без установки)
Не требует отдельного шага установки, но каждый запуск резолвит окружение
заново (правда, из уже скачанного кэша — не по сети) и не переиспользует venv
из uv tool install:
{
"mcpServers": {
"redbees-modem": {
"command": "uvx",
"args": ["redbees-modem-mcp"]
}
}
}
Если хост пишет «команда не найдена» — укажите полный путь к exe (обычно
~/.local/bin/redbees-modem-mcp[.exe]или~/.local/bin/uvx[.exe]) в полеcommand. Частая причина — GUI-хост был открыт ДО установки и не видит обновлённый PATH; перезапустите хост целиком.
HTTP/SSE вместо stdio. Если нужен один общий сервер (одна загруженная модель на несколько клиентов), подними его отдельно, а хост подключи по URL. Как поднять — зависит от способа установки:
- source-install (клонированный репозиторий +
pip install -e .): готовые лаунчеры в корне проекта —run_server.ps1/run_server.bat(Windows) илиrun_server.sh(Linux/macOS); по умолчаниюstreamable-httpнаhttp://127.0.0.1:8082/mcp(настройки — в.env, шаблон.env.example); uv tool install: однострочник$env:RB_TRANSPORT="streamable-http"; redbees-modem-mcp
Затем в cline_mcp_settings.json вместо command/args укажите URL:
{ "mcpServers": { "redbees-modem": { "url": "http://127.0.0.1:8082/mcp" } } }
Сервер должен быть запущен до подключения хоста. Для legacy-транспорта sse
(RB_TRANSPORT=sse) эндпоинт — /sse.
stdio из локального venv
Хост запускает сервер не из твоего активированного venv, поэтому указывай
полный путь к exe (или к python venv + -m), а не голое имя:
{
"mcpServers": {
"redbees-modem": {
"command": "D:/PycharmProjects/rb-modem-assistant/.venv/Scripts/redbees-modem-mcp.exe",
"env": {
"RB_TRANSPORT": "stdio",
"RB_MODEL_DIR": "D:/PycharmProjects/rb-modem-assistant/models/jina-code-embeddings-0.5b"
}
}
}
}
HTTP (streamable-http)
Сервер поднимаешь сам (лаунчером run_server.* или вручную), а клиент
подключаешь к URL http://127.0.0.1:8082/mcp. Как именно — зависит от клиента:
-
Claude Code / клиенты с нативной поддержкой HTTP (
~/.claude.json) — прямое полеurl:{ "mcpServers": { "redbees-modem": { "type": "http", "url": "http://127.0.0.1:8082/mcp" } } }
-
Claude Desktop — его
claude_desktop_config.jsonпонимает только stdio-формат (command/args/env); полейurl/serverUrl/typeон не читает. Подключение к HTTP-серверу — через мостmcp-remote(нужен Node/npx), который оборачивает HTTP в stdio:{ "mcpServers": { "redbees-modem": { "command": "npx", "args": ["-y", "mcp-remote", "http://127.0.0.1:8082/mcp"] } } }
Сервер (
run_server) должен быть запущен до старта Claude Desktop. Альтернатива без JSON — добавить URL как Custom Connector в Settings → Connectors. Если HTTP не нужен, проще подключить сервер напрямую по stdio (см. разделы выше) — тогда Claude Desktop сам его запускает и держатьrun_serverне надо.
Возможности
Генерация Lua — два шага с одобрением плана
create_lua_script(task)— Архитектор: сжатый под токен-бюджет контекст из базы знаний + план / альтернативы / вопросы / риски. Кода нет; модель ждёт одобрения пользователя.implement_plan(task, approved_plan)— роли Кодер → (Верификатор ⇄ Рефлектор) ×≥2: код по плану (без комментариев, пояснения отдельной секцией), затем итеративные проверки и правки черезvalidate_lua_script.
Прошивка исполняет Lua 5.5 — по конструкциям языка применим официальный мануал
https://www.lua.org/manual/5.5/. Полный текст мануала включён в корпус базы
знаний (386 функций отдельными секциями), так что query_documentation отвечает
и на вопросы по языку (синтаксис, string/table/math, метатаблицы,
корутины); API устройства — только из базы знаний.
Прочие инструменты генерации/поиска: validate_lua_script (синтаксис через lupa
с реальным Lua 5.5 — той же версии, что на устройстве;
правила Zephyr: обязательная передача CPU в while/repeat, запрет os/io, конкатенация строк в
циклах, запрет комментариев), query_documentation, compress_context,
list_api_channels, list_examples, view_example, shell_api_reference,
settings_api_reference.
Доступ к устройству по SMP (полный mcumgr)
Кроссплатформенно, на базе smpclient
(без mcumgr.exe). Три транспорта: serial (port=COM5), BLE
(ble_address/peer_name, системное pairing-окно для шестизначного passkey),
UDP/DTLS-PSK (host, IPv4/IPv6). Для UDP передай
security={"dtls_psk_identity":"<eFuse factory serial, decimal>","dtls_psk":"<hex>"} либо
задай RB_SMP_DTLS_PSK_ID/RB_SMP_DTLS_PSK_HEX; ключ в отчёты не выводится.
PSK-ID не настраивается отдельно: это заводской серийный номер модема,
записанный в eFuse и передаваемый десятичной строкой.
Явный udp-plain оставлен только для старых dev-сборок. Подсистемы:
smp_image—list/upload/erase/test/confirm/ic_upload. Уupload—slot(номер образа),upgrade(принять только более новую версию),use_sha(для малого MTU); уerase— выборslot.ic_upload— загрузка через вендорную группу Intercreate (нужна её поддержка в прошивке);smp_fs—upload/download(size + SHA-256) /status/hash(+off/lengthдля хеша диапазона байт) /hash_types/close;smp_os—reset(+force;boot_modeдля перезагрузки в загрузчик/serial-recovery — нужна поддержка в прошивке) /echo/taskstat/mpstat/datetime/datetime_write/bootloader/mcumgr_params/appinfo;smp_boot— firmware update protocol 2:status/apply_update/confirm/confirm_mode/factory/clear_factory/slot;smp_wait_management_ready— после update/reboot ждёт строкуboot: management ready (protocol=2, ...)на COM и подтверждает готовность успешнымapp_boot status; для BLE/UDP использует ограниченные повторы;smp_settings—read/write/delete/save/commit/load(value_type= str/int/bool/hex, ключи изSETTINGS_API_*.md). Защищённые write-only ключи настраиваются профильными командами:ble/passkeyчерезapp_smp ble passkey,smp/pskчерезapp_smp udp psk, аboot/confirm_modeчерезsmp_boot confirm_mode;smp_shell— shell-команды устройства (изSHELL_API_*.md);smp_stat— статистика;smp_enum— перечислить поддерживаемые SMP-группы (detailsпринимает фильтрgroups);smp_zephyr erase_storage— стереть раздел storage (необратимо).
Идентификация: list_serial_ports, scan_ble_devices (фильтр по SMP Service
UUID), identify_device, discover_devices (дедуп одного устройства по приоритету
serial→ble→udp). Развёртывание/диагностика: upload_lua_script, read_serial_logs,
test_script_on_device, diagnose_device, hardware_reset_serial.
Штатное MCU OTA для новой прошивки: smp_image list → загрузка *_smp.bin →
smp_boot apply_update <auto|manual> → smp_wait_management_ready →
smp_boot status → при manual-политике smp_boot confirm. Старую пару
smp_image test + smp_os reset применять нельзя: apply_update атомарно
сохраняет политику, выставляет TEST, очищает update/factory-латчи и сам планирует
перезагрузку. *_smp.bin обновляет только приложение; миграция MCUboot требует
однократной полной сервисной прошивки.
Прошивка может одновременно запустить до четырёх независимых файлов
/scripts/*.lua: у каждого отдельный Lua state, heap и поток Zephyr. Это подходит
только для действительно независимых долгоживущих задач; обмен между файлами
возможен лишь через уже объявленные прошивкой каналы ZBus. В остальных случаях
предпочтительнее один событийный цикл или корутины. Каждый файл проверяется
отдельно, а wait_msg()/zephyr.msleep() нужны для отдачи CPU, а не для
«кормления» Lua-watchdog.
Прошивка (esptool)
esptool_version, flash_bootloader (→ 0x0), flash_application (→ 0x20000),
flash_firmware (любой адрес), erase_flash.
Безопасность — по умолчанию превью
Все операции записи (прошивка, smp_* upload/erase/reset/write/delete/commit/
datetime_write/erase_storage, upload_lua_script) без confirm=true возвращают
превью и ничего не делают. Тесты и диагностика на устройстве — только по явному
запросу пользователя. Детали — в playbook,
который сервер отдаёт хосту как instructions.
Семантический поиск (обязателен)
Семантический RAG всегда включён — без базы знаний сгенерированный Lua
галлюцинировал бы. Пользователю поставляется готовый numpy-стор (bundled в
пакете); приватный корпус исходников — нет. Keyword-поиск по bundled examples/
остаётся лишь как дополнение к контексту, не как самостоятельный фолбэк. Если стор
не загрузился, RAG-инструменты возвращают громкий баннер SEMANTIC RAG UNAVAILABLE,
а не молча деградируют.
Модель эмбеддингов (jina-code-embeddings) скачивается при первом запуске (в
пользовательский кэш или RB_MODEL_DIR). Стор — обычная numpy-матрица
(vectors.npy + docs.json), не chromadb: у chromadb персистентный HNSW-индекс
ненадёжно перечитывается между процессами.
Пересборка стора — шаг мейнтейнера:
python tools/admin_builder.pyэмбеддит приватный корпус и пишет только векторы + имена файлов (без текста исходников). Модель переключается вredbees_modem_mcp/config.py(MODEL_NAME) — сменил модель, пересобери стор. На Windows держиRB_OMP_THREADS=1(многопоточность может давать segfault этой модели).
Переменные окружения
Строго обязательных нет — у всех есть значения по умолчанию (стор bundled, модель
скачивается сама). Задаются они в .env (шаблон — .env.example,
формат и правила приоритета описаны в его шапке); лаунчеры run_server.* читают
именно его. На практике задаёшь переменные транспорта для HTTP-режима и, при
необходимости, RB_MODEL_DIR / RB_VECTOR_DB_DIR на свою модель/стор.
При запуске в stdio-режиме .env НЕ участвует: там сервер стартует сам MCP-хост,
и переменные надо передавать через блок env в mcp_config.json.
| Переменная | По умолчанию | Назначение |
|---|---|---|
RB_TRANSPORT |
stdio |
stdio | streamable-http | sse |
RB_HOST |
127.0.0.1 |
host для HTTP-транспортов |
RB_PORT |
8082 |
порт для HTTP-транспортов |
RB_SESSION_IDLE_TIMEOUT |
0 (выкл.) |
секунды простоя, после которых streamable-http сессия закрывается. Выключено по умолчанию: закрытая сессия заставит клиент переинициализироваться. Имеет смысл (напр. 3600) на сервере, который живёт сутками — добирает висящие сессии, которые оставляют зонды клиентов |
RB_TOOLSET |
full |
full = все инструменты; lua = только 8 инструментов генерации/проверки Lua + доки (меньше контекста, лучше выбор инструментов у слабых LLM) |
RB_MODEL_NAME |
jina-code-embeddings-0.5b |
модель эмбеддингов (также в config.py); перебивается RB_MODEL_DIR. Должна совпадать с моделью, которой собран стор — bundled-стор собран 0.5b |
RB_MODEL_DIR |
./models/<name> или кэш |
папка локальной модели (полный путь; главнее RB_MODEL_NAME). Скачивается, если её нет |
RB_HF_REPO_ID |
jinaai/<RB_MODEL_NAME> |
HF-репозиторий для автоскачивания модели; нужен только для не-jina моделей |
RB_VECTOR_DB_DIR |
bundled data/vector_store |
папка numpy-стора |
RB_OMP_THREADS |
1 |
потоки CPU для эмбеддинга; на Windows держать 1 (многопоток может дать segfault) |
RB_EXAMPLES_DIR |
bundled data/examples |
папка Lua-примеров и API-доков |
RB_DOC_TOKEN_BUDGET |
6000 |
токен-бюджет сжатия контекста (единственный способ задать бюджет: клиент передать его не может) |
RB_SMP_TIMEOUT |
5.0 |
секунды на один SMP-запрос к устройству (у smpclient по умолчанию 2.5 — этого не хватает app_sysinfo health и первым секундам после большой fs-передачи). Тот же потолок применяется к мёртвому эндпоинту, так что слишком большое значение растягивает и отказы. Скан портов в discover_devices всегда пробует коротко (2.5 с) |
RB_SERIAL_WRITE_TIMEOUT |
5.0 |
секунды на блокирующую запись в COM-порт (защита от зависшего/выдернутого порта) |
RB_SMP_DTLS_PSK_ID |
— | DTLS-PSK identity для одного закреплённого устройства: заводской serial десятичной строкой; можно передавать на вызов в security |
RB_SMP_DTLS_PSK_HEX |
— | DTLS PSK, 4–32 байта в hex (штатно 16); хранить только в .env, не коммитить |
HF_TOKEN |
— | токен HuggingFace для скачивания модели (если нужно) |
Разработка
uv sync # рекомендуемый способ (или pip install -e .)
python tests/run_all.py # офлайн-тесты
python -m redbees_modem_mcp # запуск из исходников
Сборка векторного стора (только для мейнтейнера)
Сборщик tools/admin_builder.py и приватный корпус secret_source_codes/ не
входят в дистрибутив и недоступны пользователям. Сборка из исходников (семантические
зависимости уже в core, ничего доп. не нужно):
$env:RB_SOURCE_DIR="./secret_source_codes" # приватный .lua/.md корпус
$env:RB_MODEL_DIR="./models/jina-code-embeddings-0.5b" # та же локальная модель
$env:RB_EMBED_BATCH_SIZE="8" # размер пакета, допустимо 1..64
.\.venv\Scripts\python.exe tools/admin_builder.py # → redbees_modem_mcp/data/vector_store
Стор строится только на локальной модели (офлайн). По умолчанию сборщик пишет
результат (vectors.npy + docs.json — только векторы и имена файлов, без текста
корпуса) прямо в redbees_modem_mcp/data/vector_store — оттуда он попадает в
wheel и сервер находит его без переменных окружения. RB_VECTOR_DB_DIR
переопределяет путь и у сборщика, и у сервера (для экспериментов).
Устранение проблем
uvx --version → «команда не найдена» (после установки uv).
Закройте терминал и откройте заново — установщик прописывает uv в PATH только
для новых окон. Не помогло: перезагрузите компьютер.
Хост пишет «redbees-modem-mcp not found» при запуске сервера. GUI-хост (Cline, Claude Desktop и т.п.) не видит PATH, обновлённый после установки uv/сервера — особенно если он был открыт ДО этого. Варианты:
- перезапустите хост целиком (не только окно, а процесс) и попробуйте снова;
- укажите полный путь к файлу в поле
command. Обычно этоC:\Users\<имя>\.local\bin\redbees-modem-mcp.exe(Windows) или/home/<имя>/.local/bin/redbees-modem-mcp(Linux).
Хост долго стартует и краснеет / отваливается по таймауту.
Скорее всего сервер и модель не были скачаны заранее (см.
шаг 4 и шаг 5) —
сервер качает себя и модель прямо на старте. Выполните в терминале
uv tool install redbees-modem-mcp, затем redbees-modem-mcp-download-model,
дождитесь конца, затем в хосте перезапустите сервер.
Модем не виден / нет нужного COM-порта.
- Windows: проверьте кабель и «Диспетчер устройств»; при необходимости поставьте драйвер USB-UART.
- Linux: добавьте себя в группу доступа к порту и перелогиньтесь:
sudo usermod -aG dialout $USER
Загрузка модели идёт очень долго / обрывается.
Это большая загрузка (~1 ГБ модель + ~2 ГБ зависимости сервера при самом первом
запуске). Проверьте интернет и свободное место на диске, затем запустите
redbees-modem-mcp-download-model ещё раз — уже скачанное не качается заново.
WinError 1114 при инициализации c10.dll
Если при запуске сервера или скачивании модели в консоли ошибка:
[WinError 1114] Произошёл сбой в программе инициализации DLL. Error loading "...c10.dll"...
По умолчанию PyTorch ставит CUDA-сборку, которая конфликтует с гибридной графикой (Intel + NVIDIA) или планами энергосбережения Windows.
Решение: переустановить CPU-сборку PyTorch в venv:
pip install torch --index-url https://download.pytorch.org/whl/cpu --force-reinstall
Segfault при эмбеддинге / SEMANTIC RAG UNAVAILABLE
Многопоточность OpenMP/MKL на Windows может ронять модель. Держи RB_OMP_THREADS=1
(значение по умолчанию). Сервер и сборщик уже фиксируют переменные OMP/MKL и
пред-импортируют torch до нативных модулей устройства.
Лицензия
Metadata
Release files for redbees-modem-mcp 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| redbees_modem_mcp-0.3.0.tar.gz | 919.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| redbees_modem_mcp-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.9 MB
Release files / redbees_modem_mcp-0.3.0.tar.gz
| Download URL | redbees_modem_mcp-0.3.0.tar.gz |
|---|---|
| Size | 919.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4e70c2acf312678d25c8f35c22b9c63236080e2901eb9746f2d645fb03c967d9
|
|
BLAKE2b-256 checksum How to use checksums |
64d7794bd5ae14763fdb335d94c1ecf79d2c8fc22b16d964e4137b60f6e56da8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.7
|
Release files / redbees_modem_mcp-0.3.0-py3-none-any.whl
| Download URL | redbees_modem_mcp-0.3.0-py3-none-any.whl |
|---|---|
| Size | 932.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
adbfdc2f603b761ca972daa82a6d8636ea09bc8b02cb5ee5304b99bd3fc53a3b
|
|
BLAKE2b-256 checksum How to use checksums |
69f37a26500126dbf5d0009571064d44d724db69ee2cc3bdd7bd548a1a0f48ee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.7
|