Skip to main content
Glama
alex-zwingli

plan-to-eat-mcp

by alex-zwingli

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PLAN_TO_EAT_PASSWORDYesPlan to Eat account password.
PLAN_TO_EAT_USERNAMEYesPlan to Eat account username/email.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_recipesA

List the user's recipe book (own + saved + queued + friend recipes). Caps at ~500 entries.

get_recipeA

Get a single recipe by id, including directions, ingredients, tags, prep_notes, comments.

create_recipeB

Create a new recipe. Only title is required. Ingredients are an array of {title, amount, unit, note, position}.

update_recipeB

Update an existing recipe. Pass only the fields you want to change. To remove an ingredient include {id, _destroy: true} in ingredients.

delete_recipeB

Delete a recipe by id.

list_coursesA

List all courses (Appetizers, Main Course, etc.).

list_cuisinesA

List all cuisines.

list_main_ingredientsA

List all main-ingredient categories.

list_tagsB

List all tags.

list_storesA

List the user's grocery stores. Use the ids as store_id when adding or re-filing shopping list items.

list_grocery_categoriesA

List the user's grocery aisles (Produce, Dairy, ...). Use the ids as category_id on shopping list items.

list_planner_eventsA

List all planner (calendar) events. Each entry: { date, recipe_id, section, servings, ... }.

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.

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.

add_planner_recipeB

Add a recipe to a meal slot on the planner. Returns the newly created event (id, date, section, servings, ...).

add_planner_ingredientA

Add a freeform "ingredient" entry to a meal slot (e.g. "2 lbs ground beef" attached to Wednesday dinner).

add_planner_noteB

Add a freeform "note" entry to a meal slot (e.g. "Defrost chicken" on Tuesday breakfast).

add_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.

move_planner_eventA

Move an existing planner event to a different date and/or section. Works for recipe, note, and ingredient events.

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.

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.

set_planner_servingsC

Set the servings count on a recipe planner event.

duplicate_planner_eventA

Duplicate a planner event. Set plan_leftover=true to mark the copy as a leftover.

delete_planner_eventB

Delete a planner event by id.

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.

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).

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.

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.

get_shopping_listA

Read the shopping list. Each line gives what to buy plus the store it's assigned to (store_title / store_id, where a null store_id means the account's default store) and the aisle it's filed under (grocery_category_title / grocery_category_id). item_ids is the handle for updating or removing that line — Plan to Eat merges duplicate ingredients into one line, so it's an array. recipe_ids shows which planned recipes pulled the item in.

add_shopping_list_itemsA

Add items to the shopping list. Only title is required per item. Leave category_id out and Plan to Eat guesses the aisle; leave store_id out and the item goes to the store it was last bought at, falling back to the default store if it's new. Returns the lines that were created.

update_shopping_list_itemsA

Change shopping list lines. Pass item_ids from get_shopping_list — naming any id of a line affects that whole line. Moving items to a different store or aisle (store_id / category_id on their own) works across as many lines as you like; editing the text (title, amount, unit, note) applies to one line at a time, and collapses a merged line into a single row keeping its combined quantity. Returns the lines as they now stand, so re-read item_ids from the result rather than reusing the ones you sent.

remove_shopping_list_itemsA

Remove lines from the shopping list. This is a soft delete, the same one the app does, and restore_shopping_list_items undoes it — but nothing can list removed lines, so keep the item_ids around if the removal might need undoing.

restore_shopping_list_itemsA

Put previously removed shopping list lines back on the list. Takes the item_ids the line had before it was removed.

list_menusB

List saved menus.

list_friendsA

List friends.

get_countsA

Get recipe-book counts: { friends, queued, frozen }.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.3/5.0

Scored across 36 tools

Disambiguation3/5

Most tools target distinct resources and actions, but there is real overlap between duplicate_planner_event and add_leftover_meal (both can mark a duplicate as a leftover). list_planner_events and get_planner_week also cover similar ground, and delete_frozen_recipe is really a 'mark consumed' action, not a delete, which could mislead an agent.

Naming Consistency4/5

Tool names mostly follow a clear verb_noun pattern like add_planner_recipe, delete_recipe, list_stores. Minor inconsistencies exist: list_ vs get_ for overlapping reads, set_planner_servings vs update_planner_*, and delete_frozen_recipe for a non-delete operation, but overall the naming is predictable.

Tool Count2/5

36 tools is a lot for an MCP server, especially with many simple taxonomy listers (list_cuisines, list_courses, list_tags, etc.). The broad domain justifies some of the count, but it feels heavy and could be consolidated or scoped down.

Completeness4/5

The core domains are well covered: recipes have full CRUD, planner events support create/read/update/delete/move/reorder, and the shopping list has add/update/remove/restore. Minor gaps exist: menus and friends are list-only, and there is no direct way to view a single planner event or permanently delete shopping list lines.

Maintenance

ActivityMaintained
ResponsivenessNo issues