Skip to main content
Glama
Hsia97
by Hsia97

AIPickMyGame MCP Server

一个基于 Model Context Protocol (MCP) 的智能游戏推荐系统:安全同步你的 Epic / GOG / Steam(及 GOG Galaxy 聚合的全平台)游戏库,自动补全中文元数据,再让 AI Agent 用自然语言帮你回答「我现在该玩什么」。


一、为什么做这个项目(痛点)

众所周知,Epic坚持每周赠送免费游戏已有数年,Steam平台拥有众多优质的免费小游戏,通过亚马逊会员也能低价获得Epic和GOG的很多游戏,日积月累游戏库变得非常庞大(目前作者本人Epic平台就有 493 款)。但真正想玩的时候却很头疼:

  • 译名杂乱:游戏名中英文混杂,有的还用开发代号,根本认不出是什么游戏。

  • 筛选机制弱:平台自带的分类和筛选很弱,几百款游戏里翻不到想玩的。

  • 缺乏决策支持:没有「按心情/时长/类型推荐」的能力,面对一长串列表无从下手。

一句话:游戏很多,却不知道玩什么。

我们需要一个工作流,能安全地拿到游戏库、把杂乱数据清洗成规整的中文元数据,再通过自然语言交互做精准推荐。


Related MCP server: Steam Library MCP Server

二、参考了哪些开源项目

项目

借鉴点

Legendary

成熟的 Epic Games 第三方客户端。直接复用它的认证与游戏库 API,避免自己硬拼 Epic OAuth 参数

Heroic Games Launcher

① 登录方案:不硬编码 Epic 登录参数,改用 Legendary 维护的 legendary.gl/epiclogin 辅助页获取 authorizationCode。② GOG 支持:复刻其 gogdl 的 OAuth2 流程(client_id/secret、token endpoint、galaxy-library API 全部公开),用纯 Python httpx 实现,不引入二进制依赖


三、最终采取的方案

核心思路:全程国内直连,不需要代理、不需要 root、不需要逆向。

┌─────────────────────────────────────────┐
│  AI Agent (Claude Desktop / OpenCode 等)  │  ← 负责调用 LLM、生成推荐
└──────────────────┬──────────────────────┘
                   │ MCP Tool Call (stdio)
                   ▼
┌─────────────────────────────────────────┐
│       AIPickMyGame MCP Server            │  ← 只做数据:不需要 LLM API Key
│                                          │
│  1. 认证同步  Epic/GOG/Steam/Galaxy 多平台 │
│  2. 元数据    Steam Store(中文,直连)    │
│  3. 数据处理  筛选 / 统计 / 格式化         │
└─────────────────────────────────────────┘

关键决策:

  1. 认证与同步:四条路线按需选用 —— Epic 用 Legendary,GOG 复刻 Heroic 的 gogdl OAuth2,Steam 用官方 Web API(含游玩时长),还能借 GOG Galaxy 聚合库一次拿全平台。均国内直连,登录走官方/社区辅助页,不硬编码平台参数。各路线的取舍详见 第五章对比表

  2. 元数据主源换成 Steam Store —— Steam 商店 API 国内可直连,且 appdetails 接口能返回简体中文的类型、描述、截图、封面、评分。地理感知降级链:

    • 国内:Steam → RAWG(需代理)→ IGDB

    • 海外:RAWG → Steam → IGDB

  3. MCP 只做数据,不调 LLM —— LLM 调用交给 AI Agent,本服务无需配置任何模型 Key,纯本地、可审计、保护隐私。


四、达到的效果

  • 同步快:Legendary 直连,493 款 Epic 游戏几秒同步,不再超时失败。

  • 多平台:Epic(Legendary)、GOG(Galaxy OAuth2)、Steam(Web API,含游玩时长),还能借 GOG Galaxy 聚合库一键拉取全平台(Steam/Epic/Uplay/Xbox/Origin)。

  • 中文元数据:Steam Store 返回简体中文类型/描述/截图/封面/评分。

  • 无需代理/root:全程国内直连。

  • AI 推荐:自然语言「周末想玩个轻松的 Roguelike」即可得到基于本地游戏库的精准推荐。

补全效果示例(真实数据):


截图展示

以下是单平台与跨平台推荐的实际效果:

单平台同步与推荐

多平台同步与推荐


⚠️ 已知限制:Steam Store 有 IP 级限流,补全大量游戏时请分批进行(enrich_metadatabatch_size 参数,建议 10~15 一批)。少数游戏因 Steam 已下架或 Epic 独占而匹配不到,属正常。


五、各同步方法对比(该选哪个)

四种同步方式各有取舍,按你的需求选:

方法

命令

拿到什么

需要的凭证/前提

游玩时长

优点

缺点

Epic

sync_library("epic")

Epic 全部游戏

浏览器登录一次(authorizationCode)

复用 Legendary,直连快(493 款几秒);登录稳定

仅 Epic

GOG

sync_library("gog")

GOG 自家游戏

浏览器登录一次(OAuth2)

平台独立、数据干净;纯 httpx 无二进制依赖

仅 GOG 自家(不含聚合的其他平台)

Steam

sync_library("steam")

Steam 全部拥有的游戏

申请 Web API Key + SteamID + Profile 公开

唯一能拿游玩时长;自带 appid,封面直连 CDN;不依赖第三方

要手动申请 Key;Profile 必须公开

Galaxy 聚合

sync_library("galaxy")

你在 GOG Galaxy 绑定的全平台游戏(Steam/Epic/Uplay/Xbox/Origin…)

仅需 GOG 登录

一个登录拿全平台,连 Uplay/Xbox/Origin 都白捡(469 款实测)

依赖你在 GOG Galaxy 里的实际绑定;无时长;与单平台同步数据重叠

怎么选:

  • 只玩 Epic / 只玩 GOG → 用对应的单平台同步,最干净。

  • 重度 Steam 用户、想按「玩得多」推荐 → 用 steam,游玩时长会进推荐摘要。

  • 多平台党、嫌一个个登录麻烦 → 用 galaxy,登录一次 GOG 拿全部(前提是你平时用 GOG Galaxy 管理各平台)。

  • 既要全平台又要 Steam 时长galaxy + steam 各跑一次,按 platform 字段各取所需。

元数据补全(enrich_metadata)对所有平台通用,统一走 Steam Store 中文方案,与同步方式无关。


六、如何使用

1. 前置要求

  • Python 3.10+

  • 已安装 legendary-gl(随依赖一起安装)

2. 安装

git clone https://github.com/yourusername/AIPickMyGame-MCP.git
cd AIPickMyGame-MCP
pip install -r requirements.txt

3. 在 AI Agent 中配置

本服务使用 stdio 传输协议,通过进程间通信与 AI Agent 交互,不暴露网络端口。

Claude Desktop —— 编辑 claude_desktop_config.json

{
  "mcpServers": {
    "AIPickMyGame": {
      "command": "python",
      "args": ["-m", "mcp_server.main"],
      "cwd": "/path/to/AIPickMyGame-MCP",
      "env": { "PYTHONIOENCODING": "utf-8" }
    }
  }
}

OpenCode —— 编辑 %USERPROFILE%\.config\opencode\opencode.json

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "AIPickMyGame": {
      "type": "local",
      "command": ["E:/minconda/python.exe", "-m", "mcp_server.main"],
      "cwd": "d:/AI Coding/xuanyou/AIPickMyGame-MCP",
      "enabled": true,
      "environment": { "PYTHONIOENCODING": "utf-8" }
    }
  }
}

Windows 注意事项

  • 必须使用 Python 的完整绝对路径(如 E:/minconda/python.exe),避免 Windows Store 的 0 字节 python.exe 存根导致 EFTYPE 错误。

  • 必须设置 PYTHONIOENCODING=utf-8,否则中文/emoji 会触发 UnicodeEncodeError

  • 路径建议用 / 避免转义。

  • OpenCode 用顶级 "mcp" 键(非 "mcpServers")、command 为数组、环境变量字段名为 "environment",修改后需完全重启

4. 首次配置 Epic 账号

在 AI Agent 中按顺序操作:

  1. setup_epic_account() —— 已认证则返回账号信息;未认证则打开浏览器到 legendary.gl/epiclogin

  2. 在浏览器中登录 Epic,页面会显示一段 JSON,复制其中的 authorizationCode

  3. complete_epic_auth("粘贴的 code") —— 完成认证。

  4. sync_library("epic") —— 同步游戏库到本地。

  5. enrich_metadata("epic", batch_size=15) —— 补全元数据(多次调用直到全部完成)。

5. 配置 GOG 账号(可选)

GOG 流程与 Epic 类似:

  1. setup_gog_account() —— 已认证则返回账号信息;未认证则打开浏览器到 GOG 登录页。

  2. 在浏览器中登录 GOG,登录成功后页面会跳转到 embed.gog.com/on_login_success?code=...

  3. 复制浏览器地址栏的完整 URL(或其中 code= 后的值)。

  4. complete_gog_auth("粘贴的 URL 或 code") —— 完成认证(工具会自动从 URL 提取 code)。

  5. sync_library("gog") —— 同步 GOG 游戏库。

  6. enrich_metadata("gog", batch_size=15) —— 补全元数据(与 Epic 共用 Steam 中文方案)。

GOG 登录页不会像 Epic 那样把 code 显示在页面上,code 藏在跳转后的地址栏 URL 里,直接复制整个 URL 最省事。

6. 配置 Steam 账号(可选)

Steam 同步用官方 Web API,能拿到全部拥有的游戏 + 游玩时长(时长对推荐很有用):

  1. https://steamcommunity.com/dev/apikey 申请 Web API Key(域名随便填 localhost)。

  2. 查到你的 SteamID64(17 位数字,可在 https://steamid.io 查)。

  3. 把 Steam 个人资料的『游戏详情』隐私设为公开(否则拉不到库)。

  4. setup_steam_account(api_key, steam_id) —— 写入配置。

  5. sync_library("steam") —— 同步游戏库(含游玩时长)。

  6. enrich_metadata("steam", batch_size=15) —— 补全中文元数据。

Steam 游戏自带 appid,封面直接用官方 CDN 拼接,无需额外请求;游玩时长会出现在 smart_recommend 的摘要里,方便 AI 按「你玩得多的类型」推荐。

7. 一键聚合全平台游戏库(galaxy,可选)

如果你在 GOG Galaxy 里绑定过 Steam / Epic / Uplay / Xbox / Origin 等平台,可以只登录一个 GOG 账号,一次性拉取全平台游戏库:

  1. 先完成上面的 GOG 认证(setup_gog_account + complete_gog_auth)。

  2. sync_library("galaxy") —— 通过 GOG Galaxy 聚合库拉取所有已绑定平台的游戏,platform 字段标记每款游戏的真实来源(gog/steam/epic/uplay/...)。

  3. enrich_metadata("galaxy", batch_size=15) —— 同样用 Steam 中文方案补全。

说明:聚合库依赖你在 GOG Galaxy 客户端里实际绑定的平台,能拉到多少取决于你绑了哪些。它与单独的 sync_library("epic")/"gog" 数据会有重叠,按需选用——想要「一个入口看全部」用 galaxy,想要「平台独立、数据干净」用各自的平台同步。

8. 元数据配置(可选)

编辑 config/config.jsonmetadata 字段:

{
  "metadata": {
    "provider": "steam",
    "steam_language": "schinese",
    "steam_country": "CN",
    "api_key": "你的 RAWG_API_KEY(海外用户可选)",
    "igdb_client_id": "",
    "igdb_client_secret": ""
  }
}

国内用户保持默认即可(Steam 直连中文)。海外用户可在 rawg.io/apidocs 免费注册 RAWG Key(每月 2 万次)。

9. 日常使用

直接和 AI Agent 对话:

用户: "周末想玩个轻松点的 Roguelike"
AI:   → smart_recommend("epic", "轻松的 Roguelike")
      → 基于你的本地游戏库分析
      → 返回带推荐理由的游戏卡片

跨平台推荐——告诉 AI「在所有平台里帮我挑」,它会合并 Epic/Steam/GOG 三个库,并标注每款游戏在哪些平台拥有:

用户: "我所有平台里,推荐个买了还没玩的"
AI:   → smart_recommend("all", "买了还没玩的")
      → 合并 epic/steam/gog 全库,每行带 [平台] 标注
      → ◆ exact:确定同款(如 PAYDAY 2 在 epic/steam 都有),直接告诉你「这游戏 X/Y 平台都有,自选版本」
      → ◇ loose:疑似同款(如 BioShock 2 Remastered vs BioShock 2),由 AI 判断是否同款;不确定就如实列出两个版本让你选

跨平台同款识别采用「程序初筛 + Agent 复判」:程序只把可能相同的游戏分组并标注置信度(exact/loose),最终是否同款、如何向用户呈现交给能理解语义的 AI 判断,不确定的情况会明确告知用户而非悄悄合并。

七、工具列表

工具

参数

说明

setup_epic_account()

检查 Legendary 认证状态,未认证时打开浏览器引导登录

complete_epic_auth(code)

authorization_code: str

使用 authorizationCode 完成 Epic 认证

setup_gog_account()

检查 GOG 认证状态,未认证时打开浏览器引导登录

complete_gog_auth(code)

authorization_code: str

使用登录跳转 URL 或 code 完成 GOG 认证

setup_steam_account(api_key, steam_id)

api_key: str, steam_id: str

配置 Steam Web API 凭证(写入 config)

sync_library(platform, force)

platform="epic", force=false

同步游戏库到本地(epic→Legendary,gog→Galaxy API,steam→Web API,galaxy→全平台聚合库)

enrich_metadata(platform, batch_size)

platform="epic", batch_size=50

补全游戏元数据(评分/类型/描述/截图),支持分批

get_user_library(platform)

platform="epic"

获取已同步的游戏库数据

list_games(platform, genre, search)

可选过滤参数

列出和筛选游戏

format_games_for_llm(platform, query, max_games)

格式化参数

将游戏数据格式化为 LLM Prompt

smart_recommend(platform, query, max_desc_len)

推荐参数

返回全库紧凑摘要(名称|类型|评分|年份|标签|简介,Steam 库额外带游玩时长)。platform="all" 进入跨平台模式:合并 epic/steam/gog,标注每款游戏所属平台,并对「疑似同款」做程序初筛(◆exact 确定同款 / ◇loose 疑似需 Agent 复判),供 LLM 深度分析


八、项目结构

AIPickMyGame-MCP/
├── mcp_server/              # MCP Server 核心
│   ├── main.py              # FastMCP 入口,定义所有工具
│   ├── config.py            # 配置管理(Pydantic)
│   ├── auth/                # 认证(Epic→Legendary,GOG→OAuth2)
│   ├── sync/                # 游戏库同步(legendary / gog / steam / galaxy 聚合)
│   ├── metadata/            # 元数据补全(Steam 主源 + RAWG/IGDB 降级)
│   ├── recommend/           # 游戏库数据处理(筛选/统计/格式化)
│   └── storage/             # Token 与游戏库缓存
├── browser-extension/       # 浏览器扩展(备用数据提取方案)
├── config/                  # 配置文件和 Token 存储
└── requirements.txt         # Python 依赖

数据流

认证 → 同步 → 补全 → 推荐
 │      │      │      │
 │      │      │      └─ smart_recommend: 全库摘要(含游玩时长) → AI Agent 用 LLM 分析
 │      │      └─ enrich_metadata: Steam(中文) → RAWG → IGDB 降级(全平台通用)
 │      └─ sync_library: epic/gog/steam/galaxy 四选一 → 本地 JSON
 └─ setup_*_account: Epic/GOG 浏览器登录,Steam 填 Key

九、架构说明与 FAQ

MCP Server 不调用 LLM。 它只负责数据读取与处理,把结构化游戏库交给 AI Agent,由 Agent 调自己的 LLM 生成推荐。因此本服务无需配置任何模型 API Key

问题

解答

Token 存在哪里?

JSON 文件,config/tokens/ 目录。用文件而非系统密钥链,是因为 Epic 的 refresh token 可能超过 Windows Credential Manager 的 512 字节限制

认证失败怎么办?

删除 config/tokens/epic_token.json 或运行 legendary auth --delete,重新执行 setup_epic_account()

需要 LLM API Key 吗?

不需要,LLM 调用由 AI Agent 负责

如何切换 Epic 账号?

legendary auth --delete 注销后重新认证

Steam 拉不到游戏?

确认 ① api_key 正确 ② SteamID64 正确 ③ 个人资料『游戏详情』已设为公开(三者缺一不可)

Steam Key 申请失败?

账号需有一定消费记录/绑定手机令牌才能申请;实在拿不到可改用 sync_library("galaxy") 借 GOG 间接拿 Steam 库(但没有游玩时长)

API Key 会泄露吗?

Key 和 token 都存在 config/config.jsonconfig/tokens/,已被 .gitignore 排除,不会提交到仓库

元数据补全很慢/失败?

Steam 有 IP 级限流,请减小 batch_size 分批补全;确认未被系统代理干扰(本服务已对 Steam 强制直连)

推荐结果都是英文名?

游戏库标题多为英文(Epic/Steam/GOG 数据源本身不给中文标题,约 95% 为英文)。smart_recommend 会在返回数据里带一段给 Agent 的指令:呈现推荐时若确知中文译名就用括号附在英文标题后(如 Vampire Survivors(吸血鬼幸存者)),不确定的保持原标题、不编造。是否标注中文由 Agent 的 LLM 决定

重新同步会丢已补的元数据吗?

不会。sync_library 每次从平台 API 拉最新游戏列表后,会按 app_name 回填本地旧库中已补全的字段(评分/类型/描述/标签/_meta_source 等),元数据不丢失。enrich_metadata 也是增量:带 _meta_source(steam/rawg/igdb)且已有类型+描述的游戏会被跳过,只补未完成的。元数据随库 JSON(~/Games/{platform}_library.json)一起持久化,无独立缓存文件


开发

pytest                  # 运行测试
python verify_setup.py  # 验证项目结构

许可证

MIT License — 详见 LICENSE 文件。

Copyright (c) 2026 Hsia97

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    An MCP server that exposes your Steam, Epic Games Store, and IGDB game data as tools, enabling game library queries, install status checks, and metadata enrichment.
    12
    2
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Let your agent control your steam client. e.g. "pick a strategy game from my library and launch it"
    17
    36 npm
    1
    MIT