romm_activity
Get recent activity feed — ROM plays, saves, screenshots, notes. Optionally filter by ROM ID.
Browse, search and organise a self-hosted RomM game library — with a server-level read-only mode for when the agent should only look.
LABSCO SUMMARY
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.
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.
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.
One command plus a key — npx romm-mcp, then supply credentials
USE CASES
Search by name across every platform, then open the full record with its genres, companies, file details and any notes you left on it.
Totals for platforms, ROMs, saves, states, screenshots and file size, with per-platform counts underneath them.
Filter for the unmatched or unfavourited entries, build a collection from what you find, and correct names and notes as you go.
The recent activity feed of plays, saves and screenshots, and the save states attached to whichever game you were last in.
Start the server in read-only mode and every mutating tool refuses at the server, independent of what the client decides to allow.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
romm_activityGet recent activity feed — ROM plays, saves, screenshots, notes. Optionally filter by ROM ID.
romm_browse_romsBrowse and filter ROMs with pagination. Supports filtering by platform, collection, favorites, unmatched, and sorting.
romm_download_romGet the download URL for a ROM file.
romm_get_collection_romsGet all ROMs in a specific collection with details.
romm_get_romGet full details for a specific ROM by ID — metadata, genres, companies, file info, notes.
romm_list_firmwareList firmware files available in RomM, optionally filtered by platform.
romm_list_platformsList all platforms in the RomM library with ROM counts, categories, and metadata.
romm_manage_collectionsManage RomM collections. Actions: list, get, create, update, delete. Also supports smart and virtual collections.
romm_manage_savesList save files, optionally filtered by ROM.
romm_manage_statesList save state files, optionally filtered by ROM.
romm_rom_notesManage notes attached to a ROM. Actions: list, add, update, delete.
romm_screenshotsList screenshots, optionally filtered by ROM.
romm_search_romsSearch ROMs by name. Returns matching ROMs with basic info. Use this to find specific games.
romm_statsGet RomM library statistics — total platforms, ROMs, saves, states, screenshots, and total file size.
romm_systemSystem operations: heartbeat check, get config, trigger library scan, or update metadata.
romm_update_romUpdate ROM metadata — name, notes, favorite status.
BEFORE YOU INSTALL
16 tools when we connected. ROMM_READ_ONLY=1 makes every create, update, delete and scan tool refuse, and deletes also need confirm_delete: true. Against RomM 5.0, the scan and metadata_scan actions of romm_system no longer work.
CONTEXT COST
Rated by the size of the 16 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
npx romm-mcp{
"mcpServers": {
"romm": {
"command": "npx",
"args": [
"-y",
"romm-mcp"
],
"env": {
"ROMM_BASE_URL": "http://<YOUR_ROMM_INSTANCE>:5500",
"ROMM_API_KEY": "<YOUR_ROMM_API_KEY>"
}
}
}
}{
"mcpServers": {
"romm": {
"name": "romm",
"description": "RomM MCP server",
"enabled": true,
"transport": "stdio",
"command": "npx",
"args": [
"-y",
"romm-mcp"
],
"env": {
"ROMM_BASE_URL": "http://<YOUR_ROMM_INSTANCE>:5500",
"ROMM_API_KEY": "<YOUR_ROMM_API_KEY>"
}
}
}
}Start the server in HTTP mode first — it listens on port 3000:
MCP_TRANSPORT=http MCP_PORT=3000 \
ROMM_BASE_URL=http://<YOUR_ROMM_INSTANCE>:5500 \
ROMM_API_KEY=<YOUR_ROMM_API_KEY> \
npx romm-mcpThen connect your client:
{
"mcpServers": {
"romm": {
"type": "streamable-http",
"url": "http://localhost:3000/mcp"
}
}
}Clients spell the "type" value differently: Claude Code and VS Code use "http", Cline uses "streamableHttp", and Roo Code uses "streamable-http". Claude Desktop does not accept a URL entry in its config file.
Run the published image — it starts in HTTP mode on port 3000:
docker run -d --name romm-mcp -p 3000:3000 -e ROMM_BASE_URL=http://host.docker.internal:5500 -e ROMM_API_KEY=<YOUR_ROMM_API_KEY> ghcr.io/rodrigosiviero/romm-mcp:mainThen connect your client:
{
"mcpServers": {
"romm": {
"type": "streamable-http",
"url": "http://localhost:3000/mcp"
}
}
}Clients spell the "type" value differently: Claude Code and VS Code use "http", Cline uses "streamableHttp", and Roo Code uses "streamable-http". Claude Desktop does not accept a URL entry in its config file.