Search BBC Good Food recipes, read one, and scale its ingredients. No API key.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
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.
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.
-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.
Download mcp-bbc-goodfood-1.0.1.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.
The ordinary path runs list_filters, then search_recipes, then get_recipe
on the path a row carries.
| 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_filtersReads 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_recipesSearches 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. |
max_calories | integer, 1 to 10000 | no | Calories per serving. |
min_servings | integer, 1 to 50 | no | At least this many servings. |
min_rating | number, 1 to 5 | no | At least this many stars. |
exclude_premium | boolean | no | Drop the rows behind the site's subscription. |
In return: rows carrying id, which get_recipe takes; title; url;
image_url; and rating, which is null where the site published none.
Alongside come result_count, rows_seen for the rows the site served before
anything was set aside, and total_available. A total marked total_is_ceiling
sits on the largest number of rows one search will serve, so it states a floor
rather than a count. restrictions_lifted names what was set aside when
narrowing made the search fail, and premium_dropped counts the subscription
rows removed. The site offers no restriction on subscription rows, so
exclude_premium removes them after the page arrives: a page then comes back
shorter than the limit asked for, and a short page is not the end of the results.
get_recipeReads one recipe, rescaled to a number of servings and in the unit system asked for.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/mcp-bbc-goodfood)<a href="https://allmcps.com/mcp/mcp-bbc-goodfood"><img src="https://allmcps.com/api/badge/mcp-bbc-goodfood?style=directory" alt="MCP Bbc Goodfood on AllMCPs" /></a>