Skip to main content
Glama
Tandoor Recipes MCP

Tandoor Recipes MCP

by Cliftonz

Create food

create_food
Idempotent

Create a food item in Tandoor Recipes with a required name and optional details, then assign shopping lists or reuse an existing match.

Instructions

Create food. Required: name. Optional: plural_name, description, food_onhand, fdc_id, supermarket_category_id, shopping_list_ids (ids from list_shopping_lists). If a food with this name exists, Tandoor returns it instead of creating one. With shopping_list_ids (including []), the tool looks up the name first and, if a food with that name exists (ignoring case and surrounding spaces), refuses and changes nothing; use update_food. Tandoor also returns an existing food whose plural name matches; the tool detects that from the create reply and refuses the same way, setting no lists. With non-empty shopping_list_ids, the tool creates the food first and then sets its lists, because Tandoor cannot set lists while creating a food. With any shopping_list_ids (including []), if a step after the create fails, the error gives the new food's id and says not to retry. Changing a food's lists does not change its existing shopping entries. add_recipe_to_shopping_list copies the food's lists onto new entries. create_shopping_entry without shopping_list_ids copies them when the user preference shopping_update_food_lists is on. bulk_create_shopping_list_recipe_entries without shopping_list_ids copies each food's lists whatever the user preference. Every list id is checked against list_shopping_lists first; unknown or repeated ids are rejected and nothing is written. If the lists after the write differ from the request, the tool errors and names the missing and the extra lists.

Input Schema

NameRequiredDescriptionDefault
nameYes
fdc_idNo
formatNo
descriptionNo
food_onhandNo
plural_nameNo
shopping_list_idsNo
supermarket_category_idNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv3.4.0

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, idempotentHint=true), it discloses the non-obvious traits: returning an existing food instead of creating, refusing and changing nothing on name/plural-name collisions, creating then setting lists because Tandoor cannot do both at once, rejecting unknown or repeated list ids before any write, and telling the agent not to retry after a partial failure. It also explains downstream list-copying side effects in related tools. This is exactly the behavioral context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening is well front-loaded (verb, required, optional). But the remainder is a dense run-on chain of conditionals covering cross-tool list-copying behavior, with some tangential material (add_recipe_to_shopping_list, shopping_update_food_lists preference) that an agent creating a food rarely needs. Information density is high but readability suffers.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter mutation tool with no output schema and zero schema descriptions, the description covers collision, refusal, ordering, and failure semantics thoroughly. The remaining shortfall is the undocumented `format` parameter and no indication of what the create reply contains, which matters since the tool inspects that reply to detect plural-name matches.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it does well for shopping_list_ids (provenance via list_shopping_lists, empty-list semantics, validation). However, it merely lists plural_name, description, food_onhand, fdc_id, and supermarket_category_id without explaining their meaning or effect, and the `format` enum (slim/full) is never mentioned at all, leaving a real gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ("Create food") and immediately scopes it by enumerating the required and optional inputs. It clearly distinguishes itself from siblings by naming update_food and list_shopping_lists as the alternate paths, so an agent can route without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete conditions: if a food with this name exists, Tandoor returns it; with shopping_list_ids and an existing name, the tool refuses and the agent should use update_food. That is strong when-to-use routing. It lacks a plain statement of when to prefer create_food over update_food outside the collision case, but the conditional guidance is unusually explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.