MiSTerClaw
MiSTerClaw is an MCP server that lets AI agents remotely control a MiSTer-FPGA over the network — launching games, browsing ROM libraries, capturing screenshots, tweaking core settings, navigating the OSD, and administering the system.
Status & info: Check what core/game is running (
mister_status), and get hostname, IP, CPU temp, RAM, disks, and uptime (mister_info).Game launching & search: Launch by fuzzy query or exact ROM path with optional system filter (
mister_launch), search the ROM library (mister_search), and list all systems with ROM counts and storage locations (mister_systems).Screenshots: Capture the current display as a PNG image (
mister_screenshot).Core configuration: Read CFG options and DIP switches (
mister_cfg_read), modify options with automatic backup (mister_cfg_write), and reload the core to apply changes (mister_reload).OSD interaction: Inspect OSD menu structure from CONF_STR (
mister_osd_info), see only currently visible items (mister_osd_visible), and navigate to a named menu item (mister_osd_navigate, experimental).Per-system guidance: Get system config, notes, launch quirks, and OSD menu before interacting with a core (
mister_system_info).Input control: Send named keys, raw Linux keycodes, combos, typed text, or gamepad d-pad/button input (
mister_input).Library management: Rescan the ROM library, optionally for a single drive like sd/usb0 (
mister_rescan).Remote access & admin: Manage Tailscale VPN (setup/status/start/stop) for secure remote access (
mister_tailscale), and run arbitrary shell commands on the MiSTer (mister_shell).
Provides tools to manage and configure Tailscale VPN on a MiSTer-FPGA, enabling secure remote access to the system from anywhere.
👾🦀 MiSTerClaw — MCP Remote Control for MiSTer-FPGA
MiSTerClaw is the first MCP server for MiSTer-FPGA. Control your MiSTer from any AI agent.
(Badge suggestion: thanks, punkpeye.)
v0.8.1 adds validated native ZIP-member launches and an independent GBA2P profile. See the release notes and hardware-test limits, ZIP-member usage, and GitHub Releases for downloads and checksums.
What is this?
MiSTerClaw lets AI agents — Claude, ChatGPT, OpenClaw, Hermes, Cursor, and others — control a MiSTer-FPGA over the network. Launch games, search your ROM library, take screenshots, read and modify core settings and DIP switches, navigate the OSD menu using conf_str-based position calculation (experimental, not yet reliable for all cores), query detailed system information, manage the system, and even set up Tailscale VPN for secure remote access from anywhere. Floppy-disk cores (PC8801, MSX, etc.) support PostLaunch auto-reset for seamless game loading. It uses the Model Context Protocol (MCP) standard, so any MCP-compatible client works out of the box. For agents without MCP support, a CLI client is also included.
Related MCP server: go_computer_use_mcp_server
Arcade games
Arcade games are indexed from .mra descriptors and launched directly (initial support: thanks, stt); they are
not represented by the MAME ZIP folder or a single system-wide RBF. Recursive
canonical folders and _alternatives are supported on SD and USB. Generated
_Organized views are omitted when canonical descriptors exist in the same
root; an organized-only collection remains usable as a fallback. Byte-identical
fallback descriptors are deduplicated, while different variants are retained.
Counts describe indexed descriptors/variants, not unique game families. Cache
schema v3 upgrades old v1/v2 Arcade and MAME entries in place while preserving
unrelated cached systems; it does not require a full ROM rescan on upgrade.
A location-specific SD rescan also refreshes _Arcade, and existing SD/USB
Arcade folders are merged rather than replaced. Location rescans now return
status: pending immediately; poll systems.scanning until it becomes false.
Existing results remain available during the refresh. Requests for overlapping
scans or invalid locations fail explicitly. MRA launches validate the file,
recycle virtual input devices, and report the descriptor's requested <rbf> in
core_name; this response is not by itself proof that the FPGA finished loading.
MCP Setup
Add MiSTerClaw to your MCP client config:
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"misterclaw": {
"command": "/path/to/misterclaw-mcp",
"args": ["--host", "mister-fpga"]
}
}
}Cursor (.cursor/mcp.json):
{
"mcpServers": {
"misterclaw": {
"command": "/path/to/misterclaw-mcp",
"args": ["--host", "mister-fpga"]
}
}
}MCP Tools
Tool | Description |
| What's currently playing |
| Launch a game by search or path |
| Search the ROM library |
| List all available systems with ROM counts |
| Take a screenshot (returns PNG image) |
| System info (hostname, IP, temp, RAM, disks, uptime) |
| Send keyboard input (OSD navigation, named keys) |
| Query OSD menu structure from CONF_STR database |
| Show only visible OSD menu items based on current config |
| Read core settings (options + DIP switches) |
| Modify core settings with automatic backup |
| Reload current core to apply config changes |
| Navigate to a specific OSD menu item by name |
| Get system config, notes, and OSD menu for a system |
| Rescan ROM library (optionally for specific drive) |
| Manage Tailscale VPN |
| Execute shell commands (initial output-handling fix: thanks, stt) |
Example Conversations
Once configured, just talk to your agent:
You: "What games do I have for SNES?"
Agent: You have 13,435 SNES ROMs! Here are some highlights...
You: "Launch Street Fighter 2"
Agent: 🎮 Launched Street Fighter II Turbo on SNES!
You: "Take a screenshot and show me"
Agent: [screenshot of the game running]
You: "What systems do I have?"
Agent: Your MiSTer has 70+ systems! Top ones:
- SNES: 13,435 ROMs
- C64: 46,736 ROMs
- Amiga: 55,793 ROMs
...
You: "Set up Tailscale so I can reach the MiSTer from anywhere"
Agent: Installing Tailscale... Done!
Please authenticate: https://login.tailscale.com/a/xxx
After that your MiSTer is reachable from anywhere.
You: "What settings does R-Type have?"
Agent: R-Type (M72 core) has these settings:
Core Options:
- No Death Mode: Off
- Service Mode: Off
DIP Switches:
- Difficulty: Medium
- Coin A: 1 Coin / 1 Credit
- Lives: 3
- Demo Sounds: On
- Continue: Yes
You: "Enable No Death Mode"
Agent: ⚙️ Set "No Death Mode" to On in R-Type.
The core reloads automatically — change is live!
You: "Navigate to the Reset option in the OSD"
Agent: Navigated to Reset in the SNES core OSD.
You: "What do I need to know about the PC8801 system?"
Agent: PC8801 uses the PC8801 core with .d88 floppy disk images.
Notes: After loading a disk, press F12 → Reset to boot.
OSD Menu: FDD0, FDD1, Reset, CPU Speed, ...CLI Client
For agents that have shell access (like OpenClaw, Codex, or Claude Code), the CLI client can be more efficient than MCP — no tool schemas in context, just call it when needed. It's also useful for shell scripts and automation.
# Check what's playing
misterclaw-send -H mister-fpga status
# Search for games
misterclaw-send -H mister-fpga search "zelda" --limit 5
misterclaw-send -H mister-fpga search "sonic" --system MegaDrive
# Launch a game
misterclaw-send -H mister-fpga launch "super mario world" --system SNES
# List all systems with ROM counts
misterclaw-send -H mister-fpga systems
# Take a screenshot
misterclaw-send -H mister-fpga screenshot -o game.png
# System info (CPU, memory, storage, uptime)
misterclaw-send -H mister-fpga info
# Run shell commands — configure MiSTer.ini, run updates, manage files
misterclaw-send -H mister-fpga shell "cat /media/fat/MiSTer.ini"
misterclaw-send -H mister-fpga shell "/media/fat/Scripts/update_all.sh"
# Send keyboard input (OSD navigation)
misterclaw-send -H mister-fpga input key osd
misterclaw-send -H mister-fpga input combo leftalt f12
# Query OSD menu structure
misterclaw-send -H mister-fpga osd-info
misterclaw-send -H mister-fpga osd-info --core SNES
# Navigate to a specific OSD menu item
misterclaw-send -H mister-fpga osd-navigate Reset
misterclaw-send -H mister-fpga osd-navigate "Aspect ratio"
# Get detailed system info (config, notes, OSD menu)
misterclaw-send -H mister-fpga system-info PC8801
misterclaw-send -H mister-fpga system-info SNES
# Read core settings (options + DIP switches)
misterclaw-send -H mister-fpga cfg-read
# Modify settings
misterclaw-send -H mister-fpga cfg-write --option "Free Play" --value On
# Reload core to apply changes
misterclaw-send -H mister-fpga reload
# Rescan ROM library (after adding new games)
misterclaw-send -H mister-fpga rescan
misterclaw-send -H mister-fpga rescan --location usb0
# JSON output for scripting
misterclaw-send -H mister-fpga status --json
misterclaw-send -H mister-fpga systems --jsonAll commands support --json for machine-readable output.
Installation
Three binaries:
Binary | Runs on | Purpose |
| MiSTer (ARM7) | Server — runs on the MiSTer itself |
| Anywhere | CLI client for direct commands |
| Your machine | MCP server — bridges AI agents to MiSTer |
Downloads and supported platforms
Download executables from GitHub Releases, not from the source repository. The release workflow builds these targets:
Platform | Architecture | Downloads |
MiSTer | Linux ARMv7 |
|
Linux | x86-64, ARM64, ARMv7 | CLI and MCP server |
macOS | Intel x86-64, Apple Silicon ARM64 | CLI and MCP server |
Windows | x86-64 | CLI and MCP server ( |
Windows downloads are included in v0.8.0 and newer; older releases may not contain them. The daemon runs only on the MiSTer, not on Windows or macOS. On Linux/macOS, make the downloaded client executable with chmod +x <filename>.
For Windows, use the downloaded executable in PowerShell, for example:
.\misterclaw-send-windows-amd64.exe -H mister-fpga statusPoint your MCP client's command to the absolute path of misterclaw-mcp-windows-amd64.exe; JSON paths must escape backslashes, for example C:\\Tools\\misterclaw-mcp-windows-amd64.exe.
The release workflow builds tagged releases (initial workflow: thanks, stt). New CI-generated releases include SHA256SUMS and build-metadata.json recording the source commit, compiler version and target inventory. Branch/PR/manual CI runs produce preview artifacts only. Publishing requires a version-tag push from main history and passing tests; maintainers must check release and licensing readiness before pushing a tag. Main ancestry is not itself proof of review approval. Adding CI does not create a new release.
Quick install on MiSTer
scp misterclaw root@<mister-ip>:/media/fat/Scripts/
ssh root@<mister-ip> "/media/fat/Scripts/misterclaw --install"Or self-install: copy the binary to MiSTer, then run misterclaw --install. This copies to /media/fat/Scripts/, configures autostart on boot, and is idempotent.
To uninstall: /media/fat/Scripts/misterclaw --uninstall
Security
⚠️ Do not expose port 9900 to the internet. The ClawExec protocol has no authentication or encryption.
Tailscale VPN (recommended) — encrypted, authenticated, works from anywhere
Local network only — keep port 9900 accessible within your LAN
Never forward port 9900 through your router or firewall
Architecture
Agent ←MCP→ misterclaw-mcp ←TCP→ MiSTer:9900 (misterclaw server)
Agent ←CLI→ misterclaw-send ←TCP→ MiSTer:9900 (misterclaw server)The MCP server and CLI client communicate with the MiSTer over the ClawExec protocol (newline-delimited JSON over TCP, port 9900).
Dynamic System Detection
MiSTerClaw auto-detects all systems by scanning ROM folders, installed cores, and MGL files. No configuration needed — a well-stocked MiSTer typically has 70+ systems. Discovery results (including full ROM file listings) are cached to disk. First startup scans and builds the cache; subsequent starts load instantly. Use the rescan command after adding new games or drives.
Building from Source
# MiSTer server (ARM7)
GOOS=linux GOARCH=arm GOARM=7 go build -ldflags="-s -w" -o misterclaw ./cmd/misterclaw/
# CLI client
go build -ldflags="-s -w" -o misterclaw-send ./cmd/misterclaw-send/
# MCP server
go build -ldflags="-s -w" -o misterclaw-mcp ./cmd/misterclaw-mcp/License
MIT
Available Tools
17 toolsmister_cfg_readA
Read the current CFG file for the running core/game. Returns the raw hex data and decoded option values (e.g. 'Aspect Ratio = Original'). CFG files store per-game/core settings as bit fields.
Inputs: core.
mister_cfg_writeA
Set a core option by name and value. Automatically backs up the CFG file before writing. Use cfg_read first to see available options and their current values. Example: option='Free Play', value='On'. After writing, use mister_reload to apply changes.
Inputs: value (required), option (required).
mister_infoA
Get MiSTer-FPGA system information including hostname, IP address, CPU temperature, RAM usage, disk space for all mounted volumes, and uptime. Useful for monitoring device health.
Inputs: no named parameters.
mister_inputA
Send input to MiSTer-FPGA via virtual keyboard. Use 'key' for named keyboard keys (osd, menu, confirm, up, down, left, right, coin, start). Use 'raw' for Linux keycodes. Use 'combo' for key combinations (e.g. ['leftalt', 'f12']). Use 'text' to type a string character by character with correct keycodes and shift handling (e.g. 'LOAD"*",8,1\n').
Inputs: key, raw, dpad, text, +2 more.
mister_launchA
Launch a game on MiSTer-FPGA by search query or direct ROM path. Use 'query' for fuzzy search (e.g. 'sonic 2') or 'path' for exact ROM path. Optionally filter by 'system' (e.g. 'SNES', 'MegaDrive', 'PSX'). Either 'query' or 'path' is required.
Inputs: path, query, system.
mister_osd_infoA
Get the OSD (On-Screen Display) menu structure for the currently loaded core or a specified core. Returns the parsed CONF_STR menu items including options, triggers, file loaders, and sub-pages. Useful for understanding what settings a core supports and what the OSD menu looks like.
Inputs: core.
mister_osd_visibleA
Get only the visible OSD menu items for the current core, based on the current CFG state. This shows exactly what the user would see on screen — items hidden by H/h flags are filtered out. Use this instead of osd_info when you want to know what options are actually available right now.
Inputs: core.
mister_reloadA
Reload the current core on MiSTer-FPGA. Use after changing settings with mister_cfg_write to apply changes.
Inputs: no named parameters.
mister_rescanA
Rescan ROM library to detect new games. Optionally specify location (sd, usb0, usb1, ...) to scan only one drive.
Inputs: location.
mister_screenshotA
Take a screenshot of what's currently displayed on MiSTer-FPGA. Returns the screenshot as a PNG image. Useful for seeing what game is running or verifying a launch succeeded.
Inputs: no named parameters.
mister_searchA
Search the MiSTer-FPGA ROM library by name. Returns matching games with name, path, system, and storage location. Use 'system' to filter by platform. Results are fuzzy-matched and ranked by relevance.
Inputs: query (required), limit, system.
mister_shellA
Execute a shell command on MiSTer-FPGA and return the output. Use for file operations, system administration, or any task not covered by other tools. Commands run as the MiSTer user with full system access.
Inputs: command (required).
mister_statusA
Get the current status of MiSTer-FPGA, including which core is loaded and what game (ROM) is running. Use this to check what's currently playing before launching something new.
Inputs: no named parameters.
mister_system_infoA
IMPORTANT: Always call this tool FIRST before launching games, navigating OSD, or interacting with any core. Returns detailed system information including supported file formats, keyboard mapping notes, launch behavior (e.g. floppy cores need OSD reset after launch), and full OSD menu structure parsed from conf_str. Essential for understanding core capabilities and quirks before any interaction.
Inputs: system (required).
mister_systemsA
List all available systems (consoles/computers) on MiSTer-FPGA with their ROM counts and storage locations. Use this to discover what platforms are available before searching or launching games.
Inputs: no named parameters.
mister_tailscaleA
Manage Tailscale VPN on MiSTer-FPGA. Actions: 'setup' installs and configures Tailscale (returns auth URL if needed), 'status' shows connection state and IP, 'start' starts the daemon, 'stop' stops it. Tailscale enables secure remote access from anywhere.
Inputs: action (required), hostname.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 17 tools
Each tool targets a distinct action or resource (e.g., config read/write, launch, OSD, input, status). No two tools overlap in purpose; tools like mister_cfg_read and mister_cfg_write are clearly different operations.
All tools follow the pattern 'mister_<verb>_<noun>' or 'mister_<noun>' with consistent snake_case. Verbs are descriptive and uniform, e.g., read, write, launch, reload, rescan.
17 tools is slightly above the typical 3-15 range, but the server covers a wide domain (system info, game launching, OSD, input, config, shell, VPN). Each tool earns its place; the count feels justified.
The tool surface is comprehensive for core operations like config, launching, OSD, and status. Minor gaps exist (e.g., no explicit core update tool), but the shell tool covers edge cases. Overall, agents can perform most tasks without dead ends.
Maintenance
Related MCP Connectors
Drive your retro handheld console: find your games, launch, save, set volume, get cheat codes.
Go MCP server for GitLab: 2 dynamic tools reach 1000+ REST/GraphQL actions. Free/CE, no paid tier.
MCP server for siGit (sigit.si): browse repos, search code, manage PRs/issues, web search.
MEOK MCP Hardening MCP — automated security red-team for any MCP server. Maps OWASP LLM Top 10
Related MCP Servers
- AlicenseAqualityBmaintenanceGenieACS-MCP is a Go-based MCP server that bridges any GenieACS (TR-069 ACS) instance, exposing device data, firmware management, and CPE actions (reboot, parameter refresh, firmware download) over JSON-RPC12159 npm19GPL 3.0
- AlicenseNot gradedqualityDmaintenanceMCP (Model Context Protocol) server in Go for computer automation. Uses robotgo library for desktop automation. Features Mouse control: movement, clicks, dragging, scrolling Keyboard control: key presses, text input, hotkeys Screen operations: screenshots, pixel color, display information Window management: move, resize, minimize/maximize Process management: list processes, search, terminate97 npm4MIT
- AlicenseAqualityCmaintenanceMCP server for RetroArch via its Network Control Interface. Drive any libretro core — read/write memory, save/load state, screenshot, pause/frame-advance/reset — across NES, SNES, Genesis, N64, GBA, PS1 and more.1726 npm6MIT
- AlicenseAqualityBmaintenanceGo MCP server that lets your AI read documents: PDF, DOCX, XLSX, PPTX, ODT, EPUB, HTML, RTF, Markdown, CSV, Jupyter and images, with OCR, search, tables and paging. 13 read-only tools, one binary, Homebrew and Claude Code marketplace.1312MIT