bauddy is a serial console for servers, switches and routers. Plug in a USB
console cable, run bauddy, and you're on the console. It works out the
port and baud rate for you, and the keys you need are always on screen.
It's also an MCP server, so an AI agent such as Claude can use the console while you watch. It asks you first before commands that commonly reboot, erase or save the device.
Free and open source (MIT), for macOS, Linux and Windows. It's been tested with real switches, servers and routers on macOS and Linux, but not yet on Windows. If something doesn't work, please report it.
- Finds the port. With one cable it connects straight away. With none plugged in yet, it waits for one. With several, it lists them; not sure which is yours? Unplug it and plug it back in, and bauddy points to it.
- Finds the baud rate. It listens to the device and picks the rate that makes sense, then remembers it for that cable. It won't send anything to the device without asking first. If a remembered rate gets no reply, it says so and offers to detect again; until the device answers, only Enter goes out, since keys at the wrong rate can reach a Linux console as a BREAK.
- Shows the keys. There's one key to remember,
ctrl+], and it's always on the bottom line. Press it to see the rest. - Tells you when something's wrong. If the output turns to garbage, the bottom line suggests detecting the rate again. If the cable comes out, it turns red and reconnects when you plug it back in.
- Keeps a log if you ask. Press
ctrl+]thenl. The log includes what was already on screen, so you can turn it on after the fact. - Pastes carefully. Pasting a config sends it a line at a time and waits for the device to catch up. It stops at the first error and asks before pasting commands that commonly reboot or wipe the device.
- Lets an AI agent help (MCP).
bauddy mcpgives Claude, or any other Model Context Protocol client, the console: "the switch on my console cable isn't passing traffic, take a look". See Use it with an AI agent.
With Homebrew on a Mac or Linux:
brew install ssimpson89/tap/bauddy
brew upgrade keeps it up to date. For betas too, install
ssimpson89/tap/bauddy@beta instead (brew uninstall bauddy first; only
one can be installed).
Or download the file for your system from the
releases page, unzip it,
and put bauddy somewhere on your path:
- Mac with Apple silicon:
darwin_arm64; Intel Mac:darwin_amd64 - Most Linux PCs:
linux_amd64; Raspberry Pi:linux_arm64orlinux_armv7 - Windows:
windows_amd64(a zip withbauddy.exe)
On Linux there are also .rpm and .deb packages for the same systems:
sudo dnf install ./bauddy-*.rpm or sudo apt install ./bauddy_*.deb.
macOS blocks a downloaded file the first time, because it isn't signed
by Apple (Homebrew takes care of this for you). Allow it in System Settings
→ Privacy & Security, or run xattr -d com.apple.quarantine bauddy.
Check it works with bauddy --version. To check the download, run
shasum -a 256 -c checksums.txt --ignore-missing (sha256sum on Linux)
with checksums.txt from the same release.
Or, with Go 1.26 or later (on a Mac, also Xcode's command line tools):
go install github.com/ssimpson89/bauddy/cmd/bauddy@latest
bauddy # connect to your USB console cable
bauddy ttyUSB0 # a specific port
bauddy -b 9600 # a specific baud rate
bauddy list # show the ports bauddy can see
bauddy keys # show every key
Everything you type goes to the device, so Ctrl-C, Esc and the arrow keys work
as usual. When you want bauddy itself, press ctrl+] and the bottom line
shows what's next:
| Key | What it does |
|---|---|
? |
show every key |
b |
pick a baud rate |
d |
detect the baud rate |
r |
reconnect to the port |
l |
start or stop a log |
h |
scroll back through earlier output (the last 10,000 lines) |
/ |
search earlier output |
c |
clear the screen |
B |
send BREAK (Cisco ROMMON, Linux SysRq) |
S |
tell a remote shell the window size |
q |
quit |
esc |
back to the console |
Lowercase keys act on bauddy. Capitals send something to the device.
- Linux may say you don't have permission to open the port. bauddy tells
you which group to join (usually
dialout); then log out and back in. - If
ctrl+]is awkward on your keyboard, use another key:bauddy --escape ctrl+t, or setBAUDDY_ESCAPE=ctrl+tin your shell. - Older equipment that uses 7-bit framing (7E1) is detected too. You can
also set it yourself with
-f 7E1. - Logs go in the current folder unless you say otherwise:
bauddy --log=~/console-logslogs from the start into that folder. A log records what the device sends, including the commands it echoes back, so a password typed in a command (enable secret …) ends up in it. - Open bauddy twice on the same port and both windows share the console: everything the device prints shows in both, and either can type. (Not on Windows yet.)
- Arduino and ESP32 boards may reset when bauddy connects. That's the board, not bauddy.
bauddy mcp is a Model Context Protocol (MCP) server for serial consoles. It
lets an AI agent such as Claude use the console: find the port, detect the
baud rate, run commands and read the output. Then ask something like "my
switch on the console cable isn't passing traffic, take a look". Commands go
through the same careful paste, so they arrive intact and stop at the first
error or question.
claude mcp add bauddy -- bauddy mcp # this project only, just you (the default: --scope local)
claude mcp add --scope user bauddy -- bauddy mcp # every project, just you
claude mcp add --scope project bauddy -- bauddy mcp # this project, shared with everyone in .mcp.json
claude --mcp-config '{"mcpServers":{"bauddy":{"command":"bauddy","args":["mcp"]}}}' # this session only
claude mcp remove bauddy # remove it, from whichever scope it is in
Add --read-only after bauddy mcp and the agent can connect and read the
console, but has no way to type anything.
For Claude Desktop, add this to claude_desktop_config.json, with the full
path to bauddy:
{ "mcpServers": { "bauddy": { "command": "/usr/local/bin/bauddy", "args": ["mcp"] } } }If you already have the console open in bauddy, the agent joins your window instead of taking the port, and you see every command as it types it. If bauddy isn't open, the agent opens the port itself; open bauddy later and it joins.
- While it's working, the bottom line turns violet:
Claude Code is working esc stop it ctrl+c stop + interrupt device. Your other keys, exceptctrl+], are ignored until it's done, so they can't land in the middle of its command. - esc stops it. A command it typed but hadn't entered is erased; one it had entered keeps running on the device. ctrl+c stops it and also sends ctrl+c to the device, as if you had typed it, which interrupts whatever is running there.
- Either way it's then paused: it can still read, but can't type until you
press
ctrl+]thenp, as the bottom line says (Claude Code paused · ctrl+] p resumes). The pause stays if it disconnects, so one that reconnects can't type either. Between its commands,ctrl+]thenppauses it. - Claude Code may also ask you before each command, depending on its settings. Don't rely on that.
- Not on Windows yet.
bauddy asks you, not the agent, before it sends:
- a reboot, erase or upgrade
- a command that saves or commits the configuration
debug, or clearing BGP sessions or console lines- BREAK
- an answer to the device's own
[confirm]question - anything at a bootloader prompt
If your MCP client can't ask you, bauddy refuses, unless you started it with
bauddy mcp --allow-risky.
This is a safety net, not a guarantee. It doesn't ask about configuration changes such as shutting an interface or changing a route, which can cut you off too, and aliases or scripts can get past it. Read what the agent wants to run before you allow it.
- What the console prints from when it joined, not before, so log in first if you'd rather it didn't see that.
- Everything after that, including any passwords in the configuration.
- Logs go in
~/.local/state/bauddy/logs(%LocalAppData%\bauddy\logson Windows), readable only by you. Use--log DIRto choose another folder, or--no-logto turn logging off.
MIT. See LICENSE. Changes are listed on the releases page; to build or contribute, see CONTRIBUTING.md. Found a security problem? See SECURITY.md.

![the keys, after pressing ctrl+]](/ssimpson89/bauddy/raw/main/docs/keys.png)