mcp串行桥
用于通过串行通信操作外部设备的MCP(Model Context Protocol)服务器。 AI代理 list_ports / connect / write_and_read 而需要与环境混合的每条反射光线,进行环境采样。
适用于所有具有串行接口的设备,包括调制解调器、测量器、嵌入式板和复古计算机。
前提
- 本地MCP服务器:此服务器在用户的计算机上作为本地进程运行。不考虑在云或远程运行。请在可物理访问串行端口的电脑上运行。
- Visual Studio代码(VSCode)+GitHub副本:假定使用VSCode(GitHub Copilot Agent模式)作为MCP客户端。其他支持MCP的客户机也可以使用,本文档的步骤以VScode为基准进行了说明。
动作要件
- Python 3.11 以上
- macOS/Windows/Linux
安装,安装
git clone https://github.com/46nori/mcp-serial-bridge.git
cd mcp-serial-bridge使用uv时(推荐)
macOS/Linux:
# uv のインストール(未インストールの場合)
curl -LsSf https://astral.sh/uv/install.sh | shWindows(PowerShell):
您可以直接从VSCode集成终端运行。使用外部PowerShell也没有问题。
# uv のインストール(未インストールの場合)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Windows注意事项:uv安装后,在当前打开的PowerShell中uv命令可能无法识别。 在这种情况下,请关闭并重新打开VSCode的集成终端,或者重新启动VSCode,然后继续。
在这两种环境中,安装后请重新打开新壳,然后执行以下操作:。
# uv が使えることを確認
uv --version
# 依存パッケージのインストールと仮想環境の作成
uv sync使用venv+pip时
在不能使用uv的环境中也可以使用标准的venv。
macOS/Linux:
python3 -m venv .venv
.venv/bin/pip install "mcp[cli]>=1.9.0" "pyserial>=3.5"Windows(PowerShell):
py -3 -m venv .venv
.\.venv\Scripts\pip install "mcp[cli]>=1.9.0" "pyserial>=3.5"无论采用哪种方法,虚拟环境 .venv/ 中所述修改相应参数的值。如果您没有对Linux上的串行端口的访问权限 dialout 请添加到组中。
sudo usermod -aG dialout $USER
# 反映には再ログインが必要启动服务器
.vscode/mcp.json 包含在存储库中。 在macOS/Linux上可以直接使用。 在Windows中,Python的执行文件位置不同command 的 .venv/Scripts/python.exe 中所述修改相应参数的值。
命令调色板(Cmd+Shift+P / Ctrl+Shift+P)开始 MCP:重新启动服务器 执行时 serial-bridge 将条目添加到文档注册表。
有关配置文件的详细信息,请参见技术详细来修改标记元素的显示属性。
______________________________________________________________________
使用例
用户不直接调用工具。 如果用自然语言向AI代理(GitHub Copilot)发出指示,则会判断需要AI的工具并按顺序调用。
操作の流れ:
ユーザー → 自然言語で指示 → AI エージェント → MCP ツール → シリアルデバイス结果将作为AI的回复显示在聊天中。
通用AT命令设备(调制解调器、Wi-Fi模块等)
用户告诉AI的内容:
“请检查串行端口,使用9600bps的换行代码CR+LF连接到AT命令设备,并使用AT命令进行沟通确认和AT+GMR获取版本。”
AI在内部调用的工具参数(参考):
{ "name": "list_ports", "arguments": {} }
{ "name": "connect", "arguments": { "port": "/dev/cu.usbserial-10", "baudrate": 9600, "line_ending": "\r\n" } }
{ "name": "write_and_read", "arguments": { "command": "AT", "wait_for": "OK", "timeout": 3 } }
{ "name": "write_and_read", "arguments": { "command": "AT+GMR", "wait_for": "OK", "timeout": 5 } }______________________________________________________________________
测量仪器、传感器(仅限CR)
用户告诉AI的内容:
“以115200bps连接COM3(换行仅限CR)READ?请用命令获取测量值“
AI在内部调用的工具参数(参考):
{ "name": "connect", "arguments": { "port": "COM3", "baudrate": 115200, "line_ending": "\r" } }
{ "name": "write_and_read", "arguments": { "command": "READ?", "wait_for": "\n", "timeout": 2 } }______________________________________________________________________
Linux/Raspberry Pi串行控制台(仅限LF)
用户告诉AI的内容:
“以115200bps连接/dev/ttyUSB0(换行仅限LF),请执行uname-a”
AI在内部调用的工具参数(参考):
{ "name": "connect", "arguments": { "port": "/dev/ttyUSB0", "baudrate": 115200, "line_ending": "\n" } }
{ "name": "write_and_read", "arguments": { "command": "uname -a", "wait_for": "$", "timeout": 5 } }______________________________________________________________________
监视通信
本服务器为MCP本地服务器stdout专用于JSON-RPC协议是。 通信的观测分为以下3种手段。
┌────────────────────────────────────────────────────┐
│ AI エージェント (VSCode) │
│ ↕ stdout/stdin (JSON-RPC 2.0専用) │
│ mcp-serial-bridge │
│ ├─ stderr → VSCode Output パネル │
│ ├─ logs/serial_YYYYMMDD.log → 詳細ログ │
│ └─ logs/rx_stream.log → RX 生ストリーム │
└────────────────────────────────────────────────────┘标题-VScode Output面板
MCP服务器的stderr是VScode的 输出 面板(serial-bridge ),模板名称将采用不同的格式。 所有发送和接收和连接事件都将按方向输出。
[SYS] Connected to /dev/cu.usbserial-110 at 19200 baud
[TX] AT\r
[RX] AT\r\nOK\r\n特点:由于加入了VScode附加的时间戳,所以在长通信中可能很难看到。
______________________________________________________________________
logs/serial_YYYYMMDD.log —详细日志
将所有TX/RX/SYS事件记录到带时间戳的文件中。 已转义换行符和控制字符,以便以后可以正确跟踪通信过程。
[2026-03-10T12:34:56.123] [SYS] Connected to /dev/cu.usbserial-110 at 19200 baud
[2026-03-10T12:34:57.001] [TX] AT\r
[2026-03-10T12:34:57.089] [RX] AT\r\nOK\r\n用途:调试、通信步骤的记录等
______________________________________________________________________
logs/rx_stream.log —RX原始流
只将从设备接收到的原始数据在没有时间戳的情况下放入文件追记做。\ (数据转换为UTF-8)
想要实时显示通信内容时:
touch logs/rx_stream.log
tail -f logs/rx_stream.log如果要捕捉到更多文件:
tail -f logs/rx_stream.log | tee logs/session_$(date +%H%M%S).log用途:作为纯粹的串行监视器使用·记录设备的输出
工具参考
list_ports
返回当前连接的串行端口列表。 connect 调用之前必须执行并使用 device 请确认名字。
在macOS中,内核内部/dev/tty.*除外,应用程序用的/dev/cu.*列表框中,此格式对应于条目“无”。
返回值示例:
[
{
"device": "/dev/cu.usbserial-110",
"description": "USB2.0-Serial",
"hwid": "USB VID:PID=1A86:7523"
}
]______________________________________________________________________
connect
串行连接到指定的端口。如果已连接,请安全断开连接,然后重新连接。
| 引数 | 型 | 既定値 | 说明 |
|---|---|---|---|
port | string | 必须 | list_ports 获得 device 名 |
baudrate | int | 19200 | 通信速度 (bps) |
line_ending | 字符串 | "\r" 在命令末尾附加的换行代码 |
line_ending 的选择方法:
值|含义|主要用途| | --- | --- | --- | | "\r" 默认值:嵌入式和传统串行设备 | "\r\n" |CR+LF|Windows系机器・一部分调制解调器或测量器| | "\n" Linux/UNIX壳牌现代设备
连接后变更时 connect 重新运行(write_and_read 中所述修改相应参数的值。
______________________________________________________________________
write_and_read
发送命令,接收并返回响应。事先 connect 中所述修改相应参数的值。
| 引数 | 型 | 既定値 | 说明 |
|---|---|---|---|
command 必需/要发送的命令字符串 | |||
wait_for | 字符串 | "" 等待该字符串出现在接收中 | |
timeout | 浮子 | 5.0 | 最大待机时间(秒) |
wait_for中描述的场景,使用下列步骤创建明细表,以便在概念设计中分析体量的周长。- 提示字符串(例如:
"> ","OK","#"),可在机器响应结束之前正确待机。 - 发送前清除接收缓冲区,因此不会混入前命令的剩余数据。
______________________________________________________________________
技术详细
VScode MCP配置文件
.vscode/mcp.json 包含在存储库中,VScode会自动读取。${workspaceFolder} 变量在VScode运行时展开,因此不需要手动展开路径。
macOS/Linux:
{
"servers": {
"serial-bridge": {
"type": "stdio",
"command": "${workspaceFolder}/.venv/bin/python",
"args": ["${workspaceFolder}/src/server.py"]
}
}
}窗户:
{
"servers": {
"serial-bridge": {
"type": "stdio",
"command": "${workspaceFolder}/.venv/Scripts/python.exe",
"args": ["${workspaceFolder}/src/server.py"]
}
}
}在Windows上uv啊.venv如果创建后未立即反映,请重新打开VScode集成终端或 MCP:重新启动服务器 重新启动交互渲染。
MCP协议
AI和服务器之间 标准输入上的MCP(JSON-RPC 2.0) 进行动态观察时的轴心点。例如 connect 的调用如下所示。用户不需要写这个JSON。
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "connect",
"arguments": {
"port": "/dev/cu.usbserial-10",
"baudrate": 9600,
"line_ending": "\r\n"
}
}
}从其他支持MCP的客户端使用
type: stdio 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。VScode的 ${workspaceFolder} 因为不能使用变量绝对路径中所述修改相应参数的值。
Claude Desktop示例 (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"serial-bridge": {
"command": "/Users/yourname/mcp-serial-bridge/.venv/bin/python",
"args": ["/Users/yourname/mcp-serial-bridge/src/server.py"]
}
}
}客户机设置文件路径 | --- | --- | | 克劳德桌面版 (macOS)| ~/Library/Application Support/Claude/claude_desktop_config.json | | 克劳德桌面版 (Windows)| %APPDATA%\Claude\claude_desktop_config.json | | 光标 | .cursor/mcp.json 或全局 ~/.cursor/mcp.json |
