pymcuprog-mcp
MCP server wrapping pymcuprog so AI tools (Claude Code, Claude Desktop, etc.) can program Microchip AVR microcontrollers via natural language.
Supports USB HID debuggers (nEDBG, PICkit 4, Atmel-ICE, MPLAB Snap, …) and serial UART UPDI adapters.
Installation
No installation needed if you use uvx — it runs the server directly from PyPI on demand (see .mcp.json examples below).
To install as a persistent tool:
uv tool install pymcuprog-mcp
Or with pip:
pip install pymcuprog-mcp
From source:
git clone https://github.com/lucasgerads/pymcuprog-mcp
cd pymcuprog-mcp
pip install -e .
Configuration
The server is configured via environment variables. The two most important ones are PYMCUPROG_DEVICE (target MCU name, e.g. atmega4808) and PYMCUPROG_TOOL (debugger type, e.g. nedbg).
| Variable | Description | Default |
|---|---|---|
PYMCUPROG_DEVICE |
Target device name (e.g. atmega4808, attiny416) |
— |
PYMCUPROG_TOOL |
Debugger type (nedbg, pickit4, atmelice, snap, …) |
any connected |
PYMCUPROG_SERIALNUMBER |
USB serial number substring (to pick a specific tool) | — |
PYMCUPROG_SERIALPORT |
Serial port for UART UPDI mode (e.g. /dev/ttyUSB0, COM3) |
— |
PYMCUPROG_BAUDRATE |
Baud rate for serial UPDI mode | 115200 |
PYMCUPROG_PROJECT_DIR |
Default project directory for the build_and_flash tool |
— |
Setting PYMCUPROG_SERIALPORT switches the server into serial UPDI mode (uses a plain USB-serial adapter instead of a Microchip debugger).
.mcp.json examples
All examples use uvx, which downloads and runs the server directly from PyPI with no prior installation step.
USB HID debugger (nEDBG / Curiosity Nano)
{
"mcpServers": {
"pymcuprog": {
"command": "uvx",
"args": ["pymcuprog-mcp"],
"env": {
"PYMCUPROG_DEVICE": "atmega4808",
"PYMCUPROG_TOOL": "nedbg"
}
}
}
}
PICkit 4 or MPLAB Snap
{
"mcpServers": {
"pymcuprog": {
"command": "uvx",
"args": ["pymcuprog-mcp"],
"env": {
"PYMCUPROG_DEVICE": "attiny416",
"PYMCUPROG_TOOL": "pickit4"
}
}
}
}
Serial UART UPDI (cheap USB-serial adapter)
{
"mcpServers": {
"pymcuprog": {
"command": "uvx",
"args": ["pymcuprog-mcp"],
"env": {
"PYMCUPROG_DEVICE": "avr128da48",
"PYMCUPROG_SERIALPORT": "/dev/ttyUSB0",
"PYMCUPROG_BAUDRATE": "115200"
}
}
}
}
Multiple tools on the same machine (select by serial number)
{
"mcpServers": {
"pymcuprog-board-a": {
"command": "uvx",
"args": ["pymcuprog-mcp"],
"env": {
"PYMCUPROG_DEVICE": "atmega4808",
"PYMCUPROG_TOOL": "nedbg",
"PYMCUPROG_SERIALNUMBER": "MCHP0001"
}
},
"pymcuprog-board-b": {
"command": "uvx",
"args": ["pymcuprog-mcp"],
"env": {
"PYMCUPROG_DEVICE": "atmega4808",
"PYMCUPROG_TOOL": "nedbg",
"PYMCUPROG_SERIALNUMBER": "MCHP0002"
}
}
}
}
Claude Code (via CLI)
claude mcp add pymcuprog -e PYMCUPROG_DEVICE=atmega4808 -e PYMCUPROG_TOOL=nedbg -- uvx pymcuprog-mcp
Available tools
| Tool | Description |
|---|---|
list_supported_devices |
All device names pymcuprog knows (no hardware needed) |
list_connected_tools |
USB HID debuggers currently attached |
ping |
Read device ID bytes to verify connectivity |
erase |
Chip erase or erase a specific memory area |
flash |
Erase + write + verify + release in one call (recommended) |
build_and_flash |
Run make in a project directory, then flash the resulting .hex |
write_hex |
Program a .hex file with manual control over erase/verify steps |
verify_hex |
Compare target memory to a .hex file |
read_memory |
Read raw bytes from flash, EEPROM, fuses, etc. |
write_memory |
Write raw hex bytes to fuses, EEPROM, user_row, etc. |
hold_in_reset |
Hold target in reset |
release_from_reset |
Release target from reset |
disconnect |
Close the persistent debugger session |
read_target_voltage |
Measure target VCC |
read_supply_voltage |
Read debugger supply setpoint |
set_supply_voltage |
Set debugger supply voltage output |
read_tool_info |
Read debugger firmware/hardware info |
Typical workflow: ping → flash or ping → build_and_flash
All programming tools accept optional device, tool, serialport, etc. parameters to override the environment variables on a per-call basis.
Release files for pymcuprog-mcp 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pymcuprog_mcp-0.1.5.tar.gz | 10.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pymcuprog_mcp-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 19.7 kB
Release files / pymcuprog_mcp-0.1.5.tar.gz
| Download URL | pymcuprog_mcp-0.1.5.tar.gz |
|---|---|
| Size | 10.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a22de981e7679b932afa85de143e993a14dec82725eed71c08e96fbf5df7b5e4
|
|
BLAKE2b-256 checksum How to use checksums |
a2e0fab90e2fec430203a075fee322338907b3590b95d8c83b5234449c696e45
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency logRelease files / pymcuprog_mcp-0.1.5-py3-none-any.whl
| Download URL | pymcuprog_mcp-0.1.5-py3-none-any.whl |
|---|---|
| Size | 9.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
389c17fce1da2f847f9a45613313a1c1817eb0b6fe25cb64a48d647224e73abb
|
|
BLAKE2b-256 checksum How to use checksums |
30d09227bb2cddc5ddd719b715adf56ec468ca6752802d6d2911fbb55fbabc2c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 7, 2026.
Transparency log