Agent Chef
Agent Chef is a meal-planning MCP server that automates weekly dinner proposals, voting, grocery list creation, and order tracking. - Run the full weekly workflow (propose, vote, select winners, get shopping list, record order) via run_agent_chef. - Get operating instructions and scheduling details. - Manage household settings (plan day, timezone, voting deadline, preferences, recipes per week, etc.). - Manage members: add/update/remove, get personal vote links, and track their votes. - Maintain pantry inventory to automatically trim the shopping list. - Add recipes from URLs with tags and favorites, and view past week history. - Propose recipe candidates for a week and re-propose if needed. - Cast or update votes per member on the ballot. - Collect ballot feedback/comments. - View past votes and historical results per week. - Select winning recipes by vote count and generate a consolidated shopping list. - Reopen voting or extend the voting deadline for a week. - Record ratings/feedback for served recipes to improve future suggestions. - Access the shopping list (grouped by item) minus ingredients on hand. - Record grocery orders and move weeks to 'ordered' status. - Send notifications (ballot, reminders, winners, feedback requests) via dry-run SMS/email providers. - Authenticate via OAuth or API key and manage connected agents.
Agent Chef MCP server
Family meal planning run by your own AI agent. Every week your agent proposes ten dinners, the household votes and leaves feedback from personal links (no accounts), the top picks win, and Agent Chef builds the grocery list minus what's already in the pantry. Your agent fills the cart; you approve checkout.
Website & how it works: https://agentchef.net
Remote MCP endpoint (Streamable HTTP):
https://agentchef.net/mcpOfficial registry entry:
net.agentchef/agent-chef
This repository is the public connector for the hosted service. The app itself runs at agentchef.net.
Connect
OAuth (Claude.ai, ChatGPT, Claude Desktop): add https://agentchef.net/mcp as a custom connector. The client discovers Agent Chef's authorization server, you sign in once and click Allow. No key needed.
API key (Claude Code, Cursor, Codex, scripts):
Sign in at https://agentchef.net, create your household, and open Settings → Agents.
Click Add to Claude / Add to ChatGPT / Claude Code / Cursor. You get an API key and exact steps for that agent.
Tell your agent: “Run Agent Chef.” It calls
run_agent_chef, receives the operating manual plus today's checklist, schedules itself to run twice a day, and takes it from there.
Manual configuration for any MCP client:
{
"mcpServers": {
"agent-chef": {
"url": "https://agentchef.net/mcp",
"headers": { "Authorization": "Bearer <your API key>" }
}
}
}Clients that can't set headers can use https://agentchef.net/mcp?key=<your API key>. OAuth discovery lives at /.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server.
Running locally over stdio
For clients that only speak stdio (and for directories that build servers in a container), this repo is a small Node
MCP server. It ships the full tool catalog, so initialize, tools/list and prompts/list work offline; tool calls run
on the hosted service for the household identified by AGENT_CHEF_API_KEY.
npx -y agent-chef-mcp # or: git clone … && npm install && npm start
AGENT_CHEF_API_KEY=ac_... node server.jsDocker:
docker build -t agent-chef-mcp .
docker run -i -e AGENT_CHEF_API_KEY=ac_... agent-chef-mcpClient config for stdio:
{
"mcpServers": {
"agent-chef": {
"command": "npx",
"args": ["-y", "agent-chef-mcp"],
"env": { "AGENT_CHEF_API_KEY": "ac_..." }
}
}
}Without a key the server still lists everything; tool calls return a message explaining where to get a key.
npm run sync refreshes catalog.json from the live server; npm test runs a stdio smoke test.
Related MCP server: @mealmastery/mcp-server
Tools (37)
Area | Tools |
Run loop |
|
Access |
|
Preferences |
|
Household |
|
Pantry |
|
Recipes |
|
Weekly cycle |
|
Shopping |
|
Prompts: run_agent_chef (also weekly_cycle).
Privacy & terms
https://agentchef.net/privacy · https://agentchef.net/terms · support@agentchef.net
Available Tools
39 toolsadd_ballot_feedbackAdd ballot feedbackB
Record a member's comment about the current ballot (optionally about one candidate), e.g. relayed from a text message. Members can also do this themselves on their vote page.
Inputs: comment (required), member_name (required), week_id, recipe_id. Returns: items
add_candidatesAdd candidates to the ballotA
Append extra recipes to the current voting ballot (positions continue after the existing ones; votes are kept; 15 max). Use in response to ballot_feedback from get_current_week; open feedback is marked addressed. Follow up with message_group so voters know new options are up.
Inputs: recipes (required), week_id, addresses_feedback. Returns: week, added, similar, feedback, +2 more
add_library_recipeAdd a Community recipeA
Copy a recipe from Community recipes (search_recipes with scope 'library') into this household. Pass favorite: true to also mark it a favorite. Returns the household's copy; use its id on ballots. Passing a library id straight to propose_recipes or add_candidates does the same copy automatically.
Inputs: recipe_id (required), favorite. Returns: id, tags, steps, title, +13 more
add_voteRecord a member's votesADestructive
Record one member's votes for the current week (replaces their earlier votes). Accepts recipe_ids or ballot positions. Unknown member names are created.
Inputs: member_name (required), week_id, positions, recipe_ids. Returns: tally, voted, votes, member, +1 more
assemble_online_grocery_orderGet the shopping list for an online cartARead-only
Returns the shopping list for filling an online grocery cart: everything this week's selected recipes need minus what is on hand, grouped by item with quantities and which recipe needs it, plus the preferred store. Drive the browser to fill the cart; stop before checkout for approval; then call record_grocery_order.
Inputs: week_id. Returns: week, items, store, recipes, +4 more
create_recipeSave a recipe you already haveA
Save a recipe to the library from details you already have: one you read in your browser (when a site blocks import_recipe or has no recipe markup), one the owner dictated, or one you wrote. Provide the complete ingredient list with quantities and the steps; include the source page and a real photo URL when you have them. Optionally mark it a favorite.
Inputs: steps (required), title (required), ingredients (required), tags, +5 more. Returns: id, url, tags, steps, +12 more
dismiss_setup_checklistHide the setup checklistA
Hides the 'Get set up' card on the household dashboard (e.g. when the owner says they don't need it). Pass show=true to bring it back.
Inputs: show. Returns: hidden
favorite_recipeFavorite a recipeB
Mark (or unmark) a recipe as a household favorite.
Inputs: recipe_id (required), favorite. Returns: id, tags, steps, title, +13 more
get_connected_agentsList connected agentsARead-only
Agents connected to this household via OAuth sign-in (Claude, ChatGPT…), with when they connected and last used. API keys are separate.
Inputs: no named parameters. Returns: items
get_current_weekGet current weekBRead-only
Where the cycle stands: latest week + status (voting/selected/ordered/done), candidates with tallies, who has/hasn't voted, selected recipes, pending_feedback. Call this first.
Inputs: week_id. Returns: hint, week, voted, members, +5 more
get_favorite_recipesGet favorite recipesARead-only
Recipes marked as household favorites, with ratings. Good candidates to re-propose by recipe_id.
Inputs: no named parameters. Returns: items
get_ingredientsGet ingredients on handARead-only
What the household already has, so the shopping list can skip it. Staples (staple: true) are always on hand unless marked out; leftovers carry expires_at and drop off on their own.
Inputs: no named parameters. Returns: items
get_instructionsHow to run Agent ChefARead-only
The full operating manual for agents: the run loop, phases, how to write recipes, messaging and safety rules. Read once per session.
Inputs: no named parameters. Returns: instructions
get_membersGet household membersARead-only
List household members with contact info, whether they have signed in to Agent Chef themselves (has_account), whether they get push notifications, and their personal vote links.
Inputs: no named parameters. Returns: items
get_past_recipesGet past recipesARead-only
Every recipe selected for a past week, newest first, with week, status, and ratings/comments. Use to avoid repeats and learn what landed.
Inputs: limit. Returns: items
get_past_votesGet past votesBRead-only
Historical ballots: per week, every candidate with vote count, voters, and whether it was selected.
Inputs: limit_weeks. Returns: items
get_recipeGet a recipeARead-only
Full details for one recipe: ingredients, steps, servings, source, tags, ratings, comments, how often it's been cooked, a link to its page, and a public share_url anyone can open.
Inputs: recipe_id (required). Returns: id, url, tags, steps, +20 more
get_recipe_preferencesGet recipe preferencesCRead-only
Household name, recipe preferences prompt (diet, allergies, dislikes, cuisines, time budget), shopping preferences prompt (brands, organic, store quirks) plus settings: plan_day, servings, grocery_store, recipes_per_week, votes_per_member.
Inputs: no named parameters. Returns: name, plan_day, servings, timezone, +8 more
import_recipeImport a recipe from a URLA
Fetch a recipe page (most cooking sites) and save it to the library with its real photo, ingredients, and steps. Returns the recipe; pass its recipe_id to propose_recipes or add_candidates to put it on a ballot.
Inputs: url (required), tags, favorite. Returns: id, url, tags, steps, +13 more
import_recipesImport several recipes from URLsA
Bulk version of import_recipe: fetch up to 15 recipe pages and save them to the library, optionally marking each as a favorite. Use when the owner is moving favorites from another app (Mealime, a meal kit, a recipe manager). Names without URLs are your job: search for a real recipe page first, then pass the URLs here. Per-URL failures are reported, not thrown.
Inputs: items (required), favorite_all. Returns: failed, imported
message_groupMessage the householdA
Send a push notification, SMS/MMS or email to household members. '{vote_link}' in the message becomes each member's personal voting link. Channel 'auto' texts members with a phone and emails the rest. Providers now: {"sms":"dry-run","email":"resend","push":"web-push"} (dry-run = logged only).
Inputs: message (required), kind, channel, subject, +2 more. Returns: results, providers
next_actionsWhat should happen nowARead-only
START HERE. Returns the current phase and an ordered checklist of tool calls that are due right now (propose, send ballot, remind non-voters, add options for feedback, lock in, shop), with why and the arguments/message text to use. Execute them, then call again until empty. Idempotent and time-aware; safe to call on a schedule.
Inputs: no named parameters. Returns: week, phase, voted, actions, +9 more
propose_recipesPropose this week's candidatesADestructive
Start a weekly cycle: store the candidate recipes (normally 10) and return numbered candidates, a ballot_text (with a {vote_link} placeholder for message_group), and each member's vote link. Re-calling for the same week_start replaces the candidates.
Inputs: recipes (required), week_start. Returns: week, similar, replaced, candidates, +3 more
rate_recipeRate a cooked recipeADestructive
Record post-cook feedback (1-5 + comment) for one member. Every member rates separately; a member's newer rating replaces their older one. Ratings never change the week's status.
Inputs: rating (required), recipe_id (required), member_name (required), comment. Returns: week, recipe, pending_feedback
record_grocery_orderRecord a placed grocery orderA
Log the placed order and move the week to 'ordered'. Staples marked out that were bought are back in stock (listed under restocked). Purchased items don't join the pantry since they get cooked this week; set add_to_on_hand to keep them as leftovers for 7 days.
Inputs: items (required), store, total, week_id, +2 more. Returns: week, order, restocked
record_scheduleRecord the recurring scheduleADestructive
Call after creating (or changing) the recurring 'Run Agent Chef.' task in your own scheduler, with a one-line description, e.g. 'Claude scheduled task, daily 9:00 and 18:00 America/Los_Angeles'. Lets the app stop reminding you and shows the owner that the loop is automated.
Inputs: description (required), cleared. Returns: ok, agent_schedule
remove_memberRemove a memberADestructive
Remove a household member by name (their votes and ratings stay attached to past weeks). The owner can't be removed.
Inputs: name (required). Returns: items
reopen_votingReopen votingADestructive
Undo set_this_weeks_recipes: clears the winners and returns the week to 'voting'. Existing votes are kept. Use if winners were locked in too early.
Inputs: week_id. Returns: week, candidates
revoke_connected_agentDisconnect an agentADestructive
Revoke an OAuth-connected agent's access (client_id from get_connected_agents). It must sign in again to reconnect.
Inputs: client_id (required). Returns: revoked
run_agent_chefRun Agent ChefARead-only
The one call to make when the user says 'run agent chef' (or run the app / plan dinner / do the weekly thing). Returns the operating manual plus the checklist of tool calls that are due right now. Execute them in order, then call next_actions again until it returns no actions. Stop before any checkout.
Inputs: no named parameters. Returns: week, phase, voted, how_to, +12 more
search_recipesSearch the recipe libraryARead-only
Every recipe the household has ever had proposed, with ratings and cook counts. Filter by text, favorites, or tag. Use recipe_id from here with propose_recipes to re-propose.
Inputs: tag, query, scope, favorites_only. Returns: items
send_feedbackSend feedback to Agent ChefA
Pass the owner's feedback about Agent Chef itself (a bug, a missing feature, something confusing) to the people who build it. Use when the owner says something like 'tell Agent Chef that…' or complains about the tool. Not for messages to the household.
Inputs: message (required), contact. Returns: ok, message
set_recipe_imageAttach a photo to a recipeADestructive
Store a photo for a recipe permanently and set it as the recipe's image. Use for images you generated with your image tool (their URLs expire) or any photo you have as a URL or base64. Pass either image_url (we fetch and copy it) or image_base64 + content_type. Max 6 MB; JPEG, PNG, WebP or GIF.
Inputs: recipe_id (required), image_url, content_type, image_base64. Returns: image_url, recipe_id
set_this_weeks_recipesSelect this week's recipesADestructive
Lock in the dinners. With no recipe_ids, picks the top N (recipes_per_week) by votes; a tie at the cutoff goes to the earlier ballot position and is reported under tie_break. With recipe_ids, those become the dinners exactly: any number, any household or Community recipe, on the ballot or not (off-ballot picks are added to the week). Call again to change them; an ordered week stays ordered. Moves a voting week to 'selected' and returns the shopping list.
Inputs: week_id, recipe_ids. Returns: week, selected, tie_break, share_hint, +2 more
set_voting_deadlineMove the voting deadlineADestructive
One-off override of when the current ballot closes: an ISO timestamp, or extend_hours from the current deadline. Normally the deadline comes from the household schedule (vote_close_day/time); changing those via update_recipe_preferences re-syncs the current week.
Inputs: week_id, closes_at, extend_hours. Returns: week, closes_local
update_ingredientsUpdate ingredients on handADestructive
Keep the pantry: add staples the household always has (omit days), add leftovers that should be skipped for a while and then drop off (days, 7 is typical), mark staples out when they run low so they go back on the shopping list, or remove items. Adding a staple that was out puts it back in stock. Don't add a week's groceries: they get cooked that week.
Inputs: add, out, remove, replace_all. Returns: items
update_recipeUpdate a recipeADestructive
Edit a stored recipe: fix an ingredient, add steps, change servings, tags, image or source, or set public to publish it on agentchef.net/recipes. Only provided fields change.
Inputs: recipe_id (required), tags, steps, title, +6 more. Returns: id, tags, steps, title, +11 more
update_recipe_preferencesUpdate recipe preferencesBDestructive
Update any subset of the preferences prompt and settings. Omitted fields are unchanged.
Inputs: name, plan_day, servings, timezone, +8 more. Returns: id, name, plan_day, servings, +11 more
upsert_memberAdd or edit a memberADestructive
Add a household member, or edit one: name is the key (case-insensitive), or pass member_id from get_members to rename. Phone and email update when given; an empty string clears them. Use this when someone wants to add or fix a member's contact details; never remove and re-add, which breaks their vote link. Roles: member (default) can vote, rate and browse once they sign in; admin can also change settings, recipes and weeks like the owner.
Inputs: name (required), role, email, phone, +1 more. Returns: id, name, role, email, +4 more
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 39 tools
Most tools target a distinct resource+action (propose_recipes vs add_candidates, import_recipe vs create_recipe, add_vote vs add_ballot_feedback), and the verbose descriptions clarify boundaries well. The main soft spot is run_agent_chef vs next_actions, which both return checklists, plus the family of get_* read tools, but descriptions make these workable.
Nearly everything is snake_case verb_noun (get_members, update_ingredients, add_vote, import_recipe, record_grocery_order), which is very predictable. A few outliers break the verb_noun form slightly (next_actions, favorite_recipe, message_group, send_feedback) but the convention stays readable and consistent.
39 tools is well past the 25+ threshold the rubric flags as too many for a single server. The domain (voting, recipes, pantry, members, grocery, messaging) is genuinely broad, but the surface is heavy enough to burden an agent's tool selection.
The lifecycle is well covered: recipes (create/import/read/update/favorite/image), members (add/edit/remove/agents), pantry, votes, weekly cycle (propose/add/lock/reopen/deadline), grocery (assemble/record) and messaging. Only minor gaps exist, such as no explicit recipe deletion.
Related MCP Connectors
Family meal planning run by your agent: weekly dinners, household votes, grocery list minus pantry.
Shared, tested playbooks (recipes) for AI agents. Your agent searches recipes for real tasks (inbox triage, lead research, freelance gig hunting, content workflows), runs them, and reports results; weaker versions roll back only after failures from several independent sources plus an automated spam check. Free, no install, no email needed: one remote MCP URL.
Household-aware cooking brain: pantry, meal suggestions, dietary safety, recipes, shopping lists.
AI meal plans that fill your Kroger/Instacart cart - pantry-aware lists, all from chat.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server that gives AI agents full control over grocery lists, todos, and packing lists. Your AI creates lists, adds items, checks them off, and shares with family/friends.4MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for MealMastery AI meal planning that enables users to manage meal plans, recipes, and grocery lists through natural language conversation with AI agents like Claude.57 npmMIT
- FlicenseBqualityDmaintenanceEnables AI agents to generate budget-disciplined, allergy-safe weekly meal plans, shopping lists, and meal swaps using a fully local deterministic engine.20-
- FlicenseAqualityDmaintenanceA full-featured Mealie MCP server (27 tools) for recipe management, meal planning, and shopping lists, bundled with Claude Code skills and agents for family-friendly, dietary-compliant cooking guidance.272-