sbl-probe
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@sbl-probelist available serial ports"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
sbl-probe
Serial communication and protocol analysis MCP server. Gives AI coding assistants direct access to serial ports for reading, writing, decoding, and capturing embedded device output — no more copy-pasting from picocom.
Part of the Sound Byte Labs embedded tooling suite, alongside sbl-debugger for hardware debugging.
Installation
Create a virtual environment and install the package:
python3 -m venv .venv
source .venv/bin/activate
# Install
pip install -e .
# Or with test dependencies
pip install -e ".[dev]"Related MCP server: embedded-serial-mcp
MCP Configuration
Register the server in your MCP client's config. For most clients, add to .mcp.json in your project root:
{
"mcpServers": {
"sbl-probe": {
"type": "stdio",
"command": "/absolute/path/to/.venv/bin/python",
"args": ["-m", "sbl_probe"]
}
}
}Important: Use the absolute path to the Python binary inside your virtual environment. For example:
/home/you/sbl-probe-mcp/.venv/bin/python
Restart your MCP client and the tools are available immediately.
Tools
Connection Management
Tool | Description |
| List available serial ports with USB metadata and by-id paths |
| Open a serial connection (port, baud, optional name) |
| Close a named connection |
| List active connections with stats |
Data I/O
Tool | Description |
| Read decoded frames using the active decoder (line-oriented by default) |
| Read raw bytes in utf8, hex, or base64 |
| Write data to a connection |
Protocol Analysis
Tool | Description |
| Change the active decoder on a connection |
| Run a decoder over a raw data buffer |
| List available decoder names |
| Auto-detect baud rate by scoring printable text across common rates |
Capture & Replay
Tool | Description |
| Start background capture into a ring buffer (with optional filter, trigger, pretrigger) |
| Stop capture, return summary stats |
| Query captured frames (filter by regex, time range, last N) |
| Get frame counts grouped by pattern without reading all frames |
| Save capture buffer to a JSON Lines file |
| Load a previously saved capture |
Architecture
sbl_probe/
├── server.py # FastMCP server, tool wiring
├── transport/
│ ├── base.py # Transport protocol (structural typing)
│ ├── serial.py # pyserial wrapper
│ └── manager.py # Named connection registry
├── decoders/
│ ├── base.py # Frame dataclass + Decoder protocol
│ └── raw.py # Line-oriented decoder
├── capture/
│ ├── buffer.py # Thread-safe ring buffer with query support
│ ├── engine.py # Background reader thread
│ └── storage.py # JSON Lines save/load
└── tools/
├── connection.py # list_ports, open, close, connections
├── data.py # read, read_raw, write
├── protocol.py # set_decoder, decode_buffer, list_decoders
├── capture.py # capture_start/stop/read/stats/save/load
└── diagnostics.py # probe_baudKey design decisions:
Threaded pyserial with
asyncio.to_thread()— keeps the MCP event loop responsive without the complexity ofpyserial-asyncioPluggable decoders — register new decoders by name, swap at runtime via
set_decoderBackground capture — daemon thread feeds decoded frames into a ring buffer; query with regex, time range, or tail the last N frames
Ingress filtering — filter and trigger patterns on
capture_startkeep the buffer focused on what mattersError dicts, not exceptions — tools return
{"error": "..."}instead of crashing the server
Adding a Custom Decoder
from sbl_probe.decoders.base import Frame, Decoder
from sbl_probe.decoders import registry
class MyDecoder:
@property
def name(self) -> str:
return "my_proto"
def feed(self, data: bytes, timestamp: float) -> list[Frame]:
# Parse data, return frames
...
def reset(self) -> None:
...
registry.register("my_proto", MyDecoder)Running Tests
pytest # 113 tests
pytest -v # verbose
pytest tests/test_capture.py # just capture testsDependencies
mcp— Official Python MCP SDK (FastMCP)pyserial— Serial port accessPython >= 3.11
This server cannot be deployed
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Real-time chat for AI agents. Claude Code, Cursor, Cline and Codex join channels over MCP.
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
MCP server for Sentry - error monitoring, issue tracking, and debugging for AI assistants
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server that lets LLMs talk to serial devices: microcontrollers, routers, modems, embedded Linux, anything with a UART.2350 PyPI7MIT
- AlicenseNot gradedqualityCmaintenanceA professional MCP server for serial port communication, enabling AI assistants to list, connect, send/receive data, and manage serial connections with embedded systems, IoT devices, and hardware debugging hardware.1MIT
- FlicenseAqualityDmaintenanceA headless MCP server that enables AI tools (like Claude Code) to read and analyze serial logs from embedded boards (ESP32, STM32) for firmware debugging, with read-only tools for log retrieval and a built-in web viewer.6-
- FlicenseAqualityDmaintenanceAn MCP server that enables AI agents to read serial output from devices by buffering lines in the background and allowing polling for new output, preventing blocking on long-running serial monitors.3-