mcp-bbc-goodfood is an MCP (Model Context Protocol) server for the BBC Good Food recipe website, used to connect chat clients to the site so that recipes can be searched and read. BBC Good Food is a British cooking website and the online platform of the magazine of the same name. Its recipes are written and tested by its own chefs, and each one includes ingredients, method, preparation and cooking time, difficulty, suitable dietary types, nutritional information per serving, and reader ratings. The site narrows down recipes along its own dimensions: diet, cuisine, meal type, and difficulty. Some content is available only to subscribers.
In terms of purpose, this server mainly serves scenarios involving querying BBC Good Food recipes in a conversational client, including searching by criteria, reading recipes, converting ingredient quantities, and switching units. It requires no API key and no account.
Its main capabilities include: reading the various dimensions (axes) and their values that the site uses to narrow searches; searching recipes along these dimensions; reading a single recipe and recalculating ingredients according to the number of diners; and switching between metric and US units. Typical questions include "find a vegetarian curry within 40 minutes," "what diets can I filter by," "read this six-serving recipe in US cups," "which ones are rated four stars or above," and "scale this magazine ingredient list by 1.5 times." The usual path is list_filters, then search_recipes, and then get_recipe using the path carried by the item. Search applies both the site's own dimensions and the restrictions the server imposes on the rows it reads.
In terms of usage, it supports one-click installation in Claude Desktop, Cursor, and any client that uses the standard configuration format. It requires Node 24 or later and needs no environment variables. The command-line argument -i keeps standard input open (the protocol transport channel); do not add -t (a TTY rewrites the stream). The container needs outbound HTTPS to www.bbcgoodfood.com and needs no volumes, ports, or credentials. A Bundle method without npm is also provided: download mcp-bbc-goodfood-1.1.0.mcpb from the latest release and open it. Clients that support MCP bundles install it themselves, with no npm or configuration files needed. The bundle includes its dependencies and downloads nothing during installation. It can also be used separately as a library: the layer that reads the site is released separately, has its own rate control, caching, and errors, and does not include the protocol.; listFilters, searchRecipes, and getRecipe each return { data, cached }, and throw an error carrying one of six error codes.
The return contents of each tool: list_filters returns filters, one entry per axis, containing name, label (the site's own wording), argument (the corresponding parameter name for search_recipes), and options (value, label, and count for each value; count is null when the site has not published it), option_count indicates the number of options listed here, fewer than the number the site actually accepts. search_recipes returns rows with id, title, url, image_url, and rating, as well as result_count, rows_seen, and total_available; a total marked total_is_ceiling indicates the maximum number of rows a single search can provide, so it is a lower bound rather than a count; restrictions_lifted lists what was set aside when narrowing caused the search to fail, premium_dropped counts removed subscription rows. get_recipe returns title, url, premium, yield_text, yield_count, prep_minutes, cook_minutes, total_minutes, difficulty, diets, author, rating, rating_count, description, ingredients, steps, nutrition (nutrition_per indicates the serving size described) and unit_system; numeric values not stated on the page are null; subscription recipes return premium as true and contain no ingredients or steps. scale_ingredients applies the same conversion to any list of ingredient rows without requesting the site, and can accept either a factor or a from_servings and to_servings pair.
Conversion rules: quantities are expressed in suitable units, so after conversion a line may use a different unit from the original recipe, for example 200 g times twenty is 4 kg, 2 g divided by ten is 200 mg. Ingredientdivisibility depends on its nature: a loaf of bread can be cut into two, three, or four portions, eggs are not divisible. Quantities falling between the two are rounded, the converted recipe will deviate slightly from the original ratio, and that line will carry rounded and its explanation. These numbers are the server's own calculation results, and when displayed it should be stated that they were recalculated; recipes whose page does not state servings cannot be converted to diner count, and the returned result will explain this.
Limits and configuration: all variables are optional and set in the env block configured on the client; out-of-range values fall back to defaults, and the reason is written to stderr. Each failure carries one of six error codes, a message, and a hint when helpful. Requests are issued one at a time, with an interval of at least one and a half seconds, and a lower limit of one second is maintained regardless of configuration; the User-Agent always ends with the project identifier and an address where a person can be contacted. Each result carries the address of the page it read, and source indicates the site. The server does not collect user information, does not send content to authors, runs locally, contacts only www.bbcgoodfood.com, keeps answers in memory at runtime, and does not write to disk. Tests run against generated fixtures and make no network requests; the live test suite npm run test:live sends one request per route and runs nightly against the site. This project is unofficial, is not affiliated with BBC Good Food, is licensed under MIT, and recipes belong to BBC Good Food and their authors.