Releases: sbrunner-atx/serial-console-mcp
Releases · sbrunner-atx/serial-console-mcp
Release list
v0.3.2
Says what else the server is for: any device on a serial port, not only
telecommunication equipment.
Changed
- Descriptions now also say what else the server is for: any device on a serial
port, in raw, ANSI or VT100 mode, such as IoT gateways, alarm and control
panels, UPS and PDU menus, lab instruments and industrial controllers. README
opening, PyPI summary and keywords, registry title,serial-consoleskill,
connecttool description, and the Field Guide cover, chapter A, chapter C,
a new "everything else" row in the device playbook, and the terminal modes
table.
v0.3.1
Leads with what the server is for: AI configuring telecommunication equipment
through its console port. Adds the Junos and IOS operating skills, verified on a
Juniper EX2200, and fixes prompt matching after Junos redraws a line.
Changed
- Registry title and description, PyPI summary, keywords and classifiers,
README opening and Field Guide cover now lead with AI for the configuration of
telecommunication equipment: Juniper and Cisco routers and switches, Icom CI-V
and Kenwood, Yaesu and Elecraft CAT transceivers, GS-232 antenna rotators.
Added
- Operating skills
junos-operatingandios-operating(skills/): modes
from the prompt, shell/CLI/configure transitions, commit and rollback or the
IOS reload-timer discipline, everyday show commands, recovery. Field Guide
chapter 06. - Both skills checked against the real CLI. Junos shell transitions (
cli,
exit,start shell,cli -c) and every listed show command were run on
the EX2200. Neither Junos nor IOS hasshow system status, and IOS has no
show interfaces briefor| last; the skills now say what to use instead.
The IOS skill hadshow logging | last 50, which is Junos syntax; fixed. - Junos pager,
?help and configuration mode (configure exclusive,
commit check,edit/up/top,run show,rollback 0,exit) run on
the EX2200 with nothing committed. The pager line is---(more)---or
---(more NN%)---; the skill now matches the prefix and says to pressq
before typing, because keys at the pager are pager commands.
Fixed
- Prompt matching in
ansi,vt100andxtermmode sees the last line as the
terminal shows it, up to the cursor. Junos redraws an edited line with a CR,
padding spaces and backspaces after?and Ctrl-U, so the
bytes ended in\bandread_until_promptandexpecttimed out on any
prompt ending in$, thejuniper-craftdefault[#>%] ?$included (seen
on the EX2200-C). A line that has ended, or that a bare CR has just rewound,
is never taken for a prompt;dumbmode still matches the bytes exactly.
Field Guide chapter 05; thejunos-operatingskill no longer needs a bare
return after?or Ctrl-U.
Verified
- Live session on 2026-09-15: the 0.3.0 PyPI package, launched via
uvxas
Claude Desktop does, drove a Juniper EX2200-C (Junos 15.1R6.7) console over
a Prolific PL2303 adapter:juniper-craftpreset, oneexpectsequence from
shell to CLI through threeshowcommands and back, annotated capture. The
first hardware run; everything before it was the simulated port. _hosttest/juniper_login_check.py: interactive login check that asks for
credentials with getpass.
v0.3.0
The terminal release: the VT100 / ANSI / xterm family, as an agent needs it.
Added
- Terminal modes on
connect(terminal=...)and in presets.dumb(default)
passes raw bytes.ansistrips colour and escape sequences as bytes arrive
(chunk-safe) and renders CR overwrites, backspaces, erase-line and cursor
moves, so shells, coloured prompts and progress bars read cleanly and prompt
matching works through the colour codes. The console presets use it. - Screen model (
terminal="xterm"or"vt100",cols/rows): a real
character grid kept bypyte, for BIOS setup, RAID/BMC consoles, menu-driven
switches, vi/top. Thescreentool shows it with the cursor position; the
terminal answers device-attribute and cursor-position queries as a VT100.
Installed with the[screen]extra; the installers include it. Without it,
xtermfalls back toansiwith a note. send_keys: Ctrl-C and the other control keys, Esc, Tab, Enter, arrows,
Home/End, Page Up/Down, Insert/Delete, F1..F12, single characters and
text:runs, encoded as an xterm sends them. Interrupt aping, complete a
command, walk a menu. Read-only mode allows named keys, refuses literal text.- Presets
xiegu-civ(G90/X6100 speak CI-V, address 0x70; note on Baofeng and
other handhelds having no CAT) andscreen-console(115200 8N1, xterm 80x25). - Transcript and reads render through the connection's terminal mode.
Changed
- 30 tools (was 28), 12 presets (was 10), 73 tests.
v0.2.0
The "shack" release: several ports at once, control lines, presets, expect
sequences, capture, and diagnostics. Existing single-port conversations keep
working unchanged; every new argument has a default.
Added
- Several ports at once.
connect(name="rig"),connect(name="rotator");
every tool takesconnection=and defaults to the most recently used one.
statuslists all;disconnect(all_connections=True). - Device presets.
connect(preset="kenwood-cat")and friends load the
family's usual baud, framing, flow control, line ending and prompt; explicit
arguments override.list_presetsshows them: cisco-console, juniper-craft,
linux-console, kenwood-cat, elecraft-cat, yaesu-cat, icom-civ, yaesu-rotator,
arduino, nmea-gps. - Per-connection defaults.
connect(line_ending=..., prompt=...)sets what
send_text,query_textandread_until_promptuse when not told otherwise.
Say "this device wants LF" once. - Control lines.
set_lines(dtr, rts),pulse_line("DTR", ms),
send_break(ms);statusreports CTS/DSR/CD/RI/DTR/RTS. Key a rig's PTT,
reset an Arduino, interrupt a boot. expect. A list of send-and-wait steps in one call, for login flows and
scripted command sequences, withauto_replyfor pagers (--More--).
read_until_promptacceptsauto_replytoo.- Capture.
capture_start(path, format="raw"|"annotated")/
capture_stop. Raw is a terminal log; annotated is timestamped TX/RX lines. - Transcript.
get_transcriptreturns the rolling last 256 KB received on
a connection regardless of what reads consumed; also the MCP resource
serial://transcript/{name}. - Diagnostics.
port_in_use_by(port)names the process holding a port
(lsof); the busy-port hint onconnectincludes it.detect_baud(port)
tries common rates and ranks them by how readable the reply is. - Text CAT helpers.
cat_buildandcat_parsefor the Kenwood, Elecraft
and Yaesu;protocols: frequency sets, rig ID to model, FA/FB, MD, IF
decoding, and the?; E; O;error replies. - Icom CI-V helpers.
civ_build,civ_parse(frames, echo vs. reply,
BCD frequency, mode, OK/NG, PTT) andciv_freq. - Rotator helpers.
rotator_buildandrotator_parsefor GS-232A/B:
read, move, move with elevation, stop, jog, speed;+0180,+0180+0045
andAZ=180 EL=045replies. - Read-only mode.
SERIAL_CONSOLE_READ_ONLY=1refuses writes except
read-style commands (show/display/get, two-letter CAT reads, CI-V read
frames) and refuses control-line changes;SERIAL_CONSOLE_ALLOWoverrides
the allowlist. - Idle auto-close.
SERIAL_CONSOLE_IDLE_MINUTES=15closes ports left
idle, so a forgotten connection stops blocking WSJT-X. Off by default. - The
serial-consoleoperating skill (skills/serial-console/SKILL.md). list_serial_portsmarks ports already open here.
Changed
read_until_promptwith no prompt anywhere now falls back to "the received
text ends in #, >, $ or %" instead of a bare literal#.reconnect_last(name)reopens a named remembered connection; the remembered
file now holds every connection by name (0.1.x files are read transparently).- The unused
timeoutargument ofconnectis gone. - 28 tools (was 11); 54 tests.
v0.1.1
Added
server.jsonand the READMEmcp-namemarker so the package can be listed
in the official MCP Registry asio.github.sbrunner-atx/serial-console-mcp.
Changed
- Release workflow publishes with a repository token secret and can be run by
hand; Trusted Publishing wiring kept. - Installer builds install the
[freeze]extra (mcp[cli] is needed by
--collect-all mcp); Inno[UninstallRun]no longer uses a flag it rejects.
v0.1.0
First public, experimental release.
Added
- Eleven tools:
list_serial_ports,connect,reconnect_last,send_text,
send_hex,read_until_prompt,read_available,query_text,clear_buffer,
status,disconnect. - Interactive-console model: a background reader drains the port into a buffer
from the moment it opens; reads match a literal or regex prompt and push
leftover bytes back, or return once the line goes idle. - Every Quick-Connect setting on
connect: baud, data bits, parity, stop bits,
RTS/CTS and XON/XOFF. Default 9600 8N1, no flow control. Settings are
remembered forreconnect_last. - Console script
serial-console-mcp;serial-console-mcp configurewrites the
Claude Desktop config entry (merging, with backup) and--removeundoes it. - Windows (Inno Setup) and macOS (.pkg) installers built by CI on
v*tags. - The serial-console-mcp Field Guide (
docs/). - 37-case test suite on a simulated serial port; CI on Linux, macOS, Windows.
Notes
- The MCP SDK is pinned
<2; the 2.x line removedmcp.server.fastmcp. - A dead reader (unplugged adapter) is reported by every tool instead of a
silent timeout; the receive buffer is capped at 4 MB. - Verified with the simulated port and a live MCP stdio handshake. A run against