关于 Serial MCP
Serial MCP 面向需要访问 UART 和 USB 串口设备的开发者,是一款 MCP 服务。它将缓冲式串口 I/O 与帧解析、协议预设、设备配置档案和启动捕获结合起来。
主要功能
- 01缓冲式串口读取、写入与事务
- 02发现 UART 和 USB 串口设备
- 03帧解码与协议解析器
- 04带校验和验证的协议预设
- 05设备配置档案与自动重连
- 06启动捕获与持久化事件日志
适用场景
- 01与嵌入式开发板交换命令
- 02复位后捕获启动信息
- 03解析 NMEA-0183 或 Modbus ASCII 数据
- 04检查并导出串口通信日志
MCP 相关
通过 stdio 或 HTTP 向 MCP 客户端提供串口工具、资源和提示词。端口访问可通过允许列表限制。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
用于 UART 和 USB 串行访问的 serial-mcp
serial-mcp 是一个用于直接访问串行端口的 MCP 服务。它可以读取、写入并流式传输到微控制器、Arduino 开发板、STM32 芯片及其他嵌入式目标的 UART 或 USB 串行数据。读取操作采用超时和模式匹配,而非在串行监视器上阻塞。
该服务会持续捕获 RX 数据。它使用行、分隔符、长度前缀、起始/结束、SLIP 和 COBS 格式解码 TX 和 RX 帧,并提供 AT、JSON、shell、NMEA-0183 和 Modbus ASCII 解析器。
协议预设支持校验和验证。该服务还支持自动重连、事件日志记录、DTR/RTS、BREAK 和流控。MCP 客户端可以将这些功能用于串行引导加载程序、重置和嵌入式开发板。
快速开始
- 安装服务。请参阅安装,了解 Cargo、Nix 和预编译二进制文件选项。
- 连接 Agent。按照 Agent 配置指南操作,或使用下方示例。
- 发现设备。调用
list_ports()并检查profile_matches。结果会显示直接调用open时将复用的配置。 - 打开端口。只需传入端口调用
open(port=...)。 波特率默认为 115200/8-N-1。对于已知设备,服务会复用最近使用的高置信度配置;对于新设备,则会创建持久化的自动生成配置。 - 与设备通信。使用
transact()进行命令与响应交互。使用read()读取缓冲数据或设备主动发送的数据。使用write()执行仅发送操作。
功能
| 领域 | 提供的功能 |
|---|---|
| RX 模型 | 常驻环形缓冲区会从打开端口到关闭端口持续捕获字节。read 会立即返回缓冲数据,也可以等待、匹配并回放历史数据。 |
| 成帧与解析 | 两个方向都支持行、分隔符、长度前缀、起始/结束、SLIP 和 COBS 成帧。解析器包括 AT、JSON、shell、NMEA-0183 和 Modbus ASCII。 |
| 协议预设 | 提供七种预设:at_command、slip、json_lines、cobs、ndjson、nmea0183 和 modbus_ascii。其中包含校验和验证。 |
| 设备配置 | 服务会自动创建配置会话。高置信度设备会获得持久化的自动生成配置。学习到的设置会跨会话保留。 |
| 启动捕获 | capture_boot 通过一次原子调用处理 Arduino 自动重置、电源循环启动横幅和启动提示。 |
| 可靠性 | 环形缓冲区回绕会通过 bytes_lost 报告。编码回退不会造成数据丢失。服务还支持自动重连并报告部分故障。 |
| 运维 | 事件日志支持通过 export_log 持久化捕获 JSONL。服务还提供端口允许列表,以及 stdio 和 HTTP 传输。 |
工具目录(25 个工具)
| 分组 | 工具 |
|---|---|
| 发现 | list_ports、list_connections |
| 连接生命周期 | open、close、reconnect、get_status、reconfigure |
| 输入/输出 | read、write、transact、capture_boot、flush |
| 线路控制 | set_dtr_rts、set_flow_control、send_break |
| 配置与设置 | list_profiles、open_profile、save_profile、delete_profile、configure、rollback_profile |
| 日志与捕获 | get_log、clear_log、export_log |
| 实用工具 | compute_checksum |
资源和提示词
| 类型 | 项目 |
|---|---|
| 资源(5 个) | serial://ports、serial://connections(静态);serial://connections/{id}、serial://connections/{id}/raw、serial://connections/{id}/log(模板) |
| 提示词(2 个) | diagnose_port、interactive_terminal |
安装
Cargo(所有平台)
cargo install serial-mcp
Nix
nix profile install github:qarnet/serial-mcp
预构建二进制文件
无需工具链。每个发行版都会为每个平台发布一个二进制文件。latest/download URL 会指向最新发行版。
| 平台 | 命令 |
|---|---|
| Linux x86_64 | curl -L https://github.com/qarnet/serial-mcp/releases/latest/download/serial-mcp-x86_64-linux -o serial-mcp && sudo install -m 755 serial-mcp /usr/local/bin/ |
| Linux ARM64 | 使用 serial-mcp-aarch64-linux 资源的相同命令 |
| macOS(Apple Silicon) | 使用 serial-mcp-aarch64-macos 资源的相同命令 |
| Windows(x86_64) | 下载 serial-mcp-x86_64-windows.exe,并将其放到 PATH 中 |
在 Linux 上,将你的用户添加到 dialout 组以访问端口:
sudo usermod -aG dialout $USER
连接 Agent
客户端专属的设置说明,请参阅 Agent 配置指南。 该指南涵盖 Claude Code CLI、Claude Desktop、Cursor、VS Code、Zed、opencode、 Codex、Hermes 和 HTTP 传输。
快速示例(Claude Code,Linux/macOS)
{
"mcpServers": {
"serial": {
"type": "stdio",
"command": "serial-mcp",
"args": ["--allowlist=/dev/ttyACM*,/dev/ttyUSB*"]
}
}
}
核心工作流
常见操作按以下顺序进行:发现、打开、通信、验证已学习的 配置文件,然后按需使用高级工具。
- 调用
list_ports()。其中的profile_matches条目与ports相对应。selected表示不带参数的open会复用selected_profile。ambiguous表示排名相同的配置文件需要通过open_profile指定。duplicate、ineligible和none表示不带参数的 open 会从头开始或使用临时配置。
- 调用不带参数的
open(port=...)。结果包含profile绑定信息。该绑定会报告其名称、来源、置信度、持久性、生成标记、修订版本和脏状态。 - 使用
transact(data=..., match=..., timeout_ms=...)在一次调用中写入数据并等待响应。使用read()读取缓冲数据或非请求数据。 - 调用
reconfigure、set_flow_control或连接模式的configure后, 检查profile_persistence。其值为persisted、not_needed、transient或failed。同时检查更新后的profile绑定信息。 - 调用
close()。为确保安全,正常关闭时会重试持久化脏绑定。
要捕获启动和重置过程,请调用 capture_boot。它可以处理 Arduino 自动重置、
电源循环横幅和启动提示。
该调用会清除未读取的操作系统输入,并标记 RX 实时边界。它可以脉冲触发 DTR/RTS,
并保证释放信号。它仅通过私有游标捕获标记之后的字节。
结果会限制在内存中,不会写入文件。from 游标模型请参阅接收与读取。
配置文件行为请参阅设备配置文件。
协议
protocol 字段为两个方向提供成帧和解析器默认值。
NMEA 和 Modbus ASCII 预设会验证校验和:
| 预设 | 线路名称 | 成帧 / 解析器 |
|---|---|---|
| AT 命令 | at_command | 行(CR)+ AT 解析器 |
| SLIP | slip | RFC 1055 字节填充 |
| JSON 行 | json_lines | 行 + JSON 行解析器 |
| COBS | cobs | 一致开销字节填充 |
| NDJSON | ndjson | 行 + JSON 行解析器,跳过空行 |
| NMEA-0183 | nmea0183 | 起始/结束符 $/! + NMEA 解析器,*XX 校验和 |
| Modbus ASCII | modbus_ascii | 起始/结束符 : + Modbus ASCII 解析器,LRC |
字段优先级依次为:显式调用字段、调用时预设、连接默认值, 然后是连接预设。协议指南详细说明了 此顺序、校验和行为以及成帧和解析器参考。
核心概念与指南
| 指南 | 涵盖内容 |
|---|---|
| RX 与读取 | 环形缓冲区和共享游标。带标签的 from 形式。超时、静默和匹配。环形回绕与 bytes_lost。编码回退、流量控制、capture_boot 和订阅。 |
| 设备配置文件 | profile_matches 的结果和身份规则。生成和复用选择。学习、修订 CAS、回滚和删除保护。 |
| 持久化捕获 | export_log 契约。配额、可移植文件名、原子性和失败语义。 |
| Agent 配置 | 客户端设置。HTTP 传输。故障排查。 |
| 协议指南 | 帧格式和解析器。预设及优先级。校验和行为。 |
| 文档索引 | 用户指南和开发指南 |
传输方式与选项
| 模式 | 激活方式 | 使用场景 |
|---|---|---|
| stdio | 默认 | 桌面 Agent |
| HTTP | --transport=http | 远程和无头使用 |
CLI 选项
serial-mcp [OPTIONS]
--transport <stdio|http> Transport to use (default: stdio)
--allowlist <patterns> Comma-separated glob patterns for allowed ports
--bind <addr> HTTP bind address (default: 127.0.0.1:8000)
--max-program-buffered-bytes <N> Global budget for all in-flight RX tools
--max-tool-buffered-bytes <N> Per-tool ceiling for max_buffered_bytes
--profiles-path <path> Profile store file path (default: OS user config dir + serial-mcp/profiles.toml)
--capture-dir <absolute-dir> Enable persistent export_log capture into an existing absolute directory (disabled by default; no fallback to cwd/config/temp)
--capture-max-file-bytes <N> Per-file quota for a capture JSONL snapshot (default: 16777216 / 16 MiB)
--capture-max-total-bytes <N> Total-byte quota across committed capture files (default: 268435456 / 256 MiB)
--capture-max-files <N> File-count quota across committed capture files (default: 256)
-V, --version Print version and exit (also: `serial-mcp version`)
-h, --help Print help
RUST_LOG Log level env var (error/warn/info/debug/trace)
配置文件存储是一个由所有会话共享的 TOML 文件。使用 --profiles-path
指定独立存储。请参阅设备配置文件。
持久化捕获
export_log 会在 --capture-dir 根目录中写入可移植的 .jsonl 文件名。
它绝不接受任意路径,也绝不会覆盖文件。请参阅持久化捕获。
MCP 兼容性
serial-mcp 支持 MCP 2025-11-25。此版本使用旧版会话生命周期。
它还支持 MCP 2026-07-28。此版本使用现代发现机制,以及带有 SEP-2549 缓存字段的无状态请求。stdio 和 HTTP 传输均支持端口允许列表。
CI 会运行官方一致性检查和 Inspector 互操作性检查。验证工具来自已提交的 npm 锁定文件。CI 使用 npm ci --ignore-scripts 安装这些工具,并将其作为本地二进制文件运行,绝不通过 npx 运行。
实际的历史版本 rmcp 1.7.0 客户端会通过 HTTP 和 stdio 测试向后兼容性。运行完整的本地和 CI 版本门禁:
bash scripts/test-mcp-compat.sh
开发
推送或发起拉取请求前,请运行 cargo fmt --all。CI 会先在独立的 Ubuntu 格式检查任务中运行一次
cargo fmt --all -- --check。
格式错误会阻止后续耗费资源的 Nix、构建/测试/Clippy 和 MCP 一致性任务。
cargo test --locked
cargo clippy --all-targets --locked -- -D warnings
cargo fmt --all -- --check
# Linux-only required Rust PTY fixture suites
cargo test --locked --test device_fixture -- --test-threads=1
cargo test --locked --test device_command_parity -- --test-threads=1
cargo test --locked --test device_framing_parity -- --test-threads=1
cargo test --locked --test device_protocol_parity -- --test-threads=1
cargo test --locked --test device_parity_repeat public_boundary_repeat_gate -- --ignored --test-threads=1
生产路径的真实 PTY 夹具测试在 Linux 上运行。macOS 和 Windows 会运行常规 Rust 构建/测试/Clippy,以及受控后端覆盖测试。
文档与状态
产品待办事项会跟踪计划中和进行中的工作,文档索引则链接到用户指南、参考契约和报告。 请在问题跟踪器上报告问题和功能请求。
- CHANGELOG.md
- AGENTS.md,贡献者指南
MCP 注册表
此软件包已在 MCP 注册表中发布,名称为:
mcp-name: io.github.qarnet/serial-mcp
许可证
MIT。请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。