MCP server for BBC Good Food. List the axes a recipe search can be narrowed by, with counts. No API key.
mcp-bbc-goodfood
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
BBC Good Food is a British cooking site, the
online home of the magazine of the same name. Its recipes are written and tested
by its own cooks, and each one gives its ingredients, its method, its
preparation and cooking times, its difficulty, the diets it suits, its nutrition
per serving and the stars its readers gave it. The site narrows its recipes along
axes of its own: a diet, a cuisine, a kind of meal, a difficulty. Part of the
collection sits behind a subscription.
This server connects a chat client to that site. You can read the values each
axis takes, search the recipes along them, read one recipe with its ingredients
rescaled to the number of people at your table, and switch its quantities between
metric and US units. 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
www.bbcgoodfood.com, and nothing else: no volume, no port, no credential.
Bundle, without npm
Download mcp-bbc-goodfood-1.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 vegetarian curry that takes under 40 minutes."
- "What diets can I filter on?"
- "Read me that recipe for six, in US cups."
- "Which of these are rated four stars or better?"
- "Scale this ingredient list from a magazine by 1.5."
The ordinary path runs list_filters, then search_recipes, then get_recipe
on the path a row carries.
Tools
| Tool | What it does |
| ------------------- | ---------------------------------------------------------- |
| list_filters | Reads the values each axis of the site takes. |
| search_recipes | Finds recipes, narrowed along those axes. |
| get_recipe | Reads one recipe, rescaled or in other units on request. |
| scale_ingredients | Rescales any ingredient list, with no request to the site. |
**Call list_filters before narrowing a search.** The site accepts any value on
an axis and answers one it does not know with a total of zero, so a guessed
spelling comes back as a confident absence instead of a refusal.
list_filters
Reads the axes the site narrows by, and the values each one takes.
| Argument | Type | Required | What it does |
| -------- | -------------------------- | -------- | ----------------------------------------------------------------------- |
| query | string, 1 to 80 characters | no | Count the values within one search instead of across the whole listing. |
**In return:** filters, one entry per axis carrying name and label in the
site's own wording, argument, which names the argument search_recipes takes
for it, and options with each value, its label and its count. A count
the site published nothing for is null. option_count says how many options are
listed here, which is fewer than the site accepts: the values returned are the
most frequent ones, and an option absent from the list is still usable. Counts
are measured inside a scope, so passing query counts within one search and
leaving it out counts across the listing; the two answer different questions.
search_recipes
Searches the recipes, narrowed along the site's own axes and along restrictions
this server applies to the rows it read.
| Argument | Type | Required | What it does |
| ------------------- | ------------------------------------------------------------------- | -------- | --------------------------------------------- |
| query | string, 1 to 80 characters | yes | A dish, an ingredient, a technique. |
| limit | integer, 1 to 30, default 30 | no | Rows to serve. |
| page | integer, 1 to 334, default 1 | no | Which page of rows. |
| sort | relevant, rating, published or quickest, default relevant | no | How the site orders the rows. |
| diet | string, 1 to 60 characters | no | A value list_filters publishes. |
| cuisine | string, 1 to 60 characters | no | A value list_filters publishes. |
| meal_type | string, 1 to 60 characters | no | A value list_filters publishes. |
| difficulty | string, 1 to 60 characters | no | A value list_filters publishes. |
| max_total_minutes | integer, 1 to 1440 | no | The whole recipe, in minutes. |