mcp-marmiton について
mcp-marmitonは、チャットクライアントをMarmitonのレシピにつなぐサーバーです。家庭料理や献立作り向けに、レシピ検索・全文取得に加え、人数や指定した材料リストに応じた分量調整を行います。
主な機能
- 01料理名や食材からレシピを検索
- 02材料、手順、調理時間を取得
- 03人数に合わせてレシピの分量を調整
- 04単独の材料リストの分量を調整
- 05APIキーやアカウント不要
活用シーン
- 01手元の食材に合うレシピを探す
- 02異なる人数向けにレシピを調整
- 03書籍の材料リストの分量を換算
MCP 対応
MCPサーバーは、対応クライアントにレシピ検索・取得と材料の分量調整ツールを提供します。Marmitonから情報を読み取るだけで、サイトには投稿しません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
3掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| limit | integer | いいえ | この結果ページで返すレシピの最大数。 |
| query | string | はい | 検索する内容。フランス語で指定します。例:'tarte aux pommes'。 |
詳細
mcp-marmiton
Marmitonはフランス最大の料理サイトで、1999年から家庭の料理人たちがレシピを投稿しています。それぞれのレシピには、材料と分量、手順、準備時間と調理時間、想定される人数、実際に作った人たちの評価が記載されています。
このサーバーはチャットクライアントをサイトに接続します。料理名や材料でレシピを検索し、材料と手順を含むレシピ全文を読んだり、食卓の人数に合わせて分量を調整したりできます。各項目には、数値が正確なものか、台所で扱いやすいように調整されたものかが示されます。API キーもアカウントも必要ありません。
インストール
ワンクリックでインストール
Claude Code
claude mcp add marmiton -- npx -y mcp-marmiton
Claude Desktop、Cursor、および標準設定形式を使用するクライアント
{
"mcpServers": {
"marmiton": {
"command": "npx",
"args": ["-y", "mcp-marmiton"]
}
}
}
Node 24以降が必要です。環境変数の設定は不要です。
Docker を使う場合
{
"mcpServers": {
"marmiton": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-marmiton:2.1.0"]
}
}
}
-iはプロトコルが流れる標準入力を開いたままにするために指定します。TTY はストリームを書き換えるため、-tは指定しません。コンテナに必要なのはwww.marmiton.orgへのHTTPS送信接続だけです。ボリューム、ポート、認証情報は必要ありません。
npm を使わないバンドル
最新リリースからmcp-marmiton-2.1.0.mcpbをダウンロードして開いてください。MCP バンドルに対応するクライアントなら、npm も設定ファイルの編集も不要で、自動的にインストールできます。バンドルには依存関係が含まれているため、インストール時に何も取得されません。
できること
- « タルト・オ・ポムのレシピを探して。 »
- 「4人分ではなく、6人分のレシピを読んで。」
- 「ズッキーニとシェーブルチーズで何が作れますか?」
- 「本から写したレシピです。1.5倍にして。」
- 「2つ目のレシピの調理時間はどれくらいですか?」
Marmiton はフランスのサイトなので、レシピはフランス語で見つかります。tarte aux pommes、poulet curry cocoなどです。通常は検索してからレシピを読む流れです。search_recipesでidを取得し、その id をget_recipeに渡します。
ツール
| ツール | 機能 |
|---|---|
search_recipes | 料理名または材料からレシピを検索します。 |
get_recipe | リクエストに応じて指定した人数分に換算したレシピを取得します。 |
scale_ingredients | サイトへのリクエストなしで、材料リストを換算します。 |
このサーバーは読み取り専用です。Marmiton に何かを公開することはありません。
search_recipes
料理名または材料からレシピを検索します。Marmiton は単語の冒頭の文字で照合するため、クエリに対してサイトがランク付けした結果が返されます。また、タイトルに検索語が含まれていない場合は、その旨が回答に記載されます。
| 引数 | 型 | 必須 | 機能 |
|---|---|---|---|
query | 文字列、最大200文字 | はい | フランス語で検索する語句です。 |
limit | 整数、1~30、既定値は10 | いいえ | この検索結果ページから返すレシピ数です。 |
返される内容: get_recipe が受け取る id、title、url、および画像なしで公開されたレシピでは null となる image_url を含む行が返されます。これらに加えて、limit 適用前のこのページのレシピ数を示す result_count と total_available も返されます。Marmiton の robots.txt では検索結果のページ送りが許可されていないため、検索で読み取るのは1ページだけです。ほかのレシピを確認するには、クエリを絞り込んでください。
get_recipe
レシピを1件すべて読み込み、人数が指定されている場合は分量を換算します。
| 引数 | 型 | 必須 | 機能 |
|---|---|---|---|
id | 数字のみの文字列 | どちらか一方 | search_recipes が返したMarmitonのレシピIDです。 |
url | marmiton.orgのURL | どちらか一方 | id がない場合に使用するレシピのアドレスです。 |
servings | 0より大きく500以下の数値 | いいえ | この人数分に分量を換算します。 |
返される内容: title、url、ingredients、steps、prep_minutes、cook_minutes、total_minutes、category、author、rating、nutrition が返され、ページに記載がない項目はそれぞれ null になります。yield は、レシピの元の人数と換算後の人数を示します。含まれる項目は、original_count、original_text、requested、数える対象を示す unit、および適用した倍率の factor です。各材料には、original、text、amount、範囲指定の場合の amountMax、unit、および scaled、rounded、unscaled のいずれかを示す scaling が含まれます。数値はこのサーバーが計算したものなので、提示する際は再計算した値であることを伝えてください。nutrition は、公開されたレシピに記載されている、そのレシピ固有の人数分の栄養情報です。
scale_ingredients
サイトへのリクエストを行わず、どんな材料のリストにも同じ計算を適用します。そのため、本や家族のノートからコピーしたレシピにも使えます。
| 引数 | 型 | 必須 | 説明 |
|---|---|---|---|
ingredients | 1~100 個の文字列からなる配列、各文字列は最大 300 文字 | はい | 再計算する材料の行。フランス語で指定します。 |
factor | 0 より大きく 100 以下の数値 | 2 つのうち 1 つ | 適用する倍率。 |
from_servings | 0 より大きく 500 以下の数値 | 2 つのうち 1 つ | リストの分量が何人分かを指定します。 |
to_servings | 0 より大きく 500 以下の数値 | 2 つのうち 1 つ | 何人分にするかを指定します。 |
factor、または from_servings と to_servings のペアを渡してください。
返される内容: 使用した factor、get_recipe が返す形式の再計算後の ingredients、および値を丸めた行の数を示す scaled_count、rounded_count、unscaled_count です。
分量の調整
各材料には、分量の調整でどのように扱われたかを示す scaling フラグが付与されます。
| フラグ | 意味 | 例 |
|---|---|---|
scaled | 値をそのまま掛け算したものです。 | 3 oeufs ×2 → 6 oeufs |
rounded | 使いやすい値にするため、値を丸めました。 | 25 cl de lait ×0.667 → 17 cl de lait |
unscaled | 分量が記載されていないため、元の表記のままです。 | sel、coriandre |
材料は扱いやすい単位で示されるため、行によってはレシピで使われていたものとは異なる単位で返されることがあります。200 g に 20 を掛けると、4 kg になります。
材料をどの程度細かく分けられるかは、材料によって異なります。バゲットは 2 等分、3 等分、4 等分にできますが、卵は分けられません。数量がその中間になった場合は丸められるため、調整後のレシピは元の比率から少しずれます。その行には rounded が付き、何をしたかが note に記載されます。
設定
すべての変数は任意です。クライアント設定の env ブロックで設定してください。
| 変数 | デフォルト | 機能 |
|---|---|---|
MARMITON_USER_AGENT | プロジェクトの識別情報 | Marmiton にアプリケーション名と、連絡可能な担当者の連絡先を通知します。 |
MARMITON_MIN_INTERVAL_MS | 1000 | 2 つのリクエスト間の間隔です。500~60000 の範囲で指定します。下限を下回る値は拒否され、この値が使われます。 |
MARMITON_TIMEOUT_MS | 15000 | 1 件のリクエストのタイムアウトです。1000~120000 の範囲で指定します。 |
MARMITON_MAX_RETRIES | 3 | 一時的な失敗後の再試行回数です。0~10 の範囲で指定します。 |
MARMITON_CACHE_TTL_MS | 900000 | ページをメモリ内に保持する時間です。0~86400000 の範囲で指定します。 |
MARMITON_CACHE_MAX_ENTRIES | 200 | 一度にメモリ内に保持するページ数です。0~10000 の範囲で指定します。 |
MARMITON_MAX_BODY_BYTES | 8000000 | 読み込むページの最大サイズです。バイト単位で、100000~64000000 の範囲で指定します。 |
MARMITON_LOG_LEVEL | error | silent、error、info、debug のいずれかを指定します。stderr に出力されます。 |
範囲外の値はデフォルト値に置き換えられ、その理由が stderr に出力されます。
エラー
すべての失敗には、6 種類のコードのいずれかとメッセージが含まれます。また、役立つ場合は次に行うべきことを示すヒントも含まれます。
| コード | 発生したこと | 対処方法 |
|---|---|---|
not_found | Marmiton は応答しましたが、そのレシピはありません。 | search_recipes で ID を確認してください。 |
invalid_input | リクエストが送信される前に、引数が拒否されました。 | 引数名が示されているメッセージを確認してください。 |
rate_limited | Marmiton がこのクライアントにリクエストを減らすよう求めました。 | ヒントに示された秒数だけ待ち、同じ引数で再度呼び出してください。レシピは引き続き存在します。 |
parse_failure | ページは読み込まれましたが、想定された内容がありませんでした。 | 課題トラッカーで報告してください。 |
network_error | リクエストが完了しませんでした。 | 少し待ってから再試行してください。 |
timeout | リクエストがタイムアウトしました。 | MARMITON_TIMEOUT_MS を大きくしてください。 |
ライブラリとして
Marmiton を読み取るレイヤーは、リクエスト間隔の制御、キャッシュ、エラー処理を備え、特定のプロトコルに依存しない形で単独で公開されています。
import { MarmitonClient } from "mcp-marmiton/client";
const client = new MarmitonClient();
const { data, cached } = await client.getRecipe({ id: "18257" });
console.log(data.title, data.ingredients.length, cached);
search と getRecipe はそれぞれ { data, cached } を返し、6 種類のコードのいずれかを持つエラーをスローします。リクエスト間の最小間隔は、ここでも適用されます。
リクエスト間隔と帰属表示
リクエストは一度に1件ずつ送信され、間には最低限の間隔が設けられます。この下限は、サーバーの設定にかかわらず維持されます。User-Agent の末尾には、常にプロジェクトの識別情報と連絡可能な宛先が含まれます。すべての情報は、Marmiton が機械向けに公開している schema.org の JSON-LD から読み取られ、robots.txt で禁止されているパスにはアクセスしません。
各結果にはレシピのタイトルと URL が含まれます。また、ページに記載がある場合、get_recipe には作者も含まれます。さらに attribution には、タイトルと URL が1行で記載されます。
レシピの権利は Marmiton およびレシピを執筆した料理人に帰属します。この MCP サーバーは非公式のプロジェクトであり、Marmiton とは一切関係ありません。
プライバシー
このサーバーは、あなたに関する情報を収集せず、作者に何も送信しません。お使いのマシン上で動作し、www.marmiton.org 以外には接続しません。実行中は回答をメモリに保持し、ディスクには何も書き込みません。
PRIVACY.md では、リクエストに含まれる情報と、その内容を変更する設定について説明しています。
開発
npm install
npm run build:fixtures
npm test
npm run check
テストは生成されたフィクスチャを使用し、ネットワークリクエストは行いません。ライブテストスイートの npm run test:live は、各ルートにつき1回リクエストを送信し、毎晩サイト自体に対して実行されます。
貢献
バグ、質問、アイデアはイシュートラッカーにお寄せください。プルリクエストも歓迎します。まずイシューを作成すると、変更内容について合意しやすくなります。CONTRIBUTING.mdをご覧ください。
ライセンス
MIT ライセンスです。詳細はLICENSEをご覧ください。レシピの権利は Marmiton および各作者に帰属します。
mcp-marmiton(フランス語)
Marmiton はフランス最大の料理サイトで、1999年から料理人がレシピを公開しています。各レシピには、分量付きの材料、手順、準備時間と調理時間、想定する人数、実際に作った人が残した評価が記載されています。
このサーバーは、会話型クライアントをこのサイトに接続します。料理名や材料からレシピを検索したり、材料と手順を含むレシピ全体を読んだりできます。また、人数に合わせて分量を調整でき、各項目には数値が正確なものか、料理に使いやすいよう調整されたものかが示されます。API キーもアカウントも必要ありません。
インストール
ワンクリックインストール
Claude Code
claude mcp add marmiton -- npx -y mcp-marmiton
Claude Desktop、Cursor、および標準設定形式に対応するすべてのクライアント
{
"mcpServers": {
"marmiton": {
"command": "npx",
"args": ["-y", "mcp-marmiton"]
}
}
}
Node 24 以降が必要です。環境変数の設定は不要です。
Docker を使用する場合
{
"mcpServers": {
"marmiton": {
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-marmiton:2.1.0"]
}
}
}
-i は、プロトコルの通信路である標準入力を開いたままにします。-t は TTY がストリームを書き換えるため省略します。コンテナに必要なのは www.marmiton.org への HTTPS アウトバウンドアクセスだけです。ボリューム、ポート、認証情報は不要です。
npm を使わないバンドル
最新リリースから mcp-marmiton-2.1.0.mcpb をダウンロードして開いてください。MCP バンドルに対応するクライアントであれば、npm も設定ファイルの変更も不要で、自動的にインストールされます。バンドルには依存関係が含まれているため、インストール時に何かがダウンロードされることはありません。
質問できること
- 「りんごタルトのレシピを探して。」
- 「このレシピを、4人分ではなく6人分で読み上げて。」
- 「ズッキーニとシェーブルチーズで何が作れる?」
- 「本から写したレシピです。分量を1.5倍にして。」
- 「2つ目のレシピの調理時間はどのくらい?」
Marmiton はフランスのサイトなので、レシピはフランス語で掲載されています。例:tarte aux pommes、poulet curry coco。通常は検索してからレシピを読む流れです。search_recipes が id を返し、get_recipe はその識別子を使います。
ツール
| ツール | 機能 |
|---|---|
search_recipes | 料理名や食材からレシピを探します。 |
get_recipe | レシピを読み込み、リクエストに応じて分量を適応します。 |
scale_ingredients | サイトに問い合わせずに、任意の材料リストの分量を調整します。 |
このサーバーは読み取りのみを行います。Marmiton に何かを投稿することはありません。
search_recipes
料理名や食材からレシピを探します。Marmiton は単語の先頭の文字を照合するため、検索するとサイトがその検索語に分類した結果が返されます。また、タイトルに検索語が含まれない場合は、その旨が応答に示されます。
| 引数 | 型 | 必須 | 機能 |
|---|---|---|---|
query | 文字列、最大200文字 | はい | 検索する内容。フランス語で指定します。 |
limit | 整数、1~30、既定値は 10 | いいえ | この検索結果ページから返すレシピ数。 |
返される内容: get_recipe で使う id、title、url、および写真なしで公開されているレシピの場合は null となる image_url を含む項目の一覧です。さらに、limit の適用前にこのページにあるレシピ数を示す result_count と total_available も返されます。Marmiton の robots.txt は検索結果のページ送りを禁止しているため、検索で読み込まれるのは1ページのみです。別のレシピを表示するには、検索語を絞り込んでください。
get_recipe
レシピ全体を読み込み、人数が指定されている場合は分量を調整します。
| 引数 | 型 | 必須 | 機能 |
|---|---|---|---|
id | 数字の文字列 | いずれか一方 | search_recipes が返す Marmiton の識別子。 |
url | marmiton.org のURL | いずれか一方 | レシピのURL。id がない場合に使用します。 |
servings | 0より大きく500以下の数値 | いいえ | 指定した人数分に分量を調整します。 |
返される内容: title、url、ingredients、steps、prep_minutes、cook_minutes、total_minutes、category、author、rating、nutrition。ページに掲載されていない項目は、それぞれ null になります。yield は、レシピが何人分として書かれているか、また何人分に調整されたかを示し、original_count、original_text、requested、数える単位を表す unit、適用した倍率を表す factor が含まれます。各材料には original、text、amount、範囲がある場合の amountMax、unit、および scaled、rounded、unscaled のいずれかとなる scaling が含まれます。数値はこのサーバーで計算されるため、表示する際は再計算された値であると伝えてください。nutrition は、公開されているレシピ本来の人数分についての栄養情報です。
scale_ingredients
サイトにクエリを送信せず、どのような材料リストにも同じ計算を適用します。そのため、本や家族のレシピ帳から写したレシピにも使えます。
| 引数 | 型 | 必須 | 機能 |
|---|---|---|---|
ingredients | 1〜100 個の文字列の配列、最大 300 文字 | はい | 調整する行(フランス語)。 |
factor | 0 より大きく 100 以下の数値 | どちらか一方 | 適用する倍率。 |
from_servings | 0 より大きく 500 以下の数値 | どちらか一方 | リストが想定している分量の人数。 |
to_servings | 0 より大きく 500 以下の数値 | どちらか一方 | 希望する分量の人数。 |
factor を指定するか、from_servings と to_servings の組み合わせを指定してください。
返される内容: 使用した factor、get_recipe が返す形式に調整された ingredients、および、丸めによって値が変わった行数を示す scaled_count、rounded_count、unscaled_count です。
分量の調整
各材料には、分量の調整で何が行われたかを示す scaling フラグが付いています。
| フラグ | 意味 | 例 |
|---|---|---|
scaled | 値が計算結果そのものです。 | 3 oeufs ×2 → 6 oeufs |
rounded | 使いやすい値にするため、値が調整されています。 | 25 cl de lait ×0,667 → 17 cl de lait |
unscaled | 分量がなく、そのまま残されています。 | sel、coriandre |
分量は、材料に適した単位で表されます。そのため、調整後の行は元のレシピとは別の単位で表示されることがあります。200 g に 20 を掛けると、4 kg になります。
材料をどの程度細かく分けられるかは、その種類によって異なります。バゲットは 2 等分、3 等分、4 等分できますが、卵は分けられません。そのため、計算結果がその中間になった場合は丸められ、調整後のレシピは元のレシピの比率から少しずれます。その行には rounded が付き、note に行った処理が記載されます。
設定
各変数は任意です。クライアント設定の env ブロックに設定します。
| 変数 | デフォルト | 説明 |
|---|---|---|
MARMITON_USER_AGENT | プロジェクトの識別情報 | Marmiton にアプリケーション名と、担当者に連絡できるメールアドレスを通知します。 |
MARMITON_MIN_INTERVAL_MS | 1000 | 2 回のリクエスト間の間隔です。500~60000 の範囲で指定します。下限を下回る値は拒否され、下限値が使われます。 |
MARMITON_TIMEOUT_MS | 15000 | リクエストのタイムアウトです。1000~120000 の範囲で指定します。 |
MARMITON_MAX_RETRIES | 3 | 一時的な失敗後の再試行回数です。0~10 の範囲で指定します。 |
MARMITON_CACHE_TTL_MS | 900000 | ページをメモリに保持する期間です。0~86400000 の範囲で指定します。 |
MARMITON_CACHE_MAX_ENTRIES | 200 | 同時にメモリに保持するページ数です。0~10000 の範囲で指定します。 |
MARMITON_MAX_BODY_BYTES | 8000000 | 読み込むページの最大サイズです。バイト単位で、100000~64000000 の範囲で指定します。 |
MARMITON_LOG_LEVEL | error | silent、error、info、debug のいずれかを指定します。標準エラー出力に書き込まれます。 |
範囲外の値を指定するとデフォルト値に戻り、その理由が標準エラー出力に書き込まれます。
エラー
各失敗には 6 つのコードのいずれかとメッセージが含まれ、必要に応じて次に行う操作の案内も含まれます。
| コード | 発生したこと | 対処方法 |
|---|---|---|
not_found | Marmiton は応答しましたが、そのレシピはありません。 | search_recipes で ID を確認してください。 |
invalid_input | リクエストを行う前に引数が拒否されました。 | 引数名が示されたメッセージを確認してください。 |
rate_limited | Marmiton がこのクライアントに速度を落とすよう求めています。 | 指定された秒数待って、同じ引数で再度呼び出してください。レシピは引き続き存在します。 |
parse_failure | ページは読み込まれましたが、想定された内容がありません。 | インシデントトラッカーに報告してください。 |
network_error | リクエストが完了しませんでした。 | 少し待ってから再試行してください。 |
timeout | リクエストがタイムアウトしました。 | MARMITON_TIMEOUT_MS を大きくしてください。 |
ライブラリとして
Marmiton を読み込むレイヤーは、リクエスト間隔、キャッシュ、エラーを備えた単独のパッケージとして公開されており、特定のプロトコルには依存しません。
import { MarmitonClient } from "mcp-marmiton/client";
const client = new MarmitonClient();
const { data, cached } = await client.getRecipe({ id: "18257" });
console.log(data.title, data.ingredients.length, cached);
search と getRecipe はそれぞれ { data, cached } を返し、6 つのコードのいずれかを持つエラーをスローします。リクエスト間の最小間隔もここで適用されます。
リクエストの間隔と帰属
リクエストは一度に1件ずつ送信され、リクエスト間には最低限の間隔が設けられます。この間隔はどの設定でも維持されます。User-Agent の末尾には、プロジェクト名と担当者への連絡先が常に含まれます。情報はすべて、Marmiton が機械向けに公開している schema.org の JSON-LD から読み取られ、robots.txt で禁止されているパスにはアクセスしません。
各結果にはレシピのタイトルとURLが含まれます。また、ページに著者名が記載されている場合は get_recipe にその著者名が含まれ、さらに attribution にはタイトルとURLが1行で記載されます。
レシピの権利は Marmiton と、それを書いた料理人に帰属します。この MCP は非公式のプロジェクトであり、Marmiton とは関係ありません。
プライバシー
このサーバーはユーザーに関する情報を収集せず、作者にも何も送信しません。お使いのマシン上で動作し、www.marmiton.org にのみ接続します。動作中は応答をメモリに保持し、ディスクには何も書き込みません。PRIVACY.md では、リクエストに含まれる情報と、それを変更する設定について説明しています。
開発
npm install
npm run build:fixtures
npm test
npm run check
テストは生成されたフィクスチャに対して実行され、リクエストは送信されません。ライブテストスイートの npm run test:live は、各ルートにつき1件のリクエストを送信し、毎晩サイト自体に対して実行されます。
貢献
不具合の報告、質問、アイデアはイシュートラッカーにお寄せください。変更の提案も歓迎します。まずチケットを作成すると、変更内容について合意しやすくなります。CONTRIBUTING.mdをご覧ください。
ライセンス
MIT ライセンスです。LICENSEをご覧ください。レシピの権利は Marmiton とその作者に帰属します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。