gamelibs-mcp
Summary: This MCP server lets an MCP client search and inspect Steam and Epic game libraries, enrich Steam games via IGDB metadata, manage Epic authentication, and refresh cached data; despite the README, the provided schema exposes no GOG tools.
Steam: list owned games with search, installed-only filtering, sorting, and pagination; fetch detailed playtime and local install info for up to 50 appids; resolve Steam vanity names or profile URLs to SteamID64.
Epic: check auth status, get a login URL, complete login with an authorization code, list owned games with search/install/DLC filters and pagination, and fetch details for selected app_names.
IGDB: search games by name, fetch detailed metadata for up to 50 IGDB IDs with optional force refresh, and map Steam appids to IGDB game IDs/names.
Cache: flush all, Steam, Epic, or IGDB cached data so subsequent calls refetch; auth tokens are not cleared.
General behavior: lean, paginated, filterable responses; DLCs excluded by default; no image/cover URLs returned.
Provides tools for Epic authentication and login, listing owned Epic games with local install status, and retrieving detailed game metadata and install information.
Provides tools for searching IGDB game metadata, retrieving detailed game information, and mapping Steam appids to IGDB games for library enrichment.
Provides tools for listing owned Steam games with playtime, last-played information, and local install status, plus retrieving detailed game information and resolving Steam vanity names or profile URLs to SteamID64.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gamelibs-mcp show me my top 5 most played Steam games"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
gamelibs-mcp
An MCP server that exposes your Steam, Epic Games Store, GOG, and IGDB game data as tools an MCP client (Claude Code / Desktop) can call.
Steam — owned games, playtime, and installed-on-this-machine status.
Epic — owned library + install status, via the reverse-engineered endpoints used by the open-source Legendary CLI / Heroic.
GOG — game titles and playtime from the local GOG Galaxy database.
IGDB — a games metadata database, for enriching/looking up game info.
Example prompt you could use once this MCP is set up:
Give me the top 5 of the games I own in my Steam and Epic library and I have not played yet but should play next.
I'm currently looking for a multiplayer game I can play online with my friends; since we played a lot of FPS games recently we want to try something different and more chill this time, maybe more collaborative like some Tower Defense or a Survival game.
Use the games I've already played as a baseline to get a sense of my overall taste but also don't hesitate to interview me to refine your understanding of what I am currently in the mood for.
Exposed Tools
Steam —
steam_list_games,steam_get_game_details,steam_resolve_userEpic —
epic_auth_status,epic_get_login_url,epic_login,epic_list_games,epic_get_game_detailsGOG —
gog_list_games,gog_get_game_detailsIGDB —
igdb_search_games,igdb_get_game_details,igdb_lookup_by_steam_appidCache —
refresh_cache(flush cached data so the next call re-fetches; theigdb_*tools also takeforce_refreshfor refreshing specific games)
Lean responses. This keeps large libraries from blowing up the model's context.
Tools split into thin list tools (ids/titles only) and fat detail tools that take a sublist of ids.
Everything is paginated (
limit/offset) and filterable server-side (search,installed_only,sort).No image/cover URLs are ever returned
DLCs are excluded unless you pass
include_dlcs=True.
Per-machine install detection.
"Installed" data lives only in local files: Steam's
.acfmanifests, the official Epic Games Launcher's*.itemmanifests, and/or Legendary/Heroic'sinstalled.json.GOG titles and playtime are read from the local GOG Galaxy database; this integration does not report install status.
Run this server on the machine you actually game on to get real install status.
Owned/playtime data works from anywhere.
Windows, macOS, and Linux layouts are supported (the official Epic launcher is Windows/macOS only).
Related MCP server: mcp-steam
Download the code
Requires Python 3.11+. Download or Clone the repo, then run it locally.
uv is recommended:
uv sync # or: pip install -e ".[dev]"Configure your API keys
Credentials are read from environment variables:
Variable | Needed for | How to get it |
| Steam | |
| Steam | your SteamID64, or your |
| GOG (optional) | path to GOG Galaxy's |
| GOG (optional) | select a profile if the database contains multiple profiles |
| IGDB |
Those will typically be provided as environment variables in your MCP client's configuration (e.g. claude_desktop_config.json, see "Set up in Claude" below), but can also be provided via a .env file (see "Contributing - Developer Tips").
Epic does not need static secrets. If you already use Legendary/Heroic on this machine, Epic auth is bootstrapped from their local
user.json. Otherwise, your MCP client is expected to callepic_get_login_url, have you open the returned URL in your browser to sign in to Epic like normal, then callepic_login(<authorizationCode>).For Steam,
GetOwnedGamesonly returns data if your profile's Game details privacy is set to Public (and "Always keep my total playtime private" is off).GOG reads the local Galaxy database. If multiple GOG profiles are stored there, set
GOG_USER_ID; the database'sGameTimestable must contain the selected profile's playtime records.
Set up in Claude
For Claude Code, you can add the MCP by running the following command from the cloned working copy directory:
claude mcp add gamelibs \
--env STEAM_API_KEY=... --env STEAM_ID=... \
--env TWITCH_CLIENT_ID=... --env TWITCH_CLIENT_SECRET=... \
-- uv run --directory "$PWD" python -m gamelibs_mcpIf you are using Claude Desktop, go to "Settings" > "Developer" > "Edit Config" then add this to the claude_desktop_config.json file (see also .mcp.json.example):
"mcpServers": {
"gamelibs": {
"type": "stdio",
"command": "uv",
"args": ["run", "--directory", "<mcp path on disk>", "python", "-m", "gamelibs_mcp"],
"env": {
"STEAM_ID": "<see above>",
"STEAM_API_KEY": "<see above>",
"TWITCH_CLIENT_ID": "<see above>",
"TWITCH_CLIENT_SECRET": "<see above>"
}
}
}Be sure to replace the values of the env vars with your actual credentials (see above), as well as the <mcp path on disk> with the actual absolute path to where you cloned the repo (If you're on Windows, don't forget to escape backslashes (e.g. C:\\Users\\...) in that path).
Contributing - Developer Tips
Store your credentials in an .env file
The MCP can read your credentials from env vars declared in a local .env file too. Simply cp .env.example .env and fill it in with your actual credentials.
While this is not the ideal option for integrating the MCP in Claude (where you'd usually prefer to use claude mcp add gamlibs --env ... --env ... or the "env" attribute in the JSON config, like described above), having the ability to store your credentials in a local .env file can be very useful when working on the MCP's code itself for debugging or contributing, to avoid having to export them globally in your shell or having to pass them to every call while you test and iterate on the MCP.
On startup the server loads .env files searched from the directory it is launched in, upward. This works for uv run mcp dev … (launched from the project root) and for a claude mcp add … --directory <project> registration (launched in the project dir). It does not magically work if the server is launched from an unrelated directory.
Use the MCP Inspector to explore, debug and test the MCP
The MCP Inspector is a nice tool for developers who are working on any MCP. It's not specific to this gamelibs MCP in particular, but I find this useful so figured I'd share.
To use it, simply run this command from the root of your repo's working copy:
uv run mcp dev src/gamelibs_mcp/server.pyThis MCP Inspector requiresNode.js / npx to run
Run Tests
uv run pytest # offline unit tests (file-format parsing, install detection)Disclaimer
The Epic integration talks to undocumented, reverse-engineered endpoints (as Legendary/Heroic do). It may break if Epic changes them, and is for personal use with your own account.
Available Tools
12 toolsepic_auth_statusA
Report Epic auth state (does a valid/refreshable token exist, and from where).
Inputs: no named parameters.
epic_get_game_detailsA
Full text details for specific Epic games (title, description, developer, install info).
Args: app_names: Epic app_name identifiers (from epic_list_games), max 50 per call. include_dlcs: Include entries that are DLC (excluded by default).
Inputs: app_names (required), include_dlcs.
epic_get_login_urlA
Get the Epic login URL. Sign in there, then copy the authorizationCode for epic_login.
Inputs: no named parameters.
epic_list_gamesA
List owned Epic games (thin: app_name, catalog_item_id, namespace, title, installed).
The first call warms a persistent catalog-metadata cache (titles + game/DLC categories), so it may be slow on a large library; subsequent calls are fast. Only a page is returned.
Args: installed_only: Only games installed here (via local Legendary/Heroic state). search: Case-insensitive substring match on the title. include_dlcs: Include DLC/add-on entries (excluded by default). limit: Page size (1-500). Use pagination for large libraries. offset: Pagination offset.
Inputs: limit, offset, search, include_dlcs, +1 more.
epic_loginA
Exchange an Epic authorizationCode (from epic_get_login_url) for a stored session.
Inputs: authorization_code (required).
igdb_get_game_detailsA
Full text metadata for specific IGDB game ids (summary, ratings, genres, companies...).
Results are cached on disk per id. Set force_refresh=True to bypass the cache and pull fresh data for these ids (e.g. when the prompt asks for the latest ratings).
Args: ids: IGDB game ids (from igdb_search_games / igdb_lookup_by_steam_appid), max 50 per call. include_dlcs: Include ids that are DLC/expansions (excluded by default). force_refresh: Re-fetch from IGDB and overwrite the cached records for these ids.
Inputs: ids (required), include_dlcs, force_refresh.
igdb_lookup_by_steam_appidA
Map Steam appids to IGDB games (id + name) — bridges a Steam library to IGDB metadata.
Args: appids: Steam appids (max 50 per call). force_refresh: Re-query IGDB and overwrite the cached matches for these appids.
Inputs: appids (required), force_refresh.
igdb_search_gamesA
Search IGDB by name (thin: id, name, release_year). Use igdb_get_game_details for more.
Args: query: Free-text game name to search for. include_dlcs: Include DLC/expansion results (excluded by default). limit: Page size (1-500, IGDB default 10). offset: Pagination offset.
Inputs: query (required), limit, offset, include_dlcs.
refresh_cacheA
Flush cached library/metadata data so the next call re-fetches from the network.
Use when data may be stale (e.g. "get the latest ratings/library" or after you've installed/bought games). Auth tokens are NOT cleared — this refreshes data, not login. For refreshing just a few specific games, prefer force_refresh on the igdb_* tools.
Args: target: Which caches to clear — "all" (default), "steam", "epic", or "igdb".
Inputs: target.
steam_get_game_detailsA
Full details for specific Steam games: playtime breakdown + local install info.
Args: appids: Steam appids to fetch (max 50 per call). include_dlcs: Reserved; Steam DLC ownership is not separately derivable here.
Inputs: appids (required), include_dlcs.
steam_list_gamesA
List owned Steam games (thin: appid, name, playtime, last-played, installed).
Args: installed_only: Only games installed on THIS machine (requires local Steam). search: Case-insensitive substring match on the game name. sort: One of "playtime" (desc), "name" (asc), "last_played" (desc). limit: Page size (1-500). offset: Pagination offset.
Inputs: sort, limit, offset, search, +1 more.
steam_resolve_userA
Resolve a Steam vanity slug or profile URL to a SteamID64.
Inputs: vanity_or_url (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 12 tools
Tools are cleanly separated by platform prefix (epic_, igdb_, steam_) and by action (search, list, get details, login, resolve). Each tool has a distinct target resource and operation, so there is no realistic ambiguity. The only cross-cutting tool, refresh_cache, is clearly distinct from per-id force_refresh parameters.
Names mostly follow a consistent <platform>_<verb>_<object> pattern, e.g. epic_list_games, igdb_search_games, steam_get_game_details. Minor deviations like epic_auth_status and epic_login are still readable and predictable, so the deviations are not confusing.
Twelve tools is well-scoped for a server that handles three platform integrations plus cache management. Each tool covers a necessary operation and none feel redundant or ornamental. The count sits comfortably in the ideal range.
The server covers the core library and metadata workflow well: list, get details, search, IGDB lookup, and cache refresh for all three platforms. Minor gaps exist, such as no Epic logout/revoke and no unified cross-platform library view, but these are workarounds rather than blockers.
Maintenance
Related MCP Connectors
An MCP server that gives your AI access to the source code and docs of all public github repos
MCP server for OpenAI API (chat completions, image generation, embeddings) via AceDataCloud
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Make games with AI: one MCP server that connects your agent to Unity, Unreal and Godot editors.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI assistants to search and query your LaunchBox game library across all platforms including Steam, GOG, and emulators. It allows users to check ownership for bundles, view game metadata, find duplicates, and analyze playtime statistics through natural language.3MIT
- AlicenseAqualityCmaintenanceMCP server for Steam that enables LLM agents to manage gaming libraries, achievements, stats, and discover store content through 20 tools.213MIT
- AlicenseAqualityDmaintenanceA local MCP server that lets Claude fetch data from your Steam game library via the Steam Web API. All tools are read-only.5Apache 2.0
- AlicenseAqualityDmaintenanceMCP server enabling AI assistants to search Steam games, retrieve official store metadata, and analyze player review sentiment via public Steam Storefront JSON APIs without an API key.312 npmMIT