mcp-romm
This MCP server exposes RomM library browsing and personal library-management tools.
Check RomM status, library statistics, platforms, firmware, devices, and tasks.
Browse/paginate ROMs, view recent additions, get ROM details, search by name or hash, and list filter values.
Inspect collections, collection contents, smart collections, saves, user status lists, and ROM notes.
Trigger a background library scan.
Update personal play status: backlog, now-playing, rating, completion, and last-played time.
Favorite/unfavorite ROMs and add, edit, or delete personal notes.
Create, populate, remove from, and delete user collections without deleting ROMs.
Allows searching metadata providers including IGDB for ROM matches, enabling AI agents to retrieve game metadata.
RomM MCP Server
An MCP server for RomM — the self-hosted retro game library manager. 92 tools: 50 read-only for browsing platforms, searching ROMs, viewing metadata, collections (regular, smart, and virtual), saves and states, soundtracks, play activity, recommendations, memory cards, notifications, devices, audit events and tasks — plus 42 write tools for play status, play sessions, favorites, notes, collection management, music playlists, emulator-streaming sessions and, behind opt-in tiers, notifications, device installs and save/state/memory-card housekeeping, through any MCP-compatible AI assistant.
Tracks RomM 5.0 through 5.4. Features added after 5.0 are version-gated against /api/heartbeat and explain themselves on an older server instead of returning a bare 404. Every tool carries MCP annotations (readOnlyHint / destructiveHint / idempotentHint), so a client can tell a browse from a delete without guessing.
Tools
Read
Tool | Description |
| Check server configuration and reachability |
| Library-wide statistics (platforms, ROMs, saves, total size) |
| List platforms with ROM counts and sizes |
| Browse ROMs with filtering and pagination |
| Recently added or updated ROMs |
| Full ROM detail — metadata, saves, user status |
| Search ROMs by name |
| Identify a ROM by file hash (CRC, MD5, SHA1, or RetroAchievements) |
| Available filter values (genres, regions, languages, tags) |
| List user-curated collections |
| List ROMs in a specific collection |
| List auto-generated smart collections |
| List save files by ROM or platform (favourite, labels and device-sync attribution on 5.4+) |
| List save states by ROM or platform |
| Browse by status (now playing, backlog, completed, etc.) |
| View notes on a ROM |
| List BIOS/firmware files per platform |
| List registered devices — online status and install capability on 5.4+ |
| List registered tasks (schedule, manual-run availability) and running status |
| Trigger a background library scan — typed scans on 5.4+ (blocked over REST on RomM 5.0 — see Known issues) |
| Recent play activity feed — who played what, when (5.0+) |
| List recorded play sessions with durations (5.0+) |
| Automatic groupings by genre/franchise/company/etc. (5.0+) |
| List ROMs in a virtual collection (5.0+) |
| A smart collection's rules and matching ROMs (5.0+) |
| Authenticated account, role, and effective permissions |
| Search metadata providers (IGDB etc.) for ROM matches (5.0+) |
| Browse the soundtrack library — filterable, paginated game music |
| Distinct soundtrack artists / albums / genres / years with counts (games, platforms, game-genres on 5.3+) |
| Soundtrack library totals (5.3+) |
| Your favourite soundtrack tracks (5.1+) |
| List music playlists — yours plus other users' public ones (5.1+) |
| A playlist's details and its tracks, in playlist order (5.1+) |
| Emulator-streaming setup: enabled?, platforms, save-slot capabilities (5.1+) |
| Active streaming sessions (admin-only server-side, 5.1+) |
| Platform folders on disk RomM has never scanned (5.1+) |
| Pick one ROM at random — "what should I play?" (5.2+) |
| Personal recommendations from your play history, with reasons (5.3+) |
| Games similar to a given ROM, with reasons (5.3+) |
| Your memory cards, optionally plus cards others made public (5.3+) |
| One memory card and its version history (5.3+) |
| Every streaming container and what it's doing (admin-only server-side, 5.3+) |
| Streaming sessions you could join as a second player (5.3+) |
| Status of a streaming session — launching, running, ended (5.3+) |
| Which save states a stream can load for a ROM (5.4+) |
| Your notification inbox (5.4+) |
| Where your notifications get forwarded — targets shown masked (5.4+) |
| Apprise services RomM can deliver to, with their fields (5.4+) |
| Install requests queued for one of your devices (5.4+) |
| Which of your devices a ROM has been sent to (5.4+) |
| Your account's audit trail — logins, downloads, plays, edits (5.4+) |
Write
These modify your own user data, collections, and music playlists. They cannot alter ROM files, platforms, firmware, other users, or RomM save files.
The exception is the emulator-streaming cluster, which starts and stops a server-side emulator container and can write that emulator's own save states. Those are separate from RomM's battery-save files, which no tool here touches.
Tool | Description |
| Set play status, backlog, now-playing, rating, completion, last-played |
| Add or remove a ROM from your favorites |
| Add a note to a ROM |
| Edit an existing note |
| Delete a note (permanent) |
| Create a new collection |
| Add ROMs to a collection |
| Remove ROMs from a collection |
| Delete a collection — the grouping only, not the ROMs (permanent) |
| Record a play session on a ROM (5.0+) |
| Delete one of your play sessions (permanent, 5.0+) |
| Create a smart collection — a saved filter that auto-matches ROMs (5.0+) |
| Edit a smart collection's name/description/rules (5.0+) |
| Delete a smart collection — the saved filter only (permanent, 5.0+) |
| Add or remove soundtrack tracks from your favourites (5.1+) |
| Create a music playlist (5.1+) |
| Edit a playlist's name / description / visibility (5.1+) |
| Delete a playlist — the grouping only, not the audio (permanent, 5.1+) |
| Add, remove, or reorder tracks in a playlist (5.1+) |
| Launch a ROM in a server-side emulator and get the stream URL (5.1+) |
| Save or load an emulator save state mid-game (5.1+) |
| Set volume, or set/toggle mute, on a running session (5.1+) |
| Stop a session — optionally saving state first (5.1+) |
| Join someone else's running session as a second player (5.3+) |
| Swap the disc in a running multi-disc session (5.3+) |
| Make one of your collections public or private (5.4+) |
Opt-in write tiers
The tools below are present but refuse until their tier is enabled with ROMM_WRITE_TIERS (comma-separated: notifications, devices, assets). Each tier adds one scope to the token — me.write, devices.write, assets.write — and each widens the blast radius beyond "your own play data and collections", so none is requested by default. romm_status shows which tiers are on and whether RomM granted them.
Tier | Tool | Description |
|
| Post a custom notification to your own inbox (5.4+) |
|
| Mark notifications read — by ID or all (5.4+) |
|
| Delete notifications — by ID or all (permanent, 5.4+) |
|
| Add a webhook / email / Apprise delivery channel (5.4+) |
|
| Change a channel's name, state, level, topics or target (5.4+) |
|
| Remove a channel (permanent, 5.4+) |
|
| Send a test through a channel (5.4+) |
|
| Confirm an email channel's code, or resend it (5.4+) |
|
| Queue a game for one of your devices to download (5.4+) |
|
| Cancel a pending install request (permanent, 5.4+) |
|
| Favourite, label or rename a save file — metadata only (5.4+) |
|
| Favourite, label or rename a save state — metadata only (5.4+) |
|
| Rename a memory card (5.3+) |
|
| Share or unshare a memory card (5.3+) |
|
| Delete memory cards with every version (permanent, 5.3+) |
Not implemented on purpose
RomM exposes more than this server wraps. Outside its boundary, by design: deleting ROM files (DELETE /api/roms/{id}/files/{id}), rewriting scan or converto settings, uploading ROMs or creating physical/identity edits, uploading manuals, walkthroughs, screenshots or soundtrack files, uploading or downloading memory-card images and save files (binary traffic, not chat material), and the notification API's ability to target other users. None of those has a tool, and roms.write, platforms.write, firmware.write and users.write are never requested.
Related MCP server: proxy-mcp
Setup
Prerequisites
Python 3.10+
A running RomM instance (v5.0–v5.4; most read tools also work on v4.4+)
An enabled RomM user account — admin is not required (see Auth)
Install
pip install fastmcp httpxOr clone and install:
git clone https://github.com/lodordev/mcp-romm.git
cd mcp-romm
pip install .Configure
Set environment variables:
Variable | Required | Default | Description |
| No |
| Your RomM instance URL |
| Yes | RomM username | |
| Yes* | RomM password | |
| No | Read the password from this file instead (first line); wins over | |
| No |
|
|
| No | Comma list of opt-in write tiers: | |
| No |
| Default request timeout (seconds) |
| No |
| Timeout for slow endpoints |
| No |
| Verify TLS certificates |
| No |
|
|
| No |
| Bind address for |
| No |
| Port for |
| No | Comma list of the Host values clients will use (e.g. your Tailscale IP or name). Turns on FastMCP's Host/Origin check, which is what stops a DNS-rebinding page in a browser from driving this server. Set it for any non-loopback bind. |
Add to Claude Code
Add to your .mcp.json:
{
"mcpServers": {
"romm": {
"command": "python",
"args": ["/path/to/mcp-romm/server.py"],
"env": {
"ROMM_URL": "http://your-romm-instance:3000",
"ROMM_USERNAME": "your-username",
"ROMM_PASSWORD": "your-password"
}
}
}
}Add to Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"romm": {
"command": "python",
"args": ["/path/to/mcp-romm/server.py"],
"env": {
"ROMM_URL": "http://your-romm-instance:3000",
"ROMM_USERNAME": "your-username",
"ROMM_PASSWORD": "your-password"
}
}
}
}Remote (HTTP) transport
By default the server speaks stdio and is spawned by the client. To host it as a shared network service instead — e.g. one instance on your homelab that all your machines use — set:
ROMM_MCP_TRANSPORT=http ROMM_MCP_HOST=0.0.0.0 ROMM_MCP_PORT=8765 python server.pyThen point clients at it, e.g. Claude Code:
claude mcp add --transport http romm http://your-host:8765/mcpThe HTTP transport has no authentication of its own — bind it to a trusted network only (LAN, VPN, or an overlay network like Tailscale), never the open internet. Note that claude.ai web/mobile connectors connect from Anthropic's cloud and cannot reach private-network URLs.
"Trusted network" is weaker than it sounds: a web page open in a browser on
any machine that can reach the port can target it through DNS rebinding,
because FastMCP validates Host/Origin only for loopback binds by default.
Set ROMM_MCP_ALLOWED_HOSTS to the exact host values your clients use
(ROMM_MCP_ALLOWED_HOSTS=100.64.0.9) and FastMCP rejects everything else.
Examples
Once configured, you can ask your AI assistant things like:
"What platforms do I have in RomM?"
"Search for Zelda games"
"Show me my backlog"
"How many ROMs do I have total?"
"What was recently added?"
"Show me the saves for Super Metroid"
"What's in my favorites?"
"List my firmware files for PlayStation"
"What tasks are running?"
"What devices are registered?"
And, with the write tools:
"Mark Chrono Trigger as finished"
"Favorite Super Metroid"
"Add it to my backlog and rate it 9"
"Make a collection called 'SNES RPGs' and add ROMs 10, 11, and 12"
"Add a note to this ROM: 'glitch at the second boss, save often'"
"Pick me something random to play on the SNES"
"What soundtrack albums do I have by Nobuo Uematsu?"
"Make a playlist called 'Focus' and add those tracks"
"Launch Shadow of the Colossus in the streaming emulator"
"What should I play next, and why?"
"Anything in my RomM inbox?"
"Send Chrono Trigger to my handheld" (with
ROMM_WRITE_TIERS=devices)"Label that save 'before final boss'" (with
ROMM_WRITE_TIERS=assets)
Security
Least privilege. The OAuth2 token requests only the read scopes the tools use plus
roms.user.writeandcollections.write, and negotiates for the two optional tiers (tasks.run, andplaylists.read/playlists.writeon 5.1+). It never requestsroms.write,platforms.write,firmware.write, orusers.write.Opt-in write tiers.
me.write,devices.writeandassets.writeare requested only when you list their tier inROMM_WRITE_TIERS.me.writealso lets a token edit the account's own profile in RomM, which is exactly why notifications are off until you turn them on.Read-only kill switch.
ROMM_READ_ONLY=truedoes two things: the HTTP helper refuses every non-GET API call regardless of which tool was called, and the token is requested with no*.writescope and notasks.run, so the credential a read-only process holds cannot write even if it leaked. (The OAuth grant itself is still a POST to/api/token.)Bounded write surface. Write tools change only your own user data (play status, favorites, notes, music favourites and playlists, notifications, save/state metadata) and your own collections and devices. No tool edits ROM files, platforms, firmware, other users, or uploads/downloads/deletes RomM save files or memory-card images.
Untrusted text stays in its field. ROM names and summaries (from metadata providers), notes, collection and playlist descriptions, notification bodies, labels, channel names, audit targets and other users' names are rendered with control characters, bidi overrides, zero-width and Unicode tag characters stripped, newlines collapsed and length capped, so content written by someone else can't masquerade as tool output. This keeps text visibly inside its field; it does not try to judge what the text says. Channel targets and secrets are shown masked and never echoed back.
Webhooks can't point inward. With the
notificationstier on, RomM becomes an outbound HTTP client for whatever webhook URL a tool call supplies, so loopback, private, link-local and bare internal hostnames are refused, and notification links must be a RomM path or an http(s) URL.No ownership checks of its own. Deletes and dismissals by ID rely on RomM's authorization — this server never sees whose object an ID is. Keep the account's grants scoped (RomM's permission groups) if "your own data only" matters to you.
Emulator streaming is the one broader surface.
romm_streaming_*starts and stops a server-side emulator container and can write that emulator's save states.romm_streaming_stopkills a running emulator and is annotated destructive. Nothing here touches RomM's own save files.Destructive ops are labeled. Every tool that permanently removes data says so in its description and carries
destructiveHint. Collection and playlist deletes remove the grouping, never the ROMs or audio.No disk writes. Credentials and tokens are held in memory only, never written to disk. The password can come from a file (
ROMM_PASSWORD_FILE) rather than the environment.TLS by default. Certificate verification is enabled by default (
ROMM_TLS_VERIFY=true).Auto-retry. If a token expires mid-session, the server re-authenticates transparently.
Auth
The server uses OAuth2 password grant to authenticate with RomM. Tokens are automatically refreshed when they expire, and a 401 triggers one transparent re-authenticate-and-retry.
Scopes are negotiated, not assumed. RomM's token endpoint rejects the entire request with 403 Insufficient scope if any single requested scope falls outside the account's set — so asking for a scope your server or account doesn't have would take down every tool, not just the ones that need it. On first authentication this server asks for everything it wants; if that is refused it establishes that the core set works, then probes each optional tier once and drops the ones refused. The result is cached for the process, so token expiry doesn't re-run the probe. romm_status reports what was granted and what was dropped, and any tool needing a dropped tier says so plainly.
This matters in two common cases:
RomM 5.0 servers, where
playlists.*does not exist at all.Least-privilege service accounts, which typically lack the admin-tier
tasks.run.
Note: The read and write tools operate on your own library and user data, so an ordinary enabled RomM user account is sufficient — admin is not required. (romm_scan_library needs an account permitted to run tasks; romm_streaming_sessions is admin-only on RomM's side and says so.)
RomM 5.0 role change: RomM 5.0 collapsed the old viewer/editor/admin roles into user/admin and moved fine-grained authorization to a permissions system (legacy roles are coerced to user on upgrade). If a tool unexpectedly gets a 403 on a 5.0 instance, check the account's effective permissions (GET /api/permissions/me) in the RomM admin UI.
Version support
RomM | Status |
4.4–4.9 | Most read tools work; anything marked 5.0+ does not |
5.0 | Fully exercised, live e2e (see Known issues for 5.0.0 server bugs) |
5.1 | Music favourites/playlists, emulator streaming, unscanned platform folders |
5.2 | Random ROM pick |
5.3 | Recommendations, similar ROMs, memory cards, soundtrack game/platform facets + stats, streaming containers/joinable/join/status/swap-disc |
5.4 | Notifications + channels, device installs + online status, audit events, save/state favourite/labels/rename, collection visibility, typed scans |
The 5.3 and 5.4 tools were built against RomM's tagged source and the live
5.4.1 OpenAPI schema (routes, request bodies, response shapes, and scope
requirements). Every new tool has request-shaping unit tests, and the suite
was run live against RomM 5.4.1 as a least-privilege account (82 of 83 live
checks passing; the one miss was a scan refused because another scan was
already running, which the tool now explains). The API surface is purely
additive from 5.0.0 through 5.4.1 — routes were added, none removed or
changed — so nothing that worked on an older server is at risk.
smoke_test.py exercises the read side of each new cluster live where the
server has data for it; per-card and per-session detail tools need an
existing card or session and are unit-tested instead.
Known issues
On RomM 5.4.1 none of these reproduce: the live suite passes 83 of 83
checks against a 5.4.1 instance as a least-privilege account (notes list,
filters endpoint and REST-triggered scans all work). The items below are
kept for anyone still on 5.0.0, where they were found by running
smoke_test.py:
romm_filterstimes out.GET /api/roms/filtersin RomM 5.0.0 executes a query with a cartesian product (RomM's log flags it atroms_handler.py:2159); the request hangs until the client timeout, and the abandoned query keeps running server-side at high CPU. Avoid callingromm_filterson 5.0.0 until this is fixed upstream — every call strands another runaway database query.Note listing 500s once any note exists. RomM 5.0.0's
GET /api/roms/{id}/notesfails serialization (UserNoteSchemavalidation inendpoints/roms/notes.py) whenever the ROM has at least one note. Creating and deleting notes work;romm_rom_notes(and the read-back afterromm_add_note) will error until fixed upstream.Library scans can't be triggered over REST. RomM 5.0.0 flags
scan_libraryasmanual_run: false, soPOST /api/tasks/run/scan_libraryis rejected.romm_scan_libraryreports this instead of failing; scans run on the configured schedule or from the web UI.
License
MIT. See CHANGELOG.md for release history.
Available Tools
28 toolsromm_add_noteA
Add a note to a ROM. The note belongs to you.
rom_id: The ROM's ID. title: Note title (required). content: Note body in markdown (optional). tags: Optional list of tag strings. is_public: Whether other RomM users can see the note (default: false).
Inputs: rom_id (required), title (required), content, tags, +1 more. Returns: result
romm_add_to_collectionA
Add one or more ROMs to a collection (without replacing the existing list).
collection_id: The collection's ID (from romm_collections). rom_ids: List of ROM IDs to add.
Inputs: collection_id (required), rom_ids (required). Returns: result
romm_collection_detailA
List ROMs in a specific collection.
collection_id: The collection's ID (from romm_collections).
Inputs: collection_id (required). Returns: result
romm_collectionsB
List user-curated collections.
Inputs: no named parameters. Returns: result
romm_create_collectionA
Create a new user collection.
name: Collection name (required). description: Optional description.
Inputs: name (required), description. Returns: result
romm_delete_collectionA
Permanently delete a collection. This cannot be undone.
The ROMs themselves are not deleted — only the collection grouping.
collection_id: The collection's ID (from romm_collections).
Inputs: collection_id (required). Returns: result
romm_delete_noteA
Permanently delete a note. This cannot be undone.
rom_id: The ROM's ID. note_id: The note's ID (from romm_rom_notes).
Inputs: rom_id (required), note_id (required). Returns: result
romm_devicesA
List registered devices (handhelds, emulators, etc.).
Inputs: no named parameters. Returns: result
romm_favoriteA
Add or remove a ROM from your Favorites.
In RomM, favorites are a special collection. This finds (or creates) your favorites collection and adds/removes the ROM.
rom_id: The ROM's ID. favorite: True to favorite (default), False to unfavorite.
Inputs: rom_id (required), favorite. Returns: result
romm_filtersA
Get available filter values for ROM browsing — genres, regions, languages, tags.
Inputs: no named parameters. Returns: result
romm_firmwareB
List BIOS/firmware files. Optionally filter by platform.
platform_id: Filter to a specific platform (0 = all).
Inputs: platform_id. Returns: result
romm_get_itemA
Get full detail for a single ROM — metadata, user status, saves.
rom_id: The ROM's ID (from romm_library_items or romm_search).
Inputs: rom_id (required). Returns: result
romm_library_itemsA
Browse ROMs — filter by platform, search term, or favorites. Paginated.
platform_id: Filter to a single platform (use romm_platforms to find IDs). 0 = all. search: Text search in ROM names. favorite: Show only favorites (default: false). limit: Items per page (default 25, max 100). offset: Skip this many items (default 0). order_by: Sort field — "name", "fs_size_bytes", "updated_at" (default: name). order_dir: "asc" or "desc" (default: asc).
Inputs: platform_id, search, favorite, limit, +3 more. Returns: result
romm_platformsA
List platforms with ROM counts.
Inputs: no named parameters. Returns: result
romm_recentA
Recently added or updated ROMs.
limit: Number of results (default 20, max 100).
Inputs: limit. Returns: result
romm_remove_from_collectionA
Remove one or more ROMs from a collection (without deleting the collection).
collection_id: The collection's ID (from romm_collections). rom_ids: List of ROM IDs to remove.
Inputs: collection_id (required), rom_ids (required). Returns: result
romm_rom_notesA
View notes on a ROM.
rom_id: The ROM's ID (from romm_library_items or romm_search).
Inputs: rom_id (required). Returns: result
romm_savesA
List save files. Filter by ROM or platform.
rom_id: Filter to a specific ROM (0 = all). platform_id: Filter to a specific platform (0 = all).
Inputs: rom_id, platform_id. Returns: result
romm_scan_libraryA
Trigger a library rescan to discover new ROMs and platforms.
This is a background task — it returns immediately. New ROMs will appear in the library as the scan progresses.
Inputs: no named parameters. Returns: result
romm_searchA
Search ROMs by name across the library.
query: Search term (required). platform_id: Filter to a single platform (0 = all). limit: Max results (default 20).
Inputs: query (required), platform_id, limit. Returns: result
romm_search_by_hashC
Identify a ROM by file hash. Provide at least one hash value.
crc_hash: CRC32 hash string. md5_hash: MD5 hash string. sha1_hash: SHA1 hash string.
Inputs: crc_hash, md5_hash, sha1_hash. Returns: result
romm_set_statusA
Set your personal play status on a ROM. Modifies only your own user data.
Provide only the fields you want to change; omitted fields are left as-is.
rom_id: The ROM's ID (from romm_search or romm_library_items). status: Play status — one of "incomplete", "finished", "completed_100", "retired", "never_playing". Empty = leave unchanged. backlogged: true/false to mark/unmark backlogged. Omit to leave unchanged. now_playing: true/false to mark/unmark as currently playing. Omit to leave unchanged. rating: 0-10 rating. -1 (default) = leave unchanged. completion: 0-100 percent complete. -1 (default) = leave unchanged. mark_played: Set the last-played timestamp to now. clear_played: Clear the last-played timestamp (mutually exclusive with mark_played).
Inputs: rom_id (required), status, backlogged, now_playing, +4 more. Returns: result
romm_smart_collectionsA
List auto-generated smart collections (rule-based).
Inputs: no named parameters. Returns: result
romm_statsA
Get library statistics — platform count, ROM count, saves, total size.
Inputs: no named parameters. Returns: result
romm_statusA
Check RomM MCP server configuration and reachability.
Inputs: no named parameters. Returns: result
romm_tasksA
Check running and scheduled task status.
Inputs: no named parameters. Returns: result
romm_update_noteA
Edit an existing note. Only the fields you provide are changed.
rom_id: The ROM's ID. note_id: The note's ID (from romm_rom_notes). title: New title (empty = unchanged). content: New body (empty = unchanged). tags: New tag list (omit to leave unchanged). is_public: New visibility (omit to leave unchanged).
Inputs: rom_id (required), note_id (required), title, content, +2 more. Returns: result
romm_user_profileA
Browse ROMs by user status — favorites, now playing, backlogged, completed.
status_filter: Filter by user status. Options: "now_playing", "backlog", "wishlist", "completed", "retired", "" (shows favorites).
Inputs: status_filter. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 28 tools
Each tool has a clearly distinct purpose, e.g., adding notes, managing collections, browsing library, searching, etc. There is minimal overlap; even similar tools like romm_library_items and romm_search differ in scope (browse vs. search).
All tools start with 'romm_' and follow a consistent verb_noun pattern (e.g., romm_add_note, romm_create_collection) or noun-only for list operations (e.g., romm_platforms, romm_saves). The naming is predictable and clear.
With 28 tools, the server covers a broad domain including library browsing, collections, notes, user status, scanning, and system tasks. While slightly high, each tool serves a clear function and the count is justified by the comprehensive feature set.
The tools cover core CRUD operations for collections and notes, plus browsing, searching, user status, and system utilities. Minor gaps exist (e.g., no update for collections, no direct ROM deletion), but the surface is largely complete for a user-facing ROM manager.
Maintenance
Related MCP Connectors
Remote MCP server for saving, searching, syncing, and managing Teak cards.
The official MCP Server for the Mux API
Public MCP server for discovering open jobs. Search, filter, and get application links.
Related MCP Servers
- AlicenseBqualityDmaintenanceMCP Server for interacting with the MyAnimeList API, allowing LLM clients to access and interact with anime, manga and more.154MIT
- FlicenseAqualityDmaintenanceUniversal MCP proxy server that discovers, searches, and executes tools across all configured MCP servers from a single entry point.7-
- AlicenseAqualityCmaintenanceMCP server to manage your *ARR media stack (Radarr, Sonarr, Lidarr, Readarr, Prowlarr) for searching, adding, and managing movies, TV shows, music, books, and indexers.1ISC
- AlicenseNot gradedqualityCmaintenanceMCP server for searching, verifying, and managing game ROM collections. Enables Internet Archive ROM search, checksum verification, save file parsing, and ROM downloads.34 npmMIT