mcp-metacritic 2.0.1 → 2.1.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.1.0
4
+
5
+ - **Node.js 24.22.1 or later**, inside the Node.js 24 line. The package, the
6
+ extension manifest and the image all declare it.
7
+ - **zod `^4.6.7`.** Below 4.6.6, zod can exhaust memory while
8
+ validating oversized constrained collections, and the range accepts none of
9
+ those versions.
10
+ - **Dependency floors:** `@modelcontextprotocol/sdk` `^1.32.2`.
11
+
3
12
  ## 2.0.1
4
13
 
5
14
  - **Every tool is documented, with its arguments and what its answer carries.**
package/PRIVACY.md CHANGED
@@ -16,19 +16,21 @@ It needs no API key and no account, so there is no credential for it to hold and
16
16
 
17
17
  ## What leaves your machine, and where it goes
18
18
 
19
- **2 hosts are contacted**, and nothing else.
19
+ **1 host is contacted**, and nothing else.
20
20
 
21
21
  | Host | What is read there |
22
22
  | ------------------------ | ------------------ |
23
- | `www.metacritic.com` | the site's pages |
24
23
  | `backend.metacritic.com` | the site's own API |
25
24
 
25
+ `www.metacritic.com` appears in the links an answer carries, so a reader can open
26
+ the entry on the site. No request is sent there.
27
+
26
28
  What a request carries:
27
29
 
28
30
  | What | Why it is there |
29
31
  | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
30
32
  | The question you asked | A search term or an identifier reaches the site as you wrote it. |
31
- | A `User-Agent` | `mcp-metacritic/<version> (+https://github.com/smeet666/mcp-metacritic)`, so the site can reach a person about the traffic it receives. |
33
+ | A `User-Agent` | `mcp-metacritic v<version> (https://github.com/smeet666/mcp-metacritic)`, so the site can reach a person about the traffic it receives. |
32
34
  | Your IP address | Sent by your network to any host you contact, as with any web request. |
33
35
 
34
36
  Your requests reach Metacritic. What is done with them there is governed by that site's own privacy policy, which this project does not control.
@@ -56,11 +58,12 @@ becomes of them. `MC_LOG_LEVEL` governs how much is written and defaults to `err
56
58
 
57
59
  ## The settings that change any of this
58
60
 
59
- | Variable | What it changes |
60
- | ----------------- | ---------------------------------------------------------------------------------------------------------------- |
61
- | `MC_USER_AGENT` | Adds your own identifier in front of this project's, which stays appended so the site can always reach a person. |
62
- | `MC_CACHE_TTL_MS` | How long an answer is held in memory. `0` turns the cache off. |
63
- | `MC_LOG_LEVEL` | How much is written to stderr. |
61
+ | Variable | What it changes |
62
+ | ------------------------ | ---------------------------------------------------------------------------------------------------------------- |
63
+ | `MC_USER_AGENT` | Adds your own identifier in front of this project's, which stays appended so the site can always reach a person. |
64
+ | `MC_CACHE_TTL_MS` | How long a catalogue answer is held in memory. `0` turns that cache off. |
65
+ | `MC_SCORES_CACHE_TTL_MS` | How long a score or a review is held, which moves as reviews come in and so has a lifetime of its own. |
66
+ | `MC_LOG_LEVEL` | How much is written to stderr. |
64
67
 
65
68
  ## Children
66
69
 
@@ -91,19 +94,21 @@ Il ne demande ni clé d'API ni compte, donc il ne détient aucun identifiant et
91
94
 
92
95
  ## Ce qui quitte votre machine, et où cela va
93
96
 
94
- **2 hôtes sont joints**, et rien d'autre.
97
+ **1 hôte est joint**, et rien d'autre.
98
+
99
+ | Hôte | Ce qui y est lu |
100
+ | ------------------------ | --------------- |
101
+ | `backend.metacritic.com` | l'API du site |
95
102
 
96
- | Hôte | Ce qui y est lu |
97
- | ------------------------ | ----------------- |
98
- | `www.metacritic.com` | les pages du site |
99
- | `backend.metacritic.com` | l'API du site |
103
+ `www.metacritic.com` figure dans les liens que porte une réponse, pour qu'un
104
+ lecteur ouvre la fiche sur le site. Aucune requête n'y est envoyée.
100
105
 
101
106
  Ce qu'une requête emporte :
102
107
 
103
108
  | Quoi | Pourquoi |
104
109
  | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
105
110
  | La question posée | Un terme de recherche ou un identifiant atteint le site tel que vous l'avez écrit. |
106
- | Un `User-Agent` | `mcp-metacritic/<version> (+https://github.com/smeet666/mcp-metacritic)`, pour que le site puisse joindre une personne au sujet du trafic qu'il reçoit. |
111
+ | Un `User-Agent` | `mcp-metacritic v<version> (https://github.com/smeet666/mcp-metacritic)`, pour que le site puisse joindre une personne au sujet du trafic qu'il reçoit. |
107
112
  | Votre adresse IP | Transmise par votre réseau à tout hôte que vous joignez, comme pour n'importe quelle requête web. |
108
113
 
109
114
  Vos requêtes atteignent Metacritic. Ce qui en est fait là-bas relève de la politique de confidentialité de ce site, que ce projet ne contrôle pas.
@@ -133,11 +138,12 @@ qu'ils deviennent. `MC_LOG_LEVEL` règle leur quantité et vaut `error` par déf
133
138
 
134
139
  ## Les réglages qui changent tout cela
135
140
 
136
- | Variable | Ce qu'elle change |
137
- | ----------------- | ------------------------------------------------------------------------------------------------------------------------ |
138
- | `MC_USER_AGENT` | Ajoute votre identifiant devant celui du projet, qui reste accolé pour que le site puisse toujours joindre une personne. |
139
- | `MC_CACHE_TTL_MS` | Combien de temps une réponse est gardée en mémoire. `0` éteint le cache. |
140
- | `MC_LOG_LEVEL` | La quantité écrite sur stderr. |
141
+ | Variable | Ce qu'elle change |
142
+ | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------- |
143
+ | `MC_USER_AGENT` | Ajoute votre identifiant devant celui du projet, qui reste accolé pour que le site puisse toujours joindre une personne. |
144
+ | `MC_CACHE_TTL_MS` | Combien de temps une réponse de catalogue est gardée en mémoire. `0` éteint ce cache. |
145
+ | `MC_SCORES_CACHE_TTL_MS` | Combien de temps une note ou une critique est gardée, ce qui bouge à mesure que les avis arrivent et a donc sa propre durée. |
146
+ | `MC_LOG_LEVEL` | La quantité écrite sur stderr. |
141
147
 
142
148
  ## Les enfants
143
149
 
package/README.md CHANGED
@@ -6,6 +6,7 @@
6
6
  [![MCP Registry](https://img.shields.io/badge/MCP_Registry-listed-6E56CF)](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.smeet666/mcp-metacritic)
7
7
  [![Glama](https://glama.ai/mcp/servers/smeet666/mcp-metacritic/badges/score.svg)](https://glama.ai/mcp/servers/smeet666/mcp-metacritic)
8
8
  [![M8ven](https://m8ven.ai/badge/mcp/smeet666-mcp-metacritic-1yvblv?variant=verified)](https://m8ven.ai/mcp/smeet666-mcp-metacritic-1yvblv)
9
+ [![LobeHub](https://lobehub.com/badge/mcp/smeet666-mcp-metacritic)](https://lobehub.com/mcp/smeet666-mcp-metacritic)
9
10
  [![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=metacritic&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIm1jcC1tZXRhY3JpdGljIl19)
10
11
  [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=metacritic&config=%7B%22name%22%3A%22metacritic%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22mcp-metacritic%22%5D%7D)
11
12
 
@@ -62,7 +63,7 @@ Node 24 or later is required, and no environment variable has to be set.
62
63
  "mcpServers": {
63
64
  "metacritic": {
64
65
  "command": "docker",
65
- "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-metacritic:2.0.1"]
66
+ "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-metacritic:2.1.0"]
66
67
  }
67
68
  }
68
69
  }
@@ -74,7 +75,7 @@ because a TTY rewrites the stream. The container needs outbound HTTPS to
74
75
 
75
76
  ### Bundle, without npm
76
77
 
77
- Download `mcp-metacritic-2.0.1.mcpb` from
78
+ Download `mcp-metacritic-2.1.0.mcpb` from
78
79
  [the latest release](https://github.com/smeet666/mcp-metacritic/releases/latest)
79
80
  and open it. A client that supports MCP bundles installs it on its own, with no
80
81
  npm and no configuration file to edit. The bundle carries its dependencies, so
@@ -115,7 +116,8 @@ Finds films, series and games by title.
115
116
 
116
117
  **In return:** rows carrying `slug` and `kind`, which `get_title` and
117
118
  `get_reviews` take together; `title`; `year`; `release_date`; `rating`, the age
118
- rating as published; `metascore`; `user_score`; and `source_url`. **A score the
119
+ rating as published; `metascore`; `user_score`, which the search route publishes
120
+ for no row and which is null on every one of them; and `source_url`. **A score the
119
121
  site has not computed is `null`, never `0`:** on a scale that starts at zero the
120
122
  two would be indistinguishable, and a title with too few reviews carries none.
121
123
 
@@ -153,8 +155,10 @@ Reads the reviews of one entry.
153
155
  **In return:** `reviews`, each with its `quote` as published, its `score`, the
154
156
  `max` that score is out of, which is 100 for a critic and 10 for a user, and the
155
157
  `publication` that ran it. **Name the publication when quoting a review.**
156
- `total_available` counts the reviews matching the source and the sentiment asked
157
- for, and `next_offset` continues.
158
+ `total_available` counts every review Metacritic holds from that source for the
159
+ entry, whatever `sentiment` was asked for, since the sentiment sorts the sample
160
+ this server received rather than the request that fetched it. `next_offset`
161
+ continues.
158
162
 
159
163
  ### `browse_titles`
160
164
 
@@ -222,7 +226,7 @@ and its errors, and with no protocol attached.
222
226
  import { McClient } from "mcp-metacritic/client";
223
227
 
224
228
  const client = new McClient();
225
- const { data, cached } = await client.getTitle({ slug: "the-matrix", kind: "movie" });
229
+ const { data, cached } = await client.getDetail("movie", "the-matrix");
226
230
  console.log(data.title, data.metascore, cached);
227
231
  ```
228
232
 
@@ -331,7 +335,7 @@ renseigner.
331
335
  "mcpServers": {
332
336
  "metacritic": {
333
337
  "command": "docker",
334
- "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-metacritic:2.0.1"]
338
+ "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-metacritic:2.1.0"]
335
339
  }
336
340
  }
337
341
  }
@@ -344,7 +348,7 @@ port, aucun identifiant.
344
348
 
345
349
  ### Bundle, sans npm
346
350
 
347
- Téléchargez `mcp-metacritic-2.0.1.mcpb` depuis
351
+ Téléchargez `mcp-metacritic-2.1.0.mcpb` depuis
348
352
  [la dernière publication](https://github.com/smeet666/mcp-metacritic/releases/latest)
349
353
  et ouvrez-le. Un client qui gère les bundles MCP l'installe seul, sans npm et
350
354
  sans fichier de configuration à modifier. Le bundle emporte ses dépendances, donc
@@ -385,7 +389,8 @@ Trouve des films, des séries et des jeux par leur titre.
385
389
 
386
390
  **En retour :** des lignes portant `slug` et `kind`, que `get_title` et
387
391
  `get_reviews` reprennent ensemble ; `title` ; `year` ; `release_date` ; `rating`,
388
- la classification par âge telle que publiée ; `metascore` ; `user_score` ; et
392
+ la classification par âge telle que publiée ; `metascore` ; `user_score`, que la
393
+ route de recherche ne publie pour aucune ligne et qui y vaut `null` partout ; et
389
394
  `source_url`. **Une note que le site n'a pas calculée vaut `null`, jamais `0` :**
390
395
  sur une échelle qui commence à zéro les deux seraient indiscernables, et un titre
391
396
  avec trop peu de critiques n'en porte aucune.
@@ -424,9 +429,10 @@ Lit les critiques d'une fiche.
424
429
  **En retour :** `reviews`, chacune avec sa `quote` telle que publiée, son
425
430
  `score`, le `max` sur lequel cette note est donnée, qui vaut 100 pour un critique
426
431
  et 10 pour un utilisateur, et la `publication` qui l'a signée. **Nommez la
427
- publication quand vous citez une critique.** `total_available` compte les
428
- critiques correspondant à la source et à la tonalité demandées, et `next_offset`
429
- poursuit.
432
+ publication quand vous citez une critique.** `total_available` compte toutes les
433
+ critiques que Metacritic tient de cette source pour cette fiche, quelle que soit
434
+ la tonalité demandée, puisque la tonalité trie l'échantillon reçu et non la
435
+ requête qui l'a cherché. `next_offset` poursuit.
430
436
 
431
437
  ### `browse_titles`
432
438
 
@@ -494,7 +500,7 @@ erreurs, sans protocole attaché.
494
500
  import { McClient } from "mcp-metacritic/client";
495
501
 
496
502
  const client = new McClient();
497
- const { data, cached } = await client.getTitle({ slug: "the-matrix", kind: "movie" });
503
+ const { data, cached } = await client.getDetail("movie", "the-matrix");
498
504
  console.log(data.title, data.metascore, cached);
499
505
  ```
500
506