「パパ、MCPを使えば献立考えるの楽になるよ」
とある平日の夕方
娘「ねぇパパ、今日の晩ご飯なに?」
ワイ「うーん……冷蔵庫にウインナーと残りもんのキャベツあるから、焼きそばにでもしよか」
娘「また焼きそば? 3日連続なんだけど」
ワイ「献立考えるのって、ほんま骨折れるんや! 仕事終わってクタクタやのにレシピ探す余裕ないねん」
娘「……だったらパパ、機械に任せればいいじゃん」
ワイ「機械て、お前また電子レンジに喋りかけるつもりか?」
娘「違うよ。MCPサーバー立てて、レシピをツールとして公開して、あとはLLMに献立考えさせればいいだけだよ」
ワイ「M…C…P? なんやそれ新しい格闘ゲームか?」
娘「“Model Context Protocol” の略。ローカルで動くツール群を LLM が呼び出せる仕組み。
最近 ChatGPT や Claude と繋げるの流行ってるでしょ?」
MCPサーバーって何を作ればいいの?
ワイ「せやけどワイ、APIとかよー分からへんわ」
娘「心配ご無用。ツールは2個だけでいいよ」
ツール名 | 役割 | 引数 | 戻り値 |
---|---|---|---|
list_tags() |
料理タグ一覧を返す | – | string[] |
get_recipes_by_conditions() |
時間・カロリー条件でレシピを返す |
max_time , max_calories
|
Recipe[] |
娘「この 2 つを Python でも TypeScript でもいいから実装して、mcp.run(transport='stdio')
で起動。
Claude for Desktop に登録すれば、LLM 側が勝手に呼んでくれるから!」
ワイ「どうことや?さっぱりわからん」
娘「見たほうが早いよ、10分で作るから見逃さないでね」
娘による10分クッキング
-
レシピデータを
recipes.json
に保存[ { "title": "鶏の照り焼き", "tags": ["主菜", "肉"], "time": 20, "calories": 450 }, { "title": "ほうれん草のお浸し", "tags": ["副菜", "ヘルシー"], "time": 10, "calories": 60 }, { "title": "味噌汁", "tags": ["汁物"], "time": 15, "calories": 90 } ]
-
MCPサーバーファイル
menu.py
from mcp.server.fastmcp import FastMCP import json, random mcp = FastMCP("menu") RECIPES = json.load(open("recipes.json", encoding="utf-8")) @mcp.tool() # 一覧ツール async def list_tags() -> list[str]: tags = {t for r in RECIPES for t in r["tags"]} return sorted(tags) @mcp.tool() # 条件検索ツール async def get_recipes_by_conditions(max_time:int=30, max_calories:int=500): return [r for r in RECIPES if r["time"]<=max_time and r["calories"]<=max_calories] if __name__ == "__main__": mcp.run(transport="stdio")
-
Claude for Desktop 設定
claude_desktop_config.json
に{ "mcpServers": { "menu": { "command": "python", "args": ["menu.py"] } } }
ワイ「……ホンマに10分で書きよった!」
娘「ソース短いからね。あとはLLM側プロンプトに
『夕食を考えて。カロリーは700kcal以内、30分で作れる献立にして』って頼めば完了。」
実際に使ってみた
- Claude に「今日の献立よろしく。30分以内・600kcal以内」と送信
- Claude →
list_tags()
でタグ把握 - Claude →
get_recipes_by_conditions(30,600)
呼び出し - Claude が返ってきたレシピを組み合わせ、提案メニューを自然文で回答
Claude の返答例
- 主菜: 鶏の照り焼き (450kcal / 20分)
- 副菜: ほうれん草のお浸し (60kcal / 10分)
- 汁物: 味噌汁 (90kcal / 15分)
合計 600kcal / 同時調理で約25分
ワイ「……ええやん! これ明日から毎日頼むわ」
娘「でしょ? パパの仕事が1つAIに代替されたね!」
ワイ「作るところまでやってくれると嬉しいんだけど」
娘「パパは怠惰だな〜」
おまけ: 娘、ひらめく
娘「ねぇパパ、今日もAIくんに献立考えてもらっていい?」
ワイ「いいよ」
娘「じゃあ、AIくん今日の献立はスイーツ中心でお願い」
ワイ「えええ? 待て待て待て待て」
Claude の返答
スイーツ中心の今日の献立をご提案します!【主役スイーツ】
- クッキーシュー(約300kcal/60分)
- 厚切りフレンチトースト(約500kcal/20分)
【サイドにおすすめ】
- ブロッコリーと卵のサラダ(250kcal/20分)
※甘いものの合間に、さっぱりサラダもおすすめ!お好みでフルーツやアイスを添えても楽しいですよ!
他にもスイーツレシピを知りたい場合は、ジャンルや材料を教えてください!
娘「やったぁ!今晩はクッキーシューとフレンチトーストだね!」
ワイ「トホホ・・・いろいろ制約つけなアカンな・・・」
まとめ
- 献立を考えるのが面倒 → LLM+MCP で自動化
- MCPサーバーは簡単に作れる
- コード: GitHub - ackkerman/recipes/mcp-server
〜おしまい〜
Discussion