LabscoMCP early access ↗
rodrigosivieroMCP SERVER

RomM MCP

Browse, search and organise a self-hosted RomM game library — with a server-level read-only mode for when the agent should only look.

by rodrigosiviero ↗Games, Entertainment & FandomCommunity

LABSCO SUMMARY

Two independent brakes sit in front of anything that writes.

ROMM_READ_ONLY=1 turns the whole server into a browse-only surface — every create, update and delete refuses at the server rather than trusting the client to behave — which is the setting for an agent that is not entirely yours. Separately, deletions need confirm_delete: true on the call itself, so a host that ignores tool annotations still cannot drop a collection by accident. What this adds over the RomM web UI is the ability to ask across the whole library — which platforms carry the most unmatched files, what has been played this week — rather than clicking through pages to find out.

What it is

An MCP server for RomM, the self-hosted game and ROM management platform. It browses and searches the library, reads full ROM metadata, manages collections and notes, and lists saves, states, screenshots and firmware. Both stdio and Streamable HTTP transports are supported, so it runs locally or in Docker for remote clients.

What you get

  • romm_browse_roms pages and filters by platform, collection, favourites or unmatched with sorting; romm_search_roms finds a game by name and romm_get_rom returns the full record with genres, companies, file info and notes
  • romm_list_platforms gives every platform with its ROM count and metadata, and romm_stats totals platforms, ROMs, saves, states, screenshots and overall file size
  • romm_manage_collections lists, gets, creates, updates and deletes collections including smart and virtual ones, and romm_get_collection_roms reads what is inside one
  • romm_update_rom edits name, notes and favourite status, and romm_rom_notes lists, adds, updates and deletes the notes attached to a ROM
  • romm_manage_saves, romm_manage_states and romm_screenshots list files filtered by ROM, romm_list_firmware lists firmware by platform, and romm_download_rom returns a download URL
  • romm_activity is the recent feed of plays, saves, screenshots and notes, and romm_system covers the heartbeat check and config; on RomM 5.0 its scan and metadata-refresh actions only point you to Settings → Tasks in the web UI
  • Every tool carries MCP annotations — readOnlyHint on browsing and listing, destructiveHint on anything that deletes, idempotentHint on create and update — so a compliant host can prompt before the risky ones

Requirements

Node.js 20 or newer and a RomM instance at v5.0 or later. ROMM_BASE_URL and ROMM_API_KEY are both required, with the rmm_ token generated in RomM under Settings → API Keys. Run it as npx romm-mcp over stdio, or set MCP_TRANSPORT=http with MCP_PORT (default 3000) and MCP_HOST (default 0.0.0.0) for Streamable HTTP, which is what the bundled Docker setup uses. ROMM_READ_ONLY=1 refuses every mutating tool at the server itself, and deletions additionally require confirm_delete: true on the call. ROMM_DEBUG=1 turns on debug logging.

Setup effort

One command plus a key — npx romm-mcp, then supply credentials