MCP tools reference

All tools are scoped to the authorized household (OAuth grant or API key organization). Nutrition read tools (get_nutrition_summary, list_nutrition_intakes) return the caller’s personal diary; when nutrition-cross-org-diary is on, totals/history include intakes from every kitchen that user logged—not “household nutrition.” Writes still authorize against the grant kitchen for that entry. MCP tools do not consume AI credits; they use rate limits instead. Billed AI Plan Week / meal generate remain on the web app and Copilot (deep links ration://manifest/plan-week, ration://galley/generate) — not MCP tools. Every tool returns a uniform JSON envelope ({ ok: true, tool, data, warnings?, meta? } or { ok: false, tool, error }). Failures include error.code (including timeout), error.message, optional error.details, and often error.recoveryHint. Copilot returns the same envelope shape to the model. Tool handlers are capped (~20s) so hung Workers AI/D1 calls cannot stall the agent forever.

Rate limit categories

CategoryTypical limitApplies to
mcp_list30 per 60s per orgMost read tools
mcp_search20 per 60s per orgSemantic search + meal match
mcp_write15 per 60s per orgMost writes
mcp_supply_sync8 per 60s per orgHeavy supply rebuild
mcp_write_per_key15 per 60s per keyDefends against compromised keys

Exact windows may be tuned; if you hit limits, wait for the window to reset. Rate-limit details are also returned in the envelope's error.retryAfter and structured meta.rateLimit fields.

Inventory (Cargo)

ToolScopePurpose
list_inventorymcp:readCursor-paginated cargo list (default 100, max 200). Optional domain, expiresBefore / expiresAfter (UTC YYYY-MM-DD), and sortBy: expiresAt.
get_cargo_itemmcp:readFetch one item by id with all fields (tags, expiresAt, customFields).
search_ingredientsmcp:readSemantic search in pantry by meaning.
get_expiring_itemsmcp:readPantry lines expiring within N UTC calendar days. Defaults to the user's expirationAlertDays when days is omitted.
get_expired_itemsmcp:readPantry lines whose expiry date is before today (UTC).
get_kitchen_summarymcp:readSingle-call kitchen snapshot. Prefer this over get_context for status.
get_kitchen_eventsmcp:readFlight Recorder timeline (filter by event type / date range; paginated).
get_kitchen_statsmcp:readFlight Recorder aggregates (7d/30d/90d/365d counts + top cooked meals).
add_cargo_itemmcp:inventory:writeAdd a single pantry item. Fuzzy Vectorize merge skipped; embeddings backfill async.
update_cargo_itemmcp:inventory:writeSet absolute pantry fields. Quantity may be 0.
adjust_cargo_itemmcp:inventory:writeRelative quantity change (delta). Prefer for “used/ate N”.
remove_cargo_itemmcp:inventory:writePermanently delete a pantry line. Requires confirm: true (Copilot host Approve binds confirm).

Receipt → pantry workflow (no credits)

Prefer resource ration://schemas/inventory-import for the item shape.

ToolScopePurpose
preview_inventory_importmcp:inventory:writeDry-run import. Returns previewToken, totals, sample rows + rowsOmitted, warnings.
apply_inventory_importmcp:inventory:writeCommits a preview after chat confirmation (no second host approval card). Idempotent. Embeddings do not block return.
import_inventory_csvmcp:inventory:writeParse a CSV string and apply directly.

Bulk Cargo remove (no credits)

ToolScopePurpose
preview_inventory_removemcp:inventory:writeDry-run bulk deletes (prefer for 2+ items).
apply_inventory_removemcp:inventory:writeCommits a remove preview after chat confirmation (no second host card). Idempotent.

Galley (Meals)

ToolScopePurpose
list_mealsmcp:readCursor-paginated recipe list.
match_mealsmcp:readCookability match (strict / delta).
create_mealmcp:galley:writeCreate structured recipe (credit-free).
update_mealmcp:galley:writeUpdate a recipe.
delete_mealmcp:galley:writeDelete a recipe. Requires confirm: true. Cascades to ingredients, tags, and linked meal plan entries. Returns deletedPlanEntryCount.
set_active_mealsmcp:galley:writeSet active selection to exactly mealIds. Optional syncSupply (host approval only when syncing).
clear_active_mealsmcp:galley:writeClear all active selections. Requires confirm: true.
consume_mealmcp:galley:write + mcp:inventory:writeCook by mealId and deduct cargo. When nutrition-cook-log-split is on, bridges to today’s Manifest (Prepared); never logs personal intake (offerPersonalLog hint only).

Manifest (Meal plan)

ToolScopePurpose
get_meal_planmcp:readMeal plan entries for a date range (cookedAt/consumedAt; personalIntake when nutrition flags allow).
propose_manifest_planmcp:readCompact week proposal from expiring + match_meals. No writes.
commit_manifest_planmcp:manifest:writeCommit confirmed entries; optional supply sync. Approval required.
add_meal_plan_entrymcp:manifest:writeSchedule one meal.
update_meal_plan_entrymcp:manifest:writePatch an unconsumed entry.
cook_manifest_entriesmcp:manifest:write + mcp:inventory:writeShared Cook: deduct Cargo once and mark Prepared. Requires nutrition-cook-log-split. Never logs intake.
consume_manifest_entriesmcp:manifest:write + mcp:inventory:writeLegacy combined consume. Refused when nutrition-cook-log-split is on (cook_eat_split_required). When split is off, optional logNutrition (default false for agents).
remove_meal_plan_entrymcp:manifest:writeRemove a scheduled entry.

Nutrition

Gated by nutrition feature flags. Not medical advice. Cargo/meal read and write tools may include a nutrition snapshot when present. Require mcp:nutrition:read / mcp:nutrition:write. Legacy broad mcp never grants nutrition; migrate keys to explicit kitchen scopes and re-issue or re-consent for nutrition. Agent personal nutrition reads are value-free audited (fail closed). Tools return schema-valid structuredContent plus text; clears and multi-entry intake writes need host approval. Mutation timeouts return timeout_ambiguous — retry with the same operationKey.

ToolScopePurpose
get_nutrition_summarymcp:nutrition:readDaily intake totals (energy + macros + optional fiber) for a UTC date range, plus active goal when set. Requires nutrition-goals or nutrition-manifest.
list_nutrition_intakesmcp:nutrition:readRow-level personal intake history for a UTC range (cursor-paginated).
set_nutrition_goalmcp:nutrition:writeIdempotently upsert a personal daily goal using operationKey (active consent required). Requires nutrition-goals.
clear_nutrition_goalmcp:nutrition:writeIdempotently clear the active goal as of a date using operationKey. Requires nutrition-goals. confirm: true.
log_manifest_intakemcp:nutrition:writeAtomic private Eat / plate-up for prepared entries (operationKey + portions[] with per-item keys). Consent must already be active in Ration. Never deducts Cargo.
clear_manifest_intakemcp:nutrition:writeAtomically soft-void personal intake using operationKey. confirm: true. Does not uncook.

Supply (Shopping)

ToolScopePurpose
get_supply_listmcp:readActive shopping list.
add_supply_itemmcp:supply:writeAdd a line.
update_supply_itemmcp:supply:writePatch a line.
remove_supply_itemmcp:supply:writeRemove a line.
mark_supply_purchased_bulkmcp:supply:writeMark one or many lines purchased (max 50).
sync_supply_from_selected_mealsmcp:supply:writeRebuild supply from plan + selections.
complete_supply_listmcp:supply:writeDock purchased → cargo.

Account & preferences

ToolScopePurpose
get_contextmcp:readOrg/key context, slim kitchen tier/credits, capabilities. Prefer get_kitchen_summary for full status.
get_billing_summarymcp:readTier, credits, renewal, billing links.
get_user_preferencesmcp:readAllergens, alert days, theme, units.
update_user_preferencesmcp:preferences:writePatch preferences.

Not exposed

  • Camera/OCR receipt scan as a tool (text → preview/apply, or native Scan)
  • Recipe URL extraction without native import (ration://galley/import)

Large Galley JSON imports use the REST API with galley scope—not MCP.