- Python 100%
|
John Myers
5ff01dd3ee
Generic Renode-control MCP server
A firmware/platform-agnostic MCP server for driving headless Renode emulations over the telnet monitor: lifecycle, script loading, emulation control, system-bus memory read/write, and UART capture (13 tools). |
||
|---|---|---|
| .gitignore | Generic Renode-control MCP server | |
| CLAUDE.md | Generic Renode-control MCP server | |
| config.py | Generic Renode-control MCP server | |
| LICENSE | Generic Renode-control MCP server | |
| mcp-config.json | Generic Renode-control MCP server | |
| README.md | Generic Renode-control MCP server | |
| renode_client.py | Generic Renode-control MCP server | |
| renode_mcp.py | Generic Renode-control MCP server | |
| requirements.txt | Generic Renode-control MCP server | |
renode-mcp
MCP (Model Context Protocol) server for controlling Renode emulations.
Overview
This server lets Claude Code and other MCP clients start, control, and inspect a headless
Renode instance: launch it, load .resc scripts, run/pause emulation, read and write
system-bus memory, and capture UART output — all over Renode's telnet monitor interface.
It is firmware- and platform-agnostic: point it at your built Renode and (optionally) a
directory of .resc scripts, and drive whatever machines those scripts define.
Setup
-
Install dependencies:
pip install -r requirements.txt -
Build Renode (if you haven't already):
cd /path/to/renode && ./build.sh --no-gui -
Register in your MCP client (see
mcp-config.jsonfor an example) and set the environment variables below.
Configuration
| Variable | Required | Description |
|---|---|---|
RENODE_PATH |
yes | Path to a built Renode source tree (contains output/bin/Release/Renode.dll). |
RENODE_TELNET_PORT |
no | Telnet port for the Renode monitor (default 1234). |
RENODE_SCRIPTS_DIR |
no | Directory of .resc scripts. Each is exposed by its filename stem; scripts can also be referenced by absolute path. |
Available Tools
| Tool | Description |
|---|---|
renode_start |
Launch Renode and optionally load a .resc script |
renode_stop |
Stop the Renode instance |
renode_status |
Check status, list machines and known scripts |
renode_execute |
Execute an arbitrary monitor command |
renode_load_script |
Load a .resc script with optional variable overrides |
renode_run_macro |
Run a macro defined in the loaded script |
renode_start_emulation |
Start (resume) emulation |
renode_pause_emulation |
Pause emulation |
renode_run_for |
Run for a specific virtual time duration |
renode_read_memory |
Read bytes from the system bus |
renode_write_memory |
Write bytes to the system bus |
renode_enable_log |
Enable log file capture for UART output |
renode_get_uart_output |
Read recent UART console output from the log |
Architecture
MCP Client <--stdio--> renode_mcp.py <--telnet--> Renode (headless)
The server manages a single Renode process, launched with --port <N> --disable-xwt --plain.
Commands are sent as text over a TCP telnet socket to the Renode monitor console.
License
MIT — see LICENSE.