MCP server for the Wikibooks Cookbook. Search recipes, read ingredients and steps, rescale quantities. No API key.
mcp-wikibooks-cookbook
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
The Cookbook is the
recipe collection of the English Wikibooks, a Wikimedia project. Thousands of
recipes are written and maintained there in the open, each with its ingredients,
the equipment it calls for, its steps, the tips and variations its authors added,
and the categories it files itself under: a cuisine, a kind of dish, a main
ingredient. The pages are published under Creative Commons Attribution-ShareAlike
4.0.
This server connects a chat client to that collection. You can search the recipes
by dish or by ingredient, list them by cuisine, kind of dish or main ingredient,
read one with its ingredients rescaled to the number of people at your table, and
rescale any ingredient list of your own. It needs no API key and no account.
_Version française_
---
Install
**One-click install**
**Claude Code**
**Claude Desktop, Cursor, and any client using the standard config format**
Node 24 or later is required, and no environment variable has to be set.
With Docker
-i keeps stdin open, which is where the protocol travels, and -t is left out
because a TTY rewrites the stream. The container needs outbound HTTPS to
api.wikimedia.org, and nothing else: no volume, no port, no credential.
Bundle, without npm
Download mcp-wikibooks-cookbook-2.1.0.mcpb from
the latest release
and open it. A client that supports MCP bundles installs it on its own, with no
npm and no configuration file to edit. The bundle carries its dependencies, so
nothing is fetched at install time.
What you can ask
- "Find me a carbonara recipe in the Cookbook."
- "Read it for six people instead of four."
- "What Thai soups does the collection hold?"
- "Which recipes are built on lentils?"
- "Scale this ingredient list by 2.5 for me."
The ordinary path runs from a search to a reading: a row carries an id, the
page key, and get_recipe takes that key.
Tools
| Tool | What it does |
| ------------------- | -------------------------------------------------------------- |
| search_recipes | Finds recipes by dish or by ingredient. |
| get_recipe | Reads one recipe, rescaled to a number of servings on request. |
| scale_ingredients | Rescales any ingredient list, with no request to the wiki. |
| list_recipes | Lists recipes by cuisine, kind of dish or main ingredient. |
search_recipes
Searches the Cookbook, either across the whole text of its pages or across their
titles alone.
| Argument | Type | Required | What it does |
| -------- | --------------------------------- | -------- | ------------------------------------------------------------------- |
| query | string, 1 to 300 characters | yes | A dish, such as carbonara, or an ingredient, such as guanciale. |
| search | text or title, default text | no | text reads the whole page; title matches the page name alone. |
| limit | integer, 1 to 50, default 10 | no | Rows to serve. |
**In return:** rows carrying id, the page key get_recipe takes; title;
url; image_url; description, the short gloss the wiki keeps for a page; and
excerpt, the matching passage with the highlight markup taken off. Each of the
last three is null where the search offered none. total_available is always
null: the search route publishes no total and no paging, so result_count
counts the rows this call returned.
get_recipe
Reads one recipe, and rescales its ingredients when a number of servings is
given.
| Argument | Type | Required | What it does |
| ----------------------- | ------------------------------------- | -------- | ---------------------------------------------------------- |
| id | string, 1 to 300 characters | yes | The page key, such as Cookbook:Spaghetti_alla_Carbonara. |
| servings | integer, 1 to 500 | no | Rescale the ingredients to this many servings. |
| max_description_chars | integer, 100 to 20000, default 1200 | no | How much of the page's prose to serve. |
**In return:** title, url, ingredients, equipment, steps, tips for
the notes and variations the page publishes, prep_minutes, cook_minutes,
total_minutes, time_text in the page's own wording, time_phases, category
and categories for every category the page files itself under. A figure the
page states nothing for is null. id names the page that was read, which
differs from the key asked for after a redirect, and redirected_from then names
the key that led there. yield says what the recipe was written for and what it
was rescaled to, and each ingredient carries scaling, reading scaled,
rounded or unscaled.
scale_ingredients
Applies the same arithmetic to any list of ingredient lines, with no request to