psn-mcp 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Timothy Peterson
3
+ Copyright (c) 2026 TMRP
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,8 +1,13 @@
1
1
  # psn-mcp
2
2
 
3
- An [MCP](https://modelcontextprotocol.io) (Model Context Protocol) server for interfacing with the PlayStation Network. Lets MCP clients like Claude look up PSN profiles, friends, online presence, trophies, and play history.
3
+ An [MCP](https://modelcontextprotocol.io) (Model Context Protocol) server for
4
+ interfacing with the PlayStation Network. Lets MCP clients like Claude look up
5
+ PSN profiles, friends, online presence, trophies, and play history.
4
6
 
5
- The PSN API layer is written from scratch in TypeScript on Node's built-in `fetch` — no PSN client dependencies. It authenticates the same way the official PlayStation mobile app does and talks directly to Sony's `m.np.playstation.com` API.
7
+ The PSN API layer is written from scratch in TypeScript on Node's built-in
8
+ `fetch` — no PSN client dependencies. It authenticates the same way the official
9
+ PlayStation mobile app does and talks directly to Sony's `m.np.playstation.com`
10
+ API.
6
11
 
7
12
  ## Requirements
8
13
 
@@ -15,13 +20,18 @@ The PSN API layer is written from scratch in TypeScript on Node's built-in `fetc
15
20
  2. In the same browser, open <https://ca.account.sony.com/api/v1/ssocookie>.
16
21
  3. Copy the 64-character `npsso` value from the JSON response.
17
22
 
18
- The server exchanges the NPSSO for an OAuth access token on first use and refreshes it automatically. NPSSO tokens expire after about two months; when tools start failing with an auth error, fetch a fresh one.
23
+ The server exchanges the NPSSO for an OAuth access token on first use and
24
+ refreshes it automatically. NPSSO tokens expire after about two months; when
25
+ tools start failing with an auth error, fetch a fresh one.
19
26
 
20
- > **Note:** this uses your personal account session. What you can see (other users' friends, presence, play history) is governed by normal PSN privacy settings.
27
+ > **Note:** this uses your personal account session. What you can see (other
28
+ > users' friends, presence, play history) is governed by normal PSN privacy
29
+ > settings.
21
30
 
22
31
  ## Usage with an MCP client
23
32
 
24
- No installation needed — run it with `npx`. Add to your client's MCP configuration (e.g. `claude_desktop_config.json`):
33
+ No installation needed — run it with `npx`. Add to your client's MCP
34
+ configuration (e.g. `claude_desktop_config.json`):
25
35
 
26
36
  ```json
27
37
  {
@@ -45,21 +55,33 @@ claude mcp add psn --env PSN_NPSSO=<your npsso token> -- npx -y psn-mcp
45
55
 
46
56
  ## Tools
47
57
 
48
- | Tool | Description |
49
- | --- | --- |
50
- | `psn_get_profile` | Profile for a user: online id, about-me, avatars, PS Plus status |
51
- | `psn_search_players` | Search PSN players by name; returns online ids and account ids |
52
- | `psn_get_friends` | A user's friends list, resolved to profiles |
53
- | `psn_get_presence` | Online status, current platform, and the game being played |
54
- | `psn_get_trophy_summary` | Trophy level, tier, and total trophy counts |
55
- | `psn_get_trophy_titles` | Games with trophy progress, most recently played first |
56
- | `psn_get_title_trophies` | Full trophy list defined for a game (names, types, groups) |
58
+ | Tool | Description |
59
+ | ------------------------- | ------------------------------------------------------------------ |
60
+ | `psn_get_profile` | Profile for a user: online id, about-me, avatars, PS Plus status |
61
+ | `psn_search_players` | Search PSN players by name; returns online ids and account ids |
62
+ | `psn_get_friends` | A user's friends list, resolved to profiles |
63
+ | `psn_get_presence` | Online status, current platform, and the game being played |
64
+ | `psn_get_trophy_summary` | Trophy level, tier, and total trophy counts |
65
+ | `psn_get_trophy_titles` | Games with trophy progress, most recently played first |
66
+ | `psn_get_title_trophies` | Full trophy list defined for a game (names, types, groups) |
57
67
  | `psn_get_earned_trophies` | Which trophies a user earned in a game, with timestamps and rarity |
58
- | `psn_get_played_games` | Played PS4/PS5 games with play counts and durations |
68
+ | `psn_get_played_games` | Played PS4/PS5 games with play counts and durations |
69
+ | `psn_get_store_deals` | Games on sale, with prices, discounts, and (optional) star ratings |
70
+ | `psn_get_store_product` | Store product details: price, discount, and community star rating |
71
+ | `psn_search_store` | Search the store catalog by name, with current prices |
59
72
 
60
- Every user-scoped tool accepts `"me"` (the authenticated account), a PSN online id (username), or a numeric account id — online ids are resolved automatically.
73
+ Every user-scoped tool accepts `"me"` (the authenticated account), a PSN online
74
+ id (username), or a numeric account id — online ids are resolved automatically.
61
75
 
62
- For PS5 titles pass `npServiceName: "trophy2"`; for PS4 and earlier use `"trophy"`. `psn_get_trophy_titles` reports the right value per game.
76
+ For PS5 titles pass `npServiceName: "trophy2"`; for PS4 and earlier use
77
+ `"trophy"`. `psn_get_trophy_titles` reports the right value per game.
78
+
79
+ The three `store` tools browse the public PlayStation Store and need **no PSN
80
+ account**. They power prompts like _"give me the top 10 games currently on sale
81
+ based on review score"_ — call `psn_get_store_deals` with `includeRatings: true`
82
+ and rank by `starRating.averageRating`. Set `PSN_STORE_LOCALE` (e.g. `en-gb`,
83
+ `de-de`, `ja-jp`) to change the store region and currency; the default is
84
+ `en-us`.
63
85
 
64
86
  ## Architecture
65
87
 
@@ -71,11 +93,22 @@ src/
71
93
  auth.ts NPSSO -> OAuth code -> access token exchange, auto-refresh
72
94
  http.ts Authenticated JSON client for m.np.playstation.com
73
95
  api.ts Typed endpoint wrappers (profiles, trophies, games, search)
96
+ store.ts Public store catalog: deals, search, prices, star ratings
74
97
  types.ts PSN API response types
75
98
  ```
76
99
 
77
- Authentication is lazy: the server starts and lists tools without credentials; the token exchange happens on the first tool call. Access tokens are refreshed ahead of expiry, falling back to a full NPSSO re-exchange if the refresh token has expired.
100
+ The store module works differently from the account API: the store's GraphQL
101
+ endpoint only accepts Sony's whitelisted persisted queries, so it instead reads
102
+ the Apollo state and star-rating payloads that the store server-renders into
103
+ every page's `__NEXT_DATA__` blob. This needs no authentication but is
104
+ inherently coupled to the store's page structure.
105
+
106
+ Authentication is lazy: the server starts and lists tools without credentials;
107
+ the token exchange happens on the first tool call. Access tokens are refreshed
108
+ ahead of expiry, falling back to a full NPSSO re-exchange if the refresh token
109
+ has expired.
78
110
 
79
111
  ## Disclaimer
80
112
 
81
- This project uses undocumented PSN endpoints and is not affiliated with or endorsed by Sony Interactive Entertainment. Use at your own risk.
113
+ This project uses undocumented PSN endpoints and is not affiliated with or
114
+ endorsed by Sony Interactive Entertainment. Use at your own risk.
package/dist/index.js CHANGED
@@ -4,6 +4,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
4
4
  import { TokenManager } from "./psn/auth.js";
5
5
  import { PsnHttpClient } from "./psn/http.js";
6
6
  import { PsnApi } from "./psn/api.js";
7
+ import { PsnStore } from "./psn/store.js";
7
8
  import { registerTools } from "./tools.js";
8
9
  async function main() {
9
10
  const npsso = process.env.PSN_NPSSO ?? "";
@@ -16,8 +17,10 @@ async function main() {
16
17
  // Auth is lazy: the token exchange happens on the first tool call, so the
17
18
  // server starts (and lists tools) even before credentials are configured.
18
19
  const psn = new PsnApi(new PsnHttpClient(new TokenManager(npsso || "unset")));
20
+ // Store browsing is public web data; no PSN account needed.
21
+ const store = new PsnStore(process.env.PSN_STORE_LOCALE ?? "en-us");
19
22
  const server = new McpServer({ name: "psn-mcp", version: "0.1.0" });
20
- registerTools(server, psn);
23
+ registerTools(server, psn, store);
21
24
  await server.connect(new StdioServerTransport());
22
25
  console.error("psn-mcp server running on stdio");
23
26
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,qEAAqE;QACrE,OAAO,CAAC,KAAK,CACX,2EAA2E;YACzE,mEAAmE;YACnE,8CAA8C,CACjD,CAAC;IACJ,CAAC;IAED,0EAA0E;IAC1E,0EAA0E;IAC1E,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,aAAa,CAAC,IAAI,YAAY,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IAE9E,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACpE,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE3B,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;AACnD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,qEAAqE;QACrE,OAAO,CAAC,KAAK,CACX,2EAA2E;YACzE,mEAAmE;YACnE,8CAA8C,CACjD,CAAC;IACJ,CAAC;IAED,0EAA0E;IAC1E,0EAA0E;IAC1E,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,aAAa,CAAC,IAAI,YAAY,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9E,4DAA4D;IAC5D,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,CAAC;IAEpE,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACpE,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAElC,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;AACnD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/psn/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/psn/api.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/psn/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/psn/auth.ts"],"names":[],"mappings":"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"}
package/dist/psn/http.js CHANGED
@@ -27,7 +27,9 @@ export class PsnHttpClient {
27
27
  headers: {
28
28
  Authorization: `Bearer ${accessToken}`,
29
29
  "Accept-Language": "en-US",
30
- ...(options.body !== undefined ? { "Content-Type": "application/json" } : {}),
30
+ ...(options.body !== undefined
31
+ ? { "Content-Type": "application/json" }
32
+ : {}),
31
33
  ...options.headers,
32
34
  },
33
35
  body: options.body !== undefined ? JSON.stringify(options.body) : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/psn/http.ts"],"names":[],"mappings":"AAEA,MAAM,QAAQ,GAAG,kCAAkC,CAAC;AAEpD,MAAM,OAAO,WAAY,SAAQ,KAAK;IAGlB;IACA;IAHlB,YACE,OAAe,EACC,MAAc,EACd,IAAc;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAAU;QAG9B,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAYD,kEAAkE;AAClE,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;IAAG,CAAC;IAErD,KAAK,CAAC,OAAO,CAAI,IAAY,EAAE,UAA0B,EAAE;QACzD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAEvD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC;QAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;YAC/D,IAAI,KAAK,KAAK,SAAS;gBAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;YAC/B,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,WAAW,EAAE;gBACtC,iBAAiB,EAAE,OAAO;gBAC1B,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,GAAG,OAAO,CAAC,OAAO;aACnB;YACD,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC5E,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,IAAa,CAAC;YAClB,IAAI,OAAO,GAAG,sBAAsB,IAAI,qBAAqB,GAAG,CAAC,MAAM,EAAE,CAAC;YAC1E,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAI,IAAyC,CAAC,KAAK,CAAC;gBAC7D,IAAI,GAAG,EAAE,OAAO;oBAAE,OAAO,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,iDAAiD;YACnD,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,OAAO;oBACL,qFAAqF,CAAC;YAC1F,CAAC;YACD,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;QAED,6CAA6C;QAC7C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAM,CAAC;IAC7C,CAAC;CACF"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/psn/http.ts"],"names":[],"mappings":"AAEA,MAAM,QAAQ,GAAG,kCAAkC,CAAC;AAEpD,MAAM,OAAO,WAAY,SAAQ,KAAK;IAGlB;IACA;IAHlB,YACE,OAAe,EACC,MAAc,EACd,IAAc;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAAU;QAG9B,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAYD,kEAAkE;AAClE,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;IAAG,CAAC;IAErD,KAAK,CAAC,OAAO,CAAI,IAAY,EAAE,UAA0B,EAAE;QACzD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAEvD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC;QAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;YAC/D,IAAI,KAAK,KAAK,SAAS;gBAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;YAC/B,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,WAAW,EAAE;gBACtC,iBAAiB,EAAE,OAAO;gBAC1B,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS;oBAC5B,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBACxC,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,OAAO,CAAC,OAAO;aACnB;YACD,IAAI,EACF,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SACxE,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,IAAa,CAAC;YAClB,IAAI,OAAO,GAAG,sBAAsB,IAAI,qBAAqB,GAAG,CAAC,MAAM,EAAE,CAAC;YAC1E,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAI,IAAyC,CAAC,KAAK,CAAC;gBAC7D,IAAI,GAAG,EAAE,OAAO;oBAAE,OAAO,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,iDAAiD;YACnD,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,OAAO;oBACL,qFAAqF,CAAC;YAC1F,CAAC;YACD,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;QAED,6CAA6C;QAC7C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAM,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * PlayStation Store catalog access (deals, search, product details).
3
+ *
4
+ * The store's GraphQL API only accepts whitelisted persisted queries, so
5
+ * instead of chasing query hashes this module reads the same data from the
6
+ * server-rendered store pages: every page embeds its Apollo state (products,
7
+ * prices, discounts) and micro-frontend payloads (star ratings) in a
8
+ * __NEXT_DATA__ JSON blob. No authentication is required - this is the
9
+ * public web store.
10
+ */
11
+ /** The store's evergreen "All deals" category. */
12
+ export declare const ALL_DEALS_CATEGORY_ID = "3f772501-f6f8-49b7-abac-874a88ca4897";
13
+ export declare class PsnStoreError extends Error {
14
+ readonly status?: number | undefined;
15
+ constructor(message: string, status?: number | undefined);
16
+ }
17
+ export interface StorePrice {
18
+ basePrice?: string;
19
+ discountedPrice?: string;
20
+ discountText?: string;
21
+ isFree?: boolean;
22
+ isTiedToSubscription?: boolean;
23
+ }
24
+ export interface StoreItem {
25
+ productId: string;
26
+ name: string;
27
+ type?: string;
28
+ platforms?: string[];
29
+ price?: StorePrice;
30
+ imageUrl?: string;
31
+ }
32
+ export interface StarRating {
33
+ averageRating: number;
34
+ totalRatingsCount: number;
35
+ ratingsDistribution?: Array<{
36
+ rating: number;
37
+ percentage: string;
38
+ }>;
39
+ }
40
+ export interface CategoryGridPage {
41
+ categoryId: string;
42
+ categoryName?: string;
43
+ page: number;
44
+ pageSize: number;
45
+ totalCount?: number;
46
+ items: StoreItem[];
47
+ }
48
+ export interface StoreProduct extends StoreItem {
49
+ starRating?: StarRating;
50
+ conceptId?: string;
51
+ url: string;
52
+ }
53
+ export declare class PsnStore {
54
+ private readonly locale;
55
+ constructor(locale?: string);
56
+ private fetchNextData;
57
+ private toStoreItem;
58
+ /** One page (24 items) of a store category grid, e.g. the "All deals" category. */
59
+ getCategoryGrid(categoryId: string, page?: number): Promise<CategoryGridPage>;
60
+ /** Product details including price and the community star rating. */
61
+ getProduct(productId: string): Promise<StoreProduct>;
62
+ /**
63
+ * Star ratings are rendered by the "star-rating" micro-frontend, whose
64
+ * Apollo cache is embedded in the page as an inner JSON script tag.
65
+ */
66
+ private extractStarRating;
67
+ /** Search the store catalog (games, add-ons, bundles) by name. */
68
+ search(term: string): Promise<StoreItem[]>;
69
+ /**
70
+ * A page of deals, optionally enriched with each product's star rating
71
+ * (one extra page fetch per product, done concurrently).
72
+ */
73
+ getDeals(page?: number, includeRatings?: boolean, categoryId?: string): Promise<CategoryGridPage & {
74
+ items: Array<StoreItem & {
75
+ starRating?: StarRating;
76
+ }>;
77
+ }>;
78
+ }
@@ -0,0 +1,188 @@
1
+ /**
2
+ * PlayStation Store catalog access (deals, search, product details).
3
+ *
4
+ * The store's GraphQL API only accepts whitelisted persisted queries, so
5
+ * instead of chasing query hashes this module reads the same data from the
6
+ * server-rendered store pages: every page embeds its Apollo state (products,
7
+ * prices, discounts) and micro-frontend payloads (star ratings) in a
8
+ * __NEXT_DATA__ JSON blob. No authentication is required - this is the
9
+ * public web store.
10
+ */
11
+ const STORE_BASE = "https://store.playstation.com";
12
+ /** The store's evergreen "All deals" category. */
13
+ export const ALL_DEALS_CATEGORY_ID = "3f772501-f6f8-49b7-abac-874a88ca4897";
14
+ const PAGE_SIZE = 24; // fixed by the store's category grid
15
+ export class PsnStoreError extends Error {
16
+ status;
17
+ constructor(message, status) {
18
+ super(message);
19
+ this.status = status;
20
+ this.name = "PsnStoreError";
21
+ }
22
+ }
23
+ export class PsnStore {
24
+ locale;
25
+ constructor(locale = "en-us") {
26
+ this.locale = locale;
27
+ }
28
+ async fetchNextData(path) {
29
+ const url = `${STORE_BASE}/${this.locale}${path}`;
30
+ const res = await fetch(url, {
31
+ headers: {
32
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36",
33
+ "Accept-Language": "en-US,en;q=0.9",
34
+ },
35
+ redirect: "follow",
36
+ signal: AbortSignal.timeout(30_000),
37
+ });
38
+ if (!res.ok) {
39
+ throw new PsnStoreError(`PlayStation Store request to ${url} failed with HTTP ${res.status}`, res.status);
40
+ }
41
+ const html = await res.text();
42
+ const match = html.match(/<script id="__NEXT_DATA__" type="application\/json">(.*?)<\/script>/s);
43
+ if (!match) {
44
+ throw new PsnStoreError(`Could not find embedded page data at ${url}; the store layout may have changed.`);
45
+ }
46
+ const data = JSON.parse(match[1]);
47
+ const title = html.match(/<title>([^<]*)<\/title>/)?.[1];
48
+ return {
49
+ apollo: data.props?.apolloState ?? {},
50
+ pageProps: data.props?.pageProps ?? {},
51
+ title,
52
+ };
53
+ }
54
+ toStoreItem(entity) {
55
+ const price = entity.price;
56
+ const media = entity.media;
57
+ const image = media?.find((m) => m.type === "IMAGE" && m.role === "MASTER") ??
58
+ media?.find((m) => m.type === "IMAGE");
59
+ return {
60
+ productId: String(entity.id ?? ""),
61
+ name: String(entity.name ?? ""),
62
+ type: (entity.localizedStoreDisplayClassification ??
63
+ entity.storeDisplayClassification),
64
+ platforms: entity.platforms,
65
+ price: price && {
66
+ basePrice: price.basePrice,
67
+ discountedPrice: price.discountedPrice,
68
+ discountText: price.discountText,
69
+ isFree: price.isFree,
70
+ isTiedToSubscription: price.isTiedToSubscription,
71
+ },
72
+ imageUrl: image?.url,
73
+ };
74
+ }
75
+ /** One page (24 items) of a store category grid, e.g. the "All deals" category. */
76
+ async getCategoryGrid(categoryId, page = 1) {
77
+ const { apollo, title } = await this.fetchNextData(`/category/${encodeURIComponent(categoryId)}/${page}`);
78
+ const grid = Object.entries(apollo).find(([key]) => key.startsWith("CategoryGrid:"))?.[1];
79
+ if (!grid) {
80
+ throw new PsnStoreError(`No category grid found for category ${categoryId} (page ${page}). ` +
81
+ "The category id may be invalid or the page out of range.");
82
+ }
83
+ // The grid lists products as Apollo refs; resolve them in grid order.
84
+ const refs = grid.products ?? [];
85
+ const items = refs
86
+ .map((ref) => "__ref" in ref && typeof ref.__ref === "string"
87
+ ? apollo[ref.__ref]
88
+ : ref)
89
+ .filter((p) => Boolean(p && p.id))
90
+ .map((p) => this.toStoreItem(p));
91
+ const pageInfo = grid.pageInfo;
92
+ return {
93
+ categoryId,
94
+ categoryName: title?.split("|")[0]?.trim(),
95
+ page,
96
+ pageSize: PAGE_SIZE,
97
+ totalCount: pageInfo?.totalCount,
98
+ items,
99
+ };
100
+ }
101
+ /** Product details including price and the community star rating. */
102
+ async getProduct(productId) {
103
+ const { apollo, pageProps } = await this.fetchNextData(`/product/${encodeURIComponent(productId)}`);
104
+ const entity = apollo[`Product:${productId}`] ??
105
+ Object.entries(apollo).find(([key, value]) => key.startsWith("Product:") && value.__typename === "Product")?.[1];
106
+ if (!entity) {
107
+ throw new PsnStoreError(`Product ${productId} not found on the PlayStation Store.`);
108
+ }
109
+ return {
110
+ ...this.toStoreItem(entity),
111
+ starRating: this.extractStarRating(pageProps, productId),
112
+ url: `${STORE_BASE}/${this.locale}/product/${productId}`,
113
+ };
114
+ }
115
+ /**
116
+ * Star ratings are rendered by the "star-rating" micro-frontend, whose
117
+ * Apollo cache is embedded in the page as an inner JSON script tag.
118
+ */
119
+ extractStarRating(pageProps, productId) {
120
+ const batarangs = pageProps.batarangs;
121
+ const text = batarangs?.["star-rating"]?.text;
122
+ if (!text)
123
+ return undefined;
124
+ const inner = text.match(/<script[^>]*>(.*)<\/script>/s)?.[1];
125
+ if (!inner)
126
+ return undefined;
127
+ try {
128
+ const payload = JSON.parse(inner);
129
+ const cached = payload.cache?.[`Product:${productId}`] ??
130
+ Object.values(payload.cache ?? {}).find((v) => v.__typename === "Product" && v.starRating);
131
+ const rating = cached?.starRating;
132
+ if (rating?.averageRating === undefined)
133
+ return undefined;
134
+ return {
135
+ averageRating: rating.averageRating,
136
+ totalRatingsCount: rating.totalRatingsCount ?? 0,
137
+ ratingsDistribution: rating.ratingsDistribution?.map(({ rating: r, percentage }) => ({
138
+ rating: r,
139
+ percentage,
140
+ })),
141
+ };
142
+ }
143
+ catch {
144
+ return undefined;
145
+ }
146
+ }
147
+ /** Search the store catalog (games, add-ons, bundles) by name. */
148
+ async search(term) {
149
+ const { apollo } = await this.fetchNextData(`/search/${encodeURIComponent(term)}`);
150
+ return Object.entries(apollo)
151
+ .filter(([key, value]) => key.startsWith("Product:") &&
152
+ value.__typename === "Product" &&
153
+ value.name)
154
+ .map(([, value]) => this.toStoreItem(value));
155
+ }
156
+ /**
157
+ * A page of deals, optionally enriched with each product's star rating
158
+ * (one extra page fetch per product, done concurrently).
159
+ */
160
+ async getDeals(page = 1, includeRatings = false, categoryId = ALL_DEALS_CATEGORY_ID) {
161
+ const grid = await this.getCategoryGrid(categoryId, page);
162
+ if (!includeRatings)
163
+ return grid;
164
+ const items = await mapWithConcurrency(grid.items, 6, async (item) => {
165
+ try {
166
+ const product = await this.getProduct(item.productId);
167
+ return { ...item, starRating: product.starRating };
168
+ }
169
+ catch {
170
+ return item; // rating unavailable; keep the deal itself
171
+ }
172
+ });
173
+ return { ...grid, items };
174
+ }
175
+ }
176
+ async function mapWithConcurrency(inputs, concurrency, fn) {
177
+ const results = new Array(inputs.length);
178
+ let next = 0;
179
+ const workers = Array.from({ length: Math.min(concurrency, inputs.length) }, async () => {
180
+ while (next < inputs.length) {
181
+ const index = next++;
182
+ results[index] = await fn(inputs[index]);
183
+ }
184
+ });
185
+ await Promise.all(workers);
186
+ return results;
187
+ }
188
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/psn/store.ts"],"names":[],"mappings":"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"}
package/dist/tools.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import type { PsnApi } from "./psn/api.js";
3
- export declare function registerTools(server: McpServer, psn: PsnApi): void;
3
+ import { type PsnStore } from "./psn/store.js";
4
+ export declare function registerTools(server: McpServer, psn: PsnApi, store: PsnStore): void;
package/dist/tools.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ import { ALL_DEALS_CATEGORY_ID } from "./psn/store.js";
2
3
  const userParam = z
3
4
  .string()
4
5
  .describe('PSN user: "me" for the authenticated account, a PSN online id (username), or a numeric account id.');
@@ -7,7 +8,9 @@ const npServiceNameParam = z
7
8
  .describe('Trophy service: "trophy2" for PS5/PS VR2 titles, "trophy" for PS4 and earlier. ' +
8
9
  "Use the npServiceName reported by psn_get_trophy_titles.");
9
10
  function jsonResult(data) {
10
- return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
11
+ return {
12
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
13
+ };
11
14
  }
12
15
  function errorResult(error) {
13
16
  const message = error instanceof Error ? error.message : String(error);
@@ -24,7 +27,7 @@ function handle(fn) {
24
27
  }
25
28
  };
26
29
  }
27
- export function registerTools(server, psn) {
30
+ export function registerTools(server, psn, store) {
28
31
  server.registerTool("psn_get_profile", {
29
32
  title: "Get PSN profile",
30
33
  description: "Get a PlayStation Network user's profile: online id, about-me, avatars, " +
@@ -37,7 +40,13 @@ export function registerTools(server, psn) {
37
40
  "account ids, and avatars. Useful for finding a user's account id.",
38
41
  inputSchema: {
39
42
  query: z.string().describe("Name or online id to search for."),
40
- limit: z.number().int().min(1).max(50).default(20).describe("Max results."),
43
+ limit: z
44
+ .number()
45
+ .int()
46
+ .min(1)
47
+ .max(50)
48
+ .default(20)
49
+ .describe("Max results."),
41
50
  },
42
51
  }, handle(async ({ query, limit }) => {
43
52
  const res = await psn.searchPlayers(query, limit);
@@ -59,8 +68,19 @@ export function registerTools(server, psn) {
59
68
  "own are only visible if that user's privacy settings allow it.",
60
69
  inputSchema: {
61
70
  user: userParam.default("me"),
62
- limit: z.number().int().min(1).max(500).default(50).describe("Max friends to return."),
63
- offset: z.number().int().min(0).default(0).describe("Pagination offset."),
71
+ limit: z
72
+ .number()
73
+ .int()
74
+ .min(1)
75
+ .max(500)
76
+ .default(50)
77
+ .describe("Max friends to return."),
78
+ offset: z
79
+ .number()
80
+ .int()
81
+ .min(0)
82
+ .default(0)
83
+ .describe("Pagination offset."),
64
84
  },
65
85
  }, handle(async ({ user, limit, offset }) => {
66
86
  const accountId = await psn.resolveAccountId(user);
@@ -69,7 +89,11 @@ export function registerTools(server, psn) {
69
89
  const profiles = await Promise.all(friends.friends.map(async (id) => {
70
90
  try {
71
91
  const profile = await psn.getProfile(id);
72
- return { accountId: id, onlineId: profile.onlineId, isPlus: profile.isPlus };
92
+ return {
93
+ accountId: id,
94
+ onlineId: profile.onlineId,
95
+ isPlus: profile.isPlus,
96
+ };
73
97
  }
74
98
  catch {
75
99
  return { accountId: id };
@@ -100,8 +124,19 @@ export function registerTools(server, psn) {
100
124
  "npCommunicationId and npServiceName for use with the trophy detail tools.",
101
125
  inputSchema: {
102
126
  user: userParam.default("me"),
103
- limit: z.number().int().min(1).max(800).default(50).describe("Max titles to return."),
104
- offset: z.number().int().min(0).default(0).describe("Pagination offset."),
127
+ limit: z
128
+ .number()
129
+ .int()
130
+ .min(1)
131
+ .max(800)
132
+ .default(50)
133
+ .describe("Max titles to return."),
134
+ offset: z
135
+ .number()
136
+ .int()
137
+ .min(0)
138
+ .default(0)
139
+ .describe("Pagination offset."),
105
140
  },
106
141
  }, handle(async ({ user, limit, offset }) => psn.getTrophyTitles(await psn.resolveAccountId(user), limit, offset)));
107
142
  server.registerTool("psn_get_title_trophies", {
@@ -136,16 +171,70 @@ export function registerTools(server, psn) {
136
171
  limit: z.number().int().min(1).max(500).default(200),
137
172
  offset: z.number().int().min(0).default(0),
138
173
  },
139
- }, handle(async ({ user, npCommunicationId, npServiceName, trophyGroupId, limit, offset }) => psn.getEarnedTrophies(await psn.resolveAccountId(user), npCommunicationId, npServiceName, trophyGroupId, limit, offset)));
174
+ }, handle(async ({ user, npCommunicationId, npServiceName, trophyGroupId, limit, offset, }) => psn.getEarnedTrophies(await psn.resolveAccountId(user), npCommunicationId, npServiceName, trophyGroupId, limit, offset)));
140
175
  server.registerTool("psn_get_played_games", {
141
176
  title: "Get played games",
142
177
  description: "List the PS4/PS5 games a user has played, with play counts, first/last " +
143
178
  "played dates, and total play duration. Subject to the user's privacy settings.",
144
179
  inputSchema: {
145
180
  user: userParam.default("me"),
146
- limit: z.number().int().min(1).max(200).default(50).describe("Max games to return."),
147
- offset: z.number().int().min(0).default(0).describe("Pagination offset."),
181
+ limit: z
182
+ .number()
183
+ .int()
184
+ .min(1)
185
+ .max(200)
186
+ .default(50)
187
+ .describe("Max games to return."),
188
+ offset: z
189
+ .number()
190
+ .int()
191
+ .min(0)
192
+ .default(0)
193
+ .describe("Pagination offset."),
148
194
  },
149
195
  }, handle(async ({ user, limit, offset }) => psn.getPlayedGames(await psn.resolveAccountId(user), limit, offset)));
196
+ // ---- PlayStation Store (no PSN account required) -----------------------
197
+ server.registerTool("psn_get_store_deals", {
198
+ title: "Get PlayStation Store deals",
199
+ description: "List games currently on sale on the PlayStation Store, with base price, " +
200
+ "sale price, and discount percentage. Set includeRatings to also fetch each " +
201
+ "game's community star rating (0-5) and rating count - useful for ranking " +
202
+ "deals by review score. Returns 24 items per page; pass page to paginate. " +
203
+ "Store region comes from the PSN_STORE_LOCALE env var (default en-us).",
204
+ inputSchema: {
205
+ page: z
206
+ .number()
207
+ .int()
208
+ .min(1)
209
+ .default(1)
210
+ .describe("Grid page (24 deals per page)."),
211
+ includeRatings: z
212
+ .boolean()
213
+ .default(false)
214
+ .describe("Also fetch each product's star rating (slower: one extra fetch per item)."),
215
+ categoryId: z
216
+ .string()
217
+ .default(ALL_DEALS_CATEGORY_ID)
218
+ .describe('Store category to browse; defaults to the "All deals" category.'),
219
+ },
220
+ }, handle(({ page, includeRatings, categoryId }) => store.getDeals(page, includeRatings, categoryId)));
221
+ server.registerTool("psn_get_store_product", {
222
+ title: "Get PlayStation Store product",
223
+ description: "Get a store product's details: current price, discount, platforms, and " +
224
+ "community star rating with rating count and distribution. Product ids look " +
225
+ 'like "UP0006-PPSA27360_00-26STANDARDBUNDLE" and come from psn_get_store_deals ' +
226
+ "or psn_search_store.",
227
+ inputSchema: {
228
+ productId: z.string().describe("PlayStation Store product id."),
229
+ },
230
+ }, handle(({ productId }) => store.getProduct(productId)));
231
+ server.registerTool("psn_search_store", {
232
+ title: "Search the PlayStation Store",
233
+ description: "Search the PlayStation Store catalog for games, bundles, and add-ons by " +
234
+ "name. Returns product ids, current prices, and any active discounts.",
235
+ inputSchema: {
236
+ query: z.string().describe("Game or product name to search for."),
237
+ },
238
+ }, handle(({ query }) => store.search(query)));
150
239
  }
151
240
  //# sourceMappingURL=tools.js.map
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,SAAS,GAAG,CAAC;KAChB,MAAM,EAAE;KACR,QAAQ,CACP,oGAAoG,CACrG,CAAC;AAEJ,MAAM,kBAAkB,GAAG,CAAC;KACzB,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;KAC3B,QAAQ,CACP,iFAAiF;IAC/E,0DAA0D,CAC7D,CAAC;AAEJ,SAAS,UAAU,CAAC,IAAa;IAC/B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACvF,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAChF,CAAC;AAED,oFAAoF;AACpF,SAAS,MAAM,CAAI,EAAiC;IAClD,OAAO,KAAK,EAAE,IAAO,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,OAAO,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,GAAW;IAC1D,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,0EAA0E;YAC1E,+CAA+C;QACjD,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;KACjC,EACD,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAC7E,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,+EAA+E;YAC/E,mEAAmE;QACrE,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;YAC9D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;SAC5E;KACF,EACD,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QAChC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC;QACtD,OAAO,OAAO;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;aAC5B,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACX,QAAQ,EAAE,CAAE,CAAC,QAAQ;YACrB,SAAS,EAAE,CAAE,CAAC,SAAS;YACvB,gBAAgB,EAAE,CAAE,CAAC,gBAAgB,IAAI,SAAS;YAClD,SAAS,EAAE,CAAE,CAAC,SAAS;YACvB,QAAQ,EAAE,CAAE,CAAC,QAAQ;SACtB,CAAC,CAAC,CAAC;IACR,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,+EAA+E;YAC/E,gEAAgE;QAClE,WAAW,EAAE;YACX,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;YAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;YACtF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;SAC1E;KACF,EACD,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;QACvC,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC/D,2EAA2E;QAC3E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YAC/B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBACzC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YAC/E,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QACF,OAAO;YACL,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,OAAO,EAAE,QAAQ;SAClB,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,wEAAwE;YACxE,iFAAiF;QACnF,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;KAC/C,EACD,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CACnF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,4EAA4E;YAC5E,sDAAsD;QACxD,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;KAC/C,EACD,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CACnF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,yEAAyE;YACzE,wEAAwE;YACxE,2EAA2E;QAC7E,WAAW,EAAE;YACX,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;YAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACrF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;SAC1E;KACF,EACD,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CACvC,GAAG,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CACrE,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EACT,2EAA2E;YAC3E,8EAA8E;QAChF,WAAW,EAAE;YACX,iBAAiB,EAAE,CAAC;iBACjB,MAAM,EAAE;iBACR,QAAQ,CAAC,qCAAqC,CAAC;YAClD,aAAa,EAAE,kBAAkB;YACjC,aAAa,EAAE,CAAC;iBACb,MAAM,EAAE;iBACR,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,yEAAyE,CAAC;YACtF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;YACpD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;SAC3C;KACF,EACD,MAAM,CAAC,CAAC,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAC5E,GAAG,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,CACrF,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,yBAAyB,EACzB;QACE,KAAK,EAAE,yCAAyC;QAChD,WAAW,EACT,4EAA4E;YAC5E,+EAA+E;YAC/E,sEAAsE;QACxE,WAAW,EAAE;YACX,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;YAC7B,iBAAiB,EAAE,CAAC;iBACjB,MAAM,EAAE;iBACR,QAAQ,CAAC,qCAAqC,CAAC;YAClD,aAAa,EAAE,kBAAkB;YACjC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;YACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;YACpD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;SAC3C;KACF,EACD,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CACxF,GAAG,CAAC,iBAAiB,CACnB,MAAM,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAChC,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,KAAK,EACL,MAAM,CACP,CACF,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,yEAAyE;YACzE,gFAAgF;QAClF,WAAW,EAAE;YACX,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;YAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACpF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;SAC1E;KACF,EACD,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CACvC,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CACpE,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,25 +1,27 @@
1
1
  {
2
2
  "name": "psn-mcp",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "MCP server for interfacing with the PlayStation Network",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/tmrp/psn-mcp.git"
10
+ },
11
+ "homepage": "https://github.com/tmrp/psn-mcp#readme",
12
+ "bugs": "https://github.com/tmrp/psn-mcp/issues",
7
13
  "bin": {
8
14
  "psn-mcp": "dist/index.js"
9
15
  },
10
16
  "main": "dist/index.js",
11
17
  "files": [
12
- "dist"
18
+ "dist",
19
+ "package.json",
20
+ "LICENSE",
21
+ "README.md"
13
22
  ],
14
- "engines": {
15
- "node": ">=18.0.0"
16
- },
17
- "scripts": {
18
- "build": "tsc",
19
- "prepublishOnly": "tsc",
20
- "dev": "tsx src/index.ts",
21
- "start": "node dist/index.js",
22
- "typecheck": "tsc --noEmit"
23
+ "publishConfig": {
24
+ "provenance": true
23
25
  },
24
26
  "keywords": [
25
27
  "mcp",
@@ -33,8 +35,26 @@
33
35
  "zod": "^3.24.0"
34
36
  },
35
37
  "devDependencies": {
36
- "@types/node": "^22.0.0",
38
+ "@changesets/changelog-github": "^0.7.0",
39
+ "@changesets/cli": "^2.31.0",
40
+ "@types/node": "^22.20.1",
41
+ "prettier": "^3.5.0",
37
42
  "tsx": "^4.19.0",
38
43
  "typescript": "^5.7.0"
44
+ },
45
+ "engines": {
46
+ "node": ">=24.18.0"
47
+ },
48
+ "scripts": {
49
+ "build": "tsc",
50
+ "changeset": "changeset",
51
+ "dev": "tsx src/index.ts",
52
+ "start": "node dist/index.js",
53
+ "lint": "prettier --check .",
54
+ "lint:fix": "prettier --write .",
55
+ "test": "node --import tsx --test tests/*.test.ts",
56
+ "typecheck": "tsc --noEmit",
57
+ "version:packages": "changeset version && pnpm install --lockfile-only && prettier --write \"**/CHANGELOG.md\"",
58
+ "release": "changeset publish"
39
59
  }
40
- }
60
+ }