mcp-recipes 1.3.1 → 3.0.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,59 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.0.0
4
+
5
+ - **`compare_recipes` now answers with up to five versions where it answered
6
+ with two.** A caller rendering the whole of its answer sees more of it, and
7
+ its `differences` list grows with the number of sources. The new optional
8
+ `sources` argument narrows it back to whichever traditions a question is
9
+ actually about, and the tool asks every source when it is left out.
10
+ - **A bare number is no longer read as a Marmiton identifier.** Two of the
11
+ sources address a recipe by digits alone, so `get_recipe` answers `44078`
12
+ with `invalid_input` naming both readings rather than confidently returning
13
+ one site's recipe. Every id `search_recipes` hands back already carries its
14
+ source, so this reaches only a caller who wrote a bare number by hand.
15
+ - **Three sources are added:** Ptitchef and Supertoinette in French, BBC Good
16
+ Food in English, beside Marmiton and the Wikibooks Cookbook. Each is named by
17
+ an id of its own, `ptitchef`, `supertoinette` and `goodfood`, and every tool
18
+ that took a source id takes them.
19
+ - **A recipe a source keeps for its subscribers is named as one.** BBC Good
20
+ Food publishes such a recipe's title, times, rating and nutrition and holds
21
+ back its ingredients and its method. The answer says which parts were held
22
+ back and why, and links the page, rather than reporting a list this server
23
+ failed to read. Asking to rescale one says there is nothing to rescale, in
24
+ place of the sentence about a page that states no servings, which would be
25
+ false: the page states what it serves.
26
+ - **A method published as one block of prose is reported as one**, so a
27
+ paragraph is not read as the first step of several.
28
+ - **A resting time published apart is carried under its own name.** It is in no
29
+ other time in the answer, and it is never added to another source's cooking
30
+ time.
31
+ - **A search every source answered and none holds anything for keeps saying so**
32
+ however many sources report. That sentence separates a wording nothing matched
33
+ from a search that failed, and it used to be dropped once several sources each
34
+ reported holding nothing.
35
+ - A difficulty and a cost are deliberately not carried. Every source writes a
36
+ difficulty in a word of its own and none publishes a scale for it, so it sits
37
+ on no axis two versions could be compared along. A cost is a price in euros on
38
+ one source and a rank inside its own list on another.
39
+ - The privacy policy names the hosts this server actually contacts. A Cookbook
40
+ page is read through `api.wikimedia.org` and only linked as `en.wikibooks.org`,
41
+ which the host table stated the other way round.
42
+
43
+ ## 2.0.0
44
+
45
+ - **This server now needs node 24 or later.** Node 20 reached its end of
46
+ support on 2026-04-30 and node 22 is no longer what this code is built and
47
+ typed against. That is what makes this a major version: an install on an
48
+ older node is refused rather than left to fail somewhere later.
49
+ - **Every refusal of an argument opens with `invalid_input`.** A value outside
50
+ its bounds, of the wrong type, or outside the set an argument reads used to
51
+ come back in the validator's own words, with no code to branch on.
52
+ - **A container image is published for each version**, on ghcr, for amd64 and
53
+ arm64. The readme carries the configuration that runs it.
54
+ - The published package carries its changelog, and the entry point it declares
55
+ for the package root now publishes its types.
56
+
3
57
  All notable changes to this project are documented here. The format follows
4
58
  [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the versions follow
5
59
  [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
package/PRIVACY.md ADDED
@@ -0,0 +1,168 @@
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-recipes` is a read-only client for five recipe sites: [Marmiton](https://www.marmiton.org), the [Wikibooks Cookbook](https://en.wikibooks.org/wiki/Cookbook:Table_of_Contents), [Ptitchef](https://www.ptitchef.com), [BBC Good Food](https://www.bbcgoodfood.com) and [Supertoinette](https://www.supertoinette.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
+ **5 hosts are contacted**, and nothing else.
20
+
21
+ | Host | What is read there |
22
+ | ----------------------- | ------------------------------------------------------------------------------------------------ |
23
+ | `www.marmiton.org` | the site's pages |
24
+ | `api.wikimedia.org` | the Wikimedia gateway that serves the Cookbook's pages |
25
+ | `www.ptitchef.com` | the site's pages |
26
+ | `www.bbcgoodfood.com` | a JSON route the site's own front end uses, for a search; the recipe's page itself, for a recipe |
27
+ | `www.supertoinette.com` | the site's pages |
28
+
29
+ A Cookbook page is linked as `en.wikibooks.org`, which is where a reader opens
30
+ it. That host is never contacted by this server: the pages themselves are read
31
+ through the Wikimedia gateway above.
32
+
33
+ What a request carries:
34
+
35
+ | What | Why it is there |
36
+ | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
37
+ | The question you asked | A search term or an identifier reaches the site as you wrote it. |
38
+ | A `User-Agent` | `mcp-recipes/<version> (+https://github.com/smeet666/mcp-recipes)`, so the site can reach a person about the traffic it receives. |
39
+ | Your IP address | Sent by your network to any host you contact, as with any web request. |
40
+
41
+ Your requests reach the five sites above. What is done with them there is governed by each site's own privacy policy, which this project does not control.
42
+
43
+ ## What is kept, and for how long
44
+
45
+ **Answers are held in memory only, and only while the server runs.** The cache is
46
+ a table in the process: it holds what was read so that reading the same page
47
+ twice costs one request instead of two. Closing the server empties it.
48
+
49
+ **Nothing is written to disk.** The server creates no file, no database and no
50
+ log file.
51
+
52
+ ## What is never collected
53
+
54
+ - No analytics, no telemetry, no usage counter.
55
+ - Nothing is sent to the author of this project or to any third party.
56
+ - No account, no profile, no identifier is created for you.
57
+ - Your questions are not stored, forwarded, or used to train anything.
58
+
59
+ ## Logs
60
+
61
+ The server writes diagnostics to **stderr**, where your MCP host decides what
62
+ becomes of them. `RECIPES_LOG_LEVEL` governs how much is written and defaults to `error`. These lines stay on your machine.
63
+
64
+ ## The settings that change any of this
65
+
66
+ | Variable | What it changes |
67
+ | ---------------------- | ---------------------------------------------------------------------------------------------------------------- |
68
+ | `RECIPES_USER_AGENT` | Adds your own identifier in front of this project's, which stays appended so the site can always reach a person. |
69
+ | `RECIPES_CACHE_TTL_MS` | How long an answer is held in memory. `0` turns the cache off. |
70
+ | `RECIPES_LOG_LEVEL` | How much is written to stderr. |
71
+
72
+ ## Children
73
+
74
+ This server is a tool for developers and it is not directed at children.
75
+
76
+ ## Changes
77
+
78
+ A change to this policy travels in a release, and the changelog names it.
79
+
80
+ ## Contact
81
+
82
+ Open an issue on [the repository](https://github.com/smeet666/mcp-recipes/issues). For something exploitable,
83
+ follow [SECURITY.md](./SECURITY.md) instead.
84
+
85
+ ---
86
+
87
+ # Confidentialité
88
+
89
+ Ce serveur ne collecte rien sur vous et n'envoie rien à son auteur.
90
+
91
+ ## Ce qu'est ce serveur
92
+
93
+ `mcp-recipes` est un client en lecture seule pour cinq sites de recettes : [Marmiton](https://www.marmiton.org), le [Cookbook des Wikibooks](https://en.wikibooks.org/wiki/Cookbook:Table_of_Contents), [Ptitchef](https://www.ptitchef.com), [BBC Good Food](https://www.bbcgoodfood.com) et [Supertoinette](https://www.supertoinette.com). Il
94
+ tourne sur votre machine, comme un processus que votre hôte MCP démarre, et il
95
+ parle en stdio. Il n'écoute sur aucun port.
96
+
97
+ Il ne demande ni clé d'API ni compte, donc il ne détient aucun identifiant et n'en envoie aucun.
98
+
99
+ ## Ce qui quitte votre machine, et où cela va
100
+
101
+ **5 hôtes sont joints**, et rien d'autre.
102
+
103
+ | Hôte | Ce qui y est lu |
104
+ | ----------------------- | ----------------------------------------------------------------------------------------------------------- |
105
+ | `www.marmiton.org` | les pages du site |
106
+ | `api.wikimedia.org` | la passerelle Wikimedia qui sert les pages du Cookbook |
107
+ | `www.ptitchef.com` | les pages du site |
108
+ | `www.bbcgoodfood.com` | une route JSON qu'emploie l'interface du site, pour une recherche ; la page de la recette, pour une recette |
109
+ | `www.supertoinette.com` | les pages du site |
110
+
111
+ Une page du Cookbook est liée sous `en.wikibooks.org`, où un lecteur l'ouvre. Ce
112
+ serveur ne joint jamais cet hôte : les pages elles-mêmes sont lues par la
113
+ passerelle Wikimedia ci-dessus.
114
+
115
+ Ce qu'une requête emporte :
116
+
117
+ | Quoi | Pourquoi |
118
+ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
119
+ | La question posée | Un terme de recherche ou un identifiant atteint le site tel que vous l'avez écrit. |
120
+ | Un `User-Agent` | `mcp-recipes/<version> (+https://github.com/smeet666/mcp-recipes)`, pour que le site puisse joindre une personne au sujet du trafic qu'il reçoit. |
121
+ | Votre adresse IP | Transmise par votre réseau à tout hôte que vous joignez, comme pour n'importe quelle requête web. |
122
+
123
+ Vos requêtes atteignent les cinq sites ci-dessus. Ce qui en est fait là-bas relève de la politique de confidentialité propre à chaque site, que ce projet ne contrôle pas.
124
+
125
+ ## Ce qui est conservé, et combien de temps
126
+
127
+ **Les réponses sont gardées en mémoire seulement, et seulement pendant que le
128
+ serveur tourne.** Le cache est une table dans le processus : il retient ce qui a
129
+ été lu pour que lire deux fois la même page coûte une requête plutôt que deux.
130
+ Fermer le serveur le vide.
131
+
132
+ **Rien n'est écrit sur le disque.** Le serveur ne crée aucun fichier, aucune base
133
+ et aucun journal.
134
+
135
+ ## Ce qui n'est jamais collecté
136
+
137
+ - Aucune analyse d'audience, aucune télémétrie, aucun compteur d'usage.
138
+ - Rien n'est envoyé à l'auteur de ce projet ni à un tiers.
139
+ - Aucun compte, aucun profil, aucun identifiant n'est créé pour vous.
140
+ - Vos questions ne sont ni stockées, ni transmises, ni utilisées pour entraîner
141
+ quoi que ce soit.
142
+
143
+ ## Les journaux
144
+
145
+ Le serveur écrit ses diagnostics sur **stderr**, où votre hôte MCP décide de ce
146
+ qu'ils deviennent. `RECIPES_LOG_LEVEL` règle leur quantité et vaut `error` par défaut. Ces lignes restent sur votre machine.
147
+
148
+ ## Les réglages qui changent tout cela
149
+
150
+ | Variable | Ce qu'elle change |
151
+ | ---------------------- | ------------------------------------------------------------------------------------------------------------------------ |
152
+ | `RECIPES_USER_AGENT` | Ajoute votre identifiant devant celui du projet, qui reste accolé pour que le site puisse toujours joindre une personne. |
153
+ | `RECIPES_CACHE_TTL_MS` | Combien de temps une réponse est gardée en mémoire. `0` éteint le cache. |
154
+ | `RECIPES_LOG_LEVEL` | La quantité écrite sur stderr. |
155
+
156
+ ## Les enfants
157
+
158
+ Ce serveur est un outil pour développeurs et ne s'adresse pas aux enfants.
159
+
160
+ ## Les évolutions
161
+
162
+ Une modification de cette politique voyage dans une version, et le changelog la
163
+ nomme.
164
+
165
+ ## Contact
166
+
167
+ Ouvrez une issue sur [le dépôt](https://github.com/smeet666/mcp-recipes/issues). Pour quelque chose
168
+ d'exploitable, suivez plutôt [SECURITY.md](./SECURITY.md).