An MCP (Model Context Protocol) server for controlling Amiberry, the Amiga emulator, through Claude AI.
- Browse and launch Amiberry configurations
- Search for disk images (ADF, HDF, DMS, LHA, ISO, CUE, CHD)
- List and manage savestates
- View and edit configuration file contents
- Launch emulator with specific models (A500, A500+, A600, A1200, A4000, CD32, CDTV)
- HTTP API for voice assistants (Siri, Google Assistant) and automation
- Pause/Resume: Control running emulation via IPC
- Save/Load State: Save and restore states while running
- Disk Swapping: Insert floppy/CD images into running emulation
- Live Configuration: Query and modify config options at runtime
- Screenshots: Capture screenshots from running emulation
- Cross-platform: Works on Linux, macOS, and FreeBSD
- Log Capture: Launch with logging enabled and capture output to files
- Log Tailing: Incremental log reading and pattern-based waiting
- Crash Detection: Automatic crash detection via process signals and log scanning
- Config Editor: Parse, modify, and create .uae configuration files
- Savestate Inspector: Read metadata from .uss savestate files
- ROM Manager: Identify and catalog Kickstart ROMs by checksum
- Memory Access: Read/write emulated Amiga memory for debugging
- Process Lifecycle: Track, monitor, kill, and restart Amiberry processes
- Health Check: Combined process + IPC + emulation status check
- Launch and Wait: Launch Amiberry and wait until IPC is ready for commands
- Screenshot Analysis: Capture screenshots with image data returned for AI analysis
- Crash Recovery: Detect crashes, analyze logs, restart automatically
- WHDLoad Launcher: Search and launch WHDLoad games from LHA archives
- CD Image Launcher: Launch CD32/CDTV games with auto-detection
- Multi-Disk Support: Configure disk swapper for multi-disk games
- Config Templates: Generate configs from pre-made model templates
- Python 3.10 or higher
- Amiberry emulator installed:
- macOS: Amiberry.app in
/Applications - Linux:
amiberrycommand in PATH
- macOS: Amiberry.app in
- Claude Desktop application (for MCP integration)
amiberry-mcp-server/
├── src/
│ └── amiberry_mcp/
│ ├── __init__.py
│ ├── config.py # Shared configuration
│ ├── server.py # MCP server (48 tools)
│ ├── http_server.py # HTTP API server
│ ├── ipc_client.py # IPC client for runtime control
│ ├── uae_config.py # Config file parser/generator
│ ├── savestate.py # Savestate metadata parser
│ └── rom_manager.py # ROM identification
├── scripts/
│ ├── install.sh # MCP server installer
│ ├── install_http_api.sh # HTTP API installer
│ ├── start_http_api.sh # HTTP API launcher
│ ├── uninstall.sh # Uninstaller
│ └── test_http_api.sh # HTTP API tests
├── tests/
│ ├── test_server.py # Server unit tests
│ ├── test_mcp_connection.py
│ └── test_uae_config.py # Config parser tests
├── docs/
│ ├── HTTP_API_GUIDE.md # HTTP API documentation
│ └── QUICKSTART_HTTP_API.md
├── pyproject.toml
├── README.md
└── LICENSE
# Clone the repository
git clone https://github.com/midwan/amiberry-mcp-server.git
cd amiberry-mcp-server
# Run the installer
./scripts/install.shThe installer will:
- Create a Python virtual environment
- Install dependencies
- Configure Claude Desktop automatically
# Create and activate virtual environment
python3 -m venv venv
source venv/bin/activate
# Install the package
pip install -e .
# Configure Claude Desktop manually (see below)Edit your Claude Desktop configuration file:
macOS:
nano ~/Library/Application\ Support/Claude/claude_desktop_config.jsonLinux:
nano ~/.config/Claude/claude_desktop_config.jsonAdd this configuration:
{
"mcpServers": {
"amiberry": {
"command": "/path/to/amiberry-mcp-server/venv/bin/python",
"args": ["-m", "amiberry_mcp.server"]
}
}
}Then restart Claude Desktop.
After installation, restart Claude Desktop. You should see a hammer icon in the input area indicating MCP tools are available.
Try asking Claude:
- "What Amiberry configurations do I have?"
- "Show me my disk images"
- "Launch Amiberry with the A500 model"
~/Amiberry/
├── Configurations/ # .uae config files
├── Floppies/ # .adf, .adz, .dms files
├── Harddrives/ # .hdf, .hdz files
├── Lha/ # .lha archives (WHDLoad games)
├── Savestates/ # .uss savestate files
├── Screenshots/
├── Kickstarts/ # Kickstart ROM files
└── logs/ # Captured log files
~/Amiberry/
├── conf/ # .uae config files
├── floppies/ # .adf, .adz, .dms files
├── harddrives/ # .hdf, .hdz files
├── lha/ # .lha archives (WHDLoad games)
├── savestates/ # .uss savestate files
├── screenshots/
├── kickstarts/ # Kickstart ROM files
└── logs/ # Captured log files
~/.config/amiberry/ # System configs (optional)
| Tool | Description |
|---|---|
list_configs |
List available configuration files |
get_config_content |
View contents of a config file |
list_disk_images |
Search for disk images (ADF/HDF/DMS/LHA) |
launch_amiberry |
Launch with config, model, disk, or LHA file |
list_savestates |
List available savestate files |
get_platform_info |
Show platform and path information |
| Tool | Description |
|---|---|
parse_config |
Parse .uae config file into structured data |
modify_config |
Change specific options in a config file |
create_config |
Generate new config from template |
| Tool | Description |
|---|---|
launch_with_logging |
Launch with --log flag and capture output |
launch_whdload |
Search and launch WHDLoad games |
launch_cd |
Launch CD images (ISO/CUE/CHD) |
set_disk_swapper |
Configure multi-disk game support |
| Tool | Description |
|---|---|
list_cd_images |
List available CD images |
list_logs |
List captured log files |
get_log_content |
Read a captured log file |
| Tool | Description |
|---|---|
inspect_savestate |
Read metadata from .uss savestate files |
list_roms |
List available ROMs with identification |
identify_rom |
Get ROM details by checksum |
get_amiberry_version |
Get Amiberry version info |
| Tool | Description |
|---|---|
pause_emulation |
Pause a running emulation |
resume_emulation |
Resume a paused emulation |
reset_emulation |
Soft or hard reset |
frame_advance |
Advance N frames when paused |
| Tool | Description |
|---|---|
runtime_insert_floppy |
Insert floppy disk into drive |
runtime_eject_floppy |
Eject floppy from drive |
list_floppies |
List all floppy drives and contents |
runtime_insert_cd |
Insert CD image |
runtime_eject_cd |
Eject CD |
| Tool | Description |
|---|---|
runtime_screenshot |
Take a screenshot |
runtime_save_state |
Save state while running |
runtime_load_state |
Load a savestate |
runtime_quicksave |
Quick save to slot (0-9) |
runtime_quickload |
Quick load from slot (0-9) |
| Tool | Description |
|---|---|
set_volume |
Set master volume (0-100) |
get_volume |
Get current volume |
mute |
Mute audio |
unmute |
Unmute audio |
| Tool | Description |
|---|---|
toggle_fullscreen |
Toggle fullscreen/windowed mode |
set_warp |
Enable/disable warp mode |
get_warp |
Get warp mode status |
runtime_set_display_mode |
Set mode (0=window, 1=fullscreen, 2=fullwindow) |
runtime_get_display_mode |
Get current display mode |
runtime_set_ntsc |
Set video mode (0=PAL, 1=NTSC) |
runtime_get_ntsc |
Get current video mode (PAL/NTSC) |
| Tool | Description |
|---|---|
runtime_set_sound_mode |
Set mode (0=off, 1=normal, 2=stereo, 3=best) |
runtime_get_sound_mode |
Get current sound mode |
| Tool | Description |
|---|---|
runtime_get_joyport_mode |
Get port mode (0-3) |
runtime_set_joyport_mode |
Set port mode (0=default, 2=mouse, 3=joy, 7=cd32) |
runtime_get_autofire |
Get autofire mode for port |
runtime_set_autofire |
Set autofire (0=off, 1=normal, 2=toggle, 3=always, 4=toggle_noaf) |
| Tool | Description |
|---|---|
runtime_set_floppy_speed |
Set floppy speed (0=turbo, 100=1x, 200=2x, 400=4x, 800=8x) |
runtime_get_floppy_speed |
Get current floppy speed |
runtime_disk_write_protect |
Set disk write protection for drive |
runtime_get_disk_write_protect |
Get disk write protection status |
| Tool | Description |
|---|---|
runtime_toggle_rtg |
Toggle between RTG and chipset display |
runtime_toggle_status_line |
Cycle status line (off/chipset/rtg/both) |
runtime_get_fps |
Get current frame rate and idle percentage |
| Tool | Description |
|---|---|
runtime_toggle_mouse_grab |
Toggle mouse capture/grab |
runtime_get_mouse_speed |
Get current mouse sensitivity |
| Tool | Description |
|---|---|
runtime_set_chipset |
Set chipset (OCS, ECS_AGNUS, ECS_DENISE, ECS, AGA) |
runtime_get_chipset |
Get current chipset |
runtime_set_cpu_speed |
Set CPU speed (-1=max, 0=cycle-exact, >0=%) |
runtime_get_cpu_speed |
Get current CPU speed setting |
runtime_get_memory_config |
Get all memory sizes (chip, fast, bogo, z3, rtg) |
| Tool | Description |
|---|---|
runtime_set_chip_mem |
Set Chip RAM size (256, 512, 1024, 2048, 4096, 8192 KB) |
runtime_set_fast_mem |
Set Fast RAM size (0, 1024, 2048, 4096, 8192 KB) |
runtime_set_slow_mem |
Set Slow/Bogo RAM size (0, 256, 512, 1024, 1792 KB) |
runtime_set_z3_mem |
Set Zorro III RAM size (0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 MB) |
runtime_get_cpu_model |
Get current CPU model (68000, 68010, 68020, 68030, 68040, 68060) |
runtime_set_cpu_model |
Set CPU model |
| Tool | Description |
|---|---|
runtime_set_window_size |
Set emulator window size (width x height) |
runtime_get_window_size |
Get current window dimensions |
runtime_set_scaling |
Set scaling mode (-1=auto, 0=nearest, 1=linear, 2=integer) |
runtime_get_scaling |
Get current scaling mode |
runtime_set_line_mode |
Set line mode (single, double, scanlines) |
runtime_get_line_mode |
Get current line mode |
runtime_set_resolution |
Set display resolution (lores, hires, superhires) |
runtime_get_resolution |
Get current resolution mode |
runtime_set_autocrop |
Enable/disable automatic display cropping |
runtime_get_autocrop |
Get current autocrop status |
| Tool | Description |
|---|---|
runtime_insert_whdload |
Load a WHDLoad game (LHA archive or directory) |
runtime_eject_whdload |
Eject the currently loaded WHDLoad game |
runtime_get_whdload |
Get info about currently loaded WHDLoad game |
| Tool | Description |
|---|---|
runtime_debug_activate |
Activate the built-in debugger |
runtime_debug_deactivate |
Deactivate debugger and resume emulation |
runtime_debug_status |
Get debugger status (active/inactive) |
runtime_debug_step |
Single-step CPU instructions |
runtime_debug_continue |
Continue execution until next breakpoint |
runtime_get_cpu_regs |
Get all CPU registers (D0-D7, A0-A7, PC, SR, USP, ISP) |
runtime_get_custom_regs |
Get custom chip registers (DMACON, INTENA, INTREQ, etc.) |
runtime_disassemble |
Disassemble instructions at a memory address |
runtime_set_breakpoint |
Set a breakpoint at a memory address |
runtime_clear_breakpoint |
Clear a breakpoint or all breakpoints |
runtime_list_breakpoints |
List all active breakpoints |
runtime_get_copper_state |
Get Copper coprocessor state |
runtime_get_blitter_state |
Get Blitter state (busy, channels, dimensions) |
runtime_get_drive_state |
Get floppy drive state (track, side, motor) |
runtime_get_audio_state |
Get audio channel states |
runtime_get_dma_state |
Get DMA channel states |
| Tool | Description |
|---|---|
runtime_get_led_status |
Get all LED states (power, floppy, HD, CD) |
runtime_list_harddrives |
List mounted hard drives/directories |
| Tool | Description |
|---|---|
get_runtime_status |
Get emulation status |
runtime_get_config |
Get config option value |
runtime_set_config |
Set config option |
list_configs |
List available config files |
| Tool | Description |
|---|---|
send_key |
Send keyboard input |
send_mouse |
Send mouse movement and buttons |
set_mouse_speed |
Set mouse sensitivity (10-200) |
| Tool | Description |
|---|---|
get_version |
Get Amiberry and SDL version info |
ping |
Test IPC connection (returns PONG) |
check_ipc_connection |
Check IPC availability |
| Tool | Description |
|---|---|
check_process_alive |
Check if Amiberry process is running (PID, exit code, signal) |
get_process_info |
Detailed process info with crash detection |
kill_amiberry |
Force kill a running/hung Amiberry process |
wait_for_exit |
Wait for process to exit with configurable timeout |
restart_amiberry |
Kill and re-launch with same command |
| Tool | Description |
|---|---|
runtime_read_memory |
Read emulated Amiga memory (1/2/4 bytes) |
runtime_write_memory |
Write emulated Amiga memory (1/2/4 bytes) |
| Tool | Description |
|---|---|
runtime_load_config |
Load a .uae config file into running emulation |
runtime_debug_step_over |
Step over subroutine calls (JSR/BSR) |
| Tool | Description |
|---|---|
runtime_screenshot_view |
Take screenshot and return image data for AI analysis |
| Tool | Description |
|---|---|
tail_log |
Get new log lines since last read (incremental) |
wait_for_log_pattern |
Wait for a regex pattern in log output |
get_crash_info |
Detect crashes via process state and log scanning |
| Tool | Description |
|---|---|
health_check |
Combined check: process + IPC + emulation status + FPS |
launch_and_wait_for_ipc |
Launch Amiberry and wait until IPC socket is ready |
Note: Runtime control requires Amiberry built with
USE_IPC_SOCKET=ON
Ask Claude:
- "List my Amiberry configurations"
- "Show me all Workbench disk images"
- "Launch Amiberry with the A1200 model"
- "What savestates do I have?"
- "Find disk images containing 'Shadow of the Beast'"
- "Launch the WHDLoad game 'Turrican'"
- "Search for WHDLoad games with 'Adventure' in the name"
- "List my CD images"
- "Launch the CD32 game from /path/to/game.iso"
- "Parse my A500 config file and show the memory settings"
- "Create a new A1200 config with 8MB Fast RAM"
- "Change the floppy speed to 800 in my gaming config"
- "Launch Amiberry with logging enabled"
- "Show me the last captured log file"
- "What ROMs do I have available?"
- "Inspect my savestate from yesterday"
- "What CPU and chipset is my savestate using?"
- "Show me metadata from my Shadow of the Beast savestate"
- "Pause the emulation"
- "Take a screenshot of the current state"
- "Save the game state to checkpoint.uss"
- "Quick save to slot 0"
- "Quick load from slot 1"
- "Insert disk 2 into drive DF0"
- "Eject the floppy from drive 0"
- "List what's in all the floppy drives"
- "List mounted hard drives"
- "What's the current emulation status?"
- "Set the floppy speed to 800"
- "Set the volume to 50%"
- "Mute the audio"
- "Toggle fullscreen mode"
- "Enable warp mode"
- "Switch to NTSC mode"
- "Set display to fullscreen mode"
- "Set sound mode to stereo"
- "Get joystick port 0 mode"
- "Set port 0 to joystick mode"
- "Enable autofire on port 0"
- "Get LED status"
- "Advance one frame"
- "What version of Amiberry is running?"
- "Ping Amiberry to check the connection"
- "Set floppy speed to maximum"
- "What's the current FPS?"
- "Toggle RTG display"
- "Switch to AGA chipset"
- "What's the CPU speed?"
- "Set CPU to maximum speed"
- "Show me the memory configuration"
- "Toggle mouse grab"
- "Protect disk in drive 0"
- "Set Chip RAM to 2MB"
- "Set Fast RAM to 8MB"
- "What CPU model is being used?"
- "Switch to 68030 CPU"
- "Set window size to 800x600"
- "Set scaling mode to linear"
- "Set line mode to scanlines"
- "Switch to hires resolution"
- "Enable autocrop"
- "Is autocrop enabled?"
- "Load the Turrican WHDLoad game"
- "What WHDLoad game is loaded?"
- "Eject the WHDLoad game"
- "Activate the debugger"
- "What's the debugger status?"
- "Single-step 10 instructions"
- "Continue execution"
- "Deactivate the debugger"
- "Show me the CPU registers"
- "Disassemble at address 0xFC0000"
- "Get the custom chip registers"
- "Set a breakpoint at 0x400"
- "List all breakpoints"
- "Clear the breakpoint at 0x400"
- "Clear all breakpoints"
- "Get the Copper state"
- "Get the Blitter state"
- "Get floppy drive 0 state"
- "Get audio channel states"
- "Get DMA state"
Control Amiberry via REST API for voice assistants and automation.
# Install HTTP API dependencies
./scripts/install_http_api.sh
# Start the server
./scripts/start_http_api.shThe API runs on http://localhost:8080. View documentation at http://localhost:8080/docs.
Siri/Voice:
- "Hey Siri, launch Amiga 500"
- "Hey Siri, stop Amiberry"
curl:
# Basic operations
curl -X POST http://localhost:8080/quick-launch/A500
curl -X POST http://localhost:8080/stop
curl http://localhost:8080/configs
# Launch with logging
curl -X POST http://localhost:8080/launch-with-logging \
-H "Content-Type: application/json" \
-d '{"model": "A500"}'
# Create a config
curl -X POST "http://localhost:8080/configs/create/my-config?model=A1200"
# Launch WHDLoad game
curl -X POST "http://localhost:8080/launch-whdload?search=Turrican"
# Launch CD image
curl -X POST http://localhost:8080/launch-cd \
-H "Content-Type: application/json" \
-d '{"cd_path": "/path/to/game.iso"}'
# Inspect savestate
curl http://localhost:8080/savestates/mysave.uss/inspect
# List ROMs
curl http://localhost:8080/roms
# Runtime control (requires Amiberry with USE_IPC_SOCKET=ON)
curl http://localhost:8080/runtime/status
curl -X POST http://localhost:8080/runtime/pause
curl -X POST http://localhost:8080/runtime/resume
curl -X POST http://localhost:8080/runtime/screenshot \
-H "Content-Type: application/json" \
-d '{"filename": "/tmp/screenshot.png"}'
curl -X POST http://localhost:8080/runtime/insert-floppy \
-H "Content-Type: application/json" \
-d '{"drive": 0, "image_path": "/path/to/disk2.adf"}'
curl -X POST http://localhost:8080/runtime/eject-floppy \
-H "Content-Type: application/json" \
-d '{"drive": 0}'
curl http://localhost:8080/runtime/list-floppies
# Audio control
curl http://localhost:8080/runtime/volume
curl -X POST http://localhost:8080/runtime/volume \
-H "Content-Type: application/json" \
-d '{"volume": 50}'
curl -X POST http://localhost:8080/runtime/mute
curl -X POST http://localhost:8080/runtime/unmute
# Display control
curl -X POST http://localhost:8080/runtime/fullscreen
curl http://localhost:8080/runtime/warp
curl -X POST http://localhost:8080/runtime/warp \
-H "Content-Type: application/json" \
-d '{"enabled": true}'
# Display mode (0=window, 1=fullscreen, 2=fullwindow)
curl http://localhost:8080/runtime/display-mode
curl -X POST http://localhost:8080/runtime/display-mode \
-H "Content-Type: application/json" \
-d '{"mode": 1}'
# Video mode (PAL/NTSC)
curl http://localhost:8080/runtime/ntsc
curl -X POST http://localhost:8080/runtime/ntsc \
-H "Content-Type: application/json" \
-d '{"enabled": true}'
# Sound mode (0=off, 1=normal, 2=stereo, 3=best)
curl http://localhost:8080/runtime/sound-mode
curl -X POST http://localhost:8080/runtime/sound-mode \
-H "Content-Type: application/json" \
-d '{"mode": 2}'
# Quick save/load (slots 0-9)
curl -X POST http://localhost:8080/runtime/quicksave \
-H "Content-Type: application/json" \
-d '{"slot": 0}'
curl -X POST http://localhost:8080/runtime/quickload \
-H "Content-Type: application/json" \
-d '{"slot": 0}'
# Joystick port control (port 0-3, mode: 0=default, 2=mouse, 3=joy, 7=cd32)
curl http://localhost:8080/runtime/joyport/0
curl -X POST http://localhost:8080/runtime/joyport \
-H "Content-Type: application/json" \
-d '{"port": 0, "mode": 3}'
# Autofire control (0=off, 1=normal, 2=toggle, 3=always)
curl http://localhost:8080/runtime/autofire/0
curl -X POST http://localhost:8080/runtime/autofire \
-H "Content-Type: application/json" \
-d '{"port": 0, "mode": 1}'
# Status
curl http://localhost:8080/runtime/led-status
curl http://localhost:8080/runtime/harddrives
# Floppy speed control
curl http://localhost:8080/runtime/floppy-speed
curl -X POST http://localhost:8080/runtime/floppy-speed \
-H "Content-Type: application/json" \
-d '{"speed": 800}'
# Disk write protection
curl http://localhost:8080/runtime/disk-write-protect/0
curl -X POST http://localhost:8080/runtime/disk-write-protect \
-H "Content-Type: application/json" \
-d '{"drive": 0, "protected": true}'
# RTG and status line
curl -X POST http://localhost:8080/runtime/toggle-rtg
curl -X POST http://localhost:8080/runtime/toggle-status-line
# FPS monitoring
curl http://localhost:8080/runtime/fps
# Mouse grab
curl -X POST http://localhost:8080/runtime/toggle-mouse-grab
curl http://localhost:8080/runtime/mouse-speed
# Chipset control
curl http://localhost:8080/runtime/chipset
curl -X POST http://localhost:8080/runtime/chipset \
-H "Content-Type: application/json" \
-d '{"chipset": "AGA"}'
# CPU speed
curl http://localhost:8080/runtime/cpu-speed
curl -X POST http://localhost:8080/runtime/cpu-speed \
-H "Content-Type: application/json" \
-d '{"speed": -1}'
# Memory configuration
curl http://localhost:8080/runtime/memory-config
# Memory management (changes require reset)
curl -X POST http://localhost:8080/runtime/chip-mem \
-H "Content-Type: application/json" \
-d '{"size_kb": 2048}'
curl -X POST http://localhost:8080/runtime/fast-mem \
-H "Content-Type: application/json" \
-d '{"size_kb": 8192}'
curl -X POST http://localhost:8080/runtime/slow-mem \
-H "Content-Type: application/json" \
-d '{"size_kb": 512}'
curl -X POST http://localhost:8080/runtime/z3-mem \
-H "Content-Type: application/json" \
-d '{"size_mb": 64}'
# CPU model
curl http://localhost:8080/runtime/cpu-model
curl -X POST http://localhost:8080/runtime/cpu-model \
-H "Content-Type: application/json" \
-d '{"model": 68030}'
# Window size
curl http://localhost:8080/runtime/window-size
curl -X POST http://localhost:8080/runtime/window-size \
-H "Content-Type: application/json" \
-d '{"width": 800, "height": 600}'
# Scaling mode (-1=auto, 0=nearest, 1=linear, 2=integer)
curl http://localhost:8080/runtime/scaling
curl -X POST http://localhost:8080/runtime/scaling \
-H "Content-Type: application/json" \
-d '{"mode": 1}'
# Line mode (single, double, scanlines)
curl http://localhost:8080/runtime/line-mode
curl -X POST http://localhost:8080/runtime/line-mode \
-H "Content-Type: application/json" \
-d '{"mode": "scanlines"}'
# Resolution (lores, hires, superhires)
curl http://localhost:8080/runtime/resolution
curl -X POST http://localhost:8080/runtime/resolution \
-H "Content-Type: application/json" \
-d '{"mode": "hires"}'
# Autocrop
curl http://localhost:8080/runtime/autocrop
curl -X POST http://localhost:8080/runtime/autocrop \
-H "Content-Type: application/json" \
-d '{"enabled": true}'
# WHDLoad
curl http://localhost:8080/runtime/whdload
curl -X POST http://localhost:8080/runtime/whdload \
-H "Content-Type: application/json" \
-d '{"path": "/path/to/game.lha"}'
curl -X DELETE http://localhost:8080/runtime/whdload
# Debugging and Diagnostics
curl -X POST http://localhost:8080/runtime/debug/activate
curl http://localhost:8080/runtime/debug/status
curl -X POST http://localhost:8080/runtime/debug/step \
-H "Content-Type: application/json" \
-d '{"count": 10}'
curl -X POST http://localhost:8080/runtime/debug/continue
curl -X POST http://localhost:8080/runtime/debug/deactivate
curl http://localhost:8080/runtime/cpu/regs
curl http://localhost:8080/runtime/custom/regs
curl -X POST http://localhost:8080/runtime/disassemble \
-H "Content-Type: application/json" \
-d '{"address": "0xFC0000", "count": 10}'
curl http://localhost:8080/runtime/breakpoints
curl -X POST http://localhost:8080/runtime/breakpoints \
-H "Content-Type: application/json" \
-d '{"address": "0x400"}'
curl -X DELETE http://localhost:8080/runtime/breakpoints \
-H "Content-Type: application/json" \
-d '{"address": "ALL"}'
curl http://localhost:8080/runtime/copper/state
curl http://localhost:8080/runtime/blitter/state
curl "http://localhost:8080/runtime/drive/state?drive=0"
curl http://localhost:8080/runtime/audio/state
curl http://localhost:8080/runtime/dma/state
# Utility
curl http://localhost:8080/runtime/version
curl http://localhost:8080/runtime/ping| Endpoint | Method | Description |
|---|---|---|
/status |
GET | Check if Amiberry is running |
/stop |
POST | Stop all Amiberry instances |
/configs |
GET | List configurations |
/disk-images |
GET | List disk images |
/savestates |
GET | List savestates |
/launch |
POST | Launch with full options |
/quick-launch/{name} |
POST | Quick launch by model/config |
/platform |
GET | Get platform info |
| Endpoint | Method | Description |
|---|---|---|
/configs/{name}/parsed |
GET | Get parsed config as JSON |
/configs/create/{name} |
POST | Create new config from template |
/configs/{name} |
PATCH | Modify existing config |
| Endpoint | Method | Description |
|---|---|---|
/launch-with-logging |
POST | Launch with log capture |
/launch-whdload |
POST | Launch WHDLoad game |
/launch-cd |
POST | Launch CD image |
/disk-swapper |
POST | Configure disk swapper |
| Endpoint | Method | Description |
|---|---|---|
/cd-images |
GET | List CD images |
/logs |
GET | List captured logs |
/logs/{name} |
GET | Get log content |
| Endpoint | Method | Description |
|---|---|---|
/savestates/{name}/inspect |
GET | Get savestate metadata |
/roms |
GET | List identified ROMs |
/roms/identify |
POST | Identify ROM by path |
/version |
GET | Get Amiberry version |
Emulation Control
| Endpoint | Method | Description |
|---|---|---|
/runtime/status |
GET | Get emulation status |
/runtime/pause |
POST | Pause emulation |
/runtime/resume |
POST | Resume emulation |
/runtime/reset |
POST | Soft or hard reset |
/runtime/quit |
POST | Quit Amiberry |
/runtime/frame-advance |
POST | Advance N frames when paused |
Media Control
| Endpoint | Method | Description |
|---|---|---|
/runtime/insert-floppy |
POST | Insert floppy disk |
/runtime/eject-floppy |
POST | Eject floppy from drive |
/runtime/list-floppies |
GET | List all floppy drives |
/runtime/insert-cd |
POST | Insert CD image |
/runtime/eject-cd |
POST | Eject CD |
State Management
| Endpoint | Method | Description |
|---|---|---|
/runtime/screenshot |
POST | Take a screenshot |
/runtime/save-state |
POST | Save state while running |
/runtime/load-state |
POST | Load a savestate |
/runtime/quicksave |
POST | Quick save to slot (0-9) |
/runtime/quickload |
POST | Quick load from slot (0-9) |
Audio Control
| Endpoint | Method | Description |
|---|---|---|
/runtime/volume |
GET | Get current volume |
/runtime/volume |
POST | Set volume (0-100) |
/runtime/mute |
POST | Mute audio |
/runtime/unmute |
POST | Unmute audio |
Display Control
| Endpoint | Method | Description |
|---|---|---|
/runtime/fullscreen |
POST | Toggle fullscreen |
/runtime/warp |
GET | Get warp mode status |
/runtime/warp |
POST | Set warp mode |
/runtime/display-mode |
GET | Get display mode |
/runtime/display-mode |
POST | Set mode (0=window, 1=fullscreen, 2=fullwindow) |
/runtime/ntsc |
GET | Get video mode (PAL/NTSC) |
/runtime/ntsc |
POST | Set video mode (0=PAL, 1=NTSC) |
Sound Control
| Endpoint | Method | Description |
|---|---|---|
/runtime/sound-mode |
GET | Get sound mode |
/runtime/sound-mode |
POST | Set mode (0=off, 1=normal, 2=stereo, 3=best) |
Joystick/Input Control
| Endpoint | Method | Description |
|---|---|---|
/runtime/joyport/{port} |
GET | Get port mode |
/runtime/joyport |
POST | Set port mode |
/runtime/autofire/{port} |
GET | Get autofire mode |
/runtime/autofire |
POST | Set autofire mode |
Floppy Control
| Endpoint | Method | Description |
|---|---|---|
/runtime/floppy-speed |
GET | Get current floppy speed |
/runtime/floppy-speed |
POST | Set floppy speed (0=turbo, 100=1x, 200=2x, 400=4x, 800=8x) |
/runtime/disk-write-protect/{drive} |
GET | Get disk write protection status |
/runtime/disk-write-protect |
POST | Set disk write protection for drive |
Display Control (additional)
| Endpoint | Method | Description |
|---|---|---|
/runtime/toggle-rtg |
POST | Toggle between RTG and chipset display |
/runtime/toggle-status-line |
POST | Cycle status line (off/chipset/rtg/both) |
/runtime/fps |
GET | Get current frame rate and idle percentage |
Input Control (additional)
| Endpoint | Method | Description |
|---|---|---|
/runtime/toggle-mouse-grab |
POST | Toggle mouse capture/grab |
/runtime/mouse-speed |
GET | Get current mouse sensitivity |
Hardware/Chipset Control
| Endpoint | Method | Description |
|---|---|---|
/runtime/chipset |
GET | Get current chipset |
/runtime/chipset |
POST | Set chipset (OCS, ECS_AGNUS, ECS_DENISE, ECS, AGA) |
/runtime/cpu-speed |
GET | Get current CPU speed setting |
/runtime/cpu-speed |
POST | Set CPU speed (-1=max, 0=cycle-exact, >0=%) |
/runtime/memory-config |
GET | Get all memory sizes (chip, fast, bogo, z3, rtg) |
Memory Configuration
| Endpoint | Method | Description |
|---|---|---|
/runtime/chip-mem |
POST | Set Chip RAM size (256, 512, 1024, 2048, 4096, 8192 KB) |
/runtime/fast-mem |
POST | Set Fast RAM size (0, 1024, 2048, 4096, 8192 KB) |
/runtime/slow-mem |
POST | Set Slow/Bogo RAM size (0, 256, 512, 1024, 1792 KB) |
/runtime/z3-mem |
POST | Set Zorro III RAM size (0-1024 MB) |
/runtime/cpu-model |
GET | Get current CPU model |
/runtime/cpu-model |
POST | Set CPU model (68000, 68010, 68020, 68030, 68040, 68060) |
Window/Display Control
| Endpoint | Method | Description |
|---|---|---|
/runtime/window-size |
GET | Get current window dimensions |
/runtime/window-size |
POST | Set window size (width x height) |
/runtime/scaling |
GET | Get current scaling mode |
/runtime/scaling |
POST | Set scaling mode (-1=auto, 0=nearest, 1=linear, 2=integer) |
/runtime/line-mode |
GET | Get current line mode |
/runtime/line-mode |
POST | Set line mode (single, double, scanlines) |
/runtime/resolution |
GET | Get current resolution mode |
/runtime/resolution |
POST | Set resolution (lores, hires, superhires) |
/runtime/autocrop |
GET | Get current autocrop status |
/runtime/autocrop |
POST | Enable/disable automatic display cropping |
WHDLoad Control
| Endpoint | Method | Description |
|---|---|---|
/runtime/whdload |
GET | Get currently loaded WHDLoad game info |
/runtime/whdload |
POST | Load a WHDLoad game (LHA or directory) |
/runtime/whdload |
DELETE | Eject the currently loaded WHDLoad game |
Debugging and Diagnostics
| Endpoint | Method | Description |
|---|---|---|
/runtime/debug/activate |
POST | Activate the built-in debugger |
/runtime/debug/deactivate |
POST | Deactivate debugger and resume |
/runtime/debug/status |
GET | Get debugger status |
/runtime/debug/step |
POST | Single-step CPU instructions |
/runtime/debug/continue |
POST | Continue execution |
/runtime/cpu/regs |
GET | Get all CPU registers |
/runtime/custom/regs |
GET | Get custom chip registers |
/runtime/disassemble |
POST | Disassemble at address |
/runtime/breakpoints |
GET | List all breakpoints |
/runtime/breakpoints |
POST | Set a breakpoint |
/runtime/breakpoints |
DELETE | Clear breakpoint(s) |
/runtime/copper/state |
GET | Get Copper state |
/runtime/blitter/state |
GET | Get Blitter state |
/runtime/drive/state |
GET | Get floppy drive state |
/runtime/audio/state |
GET | Get audio channel states |
/runtime/dma/state |
GET | Get DMA channel states |
Status
| Endpoint | Method | Description |
|---|---|---|
/runtime/led-status |
GET | Get all LED states |
/runtime/harddrives |
GET | List mounted hard drives |
Configuration
| Endpoint | Method | Description |
|---|---|---|
/runtime/config/{option} |
GET | Get config option value |
/runtime/config |
POST | Set config option |
/runtime/configs |
GET | List available configs |
Input Control
| Endpoint | Method | Description |
|---|---|---|
/runtime/key |
POST | Send keyboard input |
/runtime/mouse |
POST | Send mouse input |
/runtime/mouse-speed |
POST | Set mouse sensitivity |
Utility
| Endpoint | Method | Description |
|---|---|---|
/runtime/version |
GET | Get Amiberry version |
/runtime/ping |
GET | Test IPC connection |
/runtime/ipc-check |
GET | Check IPC availability |
Note: Runtime endpoints require Amiberry built with
USE_IPC_SOCKET=ON
See docs/HTTP_API_GUIDE.md for complete documentation.
macOS:
launchctl load ~/Library/LaunchAgents/com.amiberry.httpapi.plistLinux:
systemctl --user enable amiberry-http-api.service
systemctl --user start amiberry-http-api.service# Clone and setup
git clone https://github.com/midwan/amiberry-mcp-server.git
cd amiberry-mcp-server
# Create virtual environment
python3 -m venv venv
source venv/bin/activate
# Install with dev dependencies
pip install -e ".[all]"
# Run tests
pytest tests/
python tests/test_server.py
python tests/test_mcp_connection.py- Restart Claude Desktop completely (quit and reopen)
- Check paths in
claude_desktop_config.json - Verify the virtual environment exists
- Linux: Ensure
amiberryis in your PATH - macOS: Verify Amiberry.app is in
/Applications
- Check that scripts are executable:
chmod +x scripts/*.sh
tail -f ~/Library/Logs/Claude/mcp*.log# macOS
ls ~/Amiberry/logs/
# Linux
ls ~/Amiberry/logs/- Ensure Amiberry was built with
USE_IPC_SOCKET=ON(CMake option) - Check if the socket exists:
ls /tmp/amiberry.sock(or$XDG_RUNTIME_DIR/amiberry.sockon Linux) - Verify Amiberry is running before using runtime control tools
- Test the socket directly:
echo "GET_STATUS" | nc -U /tmp/amiberry.sock
./scripts/uninstall.shContributions welcome! Please open an issue or pull request.
GPL-3.0 License - see LICENSE file.