Skip to main content

serial-mcp

Give an LLM a reliable serial connection to microcontrollers, routers, modems, embedded Linux systems, and anything else with a UART.

serial-mcp is an MCP server built for real device work: interactive shells, bootloader prompts, binary protocols, logging, and file transfers. It continuously buffers incoming data so output is not lost between tool calls.

Claude using serial-mcp to inspect a connected device

Install

The PyPI package is named pyserial-mcp; the command it installs is serial-mcp. Python 3.10 or newer is required.

For a persistent installation with explicit upgrades:

uv tool install pyserial-mcp

Or with pip:

pip install pyserial-mcp

Upgrade an existing uv installation with uv tool upgrade pyserial-mcp.

Connect it to your MCP client

For Codex (the desktop app, CLI, and IDE extension share this configuration):

codex mcp add serial-mcp -- serial-mcp

For Claude Code:

claude mcp add --scope user serial-mcp -- serial-mcp

The quickest setup skips the separate installation and lets uvx download and run the package. Use the command for your client:

codex mcp add serial-mcp -- uvx pyserial-mcp
claude mcp add --scope user serial-mcp -- uvx pyserial-mcp

For clients that use an MCP JSON configuration:

{
  "mcpServers": {
    "serial": {
      "command": "uvx",
      "args": ["pyserial-mcp"]
    }
  }
}

What it can do

  • Discover serial ports and USB metadata, then detect an unknown baud rate.
  • Run a single command with automatic open/close, or keep a session open for an interactive shell.
  • Read and write text, raw bytes, and hex data without losing output between calls.
  • React immediately to boot prompts with regex-triggered text or binary replies.
  • Control DTR, RTS, break, and read CTS, DSR, RI, and CD signals.
  • Capture logs and send or receive files with XMODEM checksum or CRC-16.
  • Identify the process holding a busy port and, with explicit use of serial_force_release, terminate it.

Open sessions automatically close after 15 minutes of inactivity by default. Clients should still call serial_close as soon as a session is finished so the port is available to other programs.

Typical workflows

Ask your LLM naturally, for example:

Find the connected serial device, detect its baud rate, and show me its shell prompt.

For one command, the server provides a safe one-shot tool:

serial_execute(port="/dev/ttyUSB0", data="uname -a", expect="\\$")

For longer work, use serial_open, one or more serial_command calls, and serial_close. Use serial_wait_for(..., respond=" ") to catch a time-sensitive prompt such as U-Boot's autoboot interruption.

Tool profiles

The default full profile exposes all 24 tools. If your client loads every tool schema and you only need common text workflows, use the smaller seven-tool profile:

serial-mcp --profile core

You can also set SERIAL_MCP_TOOL_PROFILE=core in the server environment.

Development

No hardware is required to run the test suite:

git clone https://github.com/alxgmpr/serial-mcp.git
cd serial-mcp
uv pip install -e ".[dev]"
pytest -v

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyserial_mcp-0.7.4.tar.gz (102.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyserial_mcp-0.7.4-py3-none-any.whl (24.4 kB view details)

Uploaded Python 3

File details

Details for the file pyserial_mcp-0.7.4.tar.gz.

File metadata

  • Download URL: pyserial_mcp-0.7.4.tar.gz
  • Upload date:
  • Size: 102.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pyserial_mcp-0.7.4.tar.gz
Algorithm Hash digest
SHA256 441187f7ec6b832c2cc30d5036be73c3c896a61a732593e5b2107ea9ab1bbcf8
MD5 3f2260343b154299b8f892342d114349
BLAKE2b-256 60f1beb295a0f00fdcde7ac18ab76212475f951201c42b4b4b3077f8f88ccfb2

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyserial_mcp-0.7.4.tar.gz:

Publisher: release.yml on alxgmpr/serial-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyserial_mcp-0.7.4-py3-none-any.whl.

File metadata

  • Download URL: pyserial_mcp-0.7.4-py3-none-any.whl
  • Upload date:
  • Size: 24.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pyserial_mcp-0.7.4-py3-none-any.whl
Algorithm Hash digest
SHA256 65b31c5ceac3bba3a632fa777413533cebf35aa556981bbc97ff0b0d373e11d3
MD5 157f08e4bfa4e7d4d9b612d0e337c2c7
BLAKE2b-256 88dc86cd9d6e420b537cd5e934a61cdc15a3bb319268daf8912bf7e463874525

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyserial_mcp-0.7.4-py3-none-any.whl:

Publisher: release.yml on alxgmpr/serial-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.7.4 This release

2 files

0.7.3

2 files

0.7.2

2 files

0.7.1

2 files

0.7.0

2 files

0.6.0

2 files

0.5.0

2 files

0.4.1

2 files

0.4.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page