内容
# 游戏库 MCP
一个 [MCP](https://modelcontextprotocol.io) 服务器,暴露您的 **Steam**、**Epic Games Store** 和 **IGDB** 游戏数据,供 MCP 客户端(Claude Code / Desktop)调用。
- **Steam** — 已拥有的游戏、游戏时间以及*在此机器上安装*的状态。
- **Epic** — 已拥有的游戏库 + 安装状态,通过反向工程的端点,与开源 [Legendary](https://github.com/derrod/legendary) 命令行界面 / [Heroic](https://github.com/Heroic-Games-Launcher/HeroicGamesLauncher) 使用的端点相同。
- **[IGDB](https://www.igdb.com/)** — 一个游戏元数据数据库,用于丰富和查找游戏信息。
示例提示:
> 给我一个你在 Steam 和 Epic 游戏库中拥有的游戏的前 5 名,我还没有玩过但应该接下来玩。
>
> 我目前正在寻找一个多人游戏,我可以和朋友在线玩;由于我们最近玩了很多 FPS 游戏,我们想尝试一些不同的和更轻松的游戏,也许是像塔防或生存游戏一样更具协作性的游戏。
>
> 使用我已经玩过的游戏作为基准来了解我的整体品味,但也不要犹豫地询问我,以完善你对我当前心情的理解。
## 暴露的工具
- **Steam** — `steam_list_games`、`steam_get_game_details`、`steam_resolve_user`
- **Epic** — `epic_auth_status`、`epic_get_login_url`、`epic_login`、`epic_list_games`、`epic_get_game_details`
- **IGDB** — `igdb_search_games`、`igdb_get_game_details`、`igdb_lookup_by_steam_appid`
- **缓存** — `refresh_cache`(刷新缓存数据,以便下次调用重新获取;`igdb_*` 工具也接受 `force_refresh` 以刷新特定游戏)
<details><summary>设计笔记</summary>
- **精简的响应。** 这可以防止大型游戏库占用模型的上下文。
- 工具分为精简的*列表*工具(仅限 ID/标题)和详细的*详细信息*工具,接受 ID 的子列表。
- 所有内容都分页(`limit`/`offset`)并且可在服务器端过滤(`search`、`installed_only`、`sort`)。
- 永不返回图像/封面网址
- 除非传递 `include_dlcs=True`,否则 DLC 被排除。
- **每台机器的安装检测。**
- "已安装"数据仅存在于本地文件中:Steam 的 `.acf` 清单、官方 Epic Games Launcher 的 `*.item` 清单和/或 Legendary/Heroic 的 `installed.json`。
- 在您实际游戏的机器上运行此服务器,以获取实际的安装状态。
- 已拥有的/游戏时间数据从任何地方都有效。
- 支持 Windows、macOS 和 Linux 布局(官方 Epic 启动器仅限 Windows/macOS)。
</details>
## 下载代码
需要 Python 3.11+。下载或克隆仓库,然后在本地运行。
建议使用 [`uv`](https://docs.astral.sh/uv/):
```bash
uv sync # 或:pip install -e ".[dev]"
```
## 配置 API 密钥
凭证从环境变量中读取:
| 变量 | 需要用于 | 如何获取 |
|---|---|---|
| `STEAM_API_KEY` | Steam | https://steamcommunity.com/dev/apikey |
| `STEAM_ID` 或 `STEAM_VANITY` | Steam | 您的 SteamID64,或您的 `/id/<slug>` 别名 |
| `TWITCH_CLIENT_ID` / `TWITCH_CLIENT_SECRET` | IGDB | https://dev.twitch.tv/console/apps |
这些凭证通常在 MCP 客户端的配置中提供为环境变量(例如 `claude_desktop_config.json`,参见下面的“在 Claude 中设置”),但也可以通过 `.env` 文件提供(参见“贡献 - 开发人员提示”)。
> [!NOTE]
> - Epic 不需要静态密钥。如果您已经在此机器上使用 Legendary/Heroic,请从他们的本地 `user.json` 启动 Epic 身份验证。否则,您的 MCP 客户端需要调用 `epic_get_login_url`,让您在浏览器中打开返回的网址以登录 Epic,然后调用 `epic_login(<authorizationCode>)`。
> - 对于 Steam,`GetOwnedGames` 仅在您的个人资料的**游戏详细信息**隐私设置为**公开**(并且“始终保持我的总游戏时间私有”关闭)时才返回数据。
## 在 Claude 中设置
对于 Claude Code,您可以通过从克隆的工作副本目录运行以下命令来添加 MCP:
```bash
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_mcp
```
如果您使用的是 Claude Desktop,请前往“设置”>“开发者”>“编辑配置”,然后将以下内容添加到 `claude_desktop_config.json` 文件中(另请参见 `.mcp.json.example`):
```json
"mcpServers": {
"gamelibs": {
"type": "stdio",
"command": "uv",
"args": ["run", "--directory", "<磁盘上的mcp路径>", "python", "-m", "gamelibs_mcp"],
"env": {
"STEAM_ID": "<参见上文>",
"STEAM_API_KEY": "<参见上文>",
"TWITCH_CLIENT_ID": "<参见上文>",
"TWITCH_CLIENT_SECRET": "<参见上文>"
}
}
}
```
请确保用您的实际凭证替换环境变量的值(参见上文),以及 `<磁盘上的mcp路径>`,请替换为克隆仓库的实际绝对路径(如果您在 Windows 上,请不要忘记在该路径中转义反斜杠(例如 `C:\\Users\\...`))。
## 贡献 - 开发人员提示
### 将您的凭证存储在 `.env` 文件中
MCP 还可以从本地 `.env` 文件中声明的环境变量中读取您的凭证。只需执行 `cp .env.example .env` 并用您的实际凭证填充它。
虽然这不是在 Claude 中集成 MCP 的理想选择(您通常更喜欢使用 `claude mcp add gamlibs --env ... --env ...` 或 JSON 配置中的 `"env"` 属性,如上所述),但在本地文件中存储凭证的能力在您调试或为 MCP 的代码做出贡献时非常有用,这样可以避免您在 shell 中全局导出它们或在测试和迭代 MCP 时为每个调用传递它们。
服务器启动时,从启动目录向上搜索 `.env` 文件。这适用于 `uv run mcp dev …`(从项目根目录启动)和 `claude mcp add … --directory <项目>` 注册(在项目目录中启动)。如果服务器从无关目录启动,则不适用。
### 使用 MCP 检查器来探索、调试和测试 MCP
MCP 检查器是任何 MCP 开发人员的便捷工具。它不限于此 `gamelibs` MCP,但我发现它很有用,所以就分享一下。
要使用它,只需从仓库工作副本的根目录运行以下命令:
```bash
uv run mcp dev src/gamelibs_mcp/server.py
```
> [!NOTE]
> 此 MCP 检查器需要 `Node.js` / `npx` 来运行
### 运行测试
```bash
uv run pytest # 离线单元测试(文件格式解析,安装检测)
```
## 免责声明
Epic 集成与未公开的、反向工程的端点进行通信(与 Legendary/Heroic 相同)。如果 Epic 更改了它们,它可能会中断,此功能仅适用于您自己的帐户的个人使用。