Siliconless firmware simulation for AI coding agents.
Your agent can already write firmware. What it can't do is watch that firmware run on the chip and react to what happened — it has no board on the desk, no debugger, no serial console. Chiprun hands it all three, virtually: a real microcontroller reached over MCP. The agent builds an ELF, gives it to Chiprun, and gets back exactly what the chip printed over UART. The write–run–observe loop agents already have for software, now for firmware.
Part of URDB. Endpoint: https://urdb.io/mcp.
This repo is the front door: a machine-readable AGENTS.md an agent reads
to drive the whole loop, a ready-to-use .mcp.json, and a runnable
examples/ folder — one hello-world per board.
- Two engines, two architectures, one endpoint. Chiprun runs each board on whichever open simulator models it best — Renode for the STM32 and Nordic parts, QEMU for ARM reference boards and RISC-V. You get ARM and RV32 from the same connection without picking or configuring an engine yourself.
- Timing you can trust, because we tell you how far to trust it. Every run is
bounded by virtual CPU time. Renode-backed boards report
exact— the cap is enforced in emulated time and reproduces across machines. QEMU-backed boards reportapproximate— deterministic instruction counting, but the cutoff is a wall-clock kill, so it can shift under host load. If you're testing timing-sensitive code you know which guarantee you have, instead of finding out the hard way. - Nothing to run locally. No emulator install, no board bring-up, no flashing. The simulation lives on the server; you cross-compile and connect.
-
Create a free account at urdb.io and mint an API key (looks like
urdb_live_…). -
Point your agent at Chiprun. Claude Code:
claude mcp add --transport http chiprun https://urdb.io/mcp \ --header "Authorization: Bearer urdb_live_YOUR_KEY"Opening this repo in Claude Code also works — the checked-in
.mcp.jsonwires it up once you setCHIPRUN_API_KEYin your environment. -
Clone the repo and tell your agent:
Set up Chiprun and run the
lm3s6965evbexample.It reads
AGENTS.md, builds the ELF, uploads it, runs it, and reportsHello world!from the virtual board's UART.
Your MCP client discovers these on connect. Call chiprun_help first each session — it
carries live board info and per-chip gotchas that this repo can lag behind.
| Tool | What it does |
|---|---|
chiprun_help |
Overview, board list, per-chip gotchas, limits, and your quota. Call first. |
chiprun_list_boards |
Boards with Rust target triples and each board's timing guarantee. |
chiprun_create_firmware_upload |
Hands back a presigned upload_url + firmware_id. |
chiprun_run_firmware |
Runs an uploaded ELF on a board; returns the captured UART. |
Full matrix in supported-boards.md — STM32, Nordic nRF, ARM MPS2,
Stellaris, and SiFive (RISC-V) today, with chiprun_list_boards as the always-current
source.
Bare-metal C, no vendor HAL, one cross-compiler:
cd examples/lm3s6965evb
make # -> hello-lm3s6965evb.elf (needs gcc-arm-none-eabi)RISC-V boards use gcc-riscv64-unknown-elf. CI builds every example on each push.
Coverage follows demand. Open an issue with your target MCU and what you're building.
MIT — see LICENSE.