plan-to-eat-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@plan-to-eat-mcpSave the Bon AppΓ©tit miso pasta from this URL and tag it weeknight."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π½οΈ plan-to-eat-mcp
Stop typing recipes. Start telling them. Hand your favorite LLM the keys to your Plan to Eat recipe book, planner, and shopping list β over the Model Context Protocol.
A drop-in MCP server, a CLI, and a standalone Node client that give Claude, ChatGPT, any MCP-aware assistant, or your own shell full read/write access to your Plan to Eat account.
You: "Save the Bon AppΓ©tit miso pasta from this URL and tag it weeknight."
LLM: β created recipe #48,872,094 β 7 ingredients, 25 min, tagged weeknight.
You: "Plan dinner around it Tuesday and add the missing pantry items to my
shopping list."
LLM: β event created 2026-05-05 / dinner / 4 servings.
β shopping list now reflects miso, mirin, and dashi.β¦or, when you'd rather not talk to anything:
$ plan-to-eat get-planner-week 2026-05-04
start_date 2026-05-04
end_date 2026-05-10
ID DATE SECTION KIND RECIPE_ID RECIPE_TITLE DESCRIPTION SERVINGS
ββββββββ ββββββββββ βββββββββ ββββββββββ βββββββββ ββββββββββββββββββ βββββββββββββββββββββ ββββββββ
67698872 2026-05-05 breakfast recipe 17314561 Breakfast Sandwich 8
67483177 2026-05-05 dinner ingredient Asparagus (in season) 0
67710784 2026-05-06 dinner note Cucumber salad 0
3 rowsThat's it. No recipe re-typing. No copy-pasting URLs into a phone app. Just talk.
β€οΈ Why Plan to Eat?
If you're not already using it, Plan to Eat is genuinely the best meal-planning app I've ever used:
A clip-anywhere recipe importer that actually works on real-world food blogs.
Drag-and-drop weekly planner that automatically rolls ingredients into a shopping list, with smart units and pantry deduplication.
Yours forever β your recipe book is portable, exportable, and not held hostage by an algorithm.
Family-friendly β share recipes and menus with friends in-app.
14-day free trial, no credit card needed.
π Sign up with my referral link β you get the trial, and I get a tiny thank-you. Win/win.
Related MCP server: Mealie MCP Server
β¨ What this gives you
π€ MCP server out of the box β point Claude Desktop, Claude Code, OpenClaw, or any MCP-compatible host at it and start talking to your recipe book.
β¨οΈ A CLI over the same tools β every MCP tool is also a
plan-to-eatsubcommand, with tables for humans and--jsonfor scripts. One registry feeds both surfaces, so they can't drift.π Auto-auth & auto-recovery β set your credentials once, the server handles login, caches the cookie session to disk, and silently re-auths whenever Plan to Eat invalidates it.
π§° 30 tools, all the verbs that matter β full recipe CRUD, full meal-planner CRUD (add / move / duplicate / delete recipes, notes, and ingredient entries), reorder events in a slot, leftovers as a first-class workflow, freezer tracking, browse courses & cuisines & tags, peek at the shopping list, count what's in your queue.
ποΈ Real planner control β view a week's plan with recipe titles pre-joined, schedule recipes on dates, attach prep notes, reschedule with one tool call, change servings, duplicate, search for duplicates, reorder same-slot events.
βοΈ Freezer tracking β after cooking, mark N portions as frozen with
freeze_recipe_portions; check what's stashed withlist_frozen_recipes; consume entries when you eat them (soft-delete, history preserved).π³ Real CRUD β including ingredient lists with proper units, directions, prep/cook times, nutrition, ratings, and tags.
π¦ Tiny runtime β no Playwright, no headless browser, no native modules. Just
fetch, the MCP SDK, and Zod. Boots in under a second.π¦Ί 100% TypeScript β fully typed
Recipe,Ingredient,PlannerEventshapes plus a generic_json<T>so your tools never have to guess what comes back.π A library too β
core/client.tsis a clean, plain-Node API client you can drop into any script.π§ Bundled Claude Code skill β
.claude/skills/plan-to-eat/SKILL.mdteaches any agent the common workflows and gotchas (the supper-vs-dinner alias, thedescription-vs-titlemismatch, etc.) so it doesn't have to rediscover them.
Reverse-engineered from the live web app. There's no public Plan to Eat API, but the desktop site uses these same endpoints internally. Use at your own risk β they could change anything at any time.
π Quick start
npx -y plan-to-eat-mcp # run the MCP server
npm i -g plan-to-eat-mcp # β¦or install both bins on PATHRequires Node 18+ (for built-in fetch) and a
Plan to Eat account.
The package ships two bins: plan-to-eat-mcp (the MCP server) and
plan-to-eat (the CLI). To run the CLI through npx without installing, note
that you have to select it explicitly, since the default bin is the server:
npx -y -p plan-to-eat-mcp plan-to-eat --helpgit clone https://github.com/alex-zwingli/plan-to-eat-mcp.git
cd plan-to-eat-mcp
npm install
npm run buildThe build emits CommonJS to dist/.
Configuration
Var | Required | Default | Description |
| yes | β | Plan to Eat login email |
| yes | β | Plan to Eat password |
| no |
| Where the cookie session is cached. Set to |
The CLI also reads a .env in the working directory (shell variables win). The
MCP server does not β MCP hosts pass env explicitly, as shown below.
π€ Use it with an agent
Any host that can launch a local stdio MCP server works. The server needs one command, two env vars, and nothing else β no ports, no OAuth, no daemon.
Claude Code, the easy way: install the plugin
The repo ships as a Claude Code plugin β MCP server and both skills in one step:
export PLAN_TO_EAT_USERNAME=you@example.com
export PLAN_TO_EAT_PASSWORD=hunter2
git clone https://github.com/alex-zwingli/plan-to-eat-mcp.git
cd plan-to-eat-mcp && npm install && npm run build
claude plugin marketplace add "$(pwd)"
claude plugin install plan-to-eat@plan-to-eatThat gives you:
Component | What it is |
MCP server | all 30 tools |
Skill | how to use the MCP tools well β workflows and gotchas |
Skill | the same, for agents driving the CLI instead |
Confirm with claude plugin details plan-to-eat@plan-to-eat and claude mcp list.
The server reads PLAN_TO_EAT_USERNAME / PLAN_TO_EAT_PASSWORD from the
environment Claude Code was launched with, so export them in your shell profile
rather than committing them anywhere.
Claude Code, manually
claude mcp add plan-to-eat \
--env PLAN_TO_EAT_USERNAME=you@example.com \
--env PLAN_TO_EAT_PASSWORD=hunter2 \
-- npx -y plan-to-eat-mcpAdd --scope user to make it available in every project instead of just this
one. Check it connected with claude mcp list, or /mcp inside a session.
Claude Desktop
Edit claude_desktop_config.json β Settings β Developer β Edit Config, or:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"plan-to-eat": {
"command": "npx",
"args": ["-y", "plan-to-eat-mcp"],
"env": {
"PLAN_TO_EAT_USERNAME": "you@example.com",
"PLAN_TO_EAT_PASSWORD": "hunter2"
}
}
}
}Restart Claude Desktop, and you're cooking.
Any other MCP host
Cursor, Windsurf, Zed, Cline, Continue, OpenClaw, VS Code's MCP support, and custom SDK clients all take the same three things. Point them at:
Field | Value |
Transport | stdio |
Command |
|
Args |
|
Env |
|
Most of them use the same mcpServers JSON block as Claude Desktop above β
often in .cursor/mcp.json, .vscode/mcp.json, or the host's settings UI.
If you installed globally (npm i -g plan-to-eat-mcp), use the
plan-to-eat-mcp bin as the command and drop the args entirely. If you built
from a clone, the command is node with
["/absolute/path/to/plan-to-eat-mcp/dist/mcp/server.js"].
Absolute paths matter for the clone route. MCP hosts don't launch servers from your project directory, so a relative path will fail to resolve. The
npxcommand above sidesteps this entirely.
Verify it works
PLAN_TO_EAT_USERNAME=you@example.com PLAN_TO_EAT_PASSWORD=hunter2 npx -y plan-to-eat-mcpYou should see [plan-to-eat] mcp server ready on stdio (30 tools) on stderr.
That's the server waiting for a client β Ctrl-C out. If instead you get a
credentials error, fix that before wiring up a host, where the failure is
harder to see.
Teach your agent the workflows
Two skills ship in .claude/skills/, covering the common flows and the sharp
edges (the supper-vs-dinner alias, the description-vs-title mismatch on
note entries, checking for duplicates before scheduling):
plan-to-eatβ for agents calling the MCP tools.plan-to-eat-cliβ for agents that have a shell but no MCP server. Same 30 capabilities, driven through subcommands, with--jsonfor parsing.
The plugin install above registers both. Agents on other hosts can read them as plain context β point them at the files, or paste one into your system prompt.
Or install just the skills, into any of 18+ agents, with the skills.sh CLI:
npx skills add alex-zwingli/plan-to-eat-mcpThat copies both SKILL.md files into .agents/skills/ and symlinks them for
Claude Code, Cursor, Codex, Copilot, Gemini CLI and the rest. Add
--skill plan-to-eat-cli to take only one. Note that this installs the skills
and not the server β each skill's setup section walks the agent through building
the MCP server or CLI if it isn't already there.
For OpenClaw agents, both skills are on ClawHub:
clawhub install plan-to-eat # MCP tools
clawhub install plan-to-eat-cli # shell / CLITheir frontmatter declares the credentials and binaries each one needs under
metadata.openclaw, so ClawHub can check your environment at install time.
β¨οΈ Use it from the terminal
Every MCP tool is also a subcommand. Underscores become dashes; both spellings work.
npm i -g plan-to-eat-mcp
plan-to-eat --helpOr without installing β note the -p, since the package's default bin is the
MCP server, not the CLI:
npx -y -p plan-to-eat-mcp plan-to-eat --help$ plan-to-eat list-frozen-recipes
ID RECIPE_ID COUNT SERVINGS FROZEN_ON
ββββββ βββββββββ βββββ ββββββββ ββββββββββ
227854 44676380 6 1.0 2025-05-04
227908 17314561 3 1.0 2025-05-05
2 rows
$ plan-to-eat add-planner-note "Defrost chicken" 2026-05-05 dinner
id 67710999
date 2026-05-05
section dinner
$ plan-to-eat get-counts --json | jq .frozen
10Positional or flagged β
get-recipe 123andget-recipe --id 123are the same.<command> --helplists which arguments are positional.--jsonprints the raw payload instead of a table, for piping intojq.Arrays repeat the flag (
--event_ids 11 --event_ids 22) or take JSON (--event_ids '[11,22]'). Object arguments take JSON:--ingredients '{"title":"bread","amount":"2"}'.Validation is the same Zod schema the MCP server uses, so a bad enum or a malformed date fails the same way in both surfaces.
π§° The 30 tools
Each is an MCP tool and a CLI subcommand β add_planner_recipe the tool is
plan-to-eat add-planner-recipe in the shell. Full reference with input
schemas and return shapes: docs/TOOLS.md.
Recipes
Tool | What it does |
| Your whole recipe book (caps at ~500 entries). |
| One recipe with directions, ingredients, tags, prep_notes, comments. |
| Create. Only |
| Patch any subset of fields. |
| Delete by id. |
Planner β read
Tool | What it does |
| All planner entries, no date filter. |
| Events in a date range, with |
Planner β write
Tool | What it does |
| Schedule a recipe on a date + section. |
| Attach a freeform ingredient ("2 lbs ground beef") to a meal slot. |
| Attach a freeform note ("Defrost chicken") to a meal slot. |
| Schedule a leftover from a previously planned recipe event (duplicate with |
| Reschedule any planner event to a new date/section. |
| Reorder events within a section (pass ids in desired order). |
| Edit the text of a note or ingredient entry. |
| Change servings on a recipe event. |
| Duplicate any event. Optional |
| Delete by id. |
| Find planner events for a recipe in a date range. Useful for duplicate checks. |
Freezer
Tool | What it does |
| What's currently in the freezer. |
| Mark N portions of a cooked recipe as frozen, tied to the planner event they came from. |
| Mark a frozen entry as consumed (soft-delete: API zeroes count, row persists). |
Lookup tables & extras
Tool | What it does |
| Lookup tables. |
| Saved menus. |
| Current shopping list with sync metadata. |
| Friends list. |
|
|
| Set planner display preferences (timezone, start day, nutrition columns). Rarely needed. |
π Use the client as a library
import { PlanToEat, type Recipe } from 'plan-to-eat-mcp';
const pte = new PlanToEat();
await pte.login(process.env.PLAN_TO_EAT_USERNAME!, process.env.PLAN_TO_EAT_PASSWORD!);
// Or restore: pte.importSession(JSON.parse(fs.readFileSync('session.json', 'utf8')));
const recipes = await pte.listRecipes();
const detail: Recipe = await pte.getRecipe(recipes[0].id);
const created = await pte.createRecipe({
title: 'Grilled cheese',
servings: 1,
directions: 'Butter bread. Cheese. Pan. Flip.',
ingredients: [
{ title: 'bread', amount: '2', unit: 'slice', position: 1 },
{ title: 'cheese', amount: '1', unit: 'slice', position: 2 },
],
tag_titles: 'easy,lunch',
});
await pte.updateRecipe(created.id, { rating: 5 });
await pte.deleteRecipe(created.id);The client stashes credentials internally on first login so it can transparently re-authenticate if the cached cookies expire mid-session.
The tool registry is exported too, if you want to build your own adapter over the same 30 capabilities:
import { toolsByName, createSession } from 'plan-to-eat-mcp';
const { pte, ensure } = createSession();
await ensure();
const getRecipe = toolsByName.get('get_recipe')!;
console.log(getRecipe.description); // same text the MCP host sees
const recipe = await getRecipe.run(pte, { id: 123 });π§ͺ API reference (the parts that work)
All paths under https://app.plantoeat.com.
JSON endpoints (/api/v1/*)
Method | Path | Notes |
GET |
| Whole recipe book. Caps at 500 entries; pagination params don't seem to work. |
GET |
| Single recipe with |
POST |
| Create. Body: |
PUT |
| Update. Same body shape. |
DELETE |
| Delete. Returns the deleted recipe. |
GET |
| Lookup tables. |
GET |
| Planner entries (calendar). Returns the entire calendar β filter by date client-side. |
GET |
| Saved menus. |
GET |
| Shopping list with sync timestamp. |
GET |
| Friends. |
GET |
| Freezer: |
DELETE |
| Soft-delete (sets |
GET |
|
|
Planner write endpoints (/planner/*)
A different style: form-encoded bodies, text/javascript (empty) responses. The server mutates state and the UI re-fetches separately. Required headers: X-CSRF-Token, X-Requested-With: XMLHttpRequest, Accept: text/javascript. Because the response body is empty, the client recovers any new event ID by diffing /api/v1/events before and after.
Method | Path | Body |
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
|
|
POST |
| Nested Rails keys: |
POST |
|
|
GET |
| Returns rendered HTML, not JSON β not used by the client. We filter |
section values are breakfast, lunch, dinner, snacks. Note that the server may normalize dinner β supper based on the user's per-account preference; reads will reflect the canonical name.
Authentication
Cookie-based. The client supports two flows:
Login.
POST /loginwithlogin[email]andlogin[password]plus theauthenticity_tokenfrom the meta tag onGET /login. Server returns a 302 and sets cookies.Reuse cookies. The "remember me" pair
ptermid2(user id) andptermxt2(long-lived token) is sufficient on its own β stash those and skip re-login until they're invalidated.
Write requests need an X-CSRF-Token header. The client grabs it from the
<meta name="csrf-token"> tag on the /recipes page on demand.
HTTP Basic auth on /api/v1/... is not supported (returns 401).
Recipe payload shape
The single-recipe response has 65 fields. Writable on POST/PUT include:
title, description, source, url, servings, yield, scaling,
prep_time, cook_time, total_time (minutes),
course_id, cuisine_id, main_ingredient_id, tag_titles (comma list),
directions (free text), private, draft, rating,
nutrition strings (calories, sodium, etc.), and ingredients.
Ingredients use Rails nested-attributes β the wire field is
recipe_ingredients_attributes, not ingredients. The client and the
create_recipe / update_recipe tools accept the friendlier name
ingredients and translate. Each entry:
{ "title": "water", "amount": "1", "unit": "cup", "note": "", "position": 1 }To delete an existing ingredient on update, include its id plus
"_destroy": true. The server back-fills amount_float, metric_amount,
metric_unit, and similar_titles.
π Layout
One package, three layers. The logic lives in core/; the MCP server and the
CLI are thin adapters over the same registry.
src/
core/
client.ts API client β no MCP, no CLI, no I/O beyond fetch
tools.ts the tool registry: name, description, Zod shape, handler
session.ts credentials + cookie-cache bootstrap, shared by both adapters
version.ts version read from package.json at runtime
mcp/server.ts registry -> MCP tools (stdio transport)
cli/
main.ts registry -> subcommands, help, dispatch
args.ts argv -> Zod-validated arguments
render.ts results -> tables (or raw JSON under --json)
scripts/ smoke tests and the docs coverage check
index.ts public entrypoint for library consumers
server.ts back-compat shim, see belowAdding a tool means adding one entry to src/core/tools.ts. It appears in
the MCP server and the CLI at once, with the same name, schema, and
description β they can't drift apart.
Other files worth knowing:
docs/TOOLS.mdβ per-tool reference with input/output shapes and gotchas. Hand-written;npm run check:docsfails if it and the registry disagree about which tools exist..claude/skills/plan-to-eat/SKILL.mdβ how to use the MCP tools well..claude/skills/plan-to-eat-cli/SKILL.mdβ the same, for the CLI..claude-plugin/β Claude Code plugin and marketplace manifests..mcp.jsonβ the plugin's MCP server declaration.dist/β emitted bynpm run build.
Upgrading from β€0.4? The server moved from
dist/server.jstodist/mcp/server.js. The old path still works β it's a shim that loads the new one β so existing host configs and deployments keep running. New configs should use the new path or theplan-to-eat-mcpbin.
Playwright was used during reverse engineering and is kept as a devDependency
for any future API-discovery work; the runtime depends only on fetch, the
MCP SDK, and Zod.
Scripts
Command | What it does |
| Compile |
| Same, in watch mode. |
| Run the compiled MCP server ( |
| Run the CLI without linking it globally. |
| Smoke-test the client end-to-end against your account (recipes). |
| Smoke-test the planner write endpoints (creates + cleans up test events on a date 6 months out). |
| Smoke-test the MCP server end-to-end (spawns it and calls tools). |
| Check |
| Remove |
The verify* and test scripts hit your real account. They create and delete
their own test data, but they are not a dry run β see
CONTRIBUTING.md.
π€ Contributing
Bug reports, new endpoints, and upstream-breakage fixes are all welcome β see CONTRIBUTING.md. The one thing to know up front: the test scripts run against a real Plan to Eat account and create real data (then clean it up). Use your own.
π Support Plan to Eat
This whole project exists because Plan to Eat is great. If you find this useful, the best thing you can do is give Plan to Eat a try with my referral link. Free 14-day trial, no card needed.
License
MIT β see LICENSE. Do whatever you want with it; just don't blame me if Plan to Eat ships a breaking change.
Available Tools
30 toolsadd_leftover_mealA
Schedule a leftover meal derived from a previously planned recipe event. Duplicates the source event with plan_leftover=true and optionally moves the duplicate to a different date/section. Returns the new event.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | If omitted, leftover lands on the same date as the source event. | |
| section | No | If omitted, leftover lands in the same section as the source event. | |
| source_event_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states the duplication behavior, the plan_leftover=true flag, optional date/section movement, and that it returns the new event. It does not mention potential side effects like validation failures or permissions, but core behavior is well covered.
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 three concise sentences with no filler. The purpose is front-loaded, the behavioral details follow logically, and the return value is stated. Every sentence earns its place; the text is easily parsed and avoids 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?
For a tool with 3 parameters and no output schema, the description adequately covers the primary behavior, the return, and the optional parameters' semantics. It does not mention error handling or prerequisites beyond 'previously planned recipe event,' but that is sufficient for an agent to call it correctly in most scenarios. The absence of an output schema is mitigated by the explicit 'Returns the new event' statement.
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 covers date and section with descriptions (67% coverage). The description adds meaning for source_event_id by identifying it as the 'source event' from which the leftover is derived. It also clarifies that date and section default to the source event's values, enriching the schema's own descriptions. This goes beyond mere restatement and helps the agent understand parameter intent.
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 clearly states the tool's purpose: schedule a leftover meal derived from a planned recipe event. It explains the mechanism (duplicates source event with plan_leftover=true) and distinguishes it from generic duplication by focusing on the leftover flag and optional date/section changes. This is a specific verb+resource pairing that leaves no ambiguity.
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 context (creating a leftover from a planned event) but does not explicitly contrast with alternatives like duplicate_planner_event or move_planner_event. There is no explicit when-to-use or when-not-to-use guidance, leaving the agent to infer the appropriate scenario from the tool's name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_planner_ingredientA
Add a freeform "ingredient" entry to a meal slot (e.g. "2 lbs ground beef" attached to Wednesday dinner).
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| title | Yes | ||
| section | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It indicates mutation with 'Add' but does not mention side effects, idempotency, or whether the entry appends to existing content. For a simple add operation, this is acceptable, but a more explicit note on behavior (e.g., 'appends to the slot') would improve transparency.
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, front-loaded sentence with an illustrative example. Every word serves to clarify the tool's purpose and parameter roles. There is no redundant 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 simple add operation with no output schema, the description covers the core intent and parameter meanings via the example. It does not restate schema constraints (which are already in the schema), but it provides enough context for an agent to correctly construct a call. Slight gaps remain regarding error behavior or any side effects, but they are minor for this tool type.
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%, so the description must compensate. The example '2 lbs ground beef' attached to 'Wednesday dinner' maps implicitly to the title, date, and section parameters respectively. This clarifies the semantic meaning of the three parameters beyond the bare schema, though it does not explicitly name each parameter.
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 clearly states the verb 'Add' and the resource 'freeform ingredient entry to a meal slot', with a concrete example ('2 lbs ground beef' attached to Wednesday dinner). This differentiates it from sibling tools like add_planner_recipe (which likely adds a recipe) and add_planner_note (which adds a note) by emphasizing 'freeform ingredient'.
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 via the example (attaching an ingredient to a meal slot) but does not explicitly state when to use this tool versus alternatives like add_planner_recipe or add_leftover_meal. It relies on the 'freeform' wording to signal a distinction, but there is no explicit when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_planner_noteB
Add a freeform "note" entry to a meal slot (e.g. "Defrost chicken" on Tuesday breakfast).
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| title | Yes | ||
| section | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. 'Add' implies a mutation but the description doesn't disclose what happens on duplicate notes at the same slot, whether it overwrites existing entries, or what the response looks like. For a write operation with zero annotation coverage, this is a meaningful gap.
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 efficient sentence with zero filler and a useful example embedded. It earns its space with the concrete scenario, though it could trade some brevity for behavioral detail.
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 simple 3-param tool with a clear example, it's mostly adequate. However, with no annotations and no output schema, it lacks disclosure of edge cases (duplicate handling, response format) that an agent might need. The core call is understandable, but not fully 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?
Schema description coverage is 0%, so the description must compensate. The example 'Defrost chicken' on Tuesday breakfast' maps loosely to title/date/section, adding some semantic grounding, but it doesn't explicitly explain each parameter's meaning, constraints, or format beyond what the schema already encodes (date pattern, section enum). With 0% coverage, this is insufficient compensation.
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?
Clear verb ('Add') + specific resource ('freeform note entry to a meal slot') with a concrete example. It distinguishes itself from siblings like add_planner_recipe and add_planner_ingredient by emphasizing 'freeform' note, which tells the agent this is for arbitrary text rather than structured data.
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 example implies the use case, but the description doesn't explicitly state when to use this vs alternatives like add_planner_recipe, add_planner_ingredient, or add_leftover_meal. The word 'freeform' weakly hints at distinguishing from recipe/ingredient additions, but there's no explicit when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_planner_recipeB
Add a recipe to a meal slot on the planner. Returns the newly created event (id, date, section, servings, ...).
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| section | Yes | ||
| frozen_id | No | Pass to schedule from a frozen recipe; null for "from frozen, no specific recipe". | |
| recipe_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the return value ('Returns the newly created event (id, date, section, servings, ...)'), which is useful since there is no output schema. However, it omits any mention of mutation side effects, idempotency, or failure behavior for a creation 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?
Two sentences with the primary action front-loaded and the return-value disclosure following. No wasted words, though the return-value detail could arguably have been folded into the 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?
For a 4-parameter tool with no output schema and only 25% schema coverage, the description is moderately complete: it gives the return shape, which is helpful. But recipe_id semantics are left undocumented, and no guidance distinguishes this from the other add_planner_* siblings.
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% (only frozen_id has a description). The description names date, section, and servings in the return value but does not explain the semantics of recipe_id, which is required and undocumented. It fails to compensate for the low schema coverage.
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 ('add') and resource ('a recipe to a meal slot on the planner'), making the core purpose clear. It does not explicitly differentiate from the similar sibling tools add_planner_ingredient, add_planner_note, and add_leftover_meal, but naming 'recipe' as the payload does implicitly distinguish 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?
No guidance is provided on when to choose this tool over its close siblings (add_planner_ingredient, add_leftover_meal) or when frozen_id should be used instead of recipe_id. The usage context is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_recipeB
Create a new recipe. Only title is required. Ingredients are an array of {title, amount, unit, note, position}.
| Name | Required | Description | Default |
|---|---|---|---|
| fat | No | ||
| url | No | ||
| draft | No | ||
| fiber | No | ||
| sugar | No | ||
| title | No | ||
| yield | No | ||
| rating | No | ||
| sodium | No | ||
| source | No | ||
| private | No | ||
| protein | No | ||
| calories | No | ||
| servings | No | ||
| cook_time | No | Minutes | |
| course_id | No | ||
| prep_time | No | Minutes | |
| cuisine_id | No | ||
| directions | No | ||
| tag_titles | No | Comma-separated list of tag names | |
| total_time | No | Minutes | |
| cholesterol | No | ||
| description | No | ||
| ingredients | No | Maps to recipe_ingredients_attributes on the wire | |
| carbohydrate | No | ||
| saturated_fat | No | ||
| main_ingredient_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only states that it creates a recipe, which is already obvious from the name. It does not mention side effects, authorization requirements, error conditions, or what happens on success, leaving significant gaps.
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 concise, with two sentences and no wasted words. It front-loads the core purpose and then adds the most critical parameter details. Every sentence contributes directly to understanding the tool.
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 (27 parameters, no output schema, no annotations), this description is severely incomplete. It does not mention return values, any constraints beyond title, or relationships between fields. An agent would need to infer most behavior from the schema alone, which is insufficient due to low coverage.
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 19%, so the description must compensate. It adds value by explaining that only title is required and clarifying the ingredients array structure. However, it does not elaborate on the other 25 parameters (e.g., fat, url, draft), leaving most parameters unexplained. The description helps for two fields but fails to cover the rest.
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 clearly states the tool's purpose: 'Create a new recipe.' It differentiates from siblings by using the verb 'create' rather than 'update' or 'get', and adds specific details about required title and ingredient structure, making it 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 implies usage by stating it creates a new recipe, but it does not explicitly mention when to use this tool versus alternatives like update_recipe or list_recipes. No exclusions or conditions are given, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_frozen_recipeA
Mark a frozen entry as consumed (the portion was eaten or thrown out). Soft-delete: API sets count to 0; the entry persists as history.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Fully discloses the soft-delete behavior: the API sets count to 0 and the entry persists as history. This is crucial side-effect information, especially since no annotations are provided.
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 concise sentences that pack the key information without fluff. The structure is efficient and front-loaded.
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 description fully explains what happens (soft-delete, count to 0, persistence) for a simple tool with one parameter. No output schema is needed, and the scope is adequately covered.
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 only parameter 'id' has no schema description, and the tool description does not explicitly mention it. However, the action implies the id identifies the frozen entry, so the meaning is inferable but not explicitly added beyond the 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?
Clearly states the action (mark a frozen entry as consumed) and the effect (soft-delete, sets count to 0). It is specific to frozen entries, distinguishing it from general delete operations.
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 context (eaten or thrown out) but does not explicitly state when to use this tool over alternatives like delete_recipe or delete_planner_event. No direct guidance on choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_planner_eventB
Delete a planner event by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden but only says 'delete'; it does not disclose permanence, idempotency, 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?
A single, direct sentence with no unnecessary words or 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?
The description is minimally adequate for a simple delete-by-id operation, but it omits operational context such as return behavior, error conditions, and whether deletion is permanent.
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 provides no parameter description, but the phrase 'by id' adds some meaning by indicating that the integer is the identifier of the planner event, though it does not explain how to obtain or validate it.
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?
Clearly states the action (delete), the target (planner event), and the selection method (by id), distinguishing it from sibling planner tools like move_planner_event and duplicate_planner_event.
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 no guidance on when to use this tool over alternatives or any prerequisites, such as verifying that the event exists before deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_recipeB
Delete a recipe by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for disclosing behavior. It only states the action and parameter, but does not mention that deletion is irreversible, whether it cascades to related data, requires authentication, or how errors are handled (e.g., non-existent id). This is a significant gap for a mutation 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?
The description is a single, direct sentence 'Delete a recipe by id.' It is front-loaded and contains no unnecessary words. Every word 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?
For a simple delete operation, the description is incomplete. It does not state what happens on success or failure, whether there are side effects, or any return value. Since there is no output schema, the description must cover these aspects, but it does not. The agent is left without critical information for invoking the tool 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 schema defines id as an integer with no description (0% coverage). The description says 'by id', which clarifies that the id refers to a recipe identifier, adding meaning beyond the raw schema. However, it does not elaborate on format or constraints, so it only partially compensates for the missing schema descriptions.
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 'Delete a recipe by id' clearly states a specific verb (delete) and resource (recipe) with an identifier, distinguishing it from sibling tools like list_recipes, get_recipe, create_recipe, and update_recipe. It is unambiguous about the action and target.
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 no guidance on when to use this tool versus alternatives. It does not mention prerequisites, conditions, or exclusions, such as whether it is for permanent deletion or if there are related tools like delete_frozen_recipe that should be used in specific cases. The agent must infer usage from the name and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate_planner_eventA
Duplicate a planner event. Set plan_leftover=true to mark the copy as a leftover.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| plan_leftover | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the effect of the optional parameter (plan_leftover) on the copy, indicating that the copy can be marked as leftover. However, it does not specify whether the original event remains unchanged, what the result of the operation is (e.g., new event ID), or any side effects or permissions needed, leaving some behavioral aspects opaque.
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 extremely concise at two sentences, with no unnecessary words or repetition. It efficiently conveys the core action and the one key parameter behavior.
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 output schema, the description does not mention what the tool returns (e.g., the duplicated event object or a success indicator). It also omits any preconditions (e.g., whether the original must exist) or postconditions. While the action is simple, the lack of return value or error information makes the description incomplete for an agent to fully anticipate the tool's 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?
The schema has no parameter descriptions, and the tool description only explains the meaning of plan_leftover (marking the copy as leftover). The id parameter is not explained, though it is inferable as the identifier of the event to duplicate. This partial coverage leaves the semantics of id vague, and the description does not fully compensate for the lack of schema documentation.
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 clearly states the action ('Duplicate') and the object ('a planner event'), which is specific and distinguishable from sibling tools like move or reorder. The use of 'duplicate' leaves no ambiguity about the tool's purpose.
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 does not provide any guidance on when to use this tool versus alternatives such as move or reorder. It only describes the action, not the conditions under which duplication is appropriate, leaving the agent to infer based on the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_planned_datesA
Find planner events for a given recipe, optionally constrained to a date range. Useful for "is this recipe already planned this week?" checks before scheduling.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ||
| recipe_id | Yes | ||
| start_date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must convey the behavior. The word 'find' indicates a read operation, and the description is straightforward. It does not explicitly state side effects, but none are expected. It could mention what is returned, but for a simple lookup it is sufficiently transparent.
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 two sentences, concise and free of fluff. It directly states the function and a use case without redundant details.
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 there is no output schema, the description adequately covers what the tool does and when to use it. The scope (finding events for a recipe, optionally within a date range) is fully described, and the use case adds practical context. No critical information 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 description links 'given recipe' to recipe_id and 'date range' to start_date and end_date, providing meaning for all three parameters. It also indicates the optionality of the date range. Since the schema provides no per-parameter descriptions, this coverage is valuable and complete.
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 clearly states it finds planner events for a given recipe with an optional date range. It is specific about the resource (planner events) and the qualifier (recipe and date range), and it differentiates from sibling tools like list_planner_events and get_planner_week by focusing on a particular 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?
It provides a concrete use case: checking if a recipe is already planned this week before scheduling. This gives clear context on when to use the tool, and the optional date range is implied by 'optionally constrained'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
freeze_recipe_portionsA
Mark N portions of a previously cooked recipe as frozen. event_id ties the frozen entry back to the planner event the portions came from.
| Name | Required | Description | Default |
|---|---|---|---|
| count | Yes | Number of frozen portions / containers. | |
| event_id | Yes | The planner event the portions came from (typically the recipe event you just cooked). | |
| servings | Yes | Servings per portion (e.g. 1.0 means each container = 1 serving). | |
| recipe_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the core state changeβmarking portions as frozenβbut does not disclose side effects, validation requirements, failure modes, or whether existing frozen entries are updated or duplicated. With no annotations available, the description carries the full burden and only partially meets it.
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 concise and front-loaded: the primary action appears first, and the clarifying event_id detail follows in a short second sentence. Every word adds value without unnecessary elaboration.
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 with four required parameters and no output schema or annotations, the description gives a clear purpose but omits practical details like whether the recipe must already exist, whether event_id must reference a valid planner event, and what the tool returns or affects afterward.
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 descriptions already cover count, event_id, and servings, and the description adds useful context about event_id linking to the planner event. However, recipe_id has no schema description and is not explained in the description, leaving one of four required parameters underspecified.
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 clearly states a specific action: marking N portions of a previously cooked recipe as frozen. It also defines the role of event_id, tying the frozen entry to a planner event, which distinguishes it from simple leftover logging or frozen-recipe listing.
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 phrase 'previously cooked recipe' implies this should be used after cooking, and the event_id explanation anchors it to a planner event. However, it does not explicitly contrast with sibling tools like add_leftover_meal, list_frozen_recipes, or delete_frozen_recipe, nor state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_countsA
Get recipe-book counts: { friends, queued, frozen }.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. 'Get' implies a read-only operation, but there is no explicit statement about side effects, errors, or data freshness. It discloses the output categories but not broader behavioral guarantees.
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, short sentence that immediately states the tool's purpose and enumerates the count categories. No filler or redundant wording is present.
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 lack of parameters and output schema, the description adequately explains what the tool returns: counts for friends, queued, and frozen. It could clarify the exact result shape, but the core context is sufficient for a simple count retrieval.
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 and the empty schema is fully covered. With zero parameters, the baseline is 4, and the description adds no unnecessary parameter detail because none exists.
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 clearly states a specific action ('Get') and resource ('recipe-book counts'), and enumerates the three categories returned: friends, queued, and frozen. This distinguishes get_counts from sibling list tools by focusing on counts rather than item lists.
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 when counts are needed rather than full lists, but it does not explicitly mention when to prefer this tool over sibling tools like list_friends or list_frozen_recipes. No alternative tools are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_planner_weekA
Fetch all planner events between start_date and end_date (inclusive, YYYY-MM-DD). end_date defaults to start_date + 6 days. Recipe events are enriched with recipe_title.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ||
| start_date | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses read-only behavior ('Fetch'), the default date logic, and the enrichment of recipe events with `recipe_title`. It does not mention error handling or pagination, but provides key behavioral 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 sentences deliver all necessary information with no redundancy, efficiently covering functionality and parameter behavior.
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 description implies a return of planner events and notes the `recipe_title` enrichment, which is sufficient for basic understanding. It omits return shape and edge cases, but given the simplicity, it's reasonably 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?
Both parameters (`start_date`, `end_date`) are explained with format and the default for `end_date` is given. This fully covers their semantic meaning beyond the schema's pattern constraint.
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 clearly states the tool fetches planner events over a date range, with a default week-long window. It distinguishes itself from other planner-related tools by specifying the range and the enrichment behavior.
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 implicitly conveys when to use it (for date-range queries) and the default fallback, but doesn't explicitly contrast with list_planner_events or other siblings. Still, the purpose is evident enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recipeA
Get a single recipe by id, including directions, ingredients, tags, prep_notes, comments.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. The verb 'get' strongly implies a read-only operation, but the description does not explicitly state that it does not modify data or have side effects. Given the presence of create/update/delete siblings, the read-only nature is inferable but not stated.
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, concise sentence that efficiently conveys the tool's purpose without extraneous words. It includes the resource type, the lookup method, and the expected return content (directions, ingredients, etc.) in a compact form.
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's low complexity (one parameter, no output schema), the description adequately covers what the tool does and what it returns. It does not mention error handling or pagination, but these are not critical for a single-recipe fetch. The description is complete enough for typical usage.
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 provides only the type and range for the id parameter with no description. The description adds necessary meaning by clarifying that 'id' refers to the recipe's identifier. However, it does not explain the range constraints (min/max) or what happens if an invalid id is provided, though the schema already defines the numeric limits.
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 clearly states the action (get) and the resource (a single recipe by id), distinguishing it from list_recipes which presumably returns multiple recipes. The inclusion of 'single' and 'by id' makes the purpose 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 implicitly indicates when to use this tool (when you need one recipe by id) versus list_recipes for multiple recipes, but it does not explicitly state 'use this instead of list_recipes when you have a specific id.' The implication is strong enough for a clear inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_shopping_listA
Get the current shopping list with sync metadata.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The word 'Get' strongly implies a read-only operation, and mentioning 'sync metadata' hints at the output content. However, it does not spell out whether there are side effects or how the sync metadata is structured. Since no annotations are provided, the description carries the full burden, but the read-only implication is clear.
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, concise sentence that conveys the essential information without any filler. It is well-structured and immediately understandable.
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 no-parameter getter, the description provides sufficient context by naming the resource and the sync metadata aspect. It does not detail the return format or the exact meaning of 'sync metadata,' but this is a minor gap given the simplicity of the tool. The description is adequate for an agent to invoke it 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, and the schema is empty with 100% coverage. There is nothing for the description to add about parameters, so a perfect score is appropriate.
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 clearly states the tool's action ('Get') and the specific resource ('current shopping list') with an additional detail about sync metadata. It is distinct from sibling tools like list_recipes or get_recipe, so there is no ambiguity about its purpose.
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 provides no explicit guidance on when to use this tool versus alternatives, but the purpose is so straightforward that it does not require extensive direction. It names the resource and the read-only nature, which implicitly distinguishes it from mutation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_coursesA
List all courses (Appetizers, Main Course, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only listing but does not explicitly state safety, auth requirements, or return format. While 'list' inherently suggests no side effects, the description adds no explicit behavioral guarantees beyond the name.
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 concise sentence that front-loads the action and resource. It contains no fluff or redundant information, and every word contributes to the meaning.
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 zero-parameter, no-output-schema tool, the description is largely sufficient. It covers the essential purpose and examples. It could optionally mention the return type (e.g., 'returns a list of course names'), but that is implied and not critical for a simple list operation.
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 zero parameters, so the baseline is 4. The description adds no parameter details, but none are needed. The schema coverage is 100% (empty schema), so nothing 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?
The description states a clear verb-resource pair: 'List all courses' with explicit examples of course types. It is unambiguous and distinguishes itself from sibling list tools (list_recipes, list_cuisines, etc.) by naming a distinct entity.
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 by its name and examples but does not explicitly state when to use it over alternatives or any exclusions. For a zero-parameter list tool, this is acceptable but leaves the agent to infer context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cuisinesA
List all cuisines.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only states the action without noting read-only status, side effects, or error behavior, leaving the agent to infer safety from the verb 'list'.
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?
Single concise sentence with no irrelevant details or 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?
Simple tool with no parameters or output schema; description is adequate but omits any detail on output format, ordering, or possible empty results.
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 has zero parameters and description does not need to add parameter semantics; full schema coverage gives a baseline of 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?
States verb 'list' and resource 'cuisines' clearly, distinguishing from sibling list_* tools that target other entities such as recipes, courses, or tags.
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?
Does not explicitly compare to sibling tools or provide when-to-use guidance, but the resource name implies usage when a list of cuisines is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_friendsA
List friends.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations and the description only says 'List friends.' It does not explicitly state whether this is a read-only operation, what the output format is, or any potential side effects. The description is too minimal to fully disclose the tool's 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?
The description is extremely concise, consisting of two words. Every word is necessary and no redundant information is present. It is perfectly structured for such a simple tool.
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 description is minimal but sufficient for a tool with no parameters and no output schema. It conveys the core function without requiring additional context. A slight improvement could be specifying the return type (e.g., 'Returns a list of friends.'), but this is not essential given the simplicity.
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 no parameters, and the input schema is empty. The description adds no parameter-related information because there is nothing to add. This is appropriate and complete for a zero-parameter tool.
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 'List friends.' clearly states the action (list) and the resource (friends), distinguishing it from sibling tools that list recipes, courses, cuisines, etc. It is unambiguous and specific.
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?
While no explicit alternatives or when-to-use guidance is given, the tool name and description make its purpose self-evident. The context of sibling tools (e.g., list_recipes) implies that this is the appropriate tool for retrieving friends, so no additional guidance is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_frozen_recipesA
List what's in the freezer. Each entry: { id, recipe_id, count, servings, frozen_on }. By default only returns active entries (count > 0); pass include_consumed=true to also see history (the API soft-deletes by zeroing the count rather than removing the row).
| Name | Required | Description | Default |
|---|---|---|---|
| include_consumed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses the tool's behavior: default filtering, the effect of the include_consumed parameter, and the soft-delete design. This is comprehensive for a read-only listing 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?
Two sentences deliver all necessary information without redundancy. The default case is stated first, followed by the optional parameter and its rationale.
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 description includes the entry structure, default filter, optional parameter, and the soft-delete context. This is complete for a simple listing tool with no output 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?
Although the schema provides no description for include_consumed, the tool description explicitly defines its meaning and effect, compensating fully for the schema 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?
The description clearly states the tool lists frozen recipes, with a specific resource and action. It also distinguishes itself from sibling tools by focusing on frozen entries and the include_consumed option.
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 explicitly explains the default behavior (only active entries, count > 0) and how to see history via include_consumed=true. It also notes the soft-delete mechanism, which is essential for correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_main_ingredientsA
List all main-ingredient categories.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only listing operation with 'all' indicating a complete result, but it does not disclose ordering, return format, or any potential limits. This is minimal but adequate for a simple list 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?
A single sentence that is front-loaded with the action and resource. No filler or 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?
Given the lack of parameters and output schema, the description is sufficient for a basic list operation. It does not describe the return format, but for a list of categories, the expected output is likely an array of strings or objects, which is inferable from the context of the recipe application.
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 there is nothing for the description to add. The baseline for 0 params is 4, and the description correctly does not invent any 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?
The description clearly states the action ('List') and the resource ('main-ingredient categories'), which is specific and distinguishable from sibling tools like list_recipes or list_courses. The scope 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 context is clear: it's the tool for listing main-ingredient categories, as opposed to other list_* tools. There are no explicit exclusions or alternative mentions, but the purpose is so specific that an agent can infer when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_planner_eventsA
List all planner (calendar) events. Each entry: { date, recipe_id, section, servings, ... }.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states only that it lists events, without explicitly mentioning that it is read-only or has no side effects. While a list operation is inherently non-destructive, the description does not disclose this behavioral trait.
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, focused sentence that conveys the purpose and even previews the entry structure. There is no unnecessary verbiage or ambiguity.
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 simple list-all tool with no parameters and no output schema, the description is complete. It specifies the resource ('planner events') and provides a sample entry format, which is sufficient for an agent to understand what the tool 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?
The tool has zero parameters, so the schema coverage is trivially high. The description correctly adds no parameter details, and the baseline for zero parameters is 4, which is appropriate.
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 clearly states the tool's function: 'List all planner (calendar) events.' It uses a specific verb ('List') and a distinct resource ('planner events'), and it is easily distinguishable from sibling tools like list_recipes or get_planner_week.
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 this tool is for retrieving all planner events without filtering, but it does not explicitly contrast it with alternatives like get_planner_week or find_planned_dates. Usage is self-evident for a simple list-all operation, but explicit guidance on when to use this versus other tools is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recipesA
List the user's recipe book (own + saved + queued + friend recipes). Caps at ~500 entries.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist and the description does not disclose any behavioral traits such as read-only nature, rate limits, or potential side effects. The verb 'list' implies non-destructive behavior, but it is not explicitly stated.
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, compact sentence that conveys the essential information: the action, the subject, and the cap limit. No unnecessary words or 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?
For a simple list operation with no parameters and no output schema, the description fully covers what the tool does, including the scope and the entry cap. Nothing else is needed 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?
The tool has no parameters, so schema coverage is 100%. Per the baseline rule, a score of 3 is appropriate; the description adds no additional parameter meaning because none exist.
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 'List' and a clear resource 'the user's recipe book' with explicit scope (own + saved + queued + friend recipes). This distinguishes it from sibling list tools like list_courses and list_cuisines.
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 guidance is provided on when to use this tool versus alternatives. The description does not mention conditions or alternatives, leaving the agent to infer usage from the resource name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsB
List all tags.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states that it lists tags, but says nothing about return format, ordering, pagination, authentication, or any side effects. For a read-only operation this is minimal but not misleading; however, it lacks depth.
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 concise sentence with no filler. It is front-loaded and efficient, earning a high score for conciseness even though it is brief.
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's simplicity (no params, no output schema), the description is adequate but minimal. It doesn't explain what the returned tags look like or any filtering/sorting, which could be useful context. However, for a trivial 'list all' operation, the lack of detail is not severely detrimental, but it could be more 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 tool has zero parameters and the schema coverage is 100% (empty schema). Per the rubric, a zero-parameter tool gets a baseline of 4 since there is nothing for the description to clarify. The description adds no parameter information, but none is 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 'List all tags' clearly states the verb (List) and resource (tags), making the purpose unambiguous. It is not a tautology and differentiates from sibling tools that operate on other resources like recipes or courses, though it doesn't explicitly name alternatives.
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 guidance on when to use this tool versus alternatives. While the sibling list tools are for different resources, the description provides no explicit context, prerequisites, or exclusions. The usage is implied by the resource name but not elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_planner_eventA
Move an existing planner event to a different date and/or section. Works for recipe, note, and ingredient events.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| section | Yes | ||
| event_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. 'Move' clearly implies a mutation, but it does not disclose side effects such as whether the event is removed from its previous location, whether conflicts at the target are possible, or what the response contains.
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 concise, two sentences, and free of unnecessary detail. It communicates the essential purpose and scope without fluff.
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 output schema and a relatively simple operation, the description covers the main purpose. However, it omits guidance on how this differs from reorder_planner_events and does not resolve the 'and/or' ambiguity versus the required date and section parameters.
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%, but parameter names are relatively self-explanatory (event_id, date, section). The description adds that date and section are the target values, but it does not explain that both are required despite 'and/or', nor does it clarify the meaning of section beyond the enum.
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 clearly states the action ('Move'), the target resource ('an existing planner event'), and the specific change ('to a different date and/or section'). It also distinguishes from related tools by noting it works for recipe, note, and ingredient events.
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 purpose is implied well enough, but there is no explicit guidance on when to choose this tool over siblings like reorder_planner_events or update_planner_entry_text. It does not mention alternatives or exclusion cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reorder_planner_eventsB
Reorder events within a section. Pass event_ids in the desired order. All events should belong to the same date+section for the reorder to be meaningful.
| Name | Required | Description | Default |
|---|---|---|---|
| event_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It discloses that reordering is meaningful only when events share date+section, but does not describe what happens otherwise (e.g., behavior, side effects, whether it's a permanent mutation, or any permission requirements). For a mutation tool with no annotation coverage, this is a significant gap.
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 two sentences, front-loaded with the purpose, and every sentence adds value. It is concise and well-structured.
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 description covers the basic input requirement and a key constraint, but lacks details on the effect of the reorder (e.g., what happens to events not in the list, whether the order is absolute or relative, or what the response indicates). Given the simplicity of the schema and lack of output schema, it is somewhat complete but leaves important behavior unspecified.
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 compensate. It adds that event_ids should be passed in desired order and belong to the same date+section, providing context beyond the bare integer array. However, it does not elaborate on the interpretation of the order (e.g., whether the first element becomes the first in the section) or whether the list must include all events in the section, leaving some ambiguity.
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 clearly states the verb 'Reorder' and the resource 'events within a section', and specifies that event_ids should be passed in desired order. It is unambiguous about the action and scope, but does not explicitly differentiate from sibling tools like move_planner_event, so it lacks explicit sibling differentiation.
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 a constraint that all events should belong to the same date+section for meaningful reordering, implying the tool is for reordering multiple events within a section. However, it does not explicitly state when to use this tool over alternatives like move_planner_event or provide exclusions, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_planner_servingsC
Set the servings count on a recipe planner event.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | ||
| servings | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the action without mentioning side effects, permissions, reversibility, or impact on other data. This is insufficient for a mutation 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?
The description is a single concise sentence that is front-loaded with the primary action. It is appropriately sized for the operation, though it lacks critical details that would be covered under other dimensions.
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 tool with two required parameters, no output schema, and no annotations, the description is incomplete. It does not explain the event_id, the effect on the planner event, or any constraints on servings. An agent would need to look elsewhere for essential context.
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 description does not explain either parameter. It mentions 'servings count' but not the event_id or constraints on servings. The description adds no meaning beyond the schema, leaving the agent without guidance on what these parameters represent.
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 ('Set') and resource ('servings count on a recipe planner event'), which clearly identifies the tool's function. It does not explicitly mention sibling tools, but the uniqueness of the action (setting servings) distinguishes it from other planner operations.
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 provides no guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or conditions. The agent must infer usage from the tool name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_planner_entry_textA
Update the text of a note or ingredient planner entry. Note: uses the description field on the wire even though entries are created with title.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| description | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite lacking annotations, the description exposes a key field-name quirk: it uses 'description' on the wire while entries are created with 'title'. This is valuable behavioral transparency beyond the basic action.
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?
Very concise: one clear sentence plus a focused note. No redundant wording, and the core purpose is front-loaded.
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 simple update operation, the description covers the essential behavior and the important field-name quirk, though it omits details about return values or potential errors. Still, the tool is simple enough that the description is sufficiently 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?
Schema has no parameter descriptions, so the description must compensate. It partially does by indicating 'text' and the field-name note, but it does not explicitly explain that 'id' is the entry identifier or that 'description' carries the new text.
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?
Clearly states the action (update text) and the target (note or ingredient planner entry), distinguishing it from related tools like add_planner_note or update_planner_options.
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 clear context for when to use this tool (to change text of an existing note or ingredient entry), though it does not explicitly mention when not to use it or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_planner_optionsA
Update planner display/behaviour preferences (time_zone, planner_start_day, calendar_settings.show_calories, etc). Use Rails-style nested keys like user[time_zone] or calendar_settings[show_calories]. Rarely needed.
| Name | Required | Description | Default |
|---|---|---|---|
| options | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It states that preferences are updated, but it does not disclose side effects, whether the update is a partial merge or full replacement, authentication requirements, or error 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?
The description is brief, front-loaded with the core purpose, and provides only essential examples and guidance. No filler or redundant 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?
It gives enough to start using the tool, but important practical details are missing: how preferences are applied (merge vs replace), whether nested keys are required, and what response or errors to expect. The 'Rarely needed' note adds some context but not full operational clarity.
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 itself provides no descriptions, but the description compensates with concrete allowed keys, value types, and Rails-style nested key examples like user[time_zone] and calendar_settings[show_calories]. It does not enumerate every possible option, but the 'etc.' is acceptable given the arbitrary object shape.
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?
Clearly states the action ('Update') and the resource ('planner display/behaviour preferences'), with concrete examples such as time_zone, planner_start_day, and calendar_settings.show_calories. It is distinct from other planner-related sibling tools, which target entries, events, or servings rather than 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?
Provides some usage context by saying 'Rarely needed' and showing the nested-key format, but it does not explicitly state when to use this tool versus alternatives, nor does it give exclusions or edge cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_recipeB
Update an existing recipe. Pass only the fields you want to change. To remove an ingredient include {id, _destroy: true} in ingredients.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| fat | No | ||
| url | No | ||
| draft | No | ||
| fiber | No | ||
| sugar | No | ||
| title | No | ||
| yield | No | ||
| rating | No | ||
| sodium | No | ||
| source | No | ||
| private | No | ||
| protein | No | ||
| calories | No | ||
| servings | No | ||
| cook_time | No | Minutes | |
| course_id | No | ||
| prep_time | No | Minutes | |
| cuisine_id | No | ||
| directions | No | ||
| tag_titles | No | Comma-separated list of tag names | |
| total_time | No | Minutes | |
| cholesterol | No | ||
| description | No | ||
| ingredients | No | Maps to recipe_ingredients_attributes on the wire | |
| carbohydrate | No | ||
| saturated_fat | No | ||
| main_ingredient_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does disclose important partial-update semantics and the ingredient removal convention, which goes beyond the raw schema. However, it doesn't mention side effects, required permissions, response behavior, or validation constraints.
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 compact and front-loaded, with two sentences that each add direct value. It avoids repetition and boilerplate, making it easy for an agent to parse quickly.
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 28 parameters, no annotations, and no output schema, the description is too thin to be complete. It omits guidance for most parameters, return values, error conditions, and operational context, leaving substantial gaps for an agent deciding how to invoke the 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 only 18%, so the description must compensate for the large number of undocumented parameters. It only explains ingredient removal, while most other fields (nutrition values, timings, flags, associations) receive no semantic guidance beyond their names. This is insufficient for a 28-parameter tool.
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 uses a specific verb and resource ('Update an existing recipe') and clearly signals that this is a mutation of an existing entity, which distinguishes it from create_recipe and delete_recipe. It doesn't explicitly name a sibling alternative, but the meaning 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 gives clear, actionable guidance: pass only changed fields, and use {id, _destroy: true} to remove ingredients. It doesn't explicitly state when not to use this tool or point to alternatives, but the intended usage is clear.
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. Dates show when Glama detected each change.
30 tool updates
v0.5.1- First observed
add_leftover_meal - First observed
add_planner_ingredient - First observed
add_planner_note - First observed
add_planner_recipe - First observed
create_recipe - First observed
delete_frozen_recipe - First observed
delete_planner_event - First observed
delete_recipe - First observed
duplicate_planner_event - First observed
find_planned_dates - First observed
freeze_recipe_portions - First observed
get_counts - First observed
get_planner_week - First observed
get_recipe - First observed
get_shopping_list - First observed
list_courses - First observed
list_cuisines - First observed
list_friends - First observed
list_frozen_recipes - First observed
list_main_ingredients - First observed
list_menus - First observed
list_planner_events - First observed
list_recipes - First observed
list_tags - First observed
move_planner_event - First observed
reorder_planner_events - First observed
set_planner_servings - First observed
update_planner_entry_text - First observed
update_planner_options - First observed
update_recipe
TDQS
Most tools target distinct actions, but there is meaningful overlap between add_leftover_meal and duplicate_planner_event, and between list_planner_events, get_planner_week, and find_planned_dates. Descriptions help, but names alone could cause misselection.
The snake_case verb-first pattern is mostly consistent, but there are mixed conventions: list vs get, add vs duplicate, set vs update, and delete_frozen_recipe vs freeze_recipe_portions. The uneven pairings make the API slightly less predictable.
With 30 tools, the surface is too large for the apparent meal-planning domain. Several specialized planner operations and metadata list functions could reasonably be consolidated into broader tools.
The core recipe and planner-event CRUD flows are covered, along with frozen recipes, shopping list, friends, and counts. Auxiliary resources like menus are only listed, but the main meal-planning workflows appear complete.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
AI meal plans that fill your Kroger/Instacart cart - pantry-aware lists, all from chat.
Search, save, organize, cook, and share recipes with any AI assistant.
AI-powered kitchen management β pantry, recipes, meal plans, shopping lists
Household-aware cooking brain: pantry, meal suggestions, dietary safety, recipes, shopping lists.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Mealie for recipe management, meal planning, and shopping list operations. Supports searching and managing recipes, creating meal plans, and generating shopping lists from recipes or meal plans.7MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with Mealie recipe databases, allowing users to manage and query their recipes through natural language conversations.16MIT
- FlicenseAqualityDmaintenanceEnables AI assistants to interact with AnyList for managing shopping lists, recipes, and meal planning. Users can retrieve recipe details, add ingredients to lists, and schedule meals on their AnyList calendar.10-
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to search recipes, compose nutritionally balanced meals, optimize weekly meal plans based on macro targets for family members, and generate consolidated grocery lists from a personal recipe database.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/alex-zwingli/plan-to-eat-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server