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.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | Yes | ||
| week_id | No | ||
| recipe_id | No | ||
| member_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a non-read-only, non-destructive, closed-world write, so the safety profile is covered. The description adds that feedback is a member comment optionally tied to one candidate, but says nothing about validation (must member exist?), duplicate handling, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core action front-loaded. The use-case examples earn their place, though the parenthetical and the 'do it themselves' remark could be trimmed slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. Still, as a mutation tool with 4 zero-coverage parameters, the description leaves week_id and recipe_id usage to inference, which is a real gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 4 parameters, so the description must carry the semantics. It only loosely maps: comment, the 'current ballot' (week_id) and 'one candidate' (recipe_id) — but member_name and the id fields are never explained, leaving half the parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Record) and resource (a member's comment about the current ballot), plus the optional candidate scope. It doesn't explicitly name distinguishing siblings like add_vote or send_feedback, but the resource is concrete enough to separate it from generic feedback tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied by 'relayed from a text message' and 'Members can also do this themselves on their vote page', suggesting the agent records comments on a member's behalf. However, it never states when to use this versus add_vote or send_feedback, nor any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| recipes | Yes | ||
| week_id | No | ||
| addresses_feedback | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| week | Yes | |
| added | Yes | |
| similar | Yes | New recipes that closely resemble one the household already has; consider using theirs |
| feedback | Yes | |
| replaced | Yes | New recipes swapped for the household's own version of the same dish; the existing recipe is on the ballot instead |
| candidates | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, openWorldHint=true, and the description adds real behavioral detail beyond them: votes are preserved, positions are appended rather than replacing, a 15-item cap applies, and open feedback is marked addressed as a side effect. The 15 max and the feedback mutation are the meaningful additions; it still doesn't state failure modes when the cap is exceeded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the behavioral constraint, then the trigger, then the follow-up — no filler sentences. Slightly dense with parentheticals but every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with an output schema and annotations, the description covers the effect, the cap, the trigger, and the required next step, which is nearly everything needed to call it correctly. The only real gap is the unexplained week_id parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Top-level schema coverage is reported as 0% for recipes, week_id, and addresses_feedback. The description compensates partially by implying addresses_feedback semantics ('open feedback is marked addressed') and the append/15-max constraint on recipes, but week_id is never explained, so the schema gap is not fully closed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Append') and resource ('extra recipes to the current voting ballot'), and the parenthetical clarifies the exact effect on the ballot (positions continue, votes kept). An agent can distinguish this from siblings like propose_recipes or add_vote without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the trigger condition ('in response to ballot_feedback from get_current_week') and the required follow-up ('Follow up with message_group'), routing the agent to the correct sibling both before and after invocation. This is precise when/when-not guidance grounded in named tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| favorite | No | Default false | |
| recipe_id | Yes | Library recipe id from search_recipes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| tags | No | |
| steps | No | |
| title | Yes | |
| ratings | No | |
| servings | No | |
| image_url | No | |
| is_public | No | |
| avg_rating | No | |
| created_at | No | |
| public_url | No | Indexable public page, when published |
| source_url | No | |
| description | No | |
| ingredients | No | |
| is_favorite | No | |
| image_generated | No | Photo was generated by Agent Chef, so it is safe to show publicly |
| source_recipe_id | No | Set when this is the household's copy of a Community recipe |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, and the description adds real behavioral detail beyond them: a household copy is created, favorite=true has a side effect, and the returned id is the household's copy rather than the library id. It does not cover permissions, failure modes, or whether re-adding duplicates an existing copy.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action, then the optional flag, then the return-value routing advice. No filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be documented, yet the description still flags that the returned id is the household copy to use on ballots — the one downstream detail an agent must know. Nothing essential is missing for a two-parameter copy tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: recipe_id must come from search_recipes (library scope), and favorite: true not only sets a flag but marks the copy a favorite.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'Copy a recipe from Community recipes ... into this household.' It also disambiguates from siblings import_recipe/create_recipe by naming the source collection and the search_recipes scope that identifies it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: names search_recipes with scope 'library' as the source, and states that passing a library id straight to propose_recipes or add_candidates achieves the same copy automatically, so the agent knows when this call is redundant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| week_id | No | ||
| positions | No | Ballot numbers, 1-based | |
| recipe_ids | No | ||
| member_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| tally | Yes | |
| voted | Yes | |
| votes | Yes | recipe_ids now held by this member |
| member | Yes | |
| not_yet_voted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, so the description's 'replaces their earlier votes' clarifies exactly what is destroyed. It also discloses that unknown member names are created, which is behavior not covered by annotations. However, it doesn't disclose further behaviors like validation or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences that front-load the core action and its replacement semantics, then add the input alternatives. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the destructiveHint annotation and the presence of an output schema, the description provides sufficient context for invoking the tool, covering the replacement behavior and member creation. It could mention the expected response or validation, but the output schema likely covers returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, so the schema leaves most parameters undocumented. The description adds meaning by noting the choice between recipe_ids and ballot positions, but doesn't explain the week_id or member_name parameters. This is a modest improvement over the schema's bareness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Record) and resource (member's votes for the current week). Distinguishes itself from siblings like add_ballot_feedback and rate_recipe through the 'replaces their earlier votes' semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage (recording a member's weekly votes) but doesn't explicitly state when to use this vs alternatives like add_ballot_feedback or rate_recipe. No exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| week_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| week | Yes | |
| items | Yes | |
| store | Yes | |
| recipes | Yes | |
| servings | Yes | |
| instructions | Yes | |
| skipped_on_hand | Yes | |
| shopping_preferences | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds real behavioral value beyond that: the list is computed as needed-minus-on-hand, it drives a browser step, and it must pause before checkout for human approval. Only the return/pagination format is left unstated, which is minor given the output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences: the first front-loads what is returned and its structure, the second front-loads the workflow. No filler, nothing repeated from annotations or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, and annotations cover the safety profile. What remains — where this fits in the ordering workflow and what to call next — is fully supplied, making it complete for an agent to act on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter (week_id) with 0% schema description coverage, so the description must carry the meaning. It only implies the parameter via 'this week's selected recipes', suggesting a default/current week, without naming or explaining week_id or how to target a different week.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (returns the shopping list for an online grocery cart) and enumerates the payload contents: recipes minus on-hand, grouped by item with quantities and recipe attribution, plus preferred store. This is clearly distinguishable from siblings like record_grocery_order or get_ingredients.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit workflow context: drive the browser to fill the cart, stop before checkout for approval, then call record_grocery_order. It names the downstream sibling and the sequencing constraint. It stops short of saying when this tool should not be used (e.g. before recipes are set), so it is not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| steps | Yes | ||
| title | Yes | ||
| favorite | No | ||
| servings | No | ||
| image_url | No | A real, publicly reachable photo of the dish; verified by the server and dropped if dead | |
| source_url | No | ||
| description | No | ||
| ingredients | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| tags | No | |
| steps | No | |
| title | Yes | |
| servings | No | |
| image_url | No | |
| is_public | No | |
| created_at | No | |
| public_url | No | Indexable public page, when published |
| source_url | No | |
| description | No | |
| ingredients | No | |
| is_favorite | No | |
| image_generated | No | Photo was generated by Agent Chef, so it is safe to show publicly |
| source_recipe_id | No | Set when this is the household's copy of a Community recipe |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds useful context beyond that: the ingredient list must be complete with quantities, steps are required, and a submitted photo URL must be real because the server verifies and drops dead links. It still says nothing about duplicate handling (same title already saved) or what happens to an existing recipe with the same name, which is the main behavioral uncertainty for a create tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, followed by the qualifying scenarios and then the required-input guidance; no sentence is filler. It is a single dense paragraph, which is acceptable but slightly harder to scan than a short bulleted split would be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations cover the mutation/safety profile. For a nine-parameter create tool the description covers purpose, triggers, and the two data-quality-critical inputs (ingredients with quantities, real image URL); the remaining gap is duplicate/overwrite behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 11%, so the description has to compensate, and it does for the important fields: it explains that ingredients need quantities and steps must be supplied, that source_url and image_url are wanted when available, and that favorite is an optional flag. It leaves tags, servings, description and the title field unaddressed, so a few of the nine parameters still rely on bare schema type information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ("Save a recipe to the library") and then enumerates three concrete situations the tool covers: a recipe read in the browser where import_recipe is blocked or the page has no markup, an owner-dictated recipe, and one the agent wrote itself. It explicitly distinguishes this from import_recipe, so an agent can pick without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the alternative ("when a site blocks import_recipe or has no recipe markup") and the other qualifying contexts (dictated, self-authored), which is close to explicit when/when-not guidance. It stops short of differentiating from the other write-path siblings in the list, notably add_library_recipe and update_recipe, so an agent could still hesitate between those.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| show | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| hidden | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the non-obvious fact that this 'dismiss' tool is actually a reversible toggle via show=true, which the name and annotations do not convey. It does not mention permission requirements for an owner-level dashboard change.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the action and target come first, the trigger example and the reversal follow. No filler, nothing restated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need no explanation, and annotations cover the safety profile. The description supplies purpose, trigger and reversal; only minor gaps remain, such as idempotency of repeated dismissal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the lone parameter 'show' is undocumented in the schema, so the description must carry the load. It does so by explaining that show=true restores the card, resolving the otherwise confusing boolean on a tool named 'dismiss'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it hides the 'Get set up' card on the household dashboard. No sibling tool operates on the dashboard checklist, so the agent can immediately tell this apart from the recipe/voting/member tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete trigger scenario ('when the owner says they don't need it') and explicitly states how to reverse the action ('Pass show=true to bring it back'). It does not state when NOT to use it or name alternatives, but there are no competing siblings for this purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
favorite_recipeFavorite a recipeB
Mark (or unmark) a recipe as a household favorite.
| Name | Required | Description | Default |
|---|---|---|---|
| favorite | No | ||
| recipe_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| tags | No | |
| steps | No | |
| title | Yes | |
| ratings | No | |
| servings | No | |
| image_url | No | |
| is_public | No | |
| avg_rating | No | |
| created_at | No | |
| public_url | No | Indexable public page, when published |
| source_url | No | |
| description | No | |
| ingredients | No | |
| is_favorite | No | |
| image_generated | No | Photo was generated by Agent Chef, so it is safe to show publicly |
| source_recipe_id | No | Set when this is the household's copy of a Community recipe |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the write-but-non-destructive safety profile is covered. The description adds the useful fact that this is a reversible toggle (mark OR unmark), but says nothing about scope (household-wide), permissions, or effects on existing favorites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the toggle behavior is stated immediately. It is efficient, though the extreme brevity contributes to the missing guidance elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations cover the safety profile. However, with 0% schema description coverage and no usage guidance, the description is too thin for a two-parameter mutation tool, leaving param meaning and invocation context to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and neither parameter is documented. The 'mark (or unmark)' phrasing loosely implies the boolean favorite flag, but the description never names the favorite parameter, its default, or explains recipe_id, leaving both params effectively undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (mark/unmark) and resource (recipe as household favorite), making the toggle behavior clear. It does not explicitly differentiate itself from the sibling get_favorite_recipes or update_recipe, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use context, no prerequisites, and no mention of alternatives like get_favorite_recipes or update_recipe. An agent must infer usage purely from the name and the toggle semantics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine context beyond that: the connection mechanism (OAuth), concrete agent examples, and the scope exclusion that API keys are handled separately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler, and the core identification (agents connected via OAuth) is front-loaded ahead of the scoping caveat. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values (connect time, last-used time) need not be restated and are correctly only gestured at. The read-only nature is well conveyed; the only gap is the absence of explicit usage routing, which is a minor shortfall for a simple list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics for the description to document; the baseline for a no-parameter tool is 4. Nothing here misrepresents the (empty) input surface.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource (list agents connected to this household) and enriches it with the connection type (OAuth sign-in) and examples (Claude, ChatGPT). It is clear, though it does not explicitly name the sibling revoke_connected_agent as its counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance and no named alternatives. The clause 'API keys are separate' implies a scope boundary (OAuth agents only) but leaves the agent to infer it rather than stating when to call this versus other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| week_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | |
| week | No | |
| voted | No | |
| members | No | |
| selected | No | |
| candidates | No | |
| not_yet_voted | No | |
| ballot_feedback | No | |
| pending_feedback | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds that this is an aggregating snapshot spanning voting state, tallies, participation, and feedback, which is modest extra context, but says nothing about staleness, caching, or scoping limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence, front-loaded with the resource and followed by a dense payload list, with the ordering directive placed last for emphasis. The field enumeration partly duplicates the existing output schema, which is minor waste but not bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with an output schema, the return-value explanation is largely redundant and the annotations carry the safety story, so the description is close to sufficient. The unresolved gap is week_id: with 0% schema coverage, the description needed to define it and does not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single week_id parameter, and the description never mentions it. Saying 'latest week' weakly implies a default when no id is supplied, but an agent gets no explanation of what week_id accepts, whether omitting it is valid, or how it changes the result.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (current week) and enumerates the exact payload: week status, candidates with tallies, voter participation, selected recipes, pending feedback. This distinguishes it from siblings like get_past_votes and get_past_recipes, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call this first.' is an explicit, unambiguous sequencing directive that tells the agent when to reach for this tool relative to the rest of the workflow. It stops short of stating when NOT to use it or which sibling supersedes it for historical data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_favorite_recipesGet favorite recipesARead-only
Recipes marked as household favorites, with ratings. Good candidates to re-propose by recipe_id.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, covering the safety profile. The description adds that recipes have ratings and are good candidates for re-proposal, but does not disclose pagination, sorting, or other behavioral details. With annotations present, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, front-loading the key information about what the tool returns and its intended use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, no required fields, and an output schema that presumably describes the return format, the description is nearly complete. It could mention that it returns a list or provide more context about ratings, but it covers the essential purpose and a key use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so parameter semantics is not a major concern; baseline is 4. The description adds no parameter information, which is correct since there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource: 'Recipes marked as household favorites, with ratings.' This is clear about what is returned, though it does not explicitly distinguish itself from sibling tools like get_recipe_preferences or search_recipes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides usage guidance: 'Good candidates to re-propose by recipe_id.' This implies when to use the tool (for re-proposing recipes) but does not specify when not to use it or name alternatives explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuine domain behavior beyond them: staples are always on hand unless marked out, and leftovers carry expires_at and drop off automatically — non-obvious data semantics that affect how results should be interpreted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, zero filler, and the core purpose is front-loaded before the qualifying details about staples and leftovers. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, an existing output schema, and annotations covering the safety profile, the only thing the description needs to supply is domain semantics — and it does so for staples and expiring leftovers. Nothing required for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case. The description correctly spends no words on arguments and instead explains the returned data semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource concretely ('What the household already has') and its role ('so the shopping list can skip it'), so an agent understands it returns the household's on-hand ingredients. It does not explicitly contrast itself with the write-side sibling update_ingredients, but the read intent is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied via the purpose clause 'so the shopping list can skip it' — the agent can infer this is a read used when assembling a shopping list. No explicit when-to-use, prerequisites, or named alternatives (e.g. update_ingredients) are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| instructions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds that it is a manual to be read once per session, but does not disclose size, return format, or any behavior beyond annotations. With annotations doing substantial work, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the resource and enumerates contents compactly, ending with the actionable cadence. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value details are unnecessary here. For a zero-parameter documentation tool with annotations and an output schema, the description covers what it is, what it contains, and when to call – essentially complete. Minor gap: no hint about size or format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0 parameters, the baseline is 4. The description confirms no configuration is needed by treating it as a pure read with no inputs. Nothing further is required for an empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (the full operating manual for agents) and enumerates its contents: run loop, phases, recipe writing, messaging, safety rules. It is clearly distinguishable from any sibling, all of which are operational tools rather than documentation. A 5 would require naming the verb as precisely as 'retrieve'; here 'the full operating manual' functions adequately but is slightly noun-heavy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Read once per session' is explicit, actionable guidance on when to invoke. It provides clear context for frequent agents. No alternatives or exclusions are named, but no sibling overlaps with this tool's role, so the omission is minor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful shape about what comes back (has_account, push notification status, personal vote links), but no pagination, ordering, or auth context beyond that. Moderate added value on top of the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that leads with the verb and resource before listing the returned fields. There is some redundancy in enumerating return values when an output schema exists, but it is compact and wastes no space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, an output schema present, and simple read semantics backed by annotations, the description is nearly sufficient. Return values are already specified by the output schema, so restating them is harmless but not required; no critical gap remains for an agent to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to clarify. Baseline 4 applies: no parameter documentation is needed and none is missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List household members') and even enumerates the returned fields (contact info, has_account, push notification status, vote links). The resource is clearly distinct from sibling tools like get_connected_agents or upsert_member, though it never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use, when-not-to-use, or named alternative is given. For a parameter-less read-all tool the intended usage is strongly implied by 'List household members', but nothing tells the agent to prefer this over, say, get_connected_agents when it wants account-level info.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds ordering (newest first) and the fields returned (week, status, ratings/comments), which is useful but modest, and it says nothing about how depth/history is bounded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with zero waste; the scope constraint comes first and the payload/ordering details follow. Nothing is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and read-only annotations cover the safety profile. The remaining gap is the interaction between 'Every recipe' and the limit/pagination behavior, which an agent might need when the history is long.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden and does not mention the single 'limit' parameter at all — 'Every recipe' arguably implies an unbounded result while the schema caps it at a default of 30. The parameter name and default are self-explanatory enough in the schema that this is a marginal rather than fatal gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope ('Every recipe selected for a past week'), plus ordering ('newest first') and payload contents ('week, status, and ratings/comments'). This is enough to distinguish it from siblings like get_favorite_recipes, get_recipe, and get_current_week without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use to avoid repeats and learn what landed' gives a clear, actionable reason to call it, which many sibling-history tools lack. It does not name alternatives or state when not to use it, so it falls short of the explicit routing a 5 requires.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_past_votesGet past votesBRead-only
Historical ballots: per week, every candidate with vote count, voters, and whether it was selected.
| Name | Required | Description | Default |
|---|---|---|---|
| limit_weeks | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, destructive=false, closed-world, so the safety profile is covered. The description adds useful shape information about the returned data (per-week grouping, voters, selection outcome), but says nothing about defaults, ordering, or truncation behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the payload contents front-loaded after the colon. Efficient, though the fragmentary 'per week' phrasing is slightly telegraphic.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description is not obligated to explain return values, and it does well to preview them. However, the sole input parameter is unexplained, leaving a real gap for a tool whose behavior is windowed by limit_weeks.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter (limit_weeks) with 0% schema description coverage and no default documented in the schema text; the description never mentions it. An agent cannot tell whether it caps returned weeks, is required, or how the default of 12 interacts with the result set.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (historical ballots) and enumerates what each record contains (candidate, vote count, voters, selected flag). Clear, though it does not explicitly contrast with siblings like get_current_week or add_vote.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no mention of the obvious alternative (get_current_week for the live ballot). The word 'past' implies historical retrieval, but the agent must infer that this is the read-only counterpart to add_vote rather than a current-week tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| recipe_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| tags | No | |
| steps | No | |
| title | Yes | |
| ratings | No | |
| comments | No | |
| servings | No | |
| image_url | No | |
| is_public | No | |
| on_ballot | No | |
| share_url | No | Public page for this recipe |
| avg_rating | No | |
| created_at | No | |
| public_url | No | Indexable public page, when published |
| source_url | No | |
| description | No | |
| ingredients | No | |
| is_favorite | No | |
| last_cooked | No | |
| rating_count | No | |
| times_cooked | No | |
| image_generated | No | Photo was generated by Agent Chef, so it is safe to show publicly |
| source_recipe_id | No | Set when this is the household's copy of a Community recipe |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered by structured data. The description adds only a return-content inventory, which is largely redundant given an output schema exists; it says nothing about auth, not-found behavior, or rate limits. Beyond what annotations provide, the added behavioral context is minimal, though it does disclose that a public share_url is exposed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with 'Full details for one recipe' before the field list. The list is long but each item earns its place by telling the agent what is retrievable; the trailing share_url clause is a marginally useful addition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with annotations and an output schema, the definition is essentially complete — the agent knows what it fetches and that it is a non-destructive read. Only the recipe_id resolution and not-found handling are unaddressed, which is a minor gap given the output schema carries the return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but there is a single self-explanatory recipe_id (string, required), and the description's 'one recipe' framing supplies the identifier semantics implicitly. No format, source, or lookup guidance for the id is given, so no credit above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Full details for one recipe') and enumerates exactly what the payload contains, which cleanly separates it from search_recipes, update_recipe, and get_recipe_preferences. An agent can identify the tool's job without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied — fetch the complete record for a recipe you already have an id for — but there is no explicit when-to-use vs. alternatives (e.g., search_recipes for discovery, get_recipe_preferences for prefs) and no stated prerequisites or failure modes for a missing recipe_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| plan_day | Yes | |
| servings | Yes | |
| timezone | Yes | |
| preferences | No | |
| grocery_store | Yes | |
| vote_close_day | Yes | |
| vote_close_time | Yes | |
| recipes_per_week | Yes | |
| votes_per_member | Yes | |
| shopping_preferences | No | |
| reminder_hours_before | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond that — nothing about when preferences are consumed (e.g., by the chef agent), freshness, or defaults when unset.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single fragment-packed sentence with no waste, and it front-loads the resource. However, it is a bare field list with no framing clause explaining what the whole thing is for, so structure is adequate rather than strong.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described — yet the description is essentially a restatement of the return shape, leaving the actual gaps (purpose, usage, relationship to update_recipe_preferences) unfilled. For a zero-parameter read tool this is minimally sufficient but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero parameters, so there is nothing for the description to disambiguate; the baseline for a parameterless tool applies. The field enumeration is arguably about outputs rather than inputs and does not affect parameter semantics either way.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The name and title carry the verb ('Get'), while the description only enumerates the returned fields (household name, recipe/shopping preference prompts, and settings). It gives a decent sense of the resource's contents, but never states plainly what the tool does or why one would call it, so it sits at vague-but-usable rather than a specific verb+resource statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no reference to the obvious sibling update_recipe_preferences (read vs. write). The agent must infer the read/write split purely from the tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| tags | No | Extra tags to add | |
| favorite | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| tags | No | |
| steps | No | |
| title | Yes | |
| servings | No | |
| image_url | No | |
| is_public | No | |
| created_at | No | |
| public_url | No | Indexable public page, when published |
| source_url | No | |
| description | No | |
| ingredients | No | |
| is_favorite | No | |
| total_minutes | No | |
| image_generated | No | Photo was generated by Agent Chef, so it is safe to show publicly |
| source_recipe_id | No | Set when this is the household's copy of a Community recipe |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover openWorldHint (external fetch) and destructiveHint=false, but the description adds meaningful context: it fetches from cooking sites, saves with the 'real' photo (implying image retrieval), and returns the recipe. Does not address failure modes or permissions, but the network-fetch implication is useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the action and result, followed by a routing hint. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter import tool with an output schema, the description covers purpose, effect, and downstream usage. An agent has everything needed to invoke and chain it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% – url and favorite lack descriptions – but the description clarifies the url is the source page and implies downstream use via recipe_id (output). It doesn't explain tags or favorite semantics, but adds real value over the sparse schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch a recipe page ... and save it to the library'), names what gets captured (photo, ingredients, steps), and explicitly names sibling tools (propose_recipes, add_candidates). Clear differentiation from add_library_recipe/create_recipe by emphasizing URL fetching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context for use – import from a URL – and names downstream tools to route the returned recipe_id to. Lacks explicit when-not guidance (e.g., when to use create_recipe or add_library_recipe instead), which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| favorite_all | No | Mark every imported recipe as a favorite |
Output Schema
| Name | Required | Description |
|---|---|---|
| failed | Yes | |
| imported | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, destructiveHint=false, so the mutation/network profile is covered. The description adds genuinely new behavior: the 15-item cap, per-URL failure semantics ('reported, not thrown'), and the favorite side-effect. It omits rate-limit/partial-success nuance, keeping it just below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core purpose before the usage scenario and the input-prep instruction. No filler, though the 'Names without URLs are your job' sentence is slightly oblique relative to the schema, which requires a URL.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value documentation is unnecessary; the description still covers the important failure-mode contract (per-URL failures reported, not thrown). Combined with the 15-item cap and favorite behavior, an agent has enough to call it correctly, with only the tags parameter left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, and the description only touches 'favorite' (via 'marking each as a favorite') and the URL requirement; it says nothing about the 'tags' field or the 'favorite_all' toggle. The baseline of 3 for partial coverage is appropriate since the schema still carries most parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Bulk version of import_recipe: fetch up to 15 recipe pages and save them to the library') and explicitly distinguishes itself from the singular sibling import_recipe. An agent can tell immediately what this does and how it differs from import_recipe.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete use case ('when the owner is moving favorites from another app') and a prerequisite workflow (search for a real recipe page first when only a name is given). It does not state when NOT to use it (e.g., single-recipe case -> import_recipe), so it falls short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | What this message is; lets next_actions avoid repeats | custom |
| channel | No | auto = push to members who opted in on their vote page, else text if they have a phone, else email | auto |
| message | Yes | ||
| subject | No | ||
| image_urls | No | ||
| member_names | No | Limit to these members; default everyone |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| providers | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and openWorldHint=true, so the write/external nature is already known. The description adds genuinely useful behavioral context beyond that: the '{vote_link}' personalization substitution, the channel auto routing rule, and critically the 'dry-run = logged only' provider state, which tells the agent messages may not actually be delivered. It omits auth requirements and rate limits, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences with no padding; the core send behavior leads and the templating/provider caveats follow. The final 'Providers now: {...}' sentence is slightly clunky but carries non-obvious operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the description covers channels, templating, and provider/dry-run state. The gap is the undocumented optional parameters (subject, image_urls), which are neither in the description nor the schema descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (kind, channel, member_names documented in-schema). The description adds meaning for 'message' via the '{vote_link}' placeholder and clarifies 'auto' for channel, but says nothing about subject, image_urls, or member_names, leaving half the parameters without compensating detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Send a push notification, SMS/MMS or email to household members.' This is the sole messaging tool among the siblings, so no differentiation is needed, and the channel enumeration immediately scopes what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It describes what channel 'auto' does ('texts members with a phone and emails the rest'), which implies default behavior, but never states when to prefer this tool or how to choose a channel versus other notification paths. Usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| week | No | |
| phase | Yes | new_cycle | voting | shopping | cooking | idle | subscription_required |
| voted | No | |
| actions | Yes | Ordered checklist of tool calls due now; empty means nothing to do |
| billing | No | |
| settings | No | |
| on_demand | No | |
| hours_open | No | |
| next_check | No | |
| cycle_start | No | |
| not_yet_voted | No | |
| voting_closes_at | No | |
| voting_closes_local | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already confirm read-only/no destruction/no open world. The description adds behavior beyond them: idempotency, time-awareness, safe scheduled use, an iterative call-until-empty loop, and that it returns why plus arguments/message text. These are non-obvious traits an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with START HERE, then three tight sentences with no filler. Every sentence carries actionable information about return content, execution loop, and safe scheduling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return format details need not be repeated. The description covers purpose, usage loop, idempotency, and safety for a zero-parameter orchestrator with rich annotations, leaving no critical gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters means the baseline is 4 per the rules. There are no schema fields to misinterpret, and the description correctly avoids inventing parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (returns) and resource (current phase and ordered checklist of tool calls due now), and distinguishes itself as the orchestrator entry point by listing the phases it covers (propose, send ballot, remind non-voters, add options, lock in, shop). This clearly separates it from the individual action siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says START HERE and instructs to execute the returned calls then call again until empty. It also declares the tool idempotent and time-aware, safe to call on a schedule. This fully specifies when and how to use it as the entry point.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| recipes | Yes | ||
| week_start | No | YYYY-MM-DD, defaults to today |
Output Schema
| Name | Required | Description |
|---|---|---|
| week | Yes | |
| similar | Yes | New recipes that closely resemble one the household already has; consider using theirs |
| replaced | Yes | New recipes swapped for the household's own version of the same dish; the existing recipe is on the ballot instead |
| candidates | Yes | |
| image_urls | Yes | |
| vote_links | Yes | |
| ballot_text | Yes | Message text with a {vote_link} placeholder |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true. The description adds valuable context beyond that: it specifies the destructive behavior ('Re-calling for the same week_start replaces the candidates'), the expected volume ('normally 10'), and the return structure. This goes beyond the annotations, meriting a 4 rather than the baseline 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no waste, front-loading the core action and immediately following with return values and the replacement behavior. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity, schema richness, and presence of an output schema, the description provides what's needed: the action, return format, and destructive replacement behavior. It's complete enough for an agent to call correctly, though it could clarify prerequisites or alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, with the recipes array and its nested properties well-documented. The description adds context about week_start defaulting to today and the typical number of recipes, but doesn't fully compensate for the undocumented half of the parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: store candidate recipes and return numbered candidates, ballot_text, and vote links. It's clear what the tool does, though it doesn't explicitly distinguish itself from sibling add_candidates or set_this_weeks_recipes, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage as the start of a weekly cycle, giving context, but it doesn't explicitly say when to use this versus add_candidates or set_this_weeks_recipes. No exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| rating | Yes | ||
| comment | No | ||
| recipe_id | Yes | ||
| member_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| week | No | |
| recipe | Yes | |
| pending_feedback | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false; the description usefully explains that this is replacement semantics ('a member's newer rating replaces their older one') and adds a genuine side-effect boundary ('Ratings never change the week's status'). It doesn't cover auth/validation failures, but it goes beyond what the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, and each subsequent sentence adds a distinct rule (per-member, replacement, no status impact). Zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be explained, and the description covers the key behavioral rules (replacement, isolation per member, no effect on week status). Only minor gaps remain around prerequisites and error conditions for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It documents the rating scale and comment, and 'for one member' clarifies that member_name takes a single value per call, but recipe_id and the exact member identifier format are left to the schema's bare types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (record) and resource (post-cook feedback: 1-5 rating + comment) scoped to one member. It clearly separates itself from sibling voting tools (add_vote, add_ballot_feedback) by framing this as post-cook feedback rather than pre-cook balloting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Post-cook' implies the timing (after the recipe has been cooked), which is useful context for selecting this over voting tools. However, no explicit when-not conditions or named alternatives are given, and nothing says a member must already exist or have cooked the recipe.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| store | No | ||
| total | No | ||
| week_id | No | ||
| order_ref | No | ||
| add_to_on_hand | No | Keep the purchased items as 7-day leftovers |
Output Schema
| Name | Required | Description |
|---|---|---|
| week | Yes | |
| order | Yes | |
| restocked | No | Staples that were marked out and are back in stock |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare write/non-destructive/closed-world. The description goes well beyond them by disclosing the exact state transitions: the week moves to 'ordered', out-of-stock staples that were bought are restocked (surfaced under 'restocked'), and purchased items do not join the pantry unless add_to_on_hand is set. This is precisely the side-effect context an agent needs for a mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences that lead with the primary action before detailing restock and pantry behavior. Dense but every clause carries information; no filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The behavioral half is well covered and an output schema exists (so return values needn't be described), but the description leaves four parameters semantically unexplained against a 17% schema coverage. For a six-parameter write tool this is a meaningful gap, though the state-change narrative is strong.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17%, so the description carries the burden — but it only explains add_to_on_hand (already documented in the schema) and touches items indirectly. store, total, week_id, and order_ref receive no meaning at all, leaving four of six parameters undocumented in both schema and prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Log the placed order') and pins down the primary state change ('move the week to ordered'), which cleanly separates it from siblings like assemble_online_grocery_order (assembling an order) and get_current_week. An agent can tell what this does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is only implied: this is the tool to call once an order has been placed. There is no explicit when/when-not or named alternative (e.g. versus assemble_online_grocery_order). The one piece of real guidance — when to set add_to_on_hand — is given, which lifts it above a bare 2.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cleared | No | true if the schedule was removed | |
| description | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| agent_schedule | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the mutation profile is covered. The description adds genuine behavioral context beyond that: recording stops the app's reminders and signals to the owner that the loop is automated. It does not explain the destructive path implied by the 'cleared' flag, so it is not complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the call-timing condition, and the example is embedded efficiently. Slightly dense but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the trigger, format example, and app-level effect are all covered for a simple two-parameter write. The only gap is the semantics of 'cleared', which is not addressed anywhere in the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: 'cleared' is documented in the schema, but 'description' has only a minLength. The description compensates partially by giving a concrete example value ('Claude scheduled task, daily 9:00 and 18:00 America/Los_Angeles') that shows what the string should contain, but it says nothing about 'cleared'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it records the recurring 'Run Agent Chef' schedule that was set up externally. An agent can tell what the tool does, though it never explicitly contrasts itself with the sibling run_agent_chef, so sibling differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear trigger and prerequisite: 'Call after creating (or changing) the recurring task in your own scheduler.' That is actionable context with no exclusions or named alternatives, which keeps it just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so safety is covered. The description adds genuinely non-obvious behavior: past votes and ratings remain attached to prior weeks, and the owner is protected. It omits whether removal is reversible or requires confirmation, so it falls short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and identifier, then the two constraints. Every clause carries information; nothing is restated from the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and annotations cover the destructive profile. The description supplies the key domain semantics (history preserved, owner protected); only reversibility and failure behavior are left unaddressed for a destructive mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'name' parameter has 0% schema description coverage, so the description must carry the burden. 'By name' confirms the parameter is the member identifier, but adds no matching rules (exact vs partial, case sensitivity) or collision handling, leaving real ambiguity for a 0%-coverage param.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Remove) and resource (household member) plus the identifying argument (by name), which cleanly separates it from get_members and upsert_member. An agent can tell what this does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The precondition 'the owner can't be removed' is a useful exclusion, but the description never names an alternative (e.g., upsert_member for edits) or states when removal is the right call versus deactivating/renaming a member. Usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| week_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| week | Yes | |
| candidates | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as destructive and not read-only, and the description adds important detail beyond that: it clears winners, returns the week to 'voting', and preserves existing votes. This discloses exactly what is destroyed and what is retained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded, and every sentence carries useful information: the undo action, the state change, vote preservation, and the appropriate use case. There is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering safety and an output schema covering return values, the description gives strong behavioral context for a destructive state-changing tool. The main remaining gap is that it does not clarify the week_id parameter, despite the schema providing no description for it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter, week_id, with 0% description coverage, and the description never explains that parameter. It references 'the week' in passing but does not state whether week_id is required, what format it takes, or what happens if it is omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific inverse action: 'Undo set_this_weeks_recipes', then states the concrete effects of clearing winners and returning the week to 'voting'. This clearly distinguishes it from sibling mutation tool set_this_weeks_recipes and voting tools like add_vote.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear use condition: 'Use if winners were locked in too early.' This implicitly contrasts with set_this_weeks_recipes, but it does not explicitly state when not to use it or name alternatives beyond the inverse operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| client_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| revoked | Yes | client_id that was revoked |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds real value beyond that by stating the consequence: the agent must sign in again to reconnect, clarifying that access is severed rather than merely paused. It doesn't mention permission requirements or reversibility details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler. The action and its identifier source are front-loaded, with the consequence following immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations carry the destructive/read-only profile. The description covers the action, the parameter source, and the post-revocation effect. Only minor preconditions (auth/permission scope for the caller) are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the schema itself gives no semantics for client_id, so the description must compensate. It does so by naming the authoritative source of the identifier (get_connected_agents), which is the meaningful missing detail for a single-parameter call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (revoke) plus the resource and scope (an OAuth-connected agent's access), and identifies the exact identifier to pass (client_id from get_connected_agents). An agent can distinguish this from siblings like get_connected_agents or remove_member without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical explicitly routes the agent to get_connected_agents as the source of the client_id, which is the key usage condition. It does not state when not to use it (e.g. distinguishing from other revoke/removal flows), so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| week | No | |
| phase | Yes | new_cycle | voting | shopping | cooking | idle | subscription_required |
| voted | No | |
| how_to | Yes | |
| actions | Yes | Ordered checklist of tool calls due now; empty means nothing to do |
| billing | No | |
| schedule | Yes | |
| settings | No | |
| on_demand | No | |
| hours_open | No | |
| next_check | No | |
| cycle_start | No | |
| instructions | Yes | |
| not_yet_voted | No | |
| voting_closes_at | No | |
| voting_closes_local | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark it as read-only, non-destructive, closed-world. The description adds that it returns an operating manual and a checklist, and that you must execute calls in order and stop before checkout—this is valuable operational context. But it doesn't disclose side effects of the orchestrated calls, rate limits, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: trigger, return, workflow, stop condition. Every sentence is essential and front-loaded with the trigger.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema, the description provides the necessary usage workflow. It could be more explicit about what the 'operating manual' contains or how to handle errors during execution, but it's largely complete for an orchestration entry point.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so baseline is 4. The description adds that the return includes an operating manual and checklist, which is extra context, but no parameter details are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explains the trigger phrases and general workflow, but the tool's actual purpose is somewhat vague. Is it a routine runner? An orchestrator? The name 'run_agent_chef' is clarified only in that it responds to user commands, not what it fundamentally does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly says when to use: when the user says 'run agent chef' or similar. It describes the workflow: execute returned tool calls, then call next_actions repeatedly until no actions. However, it doesn't compare to sibling tools like next_actions or get_instructions, which might be alternatives in some contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| query | No | ||
| scope | No | ours (default): this household's recipes. library: Community recipes, the shared pool of public recipes, with cooks/favorites/ratings across households. all: both. | |
| favorites_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds scope context (all recipes ever proposed, including ratings and cook counts), but with an output schema present it doesn't need to detail return values, leaving it adequate rather than rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no waste; the corpus scope is front-loaded, followed by filters and then the workflow pointer. Efficient, though the description could more sharply frame the search action up front.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema handling return values and annotations covering safety, the description's remaining job is scope and filters, which it largely does. The one gap is the scope parameter's behavior, which is delegated to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 25%, so the description carries more of the burden. 'Filter by text, favorites, or tag' maps to query, favorites_only, and tag, but the scope parameter is not mentioned in the description at all. Partial compensation only justifies a baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource and its scope ('Every recipe the household has ever had proposed') and enumerates the filter dimensions, so an agent can tell it's a search over household recipes. However, the search verb is only implied via 'Filter by', and it doesn't explicitly distinguish itself from siblings like get_past_recipes or get_favorite_recipes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one concrete workflow pointer ('Use recipe_id from here with propose_recipes to re-propose'), which implies the tool's role in the proposal flow. But there is no explicit when-to-use vs when-not-to-use guidance or named alternatives for retrieving a single recipe.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| contact | No | How to reach the owner for a reply, if they want one | |
| message | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, openWorldHint=true, destructiveHint=false, so the safety/external-send profile is already covered. The description adds the domain distinction (feedback about Agent Chef vs household messages) and implies the feedback is routed externally to builders, which is meaningful context. It doesn't discuss rate limits, privacy of contact info, or what happens to the message, so it falls short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: what to pass, when to use it, and the exclusion. Front-loaded with the purpose and no redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter tool with an output schema, the description covers purpose, audience, and exclusion well. The only gap is granularity on the message field and contact handling, but the output schema likely covers the response. Adequate and complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: 'contact' is documented but 'message' has only min/max length. The description tells the agent what the message should be about (a bug, missing feature, or confusion), which compensates for the missing schema description on the core required parameter. That's the baseline 3 – the description adds some meaning but leaves the 2000-char limit and response framing to the schema/output schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (pass feedback) and resource (Agent Chef itself), and contrasts with the sibling message_group by explicitly saying 'Not for messages to the household.' An agent can route between send_feedback and message_group without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives both when-to-use ('the owner says tell Agent Chef that…' or complains about the tool) and when-not-to-use ('Not for messages to the household'), naming the alternative domain. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| image_url | No | ||
| recipe_id | Yes | ||
| content_type | No | e.g. image/png | |
| image_base64 | No | Raw base64 (no data: prefix) |
Output Schema
| Name | Required | Description |
|---|---|---|
| image_url | Yes | Permanent public URL of the stored photo |
| recipe_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag destructiveHint=true and openWorldHint=true, and the description reinforces this by stating the photo is stored permanently (overwriting the prior image) and that URL input is fetched and copied server-side. Adds size limit (6 MB) and accepted formats beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action, then usage, then parameter mechanics and limits. Every sentence carries distinct information with no repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description covers action, source options, exclusivity, size and formats. Only the required recipe_id is left for the schema, which is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, and the description compensates by defining the key constraint the schema does not: image_url is mutually exclusive with image_base64 + content_type. The content-type options and size cap are also spelled out textually.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb and resource: 'Store a photo for a recipe permanently and set it as the recipe's image.' No sibling tool touches recipe images, so the purpose is unambiguous without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear when-to-use signal: for images generated by the image tool whose URLs expire, or any photo held as URL/base64. It lacks explicit exclusions or named alternatives, but the triggering condition is concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| week_id | No | ||
| recipe_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| week | Yes | |
| selected | Yes | |
| tie_break | No | Set when the vote tied at the cutoff and the server broke it |
| share_hint | No | |
| added_to_week | No | Titles picked from outside the ballot and added to the week |
| shopping_list | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this destructive and non-read-only, and the description earns its keep by disclosing the state transition to 'selected', the tie-break rule (earlier ballot position, surfaced in tie_break), that off-ballot picks are added to the week, that re-calling overwrites, and that a shopping list is returned. This is exactly the mutation context an agent needs beyond the hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The key scope ('lock in the dinners') is front-loaded and every sentence adds behavioral information. It is a dense run-on paragraph with several parenthetical asides, so it is slightly heavier than needed but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, state-transitioning tool with only two sparse parameters and a separate output schema, the description covers outcomes, tie-breaking, re-invocation, and the returned shopping list. The one real gap is the unexplained week_id, which the agent must infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage the description must carry parameters, and it does so thoroughly for recipe_ids (optional, any count, household or Community, on/off ballot, overwrite semantics). week_id is never explained, and recipes_per_week is referenced as if it were an input even though it is not a schema property.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource (select/lock in this week's dinners) and distinguishes the tool from neighbors like propose_recipes and add_vote by describing the terminal 'moves a voting week to selected' outcome. An agent can tell what this tool uniquely does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly defines the two operating modes (omitted recipe_ids = top N by votes; supplied recipe_ids = exact set) and notes the tool can be called repeatedly to change the selection. It stops short of naming when to use this versus comparable siblings such as propose_recipes or reopen_voting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| week_id | No | ||
| closes_at | No | ISO 8601, e.g. 2026-09-09T18:00:00-07:00 | |
| extend_hours | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| week | Yes | |
| closes_local | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide destructiveHint=true, readOnlyHint=false, openWorldHint=false, so the safety profile is covered. The description adds meaningful behavioral context: this is a one-off override, and changing the schedule via update_recipe_preferences re-syncs the current week. With annotations covering the destructive/safety profile, a solid bonus is provided without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences front-load the action and then the normal behavior and alternative. Every clause carries information (override semantics, formats, sibling tool), with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described. The description covers the one-off/mutation nature, both override mechanisms, and the persistent alternative. It is complete enough for this mutation tool, though it could note whether the override affects only the specified week_id.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 33%, so two of three parameters (week_id, extend_hours) lack schema descriptions. The description explains the format for closes_at (ISO timestamp) and clarifies extend_hours is relative to the current deadline, but does not document week_id. It adds partial compensation, so a mid-range score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('override of when the current ballot closes') and specifies the two mutually exclusive mechanisms (ISO timestamp or extend_hours). The title 'Move the voting deadline' names the resource, and the description distinguishes the tool from schedule-based alternatives like update_recipe_preferences.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames this as a 'one-off override' versus the normal path ('Normally the deadline comes from the household schedule'), naming the sibling update_recipe_preferences as the persistent alternative. The agent knows when to use this tool and when to use the sibling instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| add | No | ||
| out | No | Staples the household ran out of; they return to stock when an order includes them | |
| remove | No | Names to remove | |
| replace_all | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=false, so safety is partially covered. The description adds real behavioral model beyond that: leftovers decay after N days, 'out' staples return to stock when an order includes them, and re-adding an out staple restocks it. However, it never mentions replace_all, the most destructive operation, and gives no warning about what remove permanently deletes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four modes are packed into a compact set of clauses front-loaded by the 'Keep the pantry' framing, with the exclusion saved for the end where it acts as a caution. The em-dash chain and colloquial framing are slightly dense but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the annotations carry the safety profile. Still, for a destructive multi-mode mutation the description omits replace_all semantics and any conflict/precedence rule (e.g. an item appearing in both add and remove), leaving an agent guessing on the riskiest path.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, and the description partially compensates: it clarifies the omit-days-means-staple rule and the '7 is typical' leftover convention, plus the meaning of out. But replace_all has no description in the schema and is entirely absent from the description text, leaving one of four parameters undocumented end to end.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete verb (update/keep) and enumerates the four operating modes (add staples, add leftovers, mark out, remove), which lets an agent understand the tool's scope. It does not name the obvious counterpart get_ingredients, so sibling differentiation relies on the agent's inference rather than explicit routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives per-mode when-to-use guidance (staples vs leftovers vs out) and even an explicit exclusion: 'Don't add a week's groceries: they get cooked that week.' It stops short of naming alternatives, e.g. that get_ingredients should be consulted first to see current stock.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| steps | No | ||
| title | No | ||
| public | No | Publish this recipe on agentchef.net/recipes (indexable, with the household's name). Imported recipes show ingredients and link to the source for steps. | |
| servings | No | ||
| image_url | No | ||
| recipe_id | Yes | ||
| source_url | No | ||
| description | No | ||
| ingredients | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| tags | No | |
| steps | No | |
| title | Yes | |
| servings | No | |
| image_url | No | |
| is_public | No | |
| created_at | No | |
| public_url | No | Indexable public page, when published |
| source_url | No | |
| description | No | |
| ingredients | No | |
| is_favorite | No | |
| image_generated | No | Photo was generated by Agent Chef, so it is safe to show publicly |
| source_recipe_id | No | Set when this is the household's copy of a Community recipe |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so safety is covered. The description adds real value beyond that: 'Only provided fields change' discloses patch semantics (as opposed to a full replace), and the publish side effect on agentchef.net/recipes is explained. It does not address whether omitted fields are preserved vs cleared beyond the partial-update claim.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the verb and resource, and the partial-update rule is placed last as a qualifier. The field enumeration is dense but each item maps to a real parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and annotations cover the safety profile. However, for a 10-parameter mutation tool with near-zero schema coverage, the description leaves title/description parameters unexplained and says nothing about permissions or which edits are reversible.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 10%, so the description carries the burden. It names most editable fields (ingredients, steps, servings, tags, image_url, source_url, public), adding meaning over the bare schema, but omits title, description, and recipe_id, and gives no format details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('edit') and resource ('a stored recipe') and enumerates the editable surface (ingredient, steps, servings, tags, image, source, public). This clearly separates it from create_recipe/import_recipe siblings, though it does not explicitly name any alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the field list and 'Only provided fields change' signal a partial-update tool, but there is no explicit when-to-use, when-not, or pointer to alternatives like create_recipe or update_recipe_preferences.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_recipe_preferencesUpdate recipe preferencesBDestructive
Update any subset of the preferences prompt and settings. Omitted fields are unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Household display name | |
| plan_day | No | ||
| servings | No | ||
| timezone | No | IANA zone, e.g. America/Los_Angeles | |
| preferences | No | Free-form prompt describing what the household likes/avoids. Replaces existing text. | |
| grocery_store | No | ||
| vote_close_day | No | Weekday voting closes, e.g. wednesday | |
| vote_close_time | No | Local time voting closes, HH:MM 24h, e.g. 18:00 | |
| recipes_per_week | No | ||
| votes_per_member | No | ||
| shopping_preferences | No | Free-form prompt for the grocery run: preferred brands, organic when possible, substitutions, store quirks. Replaces existing text. | |
| reminder_hours_before | No | Send non-voters one reminder this many hours before voting closes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| plan_day | Yes | |
| servings | Yes | |
| timezone | Yes | |
| preferences | No | |
| grocery_store | Yes | |
| agent_schedule | No | |
| vote_close_day | Yes | |
| vote_close_time | Yes | |
| recipes_per_week | Yes | |
| votes_per_member | Yes | |
| shopping_preferences | No | |
| agent_schedule_set_at | No | |
| reminder_hours_before | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so safety is covered. The description usefully clarifies the PATCH semantics ('omitted fields are unchanged'), which is real value since a destructive tool could otherwise be read as a full replacement, but it says nothing about auth, confirmation, or the store/recipe field-level replacement noted in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the action front-loaded and the partial-update semantic immediately following. No filler, nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and the destructive annotation plus the partial-update note cover the essentials. However, a 12-parameter mutation tool would benefit from a pointer to fetch current preferences first or a note on the field-level text replacement, so completeness is only adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 12 all-optional parameters at 58% schema coverage, the 'any subset / omitted fields are unchanged' semantic is the single most important thing an agent needs and it is stated explicitly, complementing the schema's per-field descriptions. It does not add per-parameter meaning beyond that, keeping it short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Update) and resource (the preferences prompt and settings), which separates it from the read sibling get_recipe_preferences. It does not call out how it differs from other update tools like update_ingredients, but the verb+resource pairing is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of the read sibling get_recipe_preferences to inspect current values first, and no conditions or exclusions. The agent is told what it does but not when to reach for it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| role | No | Only for members who have signed in to Agent Chef (has_account); admin needs an account | |
| No | An empty string clears it. | ||
| phone | No | E.164, e.g. +15551234567. An empty string clears it. | |
| member_id | No | Edit this member by id (from get_members); this is how you rename someone. Without it, name is the match key. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| role | No | owner = primary owner; admin = runs the household like the owner; member = votes, rates and browses |
| No | ||
| phone | No | |
| vote_link | No | Personal voting page for this member |
| has_account | No | True once this member has signed in to Agent Chef with their own account |
| push_subscribed | No | Has a device opted in to push notifications |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations supply destructiveHint=true and readOnlyHint=false; the description adds real behavioral detail beyond them — empty string clears phone/email, name is the case-insensitive match key, member_id is how you rename, and role capabilities (member vs admin). It doesn't state what happens on a name collision when adding or whether clears are reversible, so it's not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and key semantics are front-loaded, and each sentence carries information (identity key, clear semantics, routing rule, role model). The final roles sentence is long but earns its place; overall it is dense without much waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be described. The description covers identity/rename mechanics, field clearing, and role implications for a 5-param mutation tool; only edge cases like name collisions or unauthorized role assignment are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so the baseline is 3, but the description genuinely adds meaning: how name/member_id interact as the key, that empty strings clear contact fields, and what each role can do beyond the terse schema enum note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause states a precise compound verb+resource ('Add a household member, or edit one') and immediately defines the matching key (name, case-insensitive, or member_id). This lets an agent distinguish it from get_members and remove_member without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('when someone wants to add or fix a member's contact details') plus an explicit when-not/alternative: 'never remove and re-add, which breaks their vote link.' That is a concrete routing rule an agent can act on.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
30 tool updates
v0.1.1- Changed
add_candidates10 fields changed- changed
Input schema / properties / recipes / items / properties / image_url / descriptionPrevious value: -"A real, publicly reachable photo of the dish: the og:image of the recipe page you used, or one found via web/image search. The server verifies the URL is an image and drops it otherwise. Never invent URLs; prefer import_recipe, which captures the source photo."New value: +"A real, publicly reachable photo of the dish: the og:image of the recipe page you used, or one found via web/image search. The server verifies the URL is an image and drops it otherwise. Never invent URLs; prefer import_recipe, which captures the source photo. For generated images use set_recipe_image afterwards." - added
Output schema / properties / added / items / properties / admin_pickAdded value: +{ + "description": "Selected even though the vote alone would not have picked it: chosen by an admin, or added off the ballot", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / added / items / properties / image_generatedAdded value: +{ + "description": "Photo was generated by Agent Chef, so it is safe to show publicly", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / added / items / properties / is_publicAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / added / items / properties / public_urlAdded value: +{ + "description": "Indexable public page, when published", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / added / items / properties / source_recipe_idAdded value: +{ + "description": "Set when this is the household's copy of a Community recipe", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / replacedAdded value: +{ + "description": "New recipes swapped for the household's own version of the same dish; the existing recipe is on the ballot instead", + "items": { + "additionalProperties": true, + "properties": { + "existing_title": { + "$ref": "#/properties/week/properties/id" + }, + "recipe_id": { + "$ref": "#/properties/week/properties/id" + }, + "title": { + "$ref": "#/properties/week/properties/id" + } + }, + "required": [ + "title", + "recipe_id", + "existing_title" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / similarAdded value: +{ + "description": "New recipes that closely resemble one the household already has; consider using theirs", + "items": { + "additionalProperties": true, + "properties": { + "recipe_id": { + "$ref": "#/properties/week/properties/id" + }, + "similar_to": { + "items": { + "additionalProperties": true, + "properties": { + "recipe_id": { + "$ref": "#/properties/week/properties/id" + }, + "title": { + "$ref": "#/properties/week/properties/id" + } + }, + "required": [ + "recipe_id", + "title" + ], + "type": "object" + }, + "type": "array" + }, + "title": { + "$ref": "#/properties/week/properties/id" + } + }, + "required": [ + "recipe_id", + "title", + "similar_to" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / week / properties / share_urlAdded value: +{ + "description": "Public page showing this week's winners", + "type": [ + "string", + "null" + ] +} - changed
Output schema / requiredPrevious value: -[ - "week", - "added", - "candidates", - "feedback" -]New value: +[ + "week", + "added", + "replaced", + "similar", + "candidates", + "feedback" +]
- Added
add_library_recipe - Changed
assemble_online_grocery_order3 fields changed- added
Output schema / properties / skipped_on_hand / items / properties / expires_atAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / skipped_on_hand / items / properties / stapleAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / week / properties / share_urlAdded value: +{ + "description": "Public page showing this week's winners", + "type": [ + "string", + "null" + ] +}
- Added
create_recipe - Changed
favorite_recipe4 fields changed- added
Output schema / properties / image_generatedAdded value: +{ + "description": "Photo was generated by Agent Chef, so it is safe to show publicly", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / is_publicAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / public_urlAdded value: +{ + "description": "Indexable public page, when published", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / source_recipe_idAdded value: +{ + "description": "Set when this is the household's copy of a Community recipe", + "type": [ + "string", + "null" + ] +}
- Changed
get_current_week2 fields changed- changed
Output schema / properties / candidates / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "avg_rating": { - "type": [ - "number", - "null" - ] - }, - "created_at": { - "type": [ - "string", - "null" - ] - }, - "description": { - "type": [ - "string", - "null" - ] - }, - "id": { - "$ref": "#/properties/week/anyOf/0/properties/id" - }, - "image_url": { - "type": [ - "string", - "null" - ] - }, - "ingredients": { - "anyOf": [ - { - "items": { - "additionalProperties": true, - "properties": { - "name": { - "$ref": "#/properties/week/anyOf/0/properties/id" - }, - "quantity": { - "description": "Free text, e.g. '2 lbs'", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "name" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ] - }, - "is_favorite": { - "type": [ - "boolean", - "null" - ] - }, - "position": { - "description": "1-based ballot number", - "type": "number" - }, - "ratings": { - "anyOf": [ - { - "items": { - "additionalProperties": true, - "properties": { - "comment": { - "type": [ - "string", - "null" - ] - }, - "created_at": { - "type": [ - "string", - "null" - ] - }, - "member": { - "$ref": "#/properties/week/anyOf/0/properties/id" - }, - "rating": { - "description": "1-5", - "type": "number" - } - }, - "required": [ - "rating", - "member" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } - ] - }, - "selected": { - "type": "boolean" - }, - "servings": { - "type": [ - "number", - "null" - ] - }, - "source_url": { - "type": [ - "string", - "null" - ] - }, - "steps": { - "anyOf": [ - { - "items": { - "$ref": "#/properties/week/anyOf/0/properties/id" - }, - "type": "array" - }, - { - "type": "null" - } - ] - }, - "tags": { - "anyOf": [ - { - "items": { - "$ref": "#/properties/week/anyOf/0/properties/id" - }, - "type": "array" - }, - { - "type": "null" - } - ] - }, - "title": { - "$ref": "#/properties/week/anyOf/0/properties/id" - }, - "vote_count": { - "type": "number" - }, - "voters": { - "items": { - "$ref": "#/properties/week/anyOf/0/properties/id" - }, - "type": "array" - } - }, - "required": [ - "id", - "title", - "position", - "selected", - "vote_count", - "voters" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "admin_pick": { + "description": "Selected even though the vote alone would not have picked it: chosen by an admin, or added off the ballot", + "type": [ + "boolean", + "null" + ] + }, + "avg_rating": { + "type": [ + "number", + "null" + ] + }, + "created_at": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "$ref": "#/properties/week/anyOf/0/properties/id" + }, + "image_generated": { + "description": "Photo was generated by Agent Chef, so it is safe to show publicly", + "type": [ + "boolean", + "null" + ] + }, + "image_url": { + "type": [ + "string", + "null" + ] + }, + "ingredients": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "properties": { + "name": { + "$ref": "#/properties/week/anyOf/0/properties/id" + }, + "quantity": { + "description": "Free text, e.g. '2 lbs'", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "is_favorite": { + "type": [ + "boolean", + "null" + ] + }, + "is_public": { + "type": [ + "boolean", + "null" + ] + }, + "position": { + "description": "1-based ballot number", + "type": "number" + }, + "public_url": { + "description": "Indexable public page, when published", + "type": [ + "string", + "null" + ] + }, + "ratings": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "properties": { + "comment": { + "type": [ + "string", + "null" + ] + }, + "created_at": { + "type": [ + "string", + "null" + ] + }, + "member": { + "$ref": "#/properties/week/anyOf/0/properties/id" + }, + "rating": { + "description": "1-5", + "type": "number" + } + }, + "required": [ + "rating", + "member" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "selected": { + "type": "boolean" + }, + "servings": { + "type": [ + "number", + "null" + ] + }, + "source_recipe_id": { + "description": "Set when this is the household's copy of a Community recipe", + "type": [ + "string", + "null" + ] + }, + "source_url": { + "type": [ + "string", + "null" + ] + }, + "steps": { + "anyOf": [ + { + "items": { + "$ref": "#/properties/week/anyOf/0/properties/id" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "tags": { + "anyOf": [ + { + "items": { + "$ref": "#/properties/week/anyOf/0/properties/id" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "title": { + "$ref": "#/properties/week/anyOf/0/properties/id" + }, + "vote_count": { + "type": "number" + }, + "voters": { + "items": { + "$ref": "#/properties/week/anyOf/0/properties/id" + }, + "type": "array" + } + }, + "required": [ + "id", + "title", + "position", + "selected", + "vote_count", + "voters" + ], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } +] - changed
Output schema / properties / week / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "created_at": { - "type": [ - "string", - "null" - ] - }, - "id": { - "type": "string" - }, - "status": { - "enum": [ - "voting", - "selected", - "ordered", - "done" - ], - "type": "string" - }, - "voting_closes_at": { - "type": [ - "string", - "null" - ] - }, - "week_start": { - "description": "YYYY-MM-DD", - "type": "string" - } - }, - "required": [ - "id", - "week_start", - "status" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "created_at": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string" + }, + "share_url": { + "description": "Public page showing this week's winners", + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "voting", + "selected", + "ordered", + "done" + ], + "type": "string" + }, + "voting_closes_at": { + "type": [ + "string", + "null" + ] + }, + "week_start": { + "description": "YYYY-MM-DD", + "type": "string" + } + }, + "required": [ + "id", + "week_start", + "status" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
get_favorite_recipes4 fields changed- added
Output schema / properties / items / items / properties / image_generatedAdded value: +{ + "description": "Photo was generated by Agent Chef, so it is safe to show publicly", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / items / items / properties / is_publicAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / items / items / properties / public_urlAdded value: +{ + "description": "Indexable public page, when published", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / items / items / properties / source_recipe_idAdded value: +{ + "description": "Set when this is the household's copy of a Community recipe", + "type": [ + "string", + "null" + ] +}
- Changed
get_ingredients3 fields changed- added
Output schema / properties / items / items / properties / expires_atAdded value: +{ + "description": "Leftover: skipped until this time, then dropped", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / items / items / properties / outAdded value: +{ + "description": "A staple the household ran out of; it is on the shopping list until an order restocks it", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / items / items / properties / stapleAdded value: +{ + "description": "Always on hand; skipped on every shopping list unless out", + "type": [ + "boolean", + "null" + ] +}
- Changed
get_members4 fields changed- added
Output schema / properties / items / items / properties / has_accountAdded value: +{ + "description": "True once this member has signed in to Agent Chef with their own account", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / items / items / properties / push_subscribedAdded value: +{ + "description": "Has a device opted in to push notifications", + "type": [ + "boolean", + "null" + ] +} - changed
Output schema / properties / items / items / properties / role / anyOfPrevious value: -[ - { - "enum": [ - "owner", - "member" - ], - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "owner", + "admin", + "member" + ], + "type": "string" + }, + { + "type": "null" + } +] - added
Output schema / properties / items / items / properties / role / descriptionAdded value: +"owner = primary owner; admin = runs the household like the owner; member = votes, rates and browses"
- Changed
get_past_recipes4 fields changed- added
Output schema / properties / items / items / properties / image_generatedAdded value: +{ + "description": "Photo was generated by Agent Chef, so it is safe to show publicly", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / items / items / properties / is_publicAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / items / items / properties / public_urlAdded value: +{ + "description": "Indexable public page, when published", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / items / items / properties / source_recipe_idAdded value: +{ + "description": "Set when this is the household's copy of a Community recipe", + "type": [ + "string", + "null" + ] +}
- Changed
get_past_votes1 field changed- added
Output schema / properties / items / items / properties / week / properties / share_urlAdded value: +{ + "description": "Public page showing this week's winners", + "type": [ + "string", + "null" + ] +}
- Changed
get_recipe5 fields changed- added
Output schema / properties / image_generatedAdded value: +{ + "description": "Photo was generated by Agent Chef, so it is safe to show publicly", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / is_publicAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / public_urlAdded value: +{ + "description": "Indexable public page, when published", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / share_urlAdded value: +{ + "description": "Public page for this recipe", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / source_recipe_idAdded value: +{ + "description": "Set when this is the household's copy of a Community recipe", + "type": [ + "string", + "null" + ] +}
- Changed
import_recipe4 fields changed- added
Output schema / properties / image_generatedAdded value: +{ + "description": "Photo was generated by Agent Chef, so it is safe to show publicly", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / is_publicAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / public_urlAdded value: +{ + "description": "Indexable public page, when published", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / source_recipe_idAdded value: +{ + "description": "Set when this is the household's copy of a Community recipe", + "type": [ + "string", + "null" + ] +}
- Added
import_recipes - Changed
message_group4 fields changed- added
Input schema / properties / channel / descriptionAdded value: +"auto = push to members who opted in on their vote page, else text if they have a phone, else email" - changed
Input schema / properties / channel / enumPrevious value: -[ - "sms", - "email", - "auto" -]New value: +[ + "sms", + "email", + "push", + "auto" +] - added
Output schema / properties / providers / properties / pushAdded value: +{ + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / results / items / properties / channel / enumPrevious value: -[ - "sms", - "email", - "none" -]New value: +[ + "sms", + "email", + "push", + "none" +]
- Changed
next_actions2 fields changed- added
Output schema / properties / on_demandAdded value: +{ + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / week / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "created_at": { - "type": [ - "string", - "null" - ] - }, - "id": { - "$ref": "#/properties/actions/items/properties/why" - }, - "status": { - "enum": [ - "voting", - "selected", - "ordered", - "done" - ], - "type": "string" - }, - "voting_closes_at": { - "type": [ - "string", - "null" - ] - }, - "week_start": { - "description": "YYYY-MM-DD", - "type": "string" - } - }, - "required": [ - "id", - "week_start", - "status" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "created_at": { + "type": [ + "string", + "null" + ] + }, + "id": { + "$ref": "#/properties/actions/items/properties/why" + }, + "share_url": { + "description": "Public page showing this week's winners", + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "voting", + "selected", + "ordered", + "done" + ], + "type": "string" + }, + "voting_closes_at": { + "type": [ + "string", + "null" + ] + }, + "week_start": { + "description": "YYYY-MM-DD", + "type": "string" + } + }, + "required": [ + "id", + "week_start", + "status" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
propose_recipes10 fields changed- changed
Input schema / properties / recipes / items / properties / image_url / descriptionPrevious value: -"A real, publicly reachable photo of the dish: the og:image of the recipe page you used, or one found via web/image search. The server verifies the URL is an image and drops it otherwise. Never invent URLs; prefer import_recipe, which captures the source photo."New value: +"A real, publicly reachable photo of the dish: the og:image of the recipe page you used, or one found via web/image search. The server verifies the URL is an image and drops it otherwise. Never invent URLs; prefer import_recipe, which captures the source photo. For generated images use set_recipe_image afterwards." - added
Output schema / properties / candidates / items / properties / admin_pickAdded value: +{ + "description": "Selected even though the vote alone would not have picked it: chosen by an admin, or added off the ballot", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / candidates / items / properties / image_generatedAdded value: +{ + "description": "Photo was generated by Agent Chef, so it is safe to show publicly", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / candidates / items / properties / is_publicAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / candidates / items / properties / public_urlAdded value: +{ + "description": "Indexable public page, when published", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / candidates / items / properties / source_recipe_idAdded value: +{ + "description": "Set when this is the household's copy of a Community recipe", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / replacedAdded value: +{ + "description": "New recipes swapped for the household's own version of the same dish; the existing recipe is on the ballot instead", + "items": { + "additionalProperties": true, + "properties": { + "existing_title": { + "$ref": "#/properties/week/properties/id" + }, + "recipe_id": { + "$ref": "#/properties/week/properties/id" + }, + "title": { + "$ref": "#/properties/week/properties/id" + } + }, + "required": [ + "title", + "recipe_id", + "existing_title" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / similarAdded value: +{ + "description": "New recipes that closely resemble one the household already has; consider using theirs", + "items": { + "additionalProperties": true, + "properties": { + "recipe_id": { + "$ref": "#/properties/week/properties/id" + }, + "similar_to": { + "items": { + "additionalProperties": true, + "properties": { + "recipe_id": { + "$ref": "#/properties/week/properties/id" + }, + "title": { + "$ref": "#/properties/week/properties/id" + } + }, + "required": [ + "recipe_id", + "title" + ], + "type": "object" + }, + "type": "array" + }, + "title": { + "$ref": "#/properties/week/properties/id" + } + }, + "required": [ + "recipe_id", + "title", + "similar_to" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / week / properties / share_urlAdded value: +{ + "description": "Public page showing this week's winners", + "type": [ + "string", + "null" + ] +} - changed
Output schema / requiredPrevious value: -[ - "week", - "candidates", - "ballot_text", - "image_urls", - "vote_links" -]New value: +[ + "week", + "candidates", + "replaced", + "similar", + "ballot_text", + "image_urls", + "vote_links" +]
- Changed
rate_recipe5 fields changed- added
Output schema / properties / recipe / properties / image_generatedAdded value: +{ + "description": "Photo was generated by Agent Chef, so it is safe to show publicly", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / recipe / properties / is_publicAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / recipe / properties / public_urlAdded value: +{ + "description": "Indexable public page, when published", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / recipe / properties / source_recipe_idAdded value: +{ + "description": "Set when this is the household's copy of a Community recipe", + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / week / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "created_at": { - "type": [ - "string", - "null" - ] - }, - "id": { - "$ref": "#/properties/recipe/properties/id" - }, - "status": { - "enum": [ - "voting", - "selected", - "ordered", - "done" - ], - "type": "string" - }, - "voting_closes_at": { - "type": [ - "string", - "null" - ] - }, - "week_start": { - "description": "YYYY-MM-DD", - "type": "string" - } - }, - "required": [ - "id", - "week_start", - "status" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "created_at": { + "type": [ + "string", + "null" + ] + }, + "id": { + "$ref": "#/properties/recipe/properties/id" + }, + "share_url": { + "description": "Public page showing this week's winners", + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "voting", + "selected", + "ordered", + "done" + ], + "type": "string" + }, + "voting_closes_at": { + "type": [ + "string", + "null" + ] + }, + "week_start": { + "description": "YYYY-MM-DD", + "type": "string" + } + }, + "required": [ + "id", + "week_start", + "status" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
record_grocery_order4 fields changed- changed
Input schema / properties / add_to_on_hand / defaultPrevious value: -trueNew value: +false - added
Input schema / properties / add_to_on_hand / descriptionAdded value: +"Keep the purchased items as 7-day leftovers" - added
Output schema / properties / restockedAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/properties/week/properties/id" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Staples that were marked out and are back in stock" +} - added
Output schema / properties / week / properties / share_urlAdded value: +{ + "description": "Public page showing this week's winners", + "type": [ + "string", + "null" + ] +}
- Changed
remove_member4 fields changed- added
Output schema / properties / items / items / properties / has_accountAdded value: +{ + "description": "True once this member has signed in to Agent Chef with their own account", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / items / items / properties / push_subscribedAdded value: +{ + "description": "Has a device opted in to push notifications", + "type": [ + "boolean", + "null" + ] +} - changed
Output schema / properties / items / items / properties / role / anyOfPrevious value: -[ - { - "enum": [ - "owner", - "member" - ], - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "owner", + "admin", + "member" + ], + "type": "string" + }, + { + "type": "null" + } +] - added
Output schema / properties / items / items / properties / role / descriptionAdded value: +"owner = primary owner; admin = runs the household like the owner; member = votes, rates and browses"
- Changed
reopen_voting6 fields changed- added
Output schema / properties / candidates / items / properties / admin_pickAdded value: +{ + "description": "Selected even though the vote alone would not have picked it: chosen by an admin, or added off the ballot", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / candidates / items / properties / image_generatedAdded value: +{ + "description": "Photo was generated by Agent Chef, so it is safe to show publicly", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / candidates / items / properties / is_publicAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / candidates / items / properties / public_urlAdded value: +{ + "description": "Indexable public page, when published", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / candidates / items / properties / source_recipe_idAdded value: +{ + "description": "Set when this is the household's copy of a Community recipe", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / week / properties / share_urlAdded value: +{ + "description": "Public page showing this week's winners", + "type": [ + "string", + "null" + ] +}
- Changed
run_agent_chef2 fields changed- added
Output schema / properties / on_demandAdded value: +{ + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / week / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "created_at": { - "type": [ - "string", - "null" - ] - }, - "id": { - "$ref": "#/properties/actions/items/properties/why" - }, - "status": { - "enum": [ - "voting", - "selected", - "ordered", - "done" - ], - "type": "string" - }, - "voting_closes_at": { - "type": [ - "string", - "null" - ] - }, - "week_start": { - "description": "YYYY-MM-DD", - "type": "string" - } - }, - "required": [ - "id", - "week_start", - "status" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "created_at": { + "type": [ + "string", + "null" + ] + }, + "id": { + "$ref": "#/properties/actions/items/properties/why" + }, + "share_url": { + "description": "Public page showing this week's winners", + "type": [ + "string", + "null" + ] + }, + "status": { + "enum": [ + "voting", + "selected", + "ordered", + "done" + ], + "type": "string" + }, + "voting_closes_at": { + "type": [ + "string", + "null" + ] + }, + "week_start": { + "description": "YYYY-MM-DD", + "type": "string" + } + }, + "required": [ + "id", + "week_start", + "status" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
search_recipes13 fields changed- added
Input schema / properties / scopeAdded value: +{ + "description": "ours (default): this household's recipes. library: Community recipes, the shared pool of public recipes, with cooks/favorites/ratings across households. all: both.", + "enum": [ + "ours", + "library", + "all" + ], + "type": "string" +} - added
Output schema / properties / items / items / properties / cooksAdded value: +{ + "description": "Households that have cooked it", + "type": "number" +} - added
Output schema / properties / items / items / properties / favoritesAdded value: +{ + "description": "Households that favorited it", + "type": "number" +} - added
Output schema / properties / items / items / properties / forksAdded value: +{ + "description": "Households that added it", + "type": "number" +} - added
Output schema / properties / items / items / properties / image_generatedAdded value: +{ + "description": "Photo was generated by Agent Chef, so it is safe to show publicly", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / items / items / properties / is_publicAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / items / items / properties / my_recipe_idAdded value: +{ + "description": "This household's copy, if already added; use that id on ballots", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / items / items / properties / public_urlAdded value: +{ + "description": "Indexable public page, when published", + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / items / items / properties / rating_count / typePrevious value: -[ - "number", - "null" -]New value: +"number" - added
Output schema / properties / items / items / properties / scopeAdded value: +{ + "anyOf": [ + { + "enum": [ + "ours", + "library" + ], + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / items / items / properties / source_recipe_idAdded value: +{ + "description": "Set when this is the household's copy of a Community recipe", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / items / items / properties / urlAdded value: +{ + "description": "Public page", + "type": "string" +} - removed
Output schema / properties / items / items / requiredRemoved value: -[ - "id", - "title" -]
- Added
send_feedback - Added
set_recipe_image - Changed
set_this_weeks_recipes11 fields changed- added
Output schema / properties / added_to_weekAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/properties/week/properties/id" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Titles picked from outside the ballot and added to the week" +} - added
Output schema / properties / selected / items / properties / admin_pickAdded value: +{ + "description": "Selected even though the vote alone would not have picked it: chosen by an admin, or added off the ballot", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / selected / items / properties / image_generatedAdded value: +{ + "description": "Photo was generated by Agent Chef, so it is safe to show publicly", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / selected / items / properties / is_publicAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / selected / items / properties / public_urlAdded value: +{ + "description": "Indexable public page, when published", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / selected / items / properties / source_recipe_idAdded value: +{ + "description": "Set when this is the household's copy of a Community recipe", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / share_hintAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / shopping_list / properties / skipped_on_hand / items / properties / expires_atAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / shopping_list / properties / skipped_on_hand / items / properties / stapleAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / tie_breakAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "chosen": { + "items": { + "$ref": "#/properties/week/properties/id" + }, + "type": "array" + }, + "recipes": { + "items": { + "additionalProperties": true, + "properties": { + "id": { + "$ref": "#/properties/week/properties/id" + }, + "title": { + "$ref": "#/properties/week/properties/id" + } + }, + "required": [ + "id", + "title" + ], + "type": "object" + }, + "type": "array" + }, + "rule": { + "$ref": "#/properties/week/properties/id" + }, + "spots": { + "$ref": "#/properties/selected/items/properties/vote_count" + }, + "votes": { + "$ref": "#/properties/selected/items/properties/vote_count" + } + }, + "required": [ + "votes", + "spots", + "recipes", + "chosen", + "rule" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Set when the vote tied at the cutoff and the server broke it" +} - added
Output schema / properties / week / properties / share_urlAdded value: +{ + "description": "Public page showing this week's winners", + "type": [ + "string", + "null" + ] +}
- Changed
set_voting_deadline1 field changed- added
Output schema / properties / week / properties / share_urlAdded value: +{ + "description": "Public page showing this week's winners", + "type": [ + "string", + "null" + ] +}
- Changed
update_ingredients6 fields changed- added
Input schema / properties / add / items / properties / daysAdded value: +{ + "description": "Leftover: skip it on shopping lists for this many days, then drop it. Omit for a staple.", + "maximum": 60, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / outAdded value: +{ + "description": "Staples the household ran out of; they return to stock when an order includes them", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Input schema / properties / remove / descriptionPrevious value: -"Names to remove (used up)"New value: +"Names to remove" - added
Output schema / properties / items / items / properties / expires_atAdded value: +{ + "description": "Leftover: skipped until this time, then dropped", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / items / items / properties / outAdded value: +{ + "description": "A staple the household ran out of; it is on the shopping list until an order restocks it", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / items / items / properties / stapleAdded value: +{ + "description": "Always on hand; skipped on every shopping list unless out", + "type": [ + "boolean", + "null" + ] +}
- Changed
update_recipe5 fields changed- added
Input schema / properties / publicAdded value: +{ + "description": "Publish this recipe on agentchef.net/recipes (indexable, with the household's name). Imported recipes show ingredients and link to the source for steps.", + "type": "boolean" +} - added
Output schema / properties / image_generatedAdded value: +{ + "description": "Photo was generated by Agent Chef, so it is safe to show publicly", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / is_publicAdded value: +{ + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / public_urlAdded value: +{ + "description": "Indexable public page, when published", + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / source_recipe_idAdded value: +{ + "description": "Set when this is the household's copy of a Community recipe", + "type": [ + "string", + "null" + ] +}
- Changed
upsert_member8 fields changed- added
Input schema / properties / email / descriptionAdded value: +"An empty string clears it." - added
Input schema / properties / member_idAdded value: +{ + "description": "Edit this member by id (from get_members); this is how you rename someone. Without it, name is the match key.", + "type": "string" +} - changed
Input schema / properties / phone / descriptionPrevious value: -"E.164, e.g. +15551234567"New value: +"E.164, e.g. +15551234567. An empty string clears it." - added
Input schema / properties / roleAdded value: +{ + "description": "Only for members who have signed in to Agent Chef (has_account); admin needs an account", + "enum": [ + "admin", + "member" + ], + "type": "string" +} - added
Output schema / properties / has_accountAdded value: +{ + "description": "True once this member has signed in to Agent Chef with their own account", + "type": [ + "boolean", + "null" + ] +} - added
Output schema / properties / push_subscribedAdded value: +{ + "description": "Has a device opted in to push notifications", + "type": [ + "boolean", + "null" + ] +} - changed
Output schema / properties / role / anyOfPrevious value: -[ - { - "enum": [ - "owner", - "member" - ], - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "owner", + "admin", + "member" + ], + "type": "string" + }, + { + "type": "null" + } +] - added
Output schema / properties / role / descriptionAdded value: +"owner = primary owner; admin = runs the household like the owner; member = votes, rates and browses"
34 tool updates
v0.1.0- First observed
add_ballot_feedback - First observed
add_candidates - First observed
add_vote - First observed
assemble_online_grocery_order - First observed
dismiss_setup_checklist - First observed
favorite_recipe - First observed
get_connected_agents - First observed
get_current_week - First observed
get_favorite_recipes - First observed
get_ingredients - First observed
get_instructions - First observed
get_members - First observed
get_past_recipes - First observed
get_past_votes - First observed
get_recipe - First observed
get_recipe_preferences - First observed
import_recipe - First observed
message_group - First observed
next_actions - First observed
propose_recipes - First observed
rate_recipe - First observed
record_grocery_order - First observed
record_schedule - First observed
remove_member - First observed
reopen_voting - First observed
revoke_connected_agent - First observed
run_agent_chef - First observed
search_recipes - First observed
set_this_weeks_recipes - First observed
set_voting_deadline - First observed
update_ingredients - First observed
update_recipe - First observed
update_recipe_preferences - First observed
upsert_member
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.
Maintenance
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 gradedqualityFmaintenanceMCP 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.17 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-