All projects

mcp-remote-access

tools

SSH and Serial port MCP server

Python MCP SSH Serial Automation
View on GitHub

Overview

mcp-remote-access gives an MCP-compatible AI client hands-on access to remote machines and embedded targets over SSH and serial. It’s the “give the agent root on the bench” MCP — once it’s running, your assistant can log into a Pi, run commands, transfer files, open a serial console, drive AT-style command flows, and hard-reset a device over DTR/RTS.

Why I built it

A lot of bench and homelab work happens over SSH sessions and serial consoles — flashing firmware, reading boot logs, poking at a device under test. Wrapping those transports as MCP tools means the same assistant that reasons about a problem can also act on the hardware, without me copy-pasting between a terminal and a chat window.

How it works

It’s deliberately thin: 24 tools, two transports, no orchestration language — the higher-level workflow logic lives in the agent’s prompts. The details that make it pleasant on an embedded bench:

  • Match serial ports by identity — connect by VID / PID / serial number / description instead of guessing /dev/ttyUSB0 vs ttyUSB1.
  • Background SSH — long jobs (make, pytest, tcpdump) run async via ssh_execute_background; poll with ssh_check_background.
  • Prompt-aware UARTserial_expect / serial_wait_for handle login prompts, AT-style flows, and bootloader handshakes without race conditions.
  • DTR / RTS control — hard-reset MCUs over USB-serial, send break signals, hold a boot pin low — the usual embedded tricks.

Credentials are memory-only — there’s no on-disk session store.

You:   "Flash the firmware over the Pi's UART, then watch the boot log."
Agent: serial_connect(vid=0x10c4) → serial_send(...) → serial_wait_for("booting…")
       → ssh_execute_background("journalctl -f")

Tech

Python over paramiko (SSH) and pyserial (UART), exposed through the MCP server SDK. AGPL-3.0, and a member of my eng-mcp-suite.

Get it

Setup and the full tool list are on GitHub.