serial-mcp-server — MCP-сервер для Claude Code: порты и UART
Даёт агенту инструменты для работы с последовательным портом: открыть соединение, отправить команду, прочитать ответ, дёрнуть DTR.
claude mcp add --env SERIAL_MCP_MAX_CONNECTIONS=<SERIAL_MCP_MAX_CONNECTIONS> --env SERIAL_MCP_PLUGINS=<SERIAL_MCP_PLUGINS> --env SERIAL_MCP_MIRROR=<SERIAL_MCP_MIRROR> --env SERIAL_MCP_MIRROR_LINK=<SERIAL_MCP_MIRROR_LINK> --env SERIAL_MCP_TOOL_SEPARATOR=<SERIAL_MCP_TOOL_SEPARATOR> --transport stdio serial-mcp-server -- uvx serial-mcp-serverЧто делает serial-mcp-server
Сервер держит состояние соединения и общается с клиентом через stdio. Внутри — набор инструментов поверх pyserial: список портов, открытие и закрытие с настройкой baud rate, чётности, стоп-битов и кодировки, чтение и запись в тексте, hex или base64. Для текстовых протоколов есть построчный ввод-вывод и чтение до разделителя, для сброса платы — управление линиями DTR и RTS.
Кроме сырых байтов агент может опираться на спецификации протоколов и плагины устройств. Спецификация описывает набор команд и формат вывода, плагин даёт готовые высокоуровневые операции. Включаются через переменную SERIAL_MCP_PLUGINS: all разрешает всё, список имён — только нужные, без переменной плагины выключены. Ещё есть PTY-зеркало: screen, minicom или ваш скрипт подключаются к тому же сеансу, что и агент. На macOS и Linux это работает, на Windows — нет.
Нужен Python 3.11 или новее и пакет serial-mcp-server, ставится из PyPI или через uvx. Порт по умолчанию держит до 10 соединений, меняется через SERIAL_MCP_MAX_CONNECTIONS. В Cursor имена инструментов не могут содержать точки, поэтому SERIAL_MCP_TOOL_SEPARATOR там задаётся как _ — без этого инструменты в клиенте не поднимутся.
Какие задачи решает
- найти подключённый микроконтроллер и определить его порт
- прочитать загрузочный баннер после сброса платы
- прогнать последовательность команд и сверить вывод
- отладить незнакомый протокол по ответам устройства
- перевести сброс и вход в bootloader в автоматический сценарий
Примеры запросов агенту
- Покажи список последовательных портов и подключись к
/dev/ttyUSB0на скорости 115200. - Отправь в порт команду
ATи верни ответ до перевода строки. - Дёрни DTR, подожди приглашение и прочитай, что печатает плата при старте.
Как установить serial-mcp-server
Командой платформы
claude mcp add --env SERIAL_MCP_MAX_CONNECTIONS=<SERIAL_MCP_MAX_CONNECTIONS> --env SERIAL_MCP_PLUGINS=<SERIAL_MCP_PLUGINS> --env SERIAL_MCP_MIRROR=<SERIAL_MCP_MIRROR> --env SERIAL_MCP_MIRROR_LINK=<SERIAL_MCP_MIRROR_LINK> --env SERIAL_MCP_TOOL_SEPARATOR=<SERIAL_MCP_TOOL_SEPARATOR> --transport stdio serial-mcp-server -- uvx serial-mcp-serverВместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from serial-mcp-server <команда>
Командой платформы
codex mcp add serial-mcp-server --env SERIAL_MCP_MAX_CONNECTIONS=<SERIAL_MCP_MAX_CONNECTIONS> --env SERIAL_MCP_PLUGINS=<SERIAL_MCP_PLUGINS> --env SERIAL_MCP_MIRROR=<SERIAL_MCP_MIRROR> --env SERIAL_MCP_MIRROR_LINK=<SERIAL_MCP_MIRROR_LINK> --env SERIAL_MCP_TOOL_SEPARATOR=<SERIAL_MCP_TOOL_SEPARATOR> -- uvx serial-mcp-serverВместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from serial-mcp-server <команда>
Файл настроек
{
"mcpServers": {
"serial-mcp-server": {
"command": "uvx",
"args": [
"serial-mcp-server"
],
"env": {
"SERIAL_MCP_MAX_CONNECTIONS": "<SERIAL_MCP_MAX_CONNECTIONS>",
"SERIAL_MCP_PLUGINS": "<SERIAL_MCP_PLUGINS>",
"SERIAL_MCP_MIRROR": "<SERIAL_MCP_MIRROR>",
"SERIAL_MCP_MIRROR_LINK": "<SERIAL_MCP_MIRROR_LINK>",
"SERIAL_MCP_TOOL_SEPARATOR": "<SERIAL_MCP_TOOL_SEPARATOR>"
}
}
}
}Вместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from serial-mcp-server <команда>
Файл настроек
{
"servers": {
"serial-mcp-server": {
"type": "stdio",
"command": "uvx",
"args": [
"serial-mcp-server"
],
"env": {
"SERIAL_MCP_MAX_CONNECTIONS": "<SERIAL_MCP_MAX_CONNECTIONS>",
"SERIAL_MCP_PLUGINS": "<SERIAL_MCP_PLUGINS>",
"SERIAL_MCP_MIRROR": "<SERIAL_MCP_MIRROR>",
"SERIAL_MCP_MIRROR_LINK": "<SERIAL_MCP_MIRROR_LINK>",
"SERIAL_MCP_TOOL_SEPARATOR": "<SERIAL_MCP_TOOL_SEPARATOR>"
}
}
}
}Вместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from serial-mcp-server <команда>
Командой платформы
gemini mcp add -e SERIAL_MCP_MAX_CONNECTIONS=<SERIAL_MCP_MAX_CONNECTIONS> -e SERIAL_MCP_PLUGINS=<SERIAL_MCP_PLUGINS> -e SERIAL_MCP_MIRROR=<SERIAL_MCP_MIRROR> -e SERIAL_MCP_MIRROR_LINK=<SERIAL_MCP_MIRROR_LINK> -e SERIAL_MCP_TOOL_SEPARATOR=<SERIAL_MCP_TOOL_SEPARATOR> serial-mcp-server uvx serial-mcp-serverВместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from serial-mcp-server <команда>
По шагам, с командами для каждой платформы: Как подключить MCP-сервер: Claude Code, Codex, Cursor, VS Code, Gemini CLI и другие
Вопросы о serial-mcp-server
Как установить serial-mcp-server в Claude Code?
Поставьте пакет и зарегистрируйте сервер: claude mcp add serial-mcp-server -- uvx serial-mcp-server. Если нужны переменные окружения, используйте второй вариант: `claude mcp add --env SERIAL_MCP_MAX_CONNECTIONS=<SERIAL_MCP_MAX_CONNECTIONS> --env SERIAL_MCP_PLUGINS=<SERIAL_MCP_PLUGINS> --env SERIAL_MCP_MIRROR=<SERIAL_MCP_MIRROR> --env SERIAL_MCP_MIRROR_LINK=<SERIAL_MCP_MIRROR_LINK> --env SERIAL_MCP_TOOL_SEPARATOR=<SERIAL_MCP_TOOL_SEPARATOR> --transport stdio serial-mcp-server -- uvx serial-mcp-server`.
Что делает serial-mcp-server?
Открывает агенту доступ к последовательному порту: список устройств, подключение, чтение и запись, управление DTR и RTS. Плюс спецификации протоколов и плагины для конкретных устройств.
Нужно ли что-то настраивать для Cursor?
Да, разделитель в именах инструментов. Задайте SERIAL_MCP_TOOL_SEPARATOR со значением _ в .cursor/mcp.json, иначе Cursor не примет имена с точками.