Skip to main content
Glama

👾🦀 MiSTerClaw — MCP Remote Control for MiSTer-FPGA

MiSTerClaw is the first MCP server for MiSTer-FPGA. Control your MiSTer from any AI agent.

Version Go License Platform MiSTerClaw on Glama

(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

mister_status

What's currently playing

mister_launch

Launch a game by search or path

mister_search

Search the ROM library

mister_systems

List all available systems with ROM counts

mister_screenshot

Take a screenshot (returns PNG image)

mister_info

System info (hostname, IP, temp, RAM, disks, uptime)

mister_input

Send keyboard input (OSD navigation, named keys)

mister_osd_info

Query OSD menu structure from CONF_STR database

mister_osd_visible

Show only visible OSD menu items based on current config

mister_cfg_read

Read core settings (options + DIP switches)

mister_cfg_write

Modify core settings with automatic backup

mister_reload

Reload current core to apply config changes

mister_osd_navigate

Navigate to a specific OSD menu item by name

mister_system_info

Get system config, notes, and OSD menu for a system

mister_rescan

Rescan ROM library (optionally for specific drive)

mister_tailscale

Manage Tailscale VPN

mister_shell

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 --json

All commands support --json for machine-readable output.

Installation

Three binaries:

Binary

Runs on

Purpose

misterclaw

MiSTer (ARM7)

Server — runs on the MiSTer itself

misterclaw-send

Anywhere

CLI client for direct commands

misterclaw-mcp

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

misterclaw-linux-arm7 daemon

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 (.exe)

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 status

Point 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 tools
mister_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_navigateA

Navigate to a specific OSD menu item by name (experimental — not yet reliable for all cores). Opens the OSD (F12) and navigates to the target item using conf_str-based position calculation. Works for Reset, options, file mounts, triggers etc. Uses the currently loaded core. Note: cores with runtime-hidden items may cause incorrect positioning.

Inputs: target (required).

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_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

    A4.1/5.0

    Scored across 17 tools

    Disambiguation5/5

    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.

    Naming Consistency5/5

    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.

    Tool Count4/5

    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.

    Completeness4/5

    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

    ActivityMaintained
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      GenieACS-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-RPC
      12
      159 npm
      19
      GPL 3.0
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP (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, terminate
      97 npm
      4
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      MCP 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.
      17
      26 npm
      6
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Go 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.
      13
      12
      MIT