mcpField
P
PlayStation Network

PlayStation Network

本地服务
github.com/murzin-ml游戏娱乐29 周前更新

关于 PlayStation Network

PlayStation Network 是一个读取 PSN 游戏历史的 MCP 服务,面向希望根据真实游玩记录获得推荐的玩家。它汇总游玩时长、奖杯和已购游戏,并提供游戏库筛选及游玩习惯分析。

主要功能

  1. 01查看游玩时长与近期游戏
  2. 02筛选和排序游戏库
  3. 03查看游戏奖杯详情
  4. 04列出已购及 PS Plus 游戏
  5. 05汇总游玩习惯与游戏偏好

适用场景

  1. 01根据游玩历史寻找游戏推荐
  2. 02查看某款游戏的奖杯进度
  3. 03避免推荐已拥有的游戏

MCP 相关

该服务向 MCP 客户端提供 PSN 档案、游戏库、奖杯、近期游玩记录及偏好分析工具,并包含游戏推荐提示词。所有请求均为只读。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"murzin-ml-mcp-ps-store": {
"command": "uvx",
"args": [
"mcp-ps-store"
],
"env": {
"PSN_NPSSO": "<PSN_NPSSO>",
"PSN_STORE_LOCALE": "<PSN_STORE_LOCALE>"
}
}
}
}
启动命令uvx mcp-ps-store
需要配置的环境变量
PSN_NPSSO密钥NPSSO cookie from https://ca.account.sony.com/api/v1/ssocookie. Optional: `psn-login` stores it for you.
PSN_STORE_LOCALELocale used when building store.playstation.com links, e.g. en-us.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimcp-ps-store0.1.0

工具

7

收录的工具列表 · 更新于 2 周前

参数类型必填说明
topinteger否要包含多少款按游玩时长排名靠前的游戏。
include_backlogboolean否包含已购买但从未游玩的游戏。

详细介绍

mcp-ps-store

PlayStation Network(PSN)的 MCP 服务:它会公开你自己的游戏历史记录 — 游戏时长、奖杯和已购买的游戏库 — 让 AI 助手可以根据真实数据推荐游戏, 而不是凭空猜测。

Русская версия: README.ru.md.

关于

PSN 没有公开 API。此服务使用 PlayStation 手机应用所用的同一内部 API,并通过从浏览器会话中获取的 NPSSO Cookie 进行身份验证。所有请求都只读取数据;绝不会向账户写入任何内容。

该项目采用分层架构:API 层(MCP 工具)、核心层 (服务、仓库、DTO)、DI 容器和基础设施层。

核心技术
  • 语言: Python 3.11+
  • 协议: Model Context Protocol(mcp)
  • HTTP 客户端: httpx(异步)
  • DI 容器: dependency-injector
  • 设置: pydantic-settings
  • 依赖管理: Poetry
  • 测试: Pytest、pytest-asyncio

提供的功能

工具用途
psn_taste_profile核心工具:生成一份摘要,包含按时长排名的热门游戏、最喜欢的系列、游戏习惯(平均游戏时长、深度游玩占比、白金率)、接近 100% 完成度的游戏、玩一小时后弃玩的游戏,以及购买后从未启动的游戏。任何游戏推荐问题都可以从这里开始。
psn_library可筛选的游戏列表:按标题搜索,按时长/最近游玩/奖杯进度排序,按平台、时长、日期和进度筛选。
psn_game_trophies单款游戏的所有奖杯:已获得与未获得的奖杯、日期、稀有度,以及拥有该奖杯的玩家占比。
psn_owned_games已购买或通过 PS Plus 领取的游戏,以及已知的游戏时长 — 避免推荐已拥有的游戏。
psn_recently_played最近启动过的游戏。
psn_profile在线 ID、PS Plus、奖杯等级和终身奖杯数量。
psn_refresh清除响应缓存(PSN 的响应会缓存 10 分钟)。

此外还有一个 recommend_games 提示词 — 一个现成的“构建我的档案并推荐游戏”场景,可附带“来点短游戏”或“双人合作游戏”等可选要求。

快速开始

需要 Python 3.11+。

1. 安装

使用 Poetry:

poetry install

或者使用普通虚拟环境:

python3.11 -m venv .venv && .venv/bin/pip install -e .
2. 登录 PSN
  1. 在浏览器中登录 https://www.playstation.com。
  2. 打开 https://ca.account.sony.com/api/v1/ssocookie — 页面会返回 {"npsso":"..."}。
  3. 复制 64 个字符的 npsso 值并运行:
poetry run psn-login PASTE_NPSSO_HERE

令牌会以 0600 权限保存在 ~/.mcp-ps-store/tokens.json 中。

关于会话有效期。 访问令牌的有效期为一小时,刷新令牌只有十天,但 NPSSO 本身的有效期约为两个月。因此,NPSSO 会与令牌一起保存;刷新令牌失效后,服务会自动重新进行身份验证。实际使用中,一次 psn-login 大约可持续 60 天。

3. 检查是否正常运行
poetry run psn-doctor

它会显示账户名称、可见游戏数量,以及按时长排名前五的游戏。

连接客户端

Claude Code
claude mcp add ps-store -- /path/to/mcp-ps-store/.venv/bin/python -m app.main
Claude Desktop

在 claude_desktop_config.json 中:

{
  "mcpServers": {
    "ps-store": {
      "command": "/path/to/mcp-ps-store/.venv/bin/python",
      "args": ["-m", "app.main"],
      "cwd": "/path/to/mcp-ps-store"
    }
  }
}
Codex CLI

Codex 通过 stdio 与本地 MCP 服务通信,因此配置方式相同。可以运行 codex mcp add,也可以将以下内容添加到 ~/.codex/config.toml:

[mcp_servers.ps-store]
command = "/path/to/mcp-ps-store/.venv/bin/python"
args = ["-m", "app.main"]
cwd = "/path/to/mcp-ps-store"

在 Codex 会话中使用 /mcp 检查配置。

ChatGPT

ChatGPT 无法启动本地进程。自定义连接器需要在开发者模式下(Settings → Apps → Advanced)添加,并且必须是使用 SSE 或 Streamable HTTP 的公开 HTTPS 端点。因此,必须将服务切换为 HTTP 传输并公开:

PSN_MCP_TRANSPORT=streamable-http PSN_MCP_PORT=8000 poetry run mcp-ps-store

然后通过 OpenAI 的 Secure MCP Tunnel,或 cloudflared/ngrok 等隧道,将 http://127.0.0.1:8000/mcp 暴露为 HTTPS,并将生成的 URL 添加为自定义连接器。

这样会将你的 PSN 历史记录公开给任何找到该 URL 的人。 服务本身没有身份验证,因此请为隧道启用身份验证,只在需要时运行隧道;如果本地客户端可以满足需求,优先使用 Codex CLI。

配置

所有设置均从环境变量或 .env 文件中读取(参见 .env.example)。

变量默认值含义
PSN_NPSSO—NPSSO Cookie。psn-login 的替代方案:设置后,服务会自行登录。
PSN_TOKENS_PATH~/.mcp-ps-store/tokens.json缓存令牌的位置。
PSN_CACHE_TTL600PSN 响应的复用时长,单位为秒。
PSN_STORE_LOCALEen-usstore.playstation.com 链接使用的区域设置。
PSN_REQUEST_TIMEOUT30PSN 请求的 HTTP 超时时间,单位为秒。
PSN_MCP_TRANSPORTstdiostdio、streamable-http 或 sse。
PSN_MCP_HOST127.0.0.1HTTP 传输的绑定地址。
PSN_MCP_PORT8000HTTP 传输的端口。

限制

  • 游玩时间数据仅适用于 PS4 / PS5 / PC 版本。 PSN 仅提供 PS3 和 Vita 游戏的奖杯数据,因此这些游戏会显示为 hours: null。
  • 此处没有 PS Store 目录。 商店完全在客户端运行,其 GraphQL API 只接受持久化查询,而 Sony 每次部署都会轮换查询哈希——要让它持续可用并不现实。推荐候选游戏来自模型自身对游戏的了解,而 psn_owned_games 可阻止它推荐已经购买的游戏。
  • 已购游戏库通过 PSN 的私有 GraphQL API 获取。如果 Sony 更改查询,该工具会停止工作;其他所有功能仍会继续运行,并且摘要会添加 backlog_unavailable 说明。
  • 游玩时间和奖杯按游戏标题合并,因此,如果重发版本与原版共用一组奖杯,数据可能会合并。版本名称、平台后缀和罗马数字会被有意规范化——Alan Wake II 和 Alan Wake 2 会被视为同一款游戏。
  • 此 API 并非官方 API:Sony 可以随时更改它。

项目结构

.
├── app/
│   ├── api/              # MCP layer: tools, prompts, serialisers, tool errors
│   │   ├── games/
│   │   ├── profile/
│   │   └── taste/
│   ├── core/             # Business logic: services, repositories, DTOs
│   │   ├── auth/         # NPSSO -> tokens, refresh, re-login
│   │   ├── games/        # Library, playtime/trophy merge, name normalisation
│   │   ├── profile/      # Account profile and trophy summary
│   │   └── taste/        # Taste digest aggregation
│   ├── di/               # DI containers and providers
│   ├── infra/adapters/   # HTTP client, token storage, TTL cache
│   ├── cli.py            # psn-login, psn-doctor
│   └── main.py           # MCP server entry point
├── settings/             # pydantic-settings configuration
├── tests/
│   ├── core/             # Merge and aggregation tests
│   └── factories/        # Builders for test data
└── pyproject.toml

开发

poetry run pytest        # unit tests; no network and no account needed
poetry run psn-doctor    # live check against the signed-in account

许可证

MIT — 参见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。