ble-mcp-server — MCP-сервер для Claude Code
Даёт агенту инструменты BLE: сканировать эфир, подключаться к устройству, читать характеристики, писать в них и слушать уведомления. Пригодится, когда надо отладить прошивку или собрать данные с датчика без ручной возни.
claude mcp add --env BLE_MCP_ALLOW_WRITES=<BLE_MCP_ALLOW_WRITES> --env BLE_MCP_WRITE_ALLOWLIST=<BLE_MCP_WRITE_ALLOWLIST> --env BLE_MCP_PLUGINS=<BLE_MCP_PLUGINS> --env BLE_MCP_TOOL_SEPARATOR=<BLE_MCP_TOOL_SEPARATOR> --env BLE_MCP_MAX_SESSIONS=<BLE_MCP_MAX_SESSIONS> --transport stdio ble-mcp-server -- uvx ble-mcp-serverЧто делает ble-mcp-server
Сервер работает поверх библиотеки bleak, поэтому BLE доступен на macOS, Windows и Linux. Транспорт по умолчанию — stdio: HTTP не поднимается, порты не открываются. Есть также SSE и Streamable HTTP, если нужен удалённый доступ или несколько сессий сразу.
Агент получает набор инструментов и сам выстраивает цепочку: находит устройство по имени или UUID сервиса, подключается, перечисляет сервисы и характеристики, читает значения. Уведомления собираются тремя способами — по одному событию, опросом или пакетной выгрузкой. Ответы приходят структурированным JSON, дальше модель решает, что делать.
Запись характеристик по умолчанию выключена, её включают переменной BLE_MCP_ALLOW_WRITES. Если писать можно не везде, тот же флаг дополняют белым списком UUID в BLE_MCP_WRITE_ALLOWLIST — тогда ble.write работает только с перечисленными характеристиками. Плагины для конкретных устройств тоже включаются вручную через BLE_MCP_PLUGINS: они дают агенту высокоуровневые действия вместо сырых байтов.
Какие задачи решает
- просканировать эфир и найти устройство по имени или UUID сервиса
- прочитать характеристики датчика и понять, почему приходят нули
- включить уведомления и собрать поток значений в пакет
- прогнать тестовую последовательность команд на новой плате
- описать протокол незнакомого устройства и сохранить его как спецификацию
Примеры запросов агенту
- Просканируй эфир и подключись к устройству, имя которого начинается на Arduino
- Прочитай температуру с моего SensorTag и скажи, какое там сейчас значение
- Включи уведомления на этой характеристике и собери первые сто значений
Как установить ble-mcp-server
Командой платформы
claude mcp add --env BLE_MCP_ALLOW_WRITES=<BLE_MCP_ALLOW_WRITES> --env BLE_MCP_WRITE_ALLOWLIST=<BLE_MCP_WRITE_ALLOWLIST> --env BLE_MCP_PLUGINS=<BLE_MCP_PLUGINS> --env BLE_MCP_TOOL_SEPARATOR=<BLE_MCP_TOOL_SEPARATOR> --env BLE_MCP_MAX_SESSIONS=<BLE_MCP_MAX_SESSIONS> --transport stdio ble-mcp-server -- uvx ble-mcp-serverВместо <…> подставьте свои значения. Ещё 1 переменная окружения — в README сервера. uvx запускает команду с именем пакета; если в README она другая — uvx --from ble-mcp-server <команда>
Командой платформы
codex mcp add ble-mcp-server --env BLE_MCP_ALLOW_WRITES=<BLE_MCP_ALLOW_WRITES> --env BLE_MCP_WRITE_ALLOWLIST=<BLE_MCP_WRITE_ALLOWLIST> --env BLE_MCP_PLUGINS=<BLE_MCP_PLUGINS> --env BLE_MCP_TOOL_SEPARATOR=<BLE_MCP_TOOL_SEPARATOR> --env BLE_MCP_MAX_SESSIONS=<BLE_MCP_MAX_SESSIONS> -- uvx ble-mcp-serverВместо <…> подставьте свои значения. Ещё 1 переменная окружения — в README сервера. uvx запускает команду с именем пакета; если в README она другая — uvx --from ble-mcp-server <команда>
Файл настроек
{
"mcpServers": {
"ble-mcp-server": {
"command": "uvx",
"args": [
"ble-mcp-server"
],
"env": {
"BLE_MCP_ALLOW_WRITES": "<BLE_MCP_ALLOW_WRITES>",
"BLE_MCP_WRITE_ALLOWLIST": "<BLE_MCP_WRITE_ALLOWLIST>",
"BLE_MCP_PLUGINS": "<BLE_MCP_PLUGINS>",
"BLE_MCP_TOOL_SEPARATOR": "<BLE_MCP_TOOL_SEPARATOR>",
"BLE_MCP_MAX_SESSIONS": "<BLE_MCP_MAX_SESSIONS>"
}
}
}
}Вместо <…> подставьте свои значения. Ещё 1 переменная окружения — в README сервера. uvx запускает команду с именем пакета; если в README она другая — uvx --from ble-mcp-server <команда>
Файл настроек
{
"servers": {
"ble-mcp-server": {
"type": "stdio",
"command": "uvx",
"args": [
"ble-mcp-server"
],
"env": {
"BLE_MCP_ALLOW_WRITES": "<BLE_MCP_ALLOW_WRITES>",
"BLE_MCP_WRITE_ALLOWLIST": "<BLE_MCP_WRITE_ALLOWLIST>",
"BLE_MCP_PLUGINS": "<BLE_MCP_PLUGINS>",
"BLE_MCP_TOOL_SEPARATOR": "<BLE_MCP_TOOL_SEPARATOR>",
"BLE_MCP_MAX_SESSIONS": "<BLE_MCP_MAX_SESSIONS>"
}
}
}
}Вместо <…> подставьте свои значения. Ещё 1 переменная окружения — в README сервера. uvx запускает команду с именем пакета; если в README она другая — uvx --from ble-mcp-server <команда>
Командой платформы
gemini mcp add -e BLE_MCP_ALLOW_WRITES=<BLE_MCP_ALLOW_WRITES> -e BLE_MCP_WRITE_ALLOWLIST=<BLE_MCP_WRITE_ALLOWLIST> -e BLE_MCP_PLUGINS=<BLE_MCP_PLUGINS> -e BLE_MCP_TOOL_SEPARATOR=<BLE_MCP_TOOL_SEPARATOR> -e BLE_MCP_MAX_SESSIONS=<BLE_MCP_MAX_SESSIONS> ble-mcp-server uvx ble-mcp-serverВместо <…> подставьте свои значения. Ещё 1 переменная окружения — в README сервера. uvx запускает команду с именем пакета; если в README она другая — uvx --from ble-mcp-server <команда>
По шагам, с командами для каждой платформы: Как подключить MCP-сервер: Claude Code, Codex, Cursor, VS Code, Gemini CLI и другие
Вопросы о ble-mcp-server
Как установить ble-mcp-server в Claude Code?
Сначала claude mcp add ble-mcp-server -- uvx ble-mcp-server. Если нужны запись и плагины, добавьте второй вариант с переменными окружения: `claude mcp add --env BLE_MCP_ALLOW_WRITES=<BLE_MCP_ALLOW_WRITES> --env BLE_MCP_WRITE_ALLOWLIST=<BLE_MCP_WRITE_ALLOWLIST> --env BLE_MCP_PLUGINS=<BLE_MCP_PLUGINS> --env BLE_MCP_TOOL_SEPARATOR=<BLE_MCP_TOOL_SEPARATOR> --env BLE_MCP_MAX_SESSIONS=<BLE_MCP_MAX_SESSIONS> --transport stdio ble-mcp-server -- uvx ble-mcp-server`.
Что делает ble-mcp-server?
Превращает BLE-операции в инструменты, которые вызывает агент: скан, подключение, чтение и запись характеристик, подписка на уведомления. Плюс спецификации протоколов и плагины для типовых устройств.
Почему агент не может записать значение в характеристику?
Запись отключена по умолчанию. Включите её через BLE_MCP_ALLOW_WRITES, а если нужна запись лишь в часть характеристик — задайте их UUID в BLE_MCP_WRITE_ALLOWLIST.