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.

uv tool install pyserial-mcp

Or with pip:

pip install pyserial-mcp

Python 3.10 or newer is required.

Connect it to your MCP client

For Claude Code:

claude mcp add serial-mcp -- serial-mcp

For clients that use an MCP JSON configuration:

{
  "mcpServers": {
    "serial": {
      "command": "serial-mcp"
    }
  }
}

To run without installing, use "command": "uvx" and "args": ["pyserial-mcp"] instead.

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.2.tar.gz (102.6 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.2-py3-none-any.whl (24.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pyserial_mcp-0.7.2.tar.gz
  • Upload date:
  • Size: 102.6 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.2.tar.gz
Algorithm Hash digest
SHA256 90ff3ce82c62836a33dd2cd3c999b1ab5dbac27ba44eb6a91d3da5ac50d32a05
MD5 2e7a5b795a114ce5a864275ac5719eaa
BLAKE2b-256 7c10bef45706fff3cab5ead9274ce65a9a35bb8feff056633cc702850db48ba5

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyserial_mcp-0.7.2.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.2-py3-none-any.whl.

File metadata

  • Download URL: pyserial_mcp-0.7.2-py3-none-any.whl
  • Upload date:
  • Size: 24.2 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 3ef38089902c794991753ab6790817072a1c9e8df63b7b9f063b4297e3d0357e
MD5 7ea5145fabf4885a176762805c1cd214
BLAKE2b-256 9142735f507bb14e38aa41d4821f68d83393b392dd5f9594d08f9201dcba5ebc

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyserial_mcp-0.7.2-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

0.7.4

2 files

0.7.3

2 files

This release

0.7.2 This release

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