Skip to main content
Glama

Server Details

Real shopping lists and a home pantry, turned into products you can order for pickup or delivery.

Ownership verified
Status
Healthy
Uptime
100.0% over the last 24 hours
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
LastList

TDQS

A4.2/5.0

Scored across 25 tools

Disambiguation4/5

The tool set has several intentionally differentiated item-handling tools (check_off_item, remove_item, consume_items, out_of_item, have_items), and descriptions explicitly explain their boundaries. Some overlap remains between pantry-affecting tools and between add_items/add_recipe_gap_to_list, but most selections are clearly guided.

Naming Consistency4/5

Most tools follow a predictable verb_noun snake_case pattern (add_items, create_list, search_recipes, build_plan). A few deviations like my_recipes, recipe_needs, and out_of_item are readable but break the otherwise consistent convention.

Tool Count3/5

At 25 tools, the surface is at the heavy end and requires users or agents to navigate several subdomains: lists, pantry, recipes, planning, and sharing. Most tools earn their place, but the count is borderline for a single MCP server.

Completeness4/5

Core lifecycle coverage is strong across lists, recipes, pantry, and planning, with creation, retrieval, mutation, and sharing flows represented. Minor gaps exist, such as editing list metadata or item quantities and deleting recipes/lists, but agents can work around most of them.

Publisher details

Operator
Boston304 LLC · Publisher source
Vendor relationship
First-party · Publisher source
Trust center
Not applicable
Restrictions
No paid plan, no admin approval, and no custom OAuth app required. The server supports RFC 7591 Dynamic Client Registration, so a client can connect from the URL alone. A free LastList account is created during the sign-in step. Store and product data is US-only.

Available Tools

25 tools
add_itemsAdd items to a listAInspect

Add one or more items to the user's shopping list (or a specific list by id). Items appear in the user's LastList app on its next sync. Writes are literal — if an item might already be on the list, call get_list first and bump its quantity or skip it rather than adding a duplicate. Ask the user before adding items they didn't explicitly request.

Quantities: qty is always the COUNT OF BASE UNITS, not the number of packages. For 'a dozen eggs' send qty 12 with packSize 12 and packLabel 'dozen'; for 'two 12-packs of soda' send qty 24, packSize 12, packLabel '12-pack'. For anything sold by weight or volume ('2 lbs of chicken') send qty 2 with unit 'lb' and soldBy 'WEIGHT'. Getting this right is what lets the app's pack stepper and consume_items track what the user actually has.

Inputs: items (required), listId.

add_recipe_gap_to_listAdd missing recipe ingredientsAInspect

For a recipeId, add ONLY the ingredients the user is missing (recipe minus inventory) to their shopping list. Use for 'add what I'm missing for lasagna'. To add ALL ingredients regardless of inventory, use add_items with the full ingredient list instead.

Inputs: recipeId (required), listId, inventoryItems.

build_planBuild a shopping planAInspect

Build a shopping plan for one of the user's lists: find stores near them, work out which stores actually carry which items, and recommend a single-stop or split trip. Use for 'where should I shop for this', 'plan my trip', 'can I get all of this at one store'. This is about routing a trip, not ranking prices — describe the result as where to go and what each stop covers.

Items must be REFINED first (the shopper picking which milk, what size). Items added through these tools are not, so a list you built here needs the user to open it in LastList once, which lands on the Suggestions page and walks them through it. This tool will tell you when that is needed, and refine_items is how you resolve it in conversation.

Location: if the user has planned this list in the app before, their saved location is reused and you don't need to ask. Otherwise pass a zip (or lat/lng); without one the tool will tell you to ask the user where they're shopping.

A big list can take a few minutes. If the plan isn't ready when this returns, you get a jobId — tell the user it's building and call get_plan to check.

Inputs: lat, lng, zip, listId, +1 more.

check_off_itemCheck off an itemAInspect

Marks an item as bought, or undoes that. This is the tool for an item the user has acquired: 'got the milk', 'mark eggs as bought'. The item stays on the list, shown as done, so the record of the trip survives.

It is the non-destructive counterpart to remove_item, which deletes an item and leaves no record that it was ever there. Passing checked:false reverses a check-off.

Matching is loose, so 'milk' matches 'whole milk'. Returns the item and its new state, and reports an error without changing anything when nothing matches.

Inputs: name (required), listId, checked.

consume_itemsRecord items usedA
Destructive
Inspect

Record that the user USED items from their inventory (e.g. after cooking a meal): 'I made the chili', 'we used the last two eggs', 'I cooked with the chicken'. Each named item is decremented by its amount, or removed entirely when no amount is given or the amount covers what's left. Set restock:true to add anything fully used up back onto the shopping list. This is destructive to inventory — only call it when the user has actually consumed the items, never to guess at what a recipe might have used. If you are inferring the items from a recipe, confirm the list with the user first.

Inputs: items (required), amounts, restock.

create_listCreate a listAInspect

Create a new list for the user (e.g. 'make a Costco list', 'start a party list', 'set up a baby registry'). Defaults to a shopping list. The list appears in the user's LastList app and is labeled as created by you. Ask the user before creating a list they didn't request.

Inputs: title (required), listType, registryOccasion.

find_nearby_storesFind nearby storesA
Read-only
Inspect

Find stores near a location. Pass coordinates (lat, lng) if you know them, or a US ZIP code. If neither is in the conversation, ask the user. Returns retailer name, distance, address, and the store's type tags (grocery / hardware / pharmacy / etc.).

Inputs: lat, lng, zip, limit, +2 more.

get_listGet a listA
Read-only
Inspect

Reads one list in full: its title, type, and every item on it with quantities and whether each has been checked off. This is what answers 'what's on my list', what shows whether an item is already present, and what reads the pantry's contents.

It takes a list id, which is one of the ids returned by search_lists. search_lists returns the lists themselves; this returns the contents of one of them.

Inputs: listId (required).

get_planCheck plan progressA
Read-only
Inspect

Check on a shopping plan that build_plan reported as still building, using the jobId it returned. Returns the finished plan, or the current progress if it is still working. Plans expire after a while — if the job is gone, just call build_plan again.

Inputs: jobId (required).

get_recipeGet recipe detailsA
Read-only
Inspect

Get full detail for one recipe by its recipeId: ingredients (name, quantity, unit), the kitchen tools it needs, servings, timing, cuisine, and dietary tags. Use after search_recipes to inspect a specific recipe the user picked. Tools tiered 'specialty' are the ones a typical kitchen may not have — worth mentioning before the user commits to the recipe.

Inputs: recipeId (required).

have_itemsMark items as already ownedAInspect

Handle 'I already have X': take the item off the shopping list if it's there, and record it in the user's pantry/inventory if they aren't tracking it yet. Use for 'I already have rice', 'we've got plenty of olive oil', 'scratch the eggs, found some'. Use out_of_item for the opposite direction. Filler answers like 'all' or 'everything' are ignored rather than stored — if the user says something like that, ask which items they mean.

Inputs: items (required).

list_connectionsList connectionsA
Read-only
Inspect

List the people the user is connected to in LastList, with how many lists they've already shared with each. Use this before share_list so you can name the right person. New connections have to be invited from the app — you can't create one.

Inputs: no named parameters.

match_recipes_to_inventoryFind recipes you can makeA
Read-only
Inspect

Find recipes the user can make from what they have on hand. Returns 'canMakeNow' (every ingredient covered) and 'almostThere' (a few missing). Pass the user's inventory as inventoryItems; if omitted, the connection's inventory list is used. Use for 'what can I make?' / 'what's for dinner?'.

Inputs: limit, cuisine, dietary, inventoryItems.

my_recipesList saved recipesA
Read-only
Inspect

List the recipes belonging to this user: ones they created in LastList and ones they saved from the catalog. Use for 'what are my recipes', 'pull up the one I wrote', or before publish_recipe. For the shared catalog use search_recipes instead.

Inputs: limit.

out_of_itemMark an item as outAInspect

Handle 'I'm out of X': remove the item from the user's inventory (if present) and add it to their shopping list, in one step. Use for 'I'm out of butter', 'we ran out of milk', 'we need more eggs'.

Inputs: name (required).

publish_recipePublish a recipe publiclyAInspect

Publish one of the user's own recipes to a PUBLIC web page anyone can open, or unpublish one that's already live.

This puts the recipe on the public internet under the user's name, so ALWAYS get explicit confirmation before publishing — say which recipe and that it will be publicly visible, and wait for a clear yes. Never publish as a side effect of some other request.

Only recipes the user wrote in LastList can be published. Catalog recipes and ones imported from another site are refused for copyright reasons. Call my_recipes first to see which ones qualify.

Inputs: recipeId (required), action.

recipe_needsCheck missing ingredientsA
Read-only
Inspect

Given a recipeId, report which ingredients the user is MISSING for it (diffed against their inventory), plus what they already have. Read-only. Use for 'what do I need for lasagna?'. To add the missing items, use add_recipe_gap_to_list.

Inputs: recipeId (required), inventoryItems.

refine_itemsAsk which product the shopper meansAInspect

Resolve what the shopper actually means by each item on a list, so it can be planned. 'milk' could be whole, 2%, skim or oat; 'eggs' could be 12 or 18. Call this when build_plan says items need refining, or after adding vague items.

Call it with NO choices first: it returns each unresolved item with the options to offer. Ask the shopper about them, one item at a time and in their own words rather than reading out a menu, then call it again with their answers.

Use the option labels exactly as given. An item the shopper is happy to leave vague can be skipped, but it will not be plannable until it is resolved.

Inputs: listId, choices.

remove_itemRemove an itemA
Destructive
Inspect

Deletes an item from a list entirely, as if it had never been added. This is the tool for an item the user no longer wants: 'take milk off the list', 'I don't need the eggs after all'.

It is one of four tools that take an item off a list, and they differ by reason. check_off_item marks an item as bought and keeps it on the list. out_of_item moves an item from the pantry onto the shopping list. consume_items records that pantry items were used up while cooking. This one simply deletes, leaving no record.

Matching is loose, so 'milk' matches 'whole milk'. When several items match, the closest one is removed. Returns the removed item and the list it came from, and reports an error without changing anything when nothing matches.

Inputs: name (required), listId.

save_recipeSave a recipeAInspect

Save a recipe to the user's own collection so it shows up in my_recipes and in the app. Use when the user likes one you found ('save that one', 'add it to my recipes'). Saving is idempotent — saving twice is harmless.

Inputs: recipeId (required).

search_listsSearch listsA
Read-only
Inspect

Lists the user's real LastList lists, returning each one's id, title, type and item count. This is where list ids originate: the ids accepted by the other list tools are the ones returned here. With no arguments it returns every list the user has, and the optional type filter narrows it. It returns the lists themselves rather than their contents; get_list returns the items on one.

Inputs: listType.

search_recipesSearch recipesA
Read-only
Inspect

Search LastList's recipe catalog by name, cuisine, dietary preference, and kitchen equipment. Returns a short list of matching recipes the user can choose from, each with the tools it needs. If the user is asking 'what can I make' without naming a recipe, prefer match_recipes_to_inventory over a blind search.

Inputs: limit, query, tools, cuisine, +3 more.

share_listShare a listAInspect

Share one of the user's lists with someone they're already connected to. The recipient gets it in their own LastList app and is sent a notification, and (at full access) their edits sync back.

This sends something to another person, so ALWAYS confirm with the user which list and which person before calling it, even if they seem to have already said so. Call list_connections first to get a connectionId. Use accessTier 'view' for a list they should only read, 'full' when they should be able to check things off and add items.

Inputs: connectionId (required), listId, accessTier, giftVisibility.

show_alternativesShow other products for an itemA
Read-only
Inspect

Show the other products available for ONE item at ONE store, from a plan you already built. Use when a pick from build_plan is not what the shopper wanted, or when they ask what else is available for something.

Pass the jobId from build_plan and the item. Only offer this for items whose pick reported otherOptions above 0; the rest have nothing else to show.

This reads the shelf the plan was built from, so it reflects that store at that moment rather than a fresh search. A plan older than about 15 minutes has expired and needs rebuilding.

Showing alternatives does NOT change the shopper's list. If they pick one, tell them to switch it in LastList, which is where a chosen product is recorded.

Inputs: item (required), jobId (required), storeId.

stock_pantryStock the pantryAInspect

Add items to the user's grocery pantry inventory in bulk, creating the pantry list if they don't have one. Use when the user is telling you what's in their kitchen ('here's what I keep stocked', 'I have flour, sugar, rice and canned tomatoes'), which is what makes match_recipes_to_inventory and recipe_needs useful. Does not touch the shopping list — use have_items when the point is that they no longer need to buy something. Duplicates are skipped.

Inputs: items (required), title.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      C
      maintenance
      Turns a spoken or typed grocery list into a ready Amazon Now cart by learning usual items from order history, prioritizing previously bought products, comparing prices, and filling the cart while leaving checkout to the user.
      6
      1
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables users to turn grocery receipt photos or spoken updates into an up-to-date home pantry, tracking purchases, current stock, and consumption through natural language.
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables a voice assistant to keep a shared, persistent memory of a household's kitchen, turning spoken remarks into pantry updates, scaled recipes, a cart, and confirmed grocery orders. Household members can ask what can be made and for how many, review what is low or out, and place or restock simulated orders only after explicit confirmation.
      31 npm
      MIT
    Try in Browser

    Glama MCP Gateway

    Add one secure layer between your agents and this server.

    Resources