Cook (Cooklang recipes) について
Cookは、Cooklangのレシピ集を扱うAIエージェント向けのローカルMCPサーバーです。レシピの検索、検証、編集、整理に対応し、cook.mdへのログイン後は栄養計算や一部のインポートも利用できます。
主な機能
- 01レシピの読み取り・検索・検証
- 02レシピとメニューファイルの作成
- 03プランから買い物リストを作成
- 04パントリー在庫と期限の管理
- 05カスタムレポートの生成
- 06栄養計算とレシピのインポート
活用シーン
- 01週の献立と買い物リストの作成
- 02レシピ集の参照切れを確認
- 03在庫から作れる料理を検索
- 04ウェブページや写真からレシピを取り込む
MCP 対応
MCPサーバーはCooklangのレシピ用ツール、プロンプト、リソースをMCPクライアントに提供します。レシピファイルは指定したローカルフォルダーに保存され、栄養計算と一部のインポートにはcook.mdへのログインが必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
cook-mcp
AI エージェント(Claude Code、Claude Desktop、Cursor、ChatGPT、その他の MCP クライアント)が、お使いの Cooklang レシピコレクションにアクセスできる MCP サーバーです。レシピは、所有するフォルダー内に通常の .cook ファイルと .menu ファイルとして保存されます。エージェントはレシピの読み取り、検索、検証、書き込み、買い物リストの作成、パントリーの管理、レポートの生成をすべてローカルで行えます。アカウントは不要です。cook.md にログインすると、栄養計算や、写真およびソーシャルリンクからのレシピのインポートも利用できます。
インストール
Claude Code:
claude mcp add cook -- npx -y @cookmd/mcp
mcpServers 設定を利用できるクライアント:
{
"mcpServers": {
"cook": {
"command": "npx",
"args": ["-y", "@cookmd/mcp"],
"env": { "COOK_RECIPES_DIR": "/path/to/recipes" }
}
}
}
COOK_RECIPES_DIR が設定されていない場合、サーバーはクライアントが共有するワークスペースフォルダー、またはクライアントの起動元フォルダーを使用します。レシピフォルダーの選択方法をご覧ください。
対応プラットフォーム:macOS(arm64、x64)および Linux(x64、arm64、glibc 2.35 以降)。Windows ビルドはまだありません。
各クライアント向けのセットアップ手順:https://cook.md/help/mcp
Claude Code プラグイン
Claude Code ユーザーは、サーバーを手動で追加する代わりに cooklang プラグインをインストールできます。cooklang/cooklang-skills にあり、このサーバーと以下のスキルがバンドルされています。
/plugin marketplace add cooklang/cooklang-skills
/plugin install cooklang@cooklang-skills
プラグインは、Claude Code のプロジェクトフォルダーをレシピのルートとしてサーバーを起動します。Claude Code は、依頼内容(「来週の夕食を計画して」「このレシピは有効?」など)に応じて適切なスキルを選択します。すでに claude mcp add cook でサーバーを追加している場合は、二重起動を避けるため、その登録を削除してください。
スキル(このサーバーから cooklang://skills/<name> リソースとしても提供されます):
| スキル | 用途 |
|---|---|
cooklang-editing | 新しいレシピの作成、または .cook ファイルの編集や修正 |
cooklang-validation | レシピ、フォルダー、またはコレクション全体のエラーや壊れた参照の確認 |
metadata | YAML フロントマター(タイトル、タグ、分量、時間)の追加や修正。一括変更にも対応 |
recipe-import | URL、写真、貼り付けたテキストからレシピをインポート |
recipe-search | 材料、タグ、料理の種類、コース、または覚えているフレーズからレシピを検索 |
scale-recipe | 分量を増減したレシピを表示 |
export-recipe | レシピを Markdown、JSON、プレーンテキスト、HTML に変換 |
organize-collection | フォルダー構成、メタデータ監査、売り場とパントリーの設定、ライブラリー全体のチェック |
meal-planning | .menu の献立プランを作成または編集 |
shopping-list | レシピやプランから、売り場ごとにまとめた買い物リストを作成。パントリーの在庫分は差し引き |
pantry | 在庫、期限、残り少ない食材を管理。手元にあるもので何を作れるか確認 |
report-authoring | render_report を使ったカスタム Jinja レポートや印刷用データの作成 |
nutrition-reports | 栄養評価とスクリーニング(Cook Basic または Pro) |
nutrition-goals | 栄養目標を達成できるよう、レシピやプランを変更(Cook Basic または Pro) |
このリポジトリ内の skills/ が正式なコピーです。プラグインリポジトリはここから同期します。各スキルは skills/<name>/SKILL.md にあります。
ツール
無料(ローカル、ログイン不要)
| ツール | 内容 |
|---|---|
list_recipes | レシピ、献立、またはレポートテンプレートを一覧表示します(kind:recipe、menu、template、all) |
read_recipe | レシピまたは献立を読み込みます。ソースに加えて、解析済みの材料、調理器具、手順、メタデータを取得できます。オプションで分量を調整できます |
search_recipes | 名前や内容を検索します。タグで絞り込むこともできます |
validate | ファイル、フォルダー、コレクション全体、または未保存のコンテンツを検証し、エラーや参照切れを確認します |
write_recipe | .cook レシピを保存します(先に検証します) |
write_menu | .menu 献立を保存します(先に検証します) |
write_config | config/aisle.conf、config/pantry.conf、または reports/ や config/reports/ 内の .jinja レポートテンプレートを保存します |
shopping_list | レシピや献立から買い物リストを作成します。重複をまとめ、売り場ごとに分類し、パントリーの在庫を差し引きます |
pantry_list | パントリーの内容をセクションごとに表示します |
pantry_expiring | まもなく期限切れになる品目を表示します |
pantry_depleted | 在庫が少ないときのしきい値以下の品目を表示します |
pantry_recipes | パントリーにある食材で作れるレシピを表示します |
pantry_update | パントリーの品目を追加、更新、削除します |
render_report | レシピまたは献立を対象に、Jinja レポートテンプレートをレンダリングします(通常のテンプレートにはログイン不要です) |
Cook Basic / Pro(cook.md ログイン)
| ツール | 内容 |
|---|---|
login | cook.md のデバイスログインを開始します。コードと URL が表示されます |
auth_status | ログイン状態、プラン、インポート可能回数を表示します |
get_nutrition | 1種類の食材の分量に対する栄養情報を取得します |
aggregate_nutrition | 複数の食材行の栄養情報を合計します |
lookup_ingredient | 食材カタログをあいまい検索します |
convert_units | 単位を変換します(体積から重量への変換には密度が必要です) |
check_category | 食材が特定のカテゴリに属するかを確認します |
branded_lookup | バーコードまたはテキストで包装済み商品を検索します |
reference_intakes | 1日の参照摂取量の表(RDA/DV)を取得します |
import_recipe | ウェブページ、写真、または貼り付けたテキストを Cooklang に変換します |
ウェブページや貼り付けたテキストからの import_recipe は、ログインなしで利用できます。写真やソーシャルメディアのリンクには cook.md アカウントが必要で、インポート可能回数を使用します。Cooklang テキストを返しますが、保存はしません。エージェントが検証してから write_recipe を呼び出します。render_report 内の栄養関連関数にも Cook Basic または Pro が必要です。
プロンプトとリソース
プロンプト:meal-planning、shopping-list、pantry、import-recipe、edit-recipe、nutrition-report、nutrition-goals、scale-recipe。
リソース:
cooklang://spec:Cooklang の仕様cooklang://syntax:構文リファレンスcooklang://menu-format:.menu献立フォーマットcooklang://skills/<name>:エージェント向けの実践ガイド。上記の表にある各スキルに対応しています:cooklang-editing、cooklang-validation、export-recipe、meal-planning、metadata、nutrition-goals、nutrition-reports、organize-collection、pantry、recipe-import、recipe-search、report-authoring、scale-recipe、shopping-list
安全性
- 書き込み先はレシピのルートディレクトリ内に限られます。範囲外のパスは拒否されます。
- すべての書き込みは事前に検証されます。無効な Cooklang は保存されません。
- 非推奨の
>>メタデータ構文は拒否されます。YAML フロントマターを使用してください。 - 削除ツールはありません。エージェントがファイルを削除することはできません。
既知の制限事項
- 買い物リストで在庫を差し引く処理は、単位が一致する場合にのみ機能します。たとえば、パントリーにある 1 kg は、レシピの 200 g とは相殺されません。これは cookcli-core の制限です。
- レシピフォルダー内のシンボリックリンクは、読み込みや一覧表示の際にほとんどたどられません。ただし、拡張子なしの名前で指定されたシンボリックリンクや、レシピの
@./参照を通じて到達したシンボリックリンクは、たどられる場合があります。これは、フォルダー外を指すシンボリックリンクをレシピに配置した場合にのみ問題になります。 - Windows 向けビルドはまだありません。
- 削除ツールはありません。
環境変数
| 変数 | デフォルト | 意味 |
|---|---|---|
COOK_RECIPES_DIR | クライアントのルート、その後に作業ディレクトリ | レシピのルートです。すべてのパスはこのルートからの相対パスです。設定されている場合は常に優先されます。 |
COOKMD_BASE_URL | https://cook.md | ログイン、利用権限、インポート |
NUTRITION_API_URL | https://nutrition.cook.md | 栄養サービス |
NUTRITION_API_TOKEN | なし | 組織キーまたは事前作成されたトークンです。保存済みのログイン情報より優先されます。 |
COOK_MCP_AUTH_PATH | ~/.config/cook-mcp/auth.json | トークンの保存先です。旧 NUTRITION_MCP_AUTH_PATH もエイリアスとして引き続き使用できます。 |
レシピフォルダーの選択方法
COOK_RECIPES_DIRが設定されている場合はそれを使用します。それ以外は参照しません。- クライアントの MCP ルートです。クライアントがルートをサポートしている場合(開いているワークスペースフォルダーをサーバーと共有する場合)、既存のフォルダーである最初の
file://ルートがレシピのルートになります。サーバーは最初のレシピツール呼び出し時と、クライアントからルートの変更が通知されるたびに問い合わせます。クライアントが 5 秒以内に応答しない場合、サーバーは作業ディレクトリを使用し、後で再度問い合わせます(最大 30 秒に 1 回)。 - クライアントがサーバーを起動したフォルダーです。
ルートとは、意図的に開いたフォルダーです。そのため、/、ホームフォルダー、またはエージェントのプラグインインストールフォルダー内(たとえば ~/.codex/plugins/cache/...、~/.gemini/extensions/...、または CLAUDE_PLUGIN_ROOT が指すフォルダー)でない限り使用されます。作業ディレクトリはより厳密に確認されます。作業ディレクトリ自体、またはその 4 階層上までのフォルダーに .claude-plugin/plugin.json、Agent Plugins の plugin.json、または gemini-extension.json がある場合も拒否されます。そうしないと、サーバーを自身のインストールフォルダーで起動するプラグインが、誤ったファイルを公開し、更新時に消去されるフォルダーにレシピを書き込むおそれがあるためです。使用可能なフォルダーが見つからない場合、レシピツールはレシピフォルダーが設定されていないこと、その理由、COOK_RECIPES_DIR で解決できることを伝えます。auth_status には recipe_root_source: "unset" と表示されます。それ以外の場合、recipe_root_source は env、roots、または cwd です。
各クライアントの動作:
-
Claude Code はプロジェクトフォルダーをルートとして送信することが確認されているため、設定は不要です。
-
Codex はルートを送信せず(0.160.1 で確認済み)、サーバーをプラグインフォルダーで起動する可能性があるため、
COOK_RECIPES_DIRを設定してください:codex mcp add cook --env COOK_RECIPES_DIR=/path/to/recipes -- npx -y @cookmd/mcp -
VS Code と Cursor はルートのサポートをドキュメントで案内しています(ここでは未確認)。レシピツールにフォルダーが設定されていないと表示された場合は、サーバーの設定で
COOK_RECIPES_DIRを設定してください。
質問例
- 「レシピから来週の夕食を計画して、買い物リストを作成してください。」
- 「パントリーにあるもので何が作れますか?」
- 「コレクション全体を確認して、壊れた参照がないか調べてください。」
- 「https://example.com/some-recipe をレシピとしてインポートしてください。」
- 「今週のプランにはタンパク質がどれくらい含まれていますか?」(Cook Basic または Pro が必要です)
ソースからビルドする
cargo build --release
cargo test
バイナリは target/release/cook-mcp です。stdio 経由で MCP と通信します。cook-mcp login と cook-mcp logout を使用すると、ターミナルから cook.md のログインを管理できます。
nutrition-mcp からの移行
@cookmd/nutrition-mcp は引き続き動作します。現在は @cookmd/mcp を実行する薄いシムです。切り替えるには、MCP 設定のパッケージ名を @cookmd/mcp に変更してください。ログイン情報は引き継がれます。
変更点は 2 つあります。レシピツールには COOK_RECIPES_DIR が必要です(以前の設定では指定されていませんでした)。または、クライアントをレシピフォルダーで起動してください。どちらも設定されていない場合、レシピツールはレシピフォルダーが設定されていないことをエージェントに伝えます。また、render_report のパスはレシピフォルダーからの相対パスになりました。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。