mcp-metacritic 1.2.1 → 2.0.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/CHANGELOG.md ADDED
@@ -0,0 +1,137 @@
1
+ # Changelog
2
+
3
+ ## 2.0.1
4
+
5
+ - **Every tool is documented, with its arguments and what its answer carries.**
6
+ The README is written for a person deciding whether to install and for a
7
+ program installing on its own, and a test holds both halves to what the server
8
+ registers.
9
+ - **The privacy policy travels in the package.** It states the hosts contacted,
10
+ what a request carries, what is held and for how long.
11
+ - **The manifest names every tool the server registers**, which a host reads
12
+ before installing anything.
13
+
14
+ ## 2.0.0
15
+
16
+ - **This server now needs node 24 or later.** Node 20 reached its end of
17
+ support on 2026-04-30 and node 22 is no longer what this code is built and
18
+ typed against. That is what makes this a major version: an install on an
19
+ older node is refused rather than left to fail somewhere later.
20
+ - **Every refusal of an argument opens with `invalid_input`.** A value outside
21
+ its bounds, of the wrong type, or outside the set an argument reads used to
22
+ come back in the validator's own words, with no code to branch on.
23
+ - **A container image is published for each version**, on ghcr, for amd64 and
24
+ arm64. The readme carries the configuration that runs it.
25
+ - The published package carries its changelog, and the entry point it declares
26
+ for the package root now publishes its types.
27
+
28
+ ## 1.2.1
29
+
30
+ - The README carries the same badge row as every server here: npm, CI, the
31
+ licence, the MCP registry entry, the Glama score, and one-click installs for
32
+ Cursor and VS Code. Each install link encodes this package. npm serves the
33
+ README frozen at publish time, so a release is what puts it there.
34
+
35
+ ## 1.2.0
36
+
37
+ - Refuse an argument no tool declares, instead of reading it and dropping it.
38
+ Every tool's published schema already marked `additionalProperties: false`,
39
+ but the server accepted an argument outside that schema and silently
40
+ ignored it, so a caller who mistyped a name got a confident answer computed
41
+ on the defaults rather than on what they asked for. Every tool now refuses
42
+ such a call under the `invalid_input` code, names the argument, and offers
43
+ the declared name when one is close: `search_titles` called with `limt`
44
+ points to `limit`, and `get_title` called with `chars` points to
45
+ `max_chars`.
46
+
47
+ ## 1.1.2
48
+
49
+ - Stop reporting an entry Metacritic has not scored as an entry scored zero.
50
+ The listing routes write 0 where the detail route writes null, so a search for
51
+ Angel's Egg came back with "0/100" for a film that holds three positive
52
+ reviews and no Metascore. A score of 0 is now read as the absence it stands
53
+ for, in search rows, in browse rows and in the score breakdown, and the same
54
+ applies to a runtime of 0 minutes on an entry that has not opened.
55
+
56
+ ## 1.1.1
57
+
58
+ - Stop published text from producing a line shaped like one this server writes.
59
+ The text block ends with lines opening "Note:" and "Source:", and anyone who
60
+ publishes on the site can put those same words at the start of a line in a
61
+ title or a description, where a reader has no way to tell the two apart. Such
62
+ a line is indented in the text block. The structured output carries the text
63
+ exactly as published, as it did.
64
+
65
+ ## 1.1.0
66
+
67
+ - Ship a `.mcpb` bundle on every release, so the server can be installed by
68
+ opening a file rather than by having npm and a client configuration. The
69
+ dependencies are compiled into a single file, which makes the bundle 164 kB
70
+ and five files instead of 3 MB and two thousand: a bundle is unpacked, not
71
+ resolved, so a copy of `node_modules` would only be dead weight. The npm build
72
+ still keeps its dependencies external, and the two builds are separate
73
+ configurations for that reason.
74
+ - Declare the bundle in `server.json`, with the hash the registry requires
75
+ computed from the released file at publish time rather than committed as a
76
+ value that goes stale on every build.
77
+
78
+ ## 1.0.3
79
+
80
+ Housekeeping, with no change to what any tool returns.
81
+
82
+ - Declare the tool schemas as objects rather than as the raw shape the SDK now
83
+ deprecates. The emitted `tools/list` is byte for byte what it was.
84
+ - Add an icon and a `websiteUrl` to `server.json`, so the registry has something
85
+ to show next to the entry.
86
+
87
+ ## 1.0.2
88
+
89
+ - Carry the notes into the text block of every tool. They are what qualifies an
90
+ answer: that a list was capped, that a score could not be read and is missing
91
+ rather than absent, that streaming offers do not apply to a game, that a
92
+ description continues at a further offset. A client rendering only the text
93
+ read the unqualified answer, so `get_title` on a game showed "Where to watch:
94
+ nothing listed" with nothing to say the section does not apply, and a cut
95
+ description ended with no sign there was more. The notes sit alongside the
96
+ attribution so they survive truncation, and a long run of them is trimmed from
97
+ the tail rather than crowding out the answer.
98
+ - Render `production` in the text block. The section was returned in the
99
+ structured output and nowhere in the text.
100
+
101
+ ## 1.0.1
102
+
103
+ - Build the text block from the same sections as the structured output. It
104
+ printed the genres even when 'basic' had not been requested, contradicting a
105
+ payload that correctly returned none, and it never printed the streaming
106
+ offers at all: a client rendering only text paid an extra request for
107
+ 'where_to_watch' and saw nothing come back. Awards and networks are rendered
108
+ too, and the runtime alongside the genres.
109
+
110
+ ## 1.0.0
111
+
112
+ First stable release. The tool contracts are settled: tool names, argument names
113
+ and the shape of the structured output will not change without a major version.
114
+
115
+ Four tools over Metacritic, with no API key and no account:
116
+
117
+ - `search_titles` finds films, shows and games by title and returns compact rows
118
+ carrying the critic Metascore, so a question about the critical verdict is
119
+ answered in one call.
120
+ - `get_title` reads one entry section by section. A detail response is 46 KB for
121
+ a film, so `basic` and `scores` are the default and everything else costs a
122
+ request only when asked for.
123
+ - `get_reviews` returns individual critic or audience reviews, filtered by
124
+ verdict, each with the publication that ran it and a link to the article.
125
+ - `browse_titles` lists by score, release date or current popularity, which is
126
+ what answers "the best horror films" when there is no title to look up.
127
+
128
+ Two things this release is careful about.
129
+
130
+ The critic score runs to 100 and the audience score to 10. Every score is
131
+ returned with its own `max`, and the tool descriptions say so, because
132
+ averaging the two is the easiest mistake to make with this data.
133
+
134
+ A failure is never reported as an empty result. Metacritic answers with either
135
+ a `data` object or an `errors` array, and this server reads that distinction: a
136
+ missing entry produces an error with a code, and a request that could not be
137
+ made says so rather than claiming Metacritic publishes nothing.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 smeet666
3
+ Copyright (c) 2026 Damien Bouissou
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/PRIVACY.md ADDED
@@ -0,0 +1,154 @@
1
+ # Privacy
2
+
3
+ This server collects nothing about you, and sends nothing to its author.
4
+
5
+ _[Version française](#confidentialité)_
6
+
7
+ ---
8
+
9
+ ## What this server is
10
+
11
+ `mcp-metacritic` is a read-only client for [Metacritic](https://www.metacritic.com). It runs on your
12
+ own machine, as a process your MCP host starts, and it speaks over stdio. It
13
+ listens on no port.
14
+
15
+ It needs no API key and no account, so there is no credential for it to hold and none for it to send.
16
+
17
+ ## What leaves your machine, and where it goes
18
+
19
+ **2 hosts are contacted**, and nothing else.
20
+
21
+ | Host | What is read there |
22
+ | ------------------------ | ------------------ |
23
+ | `www.metacritic.com` | the site's pages |
24
+ | `backend.metacritic.com` | the site's own API |
25
+
26
+ What a request carries:
27
+
28
+ | What | Why it is there |
29
+ | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
30
+ | 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. |
32
+ | Your IP address | Sent by your network to any host you contact, as with any web request. |
33
+
34
+ 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.
35
+
36
+ ## What is kept, and for how long
37
+
38
+ **Answers are held in memory only, and only while the server runs.** The cache is
39
+ a table in the process: it holds what was read so that reading the same page
40
+ twice costs one request instead of two. Closing the server empties it.
41
+
42
+ **Nothing is written to disk.** The server creates no file, no database and no
43
+ log file.
44
+
45
+ ## What is never collected
46
+
47
+ - No analytics, no telemetry, no usage counter.
48
+ - Nothing is sent to the author of this project or to any third party.
49
+ - No account, no profile, no identifier is created for you.
50
+ - Your questions are not stored, forwarded, or used to train anything.
51
+
52
+ ## Logs
53
+
54
+ The server writes diagnostics to **stderr**, where your MCP host decides what
55
+ becomes of them. `MC_LOG_LEVEL` governs how much is written and defaults to `error`. These lines stay on your machine.
56
+
57
+ ## The settings that change any of this
58
+
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. |
64
+
65
+ ## Children
66
+
67
+ This server is a tool for developers and it is not directed at children.
68
+
69
+ ## Changes
70
+
71
+ A change to this policy travels in a release, and the changelog names it.
72
+
73
+ ## Contact
74
+
75
+ Open an issue on [the repository](https://github.com/smeet666/mcp-metacritic/issues). For something exploitable,
76
+ follow [SECURITY.md](./SECURITY.md) instead.
77
+
78
+ ---
79
+
80
+ # Confidentialité
81
+
82
+ Ce serveur ne collecte rien sur vous et n'envoie rien à son auteur.
83
+
84
+ ## Ce qu'est ce serveur
85
+
86
+ `mcp-metacritic` est un client en lecture seule pour [Metacritic](https://www.metacritic.com). Il
87
+ tourne sur votre machine, comme un processus que votre hôte MCP démarre, et il
88
+ parle en stdio. Il n'écoute sur aucun port.
89
+
90
+ Il ne demande ni clé d'API ni compte, donc il ne détient aucun identifiant et n'en envoie aucun.
91
+
92
+ ## Ce qui quitte votre machine, et où cela va
93
+
94
+ **2 hôtes sont joints**, et rien d'autre.
95
+
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 |
100
+
101
+ Ce qu'une requête emporte :
102
+
103
+ | Quoi | Pourquoi |
104
+ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
105
+ | 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. |
107
+ | Votre adresse IP | Transmise par votre réseau à tout hôte que vous joignez, comme pour n'importe quelle requête web. |
108
+
109
+ 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.
110
+
111
+ ## Ce qui est conservé, et combien de temps
112
+
113
+ **Les réponses sont gardées en mémoire seulement, et seulement pendant que le
114
+ serveur tourne.** Le cache est une table dans le processus : il retient ce qui a
115
+ été lu pour que lire deux fois la même page coûte une requête plutôt que deux.
116
+ Fermer le serveur le vide.
117
+
118
+ **Rien n'est écrit sur le disque.** Le serveur ne crée aucun fichier, aucune base
119
+ et aucun journal.
120
+
121
+ ## Ce qui n'est jamais collecté
122
+
123
+ - Aucune analyse d'audience, aucune télémétrie, aucun compteur d'usage.
124
+ - Rien n'est envoyé à l'auteur de ce projet ni à un tiers.
125
+ - Aucun compte, aucun profil, aucun identifiant n'est créé pour vous.
126
+ - Vos questions ne sont ni stockées, ni transmises, ni utilisées pour entraîner
127
+ quoi que ce soit.
128
+
129
+ ## Les journaux
130
+
131
+ Le serveur écrit ses diagnostics sur **stderr**, où votre hôte MCP décide de ce
132
+ qu'ils deviennent. `MC_LOG_LEVEL` règle leur quantité et vaut `error` par défaut. Ces lignes restent sur votre machine.
133
+
134
+ ## Les réglages qui changent tout cela
135
+
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
+
142
+ ## Les enfants
143
+
144
+ Ce serveur est un outil pour développeurs et ne s'adresse pas aux enfants.
145
+
146
+ ## Les évolutions
147
+
148
+ Une modification de cette politique voyage dans une version, et le changelog la
149
+ nomme.
150
+
151
+ ## Contact
152
+
153
+ Ouvrez une issue sur [le dépôt](https://github.com/smeet666/mcp-metacritic/issues). Pour quelque chose
154
+ d'exploitable, suivez plutôt [SECURITY.md](./SECURITY.md).