Skip to main content
Glama

mcp-ps-store

PlayStation Network 계정의 게임 기록(플레이 시간, 트로피 진행 상황, 구매 라이브러리)을 노출하는 MCP 서버로, AI 어시스턴트가 추측 대신 실제 데이터를 기반으로 게임을 추천할 수 있게 해줍니다.

러시아어 버전: README.ru.md.

소개

PSN에는 공개 API가 없습니다. 이 서버는 PlayStation 모바일 앱에서 사용하는 것과 동일한 내부 API와 통신하며, 브라우저 세션에서 가져온 NPSSO 쿠키로 인증합니다. 모든 요청은 읽기 전용이며, 계정에 아무것도 기록되지 않습니다.

구조는 계층형 아키텍처를 따릅니다: API 레이어(MCP 도구), 코어 레이어(서비스, 리포지토리, DTO), DI 컨테이너, 인프라 레이어로 구성됩니다.

핵심 기술

  • 언어: Python 3.11+

  • 프로토콜: Model Context Protocol (mcp)

  • HTTP 클라이언트: httpx (비동기)

  • DI 컨테이너: dependency-injector

  • 설정: pydantic-settings

  • 의존성 관리: Poetry

  • 테스트: Pytest, pytest-asyncio

Related MCP server: WG-Console-MCP-server

노출되는 기능

도구

설명

psn_taste_profile

핵심 도구: 한 번에 요약 정보 제공 — 시간별 상위 게임, 선호 프랜차이즈, 플레이 스타일 습관(평균 세션 시간, 장시간 집중 비율, 플래티넘 비율), 100%에 가까운 게임, 1시간 후 포기한 게임, 한 번도 실행하지 않은 구매 게임. 추천 질문이 있을 때 여기서 시작하세요.

psn_library

필터 가능한 게임 목록: 제목 검색, 시간/마지막 플레이/트로피 진행률 정렬, 플랫폼/시간/날짜/진행률 필터링.

psn_game_trophies

한 게임의 모든 트로피: 획득 여부, 날짜, 희귀도, 보유 플레이어 비율.

psn_owned_games

이미 구매했거나 PS Plus를 통해 받은 게임 목록(시간 정보 포함 가능) — 이미 보유한 게임이 추천되지 않도록 함.

psn_recently_played

가장 최근에 실행한 게임.

psn_profile

온라인 ID, PS Plus, 트로피 레벨, 평생 트로피 개수.

psn_refresh

응답 캐시 삭제(PSN 응답은 10분간 캐시됨).

그리고 recommend_games 프롬프트 — "내 프로필을 작성하고 게임을 추천해줘" 시나리오를 바로 실행할 수 있으며, "짧은 게임" 또는 "2인 협동" 같은 추가 지시를 선택적으로 줄 수 있습니다.

빠른 시작

Python 3.11+가 필요합니다.

1. 설치

Poetry 사용:

poetry install

또는 일반 virtualenv 사용:

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

토큰은 ~/.mcp-ps-store/tokens.json에 0600 권한으로 저장됩니다.

세션 수명 정보. 액세스 토큰은 1시간, 리프레시 토큰은 10일, NPSSO 자체는 약 2개월 동안 유효합니다. 따라서 NPSSO는 토큰과 함께 저장되며, 리프레시 토큰이 만료되면 서버가 자동으로 재인증합니다. 실제로 psn-login 한 번으로 약 60일 동안 사용할 수 있습니다.

3. 작동 확인

poetry run psn-doctor

계정 이름, 표시되는 게임 수, 시간 기준 상위 5개 게임이 출력됩니다.

클라이언트 연결

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는 로컬 MCP 서버와 stdio로 통신하므로 동일하게 작동합니다. 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는 로컬 프로세스를 실행할 수 없습니다. 사용자 정의 커넥터는 개발자 모드(설정 → 앱 → 고급)에서 추가하며, 공개 HTTPS 엔드포인트여야 하며 SSE 또는 Streamable HTTP를 사용해야 합니다. 따라서 서버를 HTTP 전송으로 전환하고 게시해야 합니다:

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

그런 다음 http://127.0.0.1:8000/mcp를 HTTPS로 노출합니다(OpenAI의 Secure MCP Tunnel, 또는 cloudflared/ngrok 같은 터널 사용). 결과 URL을 사용자 정의 커넥터로 추가하세요.

이렇게 하면 PSN 기록이 URL을 찾는 모든 사람에게 공개됩니다. 서버에는 자체 인증이 없으므로 터널을 인증 뒤에 배치하고, 필요한 동안만 실행하며, 로컬 클라이언트로 충분하다면 Codex CLI를 선호하세요.

설정

모든 설정은 환경 변수 또는 .env 파일에서 읽습니다(.env.example 참조).

변수

기본값

설명

PSN_NPSSO

—

NPSSO 쿠키. psn-login의 대안: 설정하면 서버가 자체 로그인합니다.

PSN_TOKENS_PATH

~/.mcp-ps-store/tokens.json

토큰이 캐시되는 경로.

PSN_CACHE_TTL

600

PSN 응답 재사용 시간(초).

PSN_STORE_LOCALE

en-us

store.playstation.com 링크에 사용되는 로케일.

PSN_REQUEST_TIMEOUT

30

PSN 요청 HTTP 타임아웃(초).

PSN_MCP_TRANSPORT

stdio

stdio, streamable-http 또는 sse.

PSN_MCP_HOST

127.0.0.1

HTTP 전송 바인드 주소.

PSN_MCP_PORT

8000

HTTP 전송 포트.

제한 사항

  • 플레이 시간은 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는 비공식적입니다: 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

Available Tools

7 tools
psn_game_trophiesTrophy detail for one gameA
Read-only

Full trophy list for a single game with earned status, earn dates and rarity. Pass a title (fuzzy match against the account's games) or an exact np_communication_id. Useful for 'what's left to platinum' and for judging how deeply the user engaged with a game.

ParametersJSON Schema
NameRequiredDescriptionDefault
gameNoGame title, matched against the account's library.
limitNo
statusNoWhich trophies to return.all
include_hiddenNo
np_service_nameNoRequired only with a raw np_communication_id.
np_communication_idNoExact trophy set id, e.g. NPWR21434_00.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the read-only/open-world safety profile, and the description adds useful behavioral detail such as fuzzy matching and needing np_service_name only with a raw ID. However, it calls the result 'Full' while the schema defaults limit to 150, and it doesn't disclose hidden-trophy behavior or what happens when no identifier is passed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences deliver output, input modes, and use cases with no filler. The most decision-relevant information appears first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It is strong for a read-only tool with output schema present, but several invocation details are left implicit: 0 required parameters means both identifiers can be omitted, yet no fallback behavior is described, and the default limit of 150 qualifies the 'Full' claim. Those gaps matter for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is moderate (67%), and the description contributes beyond schema by explaining the game-vs-np_communication_id choice and fuzzy matching. It does not add meaning for limit, status, or include_hidden, but those are partially covered by schema defaults and titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (full trophy list for a single game) and the data it returns (earned status, earn dates, rarity), which clearly separates it from sibling tools focused on libraries and profiles. The verb 'Pass' and the title make the operation obvious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states two concrete input routes (fuzzy title match or exact np_communication_id) and gives use cases ('what's left to platinum', engagement depth). It does not explicitly name sibling alternatives or when-not conditions, but the context makes the intended selection clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

psn_libraryPSN game libraryA
Read-only

Filtered, sorted list of games on the account, joining playtime with trophy progress. Use it to answer questions like 'what did I play most in 2024', 'what have I nearly finished', 'what did I drop quickly'. Store page: https://store.playstation.com//concept/.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoOrdering of the result.hours
limitNo
offsetNo
searchNoCase-insensitive substring match on the title.
platformNoKeep only one platform.all
max_hoursNo
min_hoursNo
played_sinceNoISO date; keep games last played on or after it.
only_platinumNo
played_beforeNoISO date; keep games last played before it.
max_trophy_progressNo
min_trophy_progressNo
include_trophy_countsNoAdd per-grade trophy counts to every row.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, and the description is consistent with them (no contradiction). The description adds one useful behavioral detail — the store page URL pattern — but does not disclose edge behaviors such as how unplayed games sort, whether filters combine, or the meaning of 'recently_played' for never-played titles. With annotations covering the safety profile, the added value is modest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a tight two-sentence structure that is front-loaded with the purpose, followed by illustrative examples and a practical store-page URL. Every element earns its place with no filler. Minor deduction for the trailing URL being lower-priority context for tool selection, but it adds real operational value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (13 parameters) and six siblings, the description covers the core purpose and gives usable examples, and the output schema covers return values. But it omits sibling differentiation and edge-case behavior entirely. It is sufficient for a basic call but leaves an agent to guess at how this tool relates to the other five library tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 46%, so the description must compensate. It partially does: 'joining playtime with trophy progress' maps to the playtime filters (min/max_hours, played_since/before) and trophy filters (min/max_trophy_progress, only_platinum), and the examples imply date-range and sort usage. But it never explains the undocumented params (limit, offset, only_platinum) in any detail, and param names carry much of the burden. Adequate but not thorough compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening states a specific verb and resource — 'Filtered, sorted list of games on the account, joining playtime with trophy progress' — which distinguishes it from likely siblings like psn_owned_games (just ownership) and psn_recently_played (just recency). The example questions reinforce the combined playtime+trophy scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The three example questions ('what did I play most in 2024', 'what have I nearly finished', 'what did I drop quickly') give strong implicit context for when to use this tool. However, with six siblings available, it never names alternatives or states when NOT to use this tool (e.g., when psn_owned_games or psn_recently_played would suffice), leaving the selection decision partially to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

psn_owned_gamesPurchased PSN libraryA
Read-only

Games the account has bought or claimed (including PS Plus monthly claims), with hours played where known. Check this before recommending anything so you do not suggest a game the user already owns, and to surface unplayed purchases.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
searchNo
platformNoall
unplayed_onlyNoKeep only games with no recorded playtime.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true, the safety profile is already established by annotations. The description adds useful behavioral context beyond that: the inventory includes PS Plus claims, playtime data is only present 'where known', and the tool is meant to surface unplayed purchases. No contradiction with the annotations is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two tight sentences with no filler. The first sentence front-loads the data scope, and the second sentence explains when and why to use the tool, earning every word.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core use case well and an output schema exists, so return-value details are not needed. However, with five parameters and only 20% schema coverage, the descriptions do not fully explain how to leverage search, platform filtering, or pagination. It also does not contrast with psn_library, which may be a close sibling, leaving some contextual ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20%, so the description needed to compensate for limit, offset, search, and platform, but it does not explain any of those. Only 'unplayed purchases' loosely maps to the unplayed_only parameter. The parameter names are somewhat self-explanatory, which keeps this above a 1.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the resource: games the account has bought or claimed, including PS Plus monthly claims, with hours played where known. It also states the practical purpose: avoid recommending owned games and surface unplayed purchases. It stops short of explicitly distinguishing itself from the sibling psn_library, so it is not a full 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit trigger: 'Check this before recommending anything' and explains why, preventing duplicate game suggestions and highlighting unplayed purchases. It does not name sibling alternatives or state when not to use it, but the guidance is clear enough for an agent to know when to call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

psn_profilePSN account profileB
Read-only

Online ID, PS Plus status, trophy level and lifetime trophy counts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already communicate readOnlyHint=true and openWorldHint=true, so the description is not burdened with stating that this is a safe read operation. It adds a little context by enumerating the returned profile fields, but it does not disclose any additional behavioral traits such as authentication needs, staleness, or relationship to refresh operations. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact phrase with no filler and front-loads the core identity of the tool. It is appropriately terse for a zero-parameter read-only tool, though it reads as a fragment rather than a complete, well-formed sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity — no parameters, simple read-only behavior, and an output schema present — the description is mostly sufficient by listing the main profile fields. It could be more complete by explicitly stating that this is the authenticated user's account profile and by clarifying how it differs from psn_taste_profile, but these are minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and fully covered schema documentation, so the baseline for this dimension is 4. The description has no parameter semantics to add because there are no inputs to explain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource — a PSN account profile — and lists the concrete data fields it exposes (Online ID, PS Plus status, trophy level, lifetime trophy counts). It lacks an explicit verb like 'returns' or 'gets,' and it does not directly distinguish itself from sibling psn_taste_profile, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus psn_taste_profile, psn_library, psn_refresh, or psn_recently_played. The intended use is only implicit from the name and fields; there are no exclusions, alternatives, or context conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

psn_recently_playedRecently playedB
Read-only

The account's most recently launched games, newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds useful context about account scope and sort order, but it does not disclose behavior such as how the limit parameter applies or what happens if the account has no recent activity. This is acceptable but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the core purpose and ordering information. Every word contributes meaning, and there is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool with one optional parameter and an output schema, the description is nearly complete. It states the resource, account scope, and sort order. The only notable omission is any mention of the limit parameter, though the schema fully documents it with defaults and constraints.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needed to compensate by explaining the 'limit' parameter. It does not mention the limit at all. The parameter name and constraints (default 20, min 1, max 50) are somewhat self-explanatory, but the description itself adds no parameter-level meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource: the account's most recently launched games, and even specifies ordering ('newest first'). It does not use an explicit verb like 'list' or 'retrieve', but the meaning is unambiguous. It also distinguishes itself from sibling tools by the recency filter.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool should be used when the agent needs the account's recently played or launched games. However, it does not explicitly state when to use this tool versus alternatives like psn_library or psn_owned_games, nor does it provide any exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

psn_refreshRefresh PSN cacheA
Idempotent

Drops the cached PSN responses so the next call re-reads live data. Use after the user has just played something.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly discloses that the tool invalidates cached data and that subsequent calls will re-read from live sources, which goes beyond the annotations (readOnlyHint=false, idempotentHint=true). This gives the agent a clear mental model of the mutation and its deferred effect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: one sentence explains the operation and its effect, and a second sentence gives the usage trigger. Every word earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless cache-refresh tool with an output schema and clear annotations, the description explains both what happens and when to call it. No important behavioral or usage detail is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema fully covers this with an empty properties object. The description adds no parameter details, but none are needed; the baseline for a parameterless tool is appropriate here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Drops the cached PSN responses'), the resource (PSN cache), and the intended outcome ('the next call re-reads live data'). This distinguishes it from all sibling read tools such as psn_library or psn_profile.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Use after the user has just played something' gives a concrete trigger condition for when to invoke the tool. It does not name exclusions or alternatives, but for a cache-refresh tool this clear contextual cue is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

psn_taste_profilePSN taste profileA
Read-only

One-shot digest of the account's gaming taste: totals, playtime habits, top games by hours, favourite franchises, platinums, games close to completion, games bounced off after a short try, and unplayed purchases. Start here for any recommendation request.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoHow many top-by-hours games to include.
include_backlogNoInclude purchased-but-never-played games.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond the readOnlyHint annotation by specifying that this is a one-shot, consolidated digest covering multiple dimensions of the account's gaming history. It does not detail potential rate limits or freshness caveats, but the read-only nature is already covered by annotations and the description does not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler, front-loading the core purpose and then giving a direct usage directive. Every phrase contributes either to scope, content, or routing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema, readOnlyHint annotation, and clear parameter schema, the description covers account scope, content scope, and intended usage. Nothing essential is missing for an agent to decide to call this tool and understand what it will receive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for both parameters, so the baseline is 3. The description loosely reinforces 'top games by hours' for the top parameter and 'unplayed purchases' for include_backlog, but it adds no new semantic detail beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'One-shot digest of the account's gaming taste' and lists concrete content areas like totals, playtime habits, top games, franchises, and platinums. This clearly distinguishes it from sibling tools such as psn_profile, psn_owned_games, and psn_library by framing it as a consolidated taste summary rather than a single-purpose lookup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The closing instruction, 'Start here for any recommendation request,' gives explicit routing guidance for when to use this tool. It does not enumerate when-not-to-use conditions or name alternative siblings, but the primary usage context is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.1.0
    • First observedpsn_game_trophies
    • First observedpsn_library
    • First observedpsn_owned_games
    • First observedpsn_profile
    • First observedpsn_recently_played
    • First observedpsn_refresh
    • First observedpsn_taste_profile

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation3/5

Most tools are distinct, but psn_taste_profile, psn_library, and psn_owned_games overlap in what they surface: playtime habits, nearly-finished games, dropped games, and unplayed purchases are all claimed by more than one tool. The descriptions somewhat clarify their intents (digest vs. queryable list vs. ownership check), but an agent could easily pick the wrong one for a given user question.

Naming Consistency4/5

All tools share a consistent psn_ prefix and snake_case convention, which makes them recognizable as a family. The primary deviation is that psn_refresh is verb-first while the rest are noun phrases (psn_library, psn_profile, psn_owned_games), but the overall pattern is still predictable.

Tool Count5/5

Seven tools is a well-scoped set for a PSN account insights server. Each tool covers a meaningful slice of the domain—profile, library, owned games, recent activity, trophies, taste digest, and cache refresh—without feeling padded or redundant at the count level.

Completeness4/5

The core domain of account-level PSN data is well covered: profile, catalog, ownership, recency, trophies, and an aggregate taste digest are all present. Minor gaps exist, such as no direct store/game-details lookup or cross-game trophy comparison, but the set supports the stated recommendation and account-insight workflows without major dead ends.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers