Install
cargo build --releaseWho it is for
If you want an assistant or script to reach serial/UART, and you want the same flow as both an MCP tool and a command line, serial-mcp-server matches. It provides an MCP stdio service and a scriptable CLI for CI and for agent skill use that needs no MCP config. The current release target is 0.3.0.
It fits people who already have Rust 1.74 or newer on this machine, can offer a serial device or USB-to-serial adapter during hardware work, and have OS permission for that port. Repository:
https://github.com/adancurusul/serial-mcp-server
If you only want to click in a browser and have no compile environment, stop here — the official entry is clone, then cargo build --release.
First try in 3 minutes
The official main path is compile from source. Prerequisite: Rust 1.74+. On the first try do not attach a real device: only enumerate local ports, so you do not write a serial port by mistake.
Install location is the cloned repository root:
git clone https://github.com/adancurusul/serial-mcp-server.git
cd serial-mcp-server
cargo build --release
The binary is at target/release/serial-mcp-server. You can also cargo install --path . --locked onto PATH, but the first time the binary built in the repository is enough.
Low-risk first call:
serial-mcp-server list-ports --json
This is a read-only enumeration; it does not write data to a device. You can also run serial-mcp-server --help first to confirm the command is present. Do not treat port placeholders in the docs as a real device name to write.
Observable success signal: list-ports --json prints a JSON of ports (it may be empty) and the process exits normally. If permission is insufficient, fix OS permission for the chosen serial port first; do not switch to an undocumented launcher.
Use cases
Case 1: See which ports exist, then probe one of them. Matching commands are list-ports --json and probe with --baud 115200 --json. Port names must come from that output; do not hand-write a fictional path. probe reaches hardware; confirm the device is attached before running it.
Case 2: Pack a multi-step timing sequence into a JSON macro. Devices often need: send a command, wait a few milliseconds, read a prompt or reply, then send the next. The macro pack records that process so a person, CLI, or assistant can do macro validate, macro list, macro plan, and simulate without hardware. On the MCP side there is also in-memory macro-pack load / enumerate / unload, plan, and run. A real macro run or write/read operates a real port; confirm the cable first.
Limits
0.3.0 removed Quick from the public API; Quick-style usage should be written as macros. Do not keep looking for a Quick interface.
The default sample data for write is H, with --read --timeout-ms 1000 --json; that sends data to the port. Timeout and baud excerpts only demonstrate 115200 and 1000 ms; they are not safe defaults for every device.
No GUI or cloud serial is documented. MCP is stdio. No client is named. Macros can be simulated first, but run can still change device state. Hardware commands fail when permission is missing or there is no driver.