mcp-server-misterfpga
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MISTERFPGA_HOSTS | No | Comma-separated addresses of MiSTers, replacing the list from config.json, keeping names from the file. | |
| MISTERFPGA_DRY_RUN | No | Set to 1 to enable dry-run mode (or use serve --dry-run). Reads the MiSTers but changes nothing. | |
| MISTERFPGA_BACKUP_DIR | No | Backup directory for saves. Has no default; backup_saves will not work until set. | |
| MISTERFPGA_CONFIG_DIR | No | Directory containing config.json (default ~/.config/mcp-server-misterfpga). | |
| MISTERFPGA_LOG_UNREDACTED | No | Set to 1 to log addresses and MACs without redaction (or use --no-redact). Keys and tokens are always redacted. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_statusA | Start here. Every MiSTer (or just host): its model, what it's playing, and what works on it right now. capabilities names what works (search, launch, screenshot, ini_write, backup_saves, ...); limitations says what doesn't and how to fix it, e.g. Zaparoo Core not installed, or SSH not set up. core is the running MiSTer core (MENU in the menu) and attract_mode is true while MiSTer Super Attract Mode cycles games; both need SSH. dry_run true means this server reports writes instead of doing them. |
| list_systemsA | The systems each MiSTer can launch (consoles, computers, arcade), with how many games each has indexed and the MiSTer core that runs it. Use a system's id with search_games, or launch(system=...) to open the core with no game (e.g. a computer core). |
| search_gamesA | Find games in each MiSTer's Zaparoo library by name (every word must match), optionally in one system. Each result has a ref for launch. The same game on two MiSTers comes back twice, with two refs: the ref says which TV it launches on. variant tells apart files with the same name (region, revision, hack). |
| play_historyA | What's been played on each MiSTer, from Zaparoo's own records: games launched from the MiSTer's menu count too. Rows have a ref, so 'play the last thing again' is one launch call. |
| get_iniA | Read a MiSTer's MiSTer.ini (or an alternate ini), parsed into sections the way MiSTer reads it. [MiSTer] is global; [SNES] and other core-named sections override it for that core. Needs SSH. |
| list_nfcC | A MiSTer's NFC readers, the card-to-game mappings Zaparoo has, and the last card scanned (its UID is what map_nfc_card uses by default). |
| launchA | Launch a game (by ref) or open a system's core (by id) and wait until the MiSTer reports it running. Refuses while anything is running on that MiSTer: ending a game loses unsaved progress, so that's return_to_menu's job, and you should ask first. Rapid repeated launches are rate-limited. |
| return_to_menuA | End whatever is running and go back to the MiSTer menu. Unsaved progress in the game is lost, so confirm with the user first. Without host, acts on the one MiSTer that's running something. |
| screenshotA | Capture what a MiSTer is showing, as an image. MiSTer also saves it under /media/fat/screenshots. Without host, uses the one MiSTer that's running something. |
| set_iniA | Set (or remove) one MiSTer.ini setting, globally or for one core, keeping the rest of the file as it is. The previous file is saved next to it first (MiSTer.ini..bak). The change takes effect the next time a core loads. A few keys are refused (main, bootcore, shared_folder, debug; see misterfpga://ini-keys). Needs SSH. |
| backup_savesA | Copy a MiSTer's saves and save states into a new dated snapshot in the configured backup folder. Files unchanged since the last snapshot are hard-linked rather than downloaded, so each snapshot is complete but only changes cost space. The MiSTer is only read. Old snapshots beyond the configured number are removed. Needs SSH and a backup folder (backup_dir). |
| run_updateA | Start Update All on a MiSTer's own screen (cores, Main, Linux, and whatever else it's set to update). It runs for several minutes and the MiSTer may reboot at the end. Refuses while a game is running. Limited to once an hour per MiSTer. |
| write_nfc_cardA | Write a game onto the NFC card sitting on the reader attached to the game's MiSTer, so tapping it launches the game. Overwrites whatever the card held. Ask the user to place the card first; the call waits up to a minute for it. |
| map_nfc_cardA | Make a card launch a game without writing to it: Zaparoo remembers 'this card's UID means this game'. Works with read-only cards and toys. Ask the user to scan the card on the game's MiSTer first, then call this without uid. Refuses a card that's already mapped. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| make_nfc_cards | Walk through turning a list of games into NFC cards, one card at a time. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| ini-keys |
TDQS
Scored across 14 tools
Most tools have clearly distinct resource+action targets, and the descriptions explicitly delimit the tricky pairs (write_nfc_card writes to the card vs map_nfc_card registers a UID mapping; get_ini vs set_ini; launch vs return_to_menu). Minor overlap remains between get_status, list_systems and play_history, which all return some form of device/system state, but the intended entry point and granularity are spelled out.
The dominant pattern is verb_noun (get_status, list_systems, search_games, set_ini, backup_saves, run_update, write_nfc_card, map_nfc_card), which is predictable. A few deviations exist — play_history is noun-based, and launch/screenshot/return_to_menu are bare verbs or phrases — but they are still readable and unambiguous.
14 tools sit comfortably in the well-scoped range for a device-control server covering discovery, launching, screen capture, config, backups, updates and NFC. Each tool maps to a distinct operation with no filler or redundant entries.
The lifecycle is largely covered: discover (status, systems, search, history), act (launch, return_to_menu, screenshot, run_update), configure (get/set_ini), and maintain (backup_saves, NFC list/write/map). Notable gaps are the absence of an unmap/remove NFC mapping operation (map exists with no inverse), no restore-from-backup, and no way to enumerate all games in a system without a name query.