mcp-bbc-goodfood について
mcp-bbc-goodfoodは、チャットクライアントからBBC Good Foodのレシピを検索・閲覧するためのサーバーです。条件で絞り込み、分量やメートル法・米国単位を調整できます。APIキーやアカウントは不要です。
主な機能
- 01利用可能なフィルターの確認
- 02条件を指定したレシピ検索
- 03レシピ閲覧と分量調整
- 04メートル法と米国単位の切り替え
- 05任意の材料リストの分量換算
活用シーン
- 01食事条件や調理時間でレシピを探す
- 02人数に合わせて材料の分量を調整する
- 03レシピの分量を米国単位に換算する
MCP 対応
このMCPサーバーは、フィルター一覧、レシピ検索・閲覧、材料リストの分量換算ツールをチャットクライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
4掲載時のツール一覧 · 今日に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| query | string | いいえ | 件数を範囲内で計測する検索条件です。サイトは検索で返された行を対象に facet を集計するため、query を指定しない場合は全掲載内容の件数になります。 |
詳細
mcp-bbc-goodfood
BBC Good Food は英国の料理サイトで、同名の雑誌のオンライン版です。レシピは同サイトの料理人が作成・検証しており、それぞれのレシピには材料、作り方、準備時間と調理時間、難易度、適した食事制限、1人分の栄養情報、読者からの星評価が掲載されています。このサイトでは、食事制限、料理のジャンル、食事の種類、難易度といった独自の軸でレシピを絞り込めます。コレクションの一部はサブスクリプション登録が必要です。
このサーバーはチャットクライアントを同サイトに接続します。各軸で選べる値の確認、軸に沿ったレシピの検索、食卓の人数に合わせて材料の分量を調整したレシピの閲覧、メートル法と米国単位の切り替えができます。API キーもアカウントも必要ありません。
インストール
ワンクリックインストール
Claude Code
claude mcp add bbc-goodfood -- npx -y mcp-bbc-goodfood
Claude Desktop、Cursor、および標準設定形式を使用する任意のクライアント
{
"mcpServers": {
"bbc-goodfood": {
"command": "npx",
"args": ["-y", "mcp-bbc-goodfood"]
}
}
}
Node 24 以降が必要です。環境変数の設定は不要です。
Docker を使用する場合
{
"mcpServers": {
"bbc-goodfood": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-bbc-goodfood:1.1.0"]
}
}
}
-i はプロトコルが流れる stdin を開いたままにします。TTY はストリームを書き換えるため、-t は指定しません。コンテナーには www.bbcgoodfood.com への外向き HTTPS 接続のみが必要です。ボリューム、ポート、認証情報は不要です。
npm を使わずにバンドルを使用する場合
最新リリースから
mcp-bbc-goodfood-1.1.0.mcpb をダウンロードして開きます。MCP バンドルに対応したクライアントなら、npm も設定ファイルの編集も不要で、自動的にインストールされます。バンドルには依存関係が含まれているため、インストール時に何もダウンロードされません。
質問できること
- 「40分以内で作れるベジタリアンカレーを探してください。」
- 「どのような食事制限で絞り込めますか?」
- 「そのレシピを6人分、USカップで読み上げてください。」
- 「これらのうち、評価が星4つ以上のものはどれですか?」
- 「雑誌に載っているこの材料リストを1.5倍にしてください。」
通常の手順では、list_filters、次にsearch_recipes、続いて行が示すパスで
get_recipeを実行します。
ツール
| ツール | 機能 |
|---|---|
list_filters | サイトの各絞り込み項目で指定できる値を読み取ります。 |
search_recipes | これらの項目で絞り込んでレシピを検索します。 |
get_recipe | リクエストに応じて分量を変更したり、別の単位に換算したりして、1つのレシピを読み取ります。 |
scale_ingredients | サイトへのリクエストなしで、任意の材料リストの分量を変更します。 |
検索を絞り込む前に、list_filtersを呼び出してください。 サイトでは各項目に任意の値を指定でき、認識できない値には合計0件と回答します。そのため、推測した表記は拒否されるのではなく、該当なしとして返されます。
list_filters
サイトで絞り込みに使う項目と、それぞれに指定できる値を読み取ります。
| 引数 | 型 | 必須 | 機能 |
|---|---|---|---|
query | string、1~80文字 | いいえ | 一覧全体ではなく、1つの検索結果内で各値の件数を数えます。 |
返される内容: 各絞り込み項目につき1つのエントリを含むfilters。各エントリには、サイト独自の表記によるnameとlabel、その項目に対してsearch_recipesが受け取る引数名を示すargument、および各value、そのlabel、countを含むoptionsが含まれます。サイトが件数を公開していない場合、countはnullです。option_countはここに一覧表示される選択肢の数を示します。これはサイトが受け付ける値の数より少なく、返されるのは頻度の高い値です。一覧にない選択肢も引き続き使用できます。件数は対象範囲内で計測されるため、queryを指定すると1つの検索内で数え、指定しない場合は一覧全体で数えます。両者は異なる問いへの回答です。
search_recipes
レシピを検索します。サイト独自の条件と、このサーバーが読み込んだ行に適用する制約で絞り込みます。
| 引数 | 型 | 必須 | 説明 |
|---|---|---|---|
query | string, 1 to 80 characters | yes | 料理、食材、調理法。 |
limit | integer, 1 to 30, default 30 | no | 返す行数。 |
page | integer, 1 to 334, default 1 | no | 行のページ番号。 |
sort | relevant, rating, published or quickest, default relevant | no | サイトが行を並べる方法。 |
diet | string, 1 to 60 characters | no | list_filters が公開する値。 |
cuisine | string, 1 to 60 characters | no | list_filters が公開する値。 |
meal_type | string, 1 to 60 characters | no | list_filters が公開する値。 |
difficulty | string, 1 to 60 characters | no | list_filters が公開する値。 |
max_total_minutes | integer, 1 to 1440 | no | レシピ全体の所要時間(分)。 |
max_calories | integer, 1 to 10000 | no | 1人分のカロリー。 |
min_servings | integer, 1 to 50 | no | この人数分以上。 |
min_rating | number, 1 to 5 | no | この星の数以上。 |
exclude_premium | boolean | no | サイトのサブスクリプション対象の行を除外します。 |
戻り値: id(get_recipe が使用)、title、url、image_url、および rating を含む行です。サイトが評価を公開していない場合、rating は null です。あわせて、result_count、除外処理の前にサイトが返した行数を示す rows_seen、および total_available が返されます。total_is_ceiling が付いた合計値は、1回の検索で返される行数の上限を示すため、件数ではなく下限を表します。restrictions_lifted には、絞り込みによって検索結果がなくなった際に解除された制約が記載され、premium_dropped には、除外されたサブスクリプション対象の行数が記録されます。サイトはサブスクリプション対象の行に対する制約を提供していないため、exclude_premium はページ取得後にそれらを除外します。そのため、ページの行数が指定した上限より少なくなることがありますが、ページの行数が少なくても結果の終わりではありません。
get_recipe
1食分の数と指定された単位系に合わせて換算したレシピを1件読み込みます。
| Argument | Type | Required | What it does |
|---|---|---|---|
id | string, 1 to 200 characters | yes | search_recipes の行に含まれる、ページ固有のパスです。 |
servings | integer, 1 to 100 | no | 材料をこの食数に合わせて換算します。 |
unit_system | metric or us | no | 分量の表記に使用する単位です。 |
返される内容: title、url、premium、サイト独自の表記(Serves 4 - 6 など)による yield_text、yield_count、prep_minutes、cook_minutes、total_minutes、difficulty、diets、author、rating、rating_count、description、ingredients、steps、説明対象の食数を示す nutrition_per を含む nutrition、および unit_system です。ページに記載のない数値は null になります。サイトの購読が必要なレシピは、premium が true で返され、材料と手順は含まれません: 再構成せず、読者をそのページに案内してください。各材料には scaling が付き、値は scaled、rounded、unscaled のいずれかです。
scale_ingredients
サイトへのリクエストを行わず、任意の材料リストに同じ計算を適用します。
| Argument | Type | Required | What it does |
|---|---|---|---|
ingredients | array of 1 to 100 strings, 1 to 300 characters | yes | レシピに書かれているとおりの材料の行です。 |
factor | number, 0.001 to 1000 | one of two | すべての分量に掛ける数値です。 |
from_servings | integer, 1 to 100 | one of two | 記載の分量が何人分かを示します。 |
to_servings | integer, 1 to 100 | one of two | 何人分にするかを指定します。 |
factor、または from_servings と to_servings の組み合わせを指定してください。
返される内容: get_recipe の返却形式に沿って換算された行です。各行には original、text、amount、amount_max、unit、scaling が含まれます。
分量の換算
分量は材料に適した単位で示されるため、レシピで使われているものとは異なる単位で返される場合があります。たとえば、200 g に20を掛けると 4 kg、2 g を10で割ると 200 mg になります。
材料によって、どれだけ細かく分けられるかは異なります。パン1斤は半分、3等分、4等分にできますが、卵は分けられません。分量がその中間の値になる場合は丸められるため、換算後のレシピは元の比率から少し外れます。その行には rounded が付き、注記に処理内容が記載されます。
数値はこのサーバーで計算したものなので、表示する際は再計算された値であることを伝えてください。ページに食数が記載されていないレシピは人数に合わせて換算できず、その旨が回答に示されます。
設定
すべての変数は任意です。クライアント設定の env ブロックで設定してください。
| 変数 | デフォルト | 説明 |
|---|---|---|
BGF_USER_AGENT | プロジェクトの識別情報 | サイトにアプリケーション名と、連絡可能な担当者の連絡先を伝えます。 |
BGF_MIN_INTERVAL_MS | 1500 | リクエスト間隔。1000〜60000です。 |
BGF_TIMEOUT_MS | 20000 | 1回のリクエストのタイムアウト。1000〜120000です。 |
BGF_MAX_RETRIES | 3 | 一時的な失敗後の再試行回数。0〜8です。 |
BGF_CACHE_TTL_MS | 900000 | ページをメモリに保持する時間。0〜86400000です。 |
BGF_CACHE_MAX_ENTRIES | 200 | 一度にメモリに保持するページ数。1〜5000です。 |
BGF_MAX_BODY_BYTES | 8000000 | 読み込むページの最大サイズ(バイト)。100000〜64000000です。 |
BGF_LOG_LEVEL | error | silent、error、info、debugのいずれか。stderrに出力されます。 |
範囲外の値を指定するとデフォルト値が使用され、その理由がstderrに出力されます。
エラー
すべての失敗には、6種類のコードのいずれか、メッセージ、および必要に応じて次の操作を示すヒントが含まれます。
| コード | 発生したこと | 対処方法 |
|---|---|---|
not_found | サイトから応答がありましたが、該当するレシピはありません。 | search_recipesでパスを確認してください。 |
invalid_input | リクエストを送信する前に、引数が拒否されました。 | 引数を示すメッセージを確認してください。 |
rate_limited | サイトから、このクライアントにリクエストを遅くするよう求められました。 | ヒントに示された秒数だけ待ち、同じ引数で再度呼び出してください。レシピは引き続き存在します。 |
parse_failure | ページは読み込まれましたが、想定されるコンテンツがありませんでした。 | イシュートラッカーに報告してください。 |
network_error | リクエストが完了しませんでした。 | 少し待ってから再試行してください。 |
timeout | リクエストがタイムアウトしました。 | BGF_TIMEOUT_MSを増やすか、取得する行数を減らしてください。 |
ライブラリとして
サイトを読み取るレイヤーは、リクエスト間隔の制御機能、キャッシュ、エラー処理を備え、プロトコルに依存しない形で単独で公開されています。
import { BbcGoodFoodClient } from "mcp-bbc-goodfood/client";
const client = new BbcGoodFoodClient();
const { data, cached } = await client.searchRecipes({ query: "lasagne" });
console.log(data.rows.length, cached);
listFilters、searchRecipes、getRecipeはそれぞれ{ data, cached }を返し、6種類のコードのいずれかを含むエラーをスローします。リクエスト間隔の最小値も同様に適用されます。
ペーシングと帰属表示
リクエストは一度に1件ずつ送信され、リクエスト間には少なくとも1.5秒の間隔を設けます。サーバーの設定にかかわらず、間隔は1秒未満になりません。User-Agent
は常に、プロジェクトの識別情報と、連絡可能な担当者の連絡先で終わります。
すべての結果には、読み取ったページのアドレスが含まれ、sourceにはサイト名が記載されます。
レシピの権利はBBC Good Foodと、レシピを執筆した料理家に帰属します。
このMCP サーバーは非公式のプロジェクトであり、BBC Good Foodとは一切関係ありません。
プライバシー
このサーバーは、ユーザーに関する情報を収集せず、作者に情報を送信することもありません。お使いのマシン上で動作し、
www.bbcgoodfood.comのみと通信します。動作中は回答をメモリに保持し、
ディスクには何も書き込みません。
PRIVACY.mdには、リクエストに含まれる情報と、どの設定がその内容を変更するかが記載されています。
開発
npm install
npm run build:fixtures
npm test
npm run check
テストは生成されたフィクスチャに対して実行され、ネットワークリクエストは行いません。ライブテストスイートの
npm run test:liveは、各ルートにつき1件のリクエストを行い、サイト自体に対して毎晩実行されます。
貢献
バグ、質問、アイデアは 課題トラッカーでお知らせください。プル リクエストも歓迎します。まず課題を登録すると、変更の方向性について合意しやすくなります。 CONTRIBUTING.mdをご覧ください。
ライセンス
MITです。詳細はLICENSEをご覧ください。レシピの権利はBBC Good Foodと その作者に帰属します。
mcp-bbc-goodfood(日本語)
BBC Good Foodは英国の料理サイトで、 同名の雑誌のオンライン版です。レシピは同サイトの料理家が執筆し、テストしています。それぞれのレシピには、材料、手順、 準備時間と調理時間、難易度、適した食事制限、1人前あたりの栄養価、読者が付けた星の数が記載されています。 サイトでは、食事制限、料理の種類、食事のタイプ、難易度など、独自の切り口でレシピを絞り込めます。コレクションの一部は 購読者限定です。
このサーバーは会話型クライアントをこのサイトに接続します。それぞれの切り口で選べる項目を確認したり、その切り口でレシピを 検索したり、人数に合わせた材料とともにレシピを読んだりできます。また、分量をメートル法と米国式の単位で 切り替えることもできます。APIキーもアカウントも不要です。
インストール
ワンクリックでインストール
Claude Code
claude mcp add bbc-goodfood -- npx -y mcp-bbc-goodfood
Claude Desktop、Cursor、その他の標準設定形式に対応するクライアント
{
"mcpServers": {
"bbc-goodfood": {
"command": "npx",
"args": ["-y", "mcp-bbc-goodfood"]
}
}
}
Node 24以降が必要です。環境変数の設定は不要です。
Dockerを使用
{
"mcpServers": {
"bbc-goodfood": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-bbc-goodfood:1.1.0"]
}
}
}
-iは、プロトコルの通信路となる標準入力を開いたままにします。ストリームを書き換えてしまうTTYは
不要なため、-tは省略します。コンテナにはwww.bbcgoodfood.comへのHTTPS送信アクセスのみが必要です。
ボリューム、ポート、認証情報は必要ありません。
npmを使わないバンドル
mcp-bbc-goodfood-1.1.0.mcpbを
最新リリース
からダウンロードして開いてください。MCPバンドルに対応するクライアントなら、npmを使わず、
設定ファイルを変更することなく自動でインストールできます。バンドルには依存関係が含まれているため、
インストール時に何もダウンロードされません。
できること
- 「40分以内で作れるベジタリアンカレーを探して。」
- 「どの食事法で絞り込めますか?」
- 「このレシピを6人分、アメリカ式のカップ単位で読み上げて。」
- 「評価が星4つ以上なのはどれですか?」
- 「雑誌から抜き出したこの材料リストを1.5倍にして。」
通常の手順は、list_filtersからsearch_recipesに進み、行に含まれるパスを
使ってget_recipeを呼び出します。
ツール
| ツール | 機能 |
|---|---|
list_filters | サイトの各絞り込み軸で使える値を読み取ります。 |
search_recipes | これらの軸で絞り込んでレシピを検索します。 |
get_recipe | レシピを読み取り、リクエストに応じて分量を調整したり、別の単位に変換したりします。 |
scale_ingredients | サイトへの問い合わせなしで、任意の材料リストの分量を調整します。 |
検索を絞り込む前にlist_filtersを呼び出してください。 このサイトは各軸にどのような値を指定しても受け付け、認識できない値には合計0件を返すため、推測したスペルを指定すると、拒否されるのではなく、確実に該当なしになります。
list_filters
サイトが検索を絞り込む軸と、それぞれの軸で使える値を読み取ります。
| 引数 | 型 | 必須 | 機能 |
|---|---|---|---|
query | 文字列、1~80文字 | いいえ | リスト全体ではなく、検索結果内の値を集計します。 |
戻り値: filters。各軸について、サイト上の用語で記されたnameとlabel、その軸に対応するsearch_recipesの引数名であるargument、および各value、label、countを含むoptionsが返されます。サイトが公開していないcountはnullです。option_countはここに列挙されたオプションの数を示しますが、サイトが受け付ける値の数より少ない場合があります。返される値は出現頻度の高いものが中心で、一覧にないオプションも使用できます。件数は対象範囲内で集計されるため、queryを指定すると検索結果内で集計され、省略するとリスト全体で集計されます。これらはそれぞれ異なる問いに答えます。
search_recipes
レシピを検索し、サイトの絞り込み項目と、このサーバーが取得した行に適用する制限で結果を絞り込みます。
| 引数 | 型 | 必須 | 説明 |
|---|---|---|---|
query | 文字列、1~80文字 | はい | 料理、食材、調理法。 |
limit | 整数、1~30、デフォルトは30 | いいえ | 返す行数。 |
page | 整数、1~334、デフォルトは1 | いいえ | 行を取得するページ。 |
sort | relevant、rating、published、quickestのいずれか、デフォルトはrelevant | いいえ | サイトが行を並べる順序。 |
diet | 文字列、1~60文字 | いいえ | list_filtersが公開する値。 |
cuisine | 文字列、1~60文字 | いいえ | list_filtersが公開する値。 |
meal_type | 文字列、1~60文字 | いいえ | list_filtersが公開する値。 |
difficulty | 文字列、1~60文字 | いいえ | list_filtersが公開する値。 |
max_total_minutes | 整数、1~1440 | いいえ | レシピ全体の所要時間(分)。 |
max_calories | 整数、1~10000 | いいえ | 1人分のカロリー。 |
min_servings | 整数、1~50 | いいえ | この人数分以上。 |
min_rating | 数値、1~5 | いいえ | この星数以上。 |
exclude_premium | ブール値 | いいえ | 購読者限定の行を除外します。 |
返される値: id(get_recipeで使用します)、title、url、image_urlを含む行と、サイトで評価が公開されていない場合はnullとなるratingです。また、result_count、サイトが除外処理を行う前に返した行数を示すrows_seen、total_availableも返されます。total_is_ceilingが付いた合計値は、検索で返される行数の上限を示すため、件数ではなく下限を表します。restrictions_liftedには、絞り込みによって検索結果がなくなった際に解除された制限が示され、premium_droppedには除外された購読者限定の行数が示されます。サイトは購読者限定の行に対する制限を提供していないため、exclude_premiumを指定するとページ取得後にその行が除外されます。そのため、返される行数は指定した上限より少なくなることがあり、ページの行数が少なくても検索結果の終わりとは限りません。
get_recipe
指定された単位系と人数に合わせてレシピを読み込みます。
| 引数 | 型 | 必須 | 説明 |
|---|---|---|---|
id | 文字列、1~200文字 | はい | ページのパス。行に記載されているとおりの値です。 |
servings | 整数、1~100 | いいえ | この人数に合わせて材料を調整します。 |
unit_system | metric または us | いいえ | 分量を記載する単位系です。 |
戻り値: title、url、premium、サイト上の表記どおりの yield_text(例:Serves 4 - 6)、yield_count、prep_minutes、cook_minutes、total_minutes、difficulty、diets、author、rating、rating_count、description、ingredients、steps、説明されている分量を示す nutrition_per を含む nutrition、および unit_system が返されます。ページに記載されていない数値は null になります。**購読者限定のレシピは、premium が true で、材料と手順を含まずに返されます。**材料や手順を再構成せず、読者をそのページに案内してください。各材料には scaled、rounded、unscaled のいずれかを示す scaling が付きます。
scale_ingredients
サイトへのリクエストを行わず、任意の材料リストに同じ計算を適用します。
| 引数 | 型 | 必須 | 説明 |
|---|---|---|---|
ingredients | 文字列の配列、1~100項目、各1~300文字 | はい | レシピに記載されているとおりの調整対象の行です。 |
factor | 数値、0.001~1000 | どちらか一方 | 各分量に掛ける数値です。 |
from_servings | 整数、1~100 | どちらか一方 | 元のリストの人数です。 |
to_servings | 整数、1~100 | どちらか一方 | 希望する人数です。 |
factor、または from_servings と to_servings の組み合わせを指定してください。
戻り値: get_recipe が返す形式で調整された行が返されます。各行には original、text、amount、amount_max、unit、および scaling が含まれます。
分量の調整
分量は、それぞれに適した単位で表されます。そのため調整後の行は、レシピとは異なる単位になる場合があります。たとえば、200 g を20倍すると 4 kg になり、2 g を10分の1にすると 200 mg になります。
材料によって、切り分けられる細かさは異なります。パンは半分、3分の1、4分の1にできますが、卵は分けられません。そのため、分量が中間の値になる場合は丸められ、調整後のレシピは元の比率から少しずれます。その行には rounded が付き、注記にどのように処理したかが記載されます。
数値はこのサーバーで計算されたものです。表示する際は、再計算された値であることを伝えてください。ページに人数が記載されていないレシピは、指定人数に合わせて調整できず、その旨が応答で示されます。
設定
各変数はすべて任意です。クライアント設定の env ブロックに設定します。
| 変数 | デフォルト | 内容 |
|---|---|---|
BGF_USER_AGENT | プロジェクトの識別情報 | サイトにアプリケーション名を伝え、連絡可能な担当者のアドレスを添えます。 |
BGF_MIN_INTERVAL_MS | 1500 | リクエスト間隔です。1000~60000の範囲で指定します。 |
BGF_TIMEOUT_MS | 20000 | リクエストのタイムアウトです。1000~120000の範囲で指定します。 |
BGF_MAX_RETRIES | 3 | 一時的な失敗後の再試行回数です。0~8の範囲で指定します。 |
BGF_CACHE_TTL_MS | 900000 | ページをメモリに保持する期間です。0~86400000の範囲で指定します。 |
BGF_CACHE_MAX_ENTRIES | 200 | 一度にメモリに保持するページ数です。1~5000の範囲で指定します。 |
BGF_MAX_BODY_BYTES | 8000000 | 読み込むページの最大サイズです。バイト単位で、100000~64000000の範囲で指定します。 |
BGF_LOG_LEVEL | error | silent、error、info、debugのいずれかです。標準エラー出力に書き込みます。 |
範囲外の値はデフォルト値に戻り、その理由は標準エラー出力に書き込まれます。
エラー
各失敗には、6種類のコードのいずれか、メッセージ、および必要に応じて次に行う操作の案内が含まれます。
| コード | 発生した内容 | 対処方法 |
|---|---|---|
not_found | サイトから応答がありましたが、そのレシピはありません。 | search_recipesでパスを確認してください。 |
invalid_input | リクエストを送信する前に引数が拒否されました。 | 引数名が記載されたメッセージを確認してください。 |
rate_limited | サイトから、このクライアントに速度を落とすよう求められました。 | 指定された秒数だけ待ち、同じ引数で再度呼び出してください。レシピは引き続き利用できます。 |
parse_failure | ページは読み込まれましたが、期待したコンテンツがありません。 | 障害トラッカーで報告してください。 |
network_error | リクエストが完了しませんでした。 | 少し待ってから再試行してください。 |
timeout | リクエストがタイムアウトしました。 | BGF_TIMEOUT_MSを増やすか、取得する行数を減らしてください。 |
ライブラリとして
サイトを読み込むレイヤーは、独自のリクエスト間隔、キャッシュ、エラー処理を備えた単独のパッケージとして公開されており、特定のプロトコルには依存しません。
import { BbcGoodFoodClient } from "mcp-bbc-goodfood/client";
const client = new BbcGoodFoodClient();
const { data, cached } = await client.searchRecipes({ query: "lasagne" });
console.log(data.rows.length, cached);
listFilters、searchRecipes、getRecipeはそれぞれ{ data, cached }を返し、6種類のコードのいずれかを持つエラーをスローします。リクエスト間の最小間隔も、この場合に適用されます。
リクエスト間隔と出典表示
リクエストは1件ずつ送信され、少なくとも1.5秒の間隔を空けます。また、設定にかかわらず、1秒の最小間隔が適用されます。User-Agentの末尾には、必ずプロジェクトの識別情報と連絡可能な担当者のアドレスが含まれます。
各結果には、読み取り元のページのアドレスが含まれ、sourceにはサイト名が記載されます。レシピの権利はBBC Good Foodと執筆した料理人に帰属します。
このMCPは非公式プロジェクトであり、BBC Good Foodとは提携していません。
プライバシー
このサーバーはユーザーに関する情報を収集せず、作者にも何も送信しません。お使いのマシン上で動作し、www.bbcgoodfood.com にのみ接続します。動作中はレスポンスをメモリに保持し、ディスクには何も書き込みません。PRIVACY.md では、リクエストに含まれる情報と、これを変更する設定について説明しています。
開発
npm install
npm run build:fixtures
npm test
npm run check
テストは生成されたフィクスチャを使って実行され、リクエストは送信しません。ライブテストの npm run test:live は、各ルートに対して1件ずつリクエストを送信し、毎晩サイト自体を対象に実行されます。
貢献
不具合、質問、アイデアは課題トラッカーにお寄せください。変更の提案も歓迎します。まず課題を登録すると、変更内容について合意しやすくなります。CONTRIBUTING.mdをご覧ください。
ライセンス
MIT ライセンスです。LICENSEをご覧ください。レシピは BBC Good Food とその作者に帰属します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。