io.github.AndrewVG23/grocery-mcp
This server supports grocery retailer discovery, product search, review-only product-link handoffs, and reusable grocery templates.
List supported grocery retailers and pickup storefront locations.
Search one retailer's public catalog and return ranked direct product links, with optional brand, location, and limit.
Create a grocery handoff that matches a grocery list to direct retailer product links for manual checkout.
Retrieve a previously generated handoff by ID.
Save a reusable grocery order template without searching or placing an order.
List saved grocery order templates.
Run fresh storefront searches for all items in a saved template and create a new handoff.
No checkout/payment or PDF tool appears in the provided server schema.
Supports PostgreSQL for persistent storage of handoffs and OAuth dynamic client registrations when configured.
Provides the hosted production environment for the MCP server.
Click on "Deploy 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., "@io.github.AndrewVG23/grocery-mcp search for boneless chicken thighs at Kettle Range"
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.
Grocery MCP
A dedicated MCP and REST service that searches grocery retailers directly and returns reviewable product links. It starts with:
Kettle Range Meat Co. — Milwaukee and Elm Grove
Outpost Natural Foods — Capitol Drive, State Street, Bay View, and Mequon
start_grocery_checkout starts a cart the shopper pays for on the store site.
Kettle Range returns the store checkout link. Outpost returns one https link
that opens the cart this server already filled. This service does not take a
card number or store retailer passwords.
A Kettle Range checkout link opens that guest cart on the store site. An Outpost checkout link opens the filled guest cart. The shopper pays on that page.
A printed menu starts as JSON the caller writes. build_shopping_list sums
the ingredients, start_grocery_checkout fills the cart, and render_menu_pdf
returns the landscape PDF in the tool result. The "Open the filled cart"
link and QR code use that checkout URL. The file is not stored.
Connect
Hosted server:
https://grocery-mcp-production.up.railway.app/mcpClaude and ChatGPT sign the person in. There is no shared password.
ChatGPT, on a Business, Enterprise, or Edu workspace: open chatgpt.com/plugins, choose Add custom MCP server, paste the URL, and use OAuth.
Start with find_grocery_retailers, then search or hand off a list. For an order, call start_grocery_checkout. Product-link handoffs still need the shopper to open browser_session.start_url and then each product link in that same browser. cart_prefilled stays false on those handoffs.
Prices and stock come from the store's public site at the moment of the search. Kettle Range covers Milwaukee and Elm Grove. Outpost covers Capitol Drive, State Street, Bay View, and Mequon.
Related MCP server: Walmart MCP Server
Setup
python3.12 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"Run
python -m grocery_mcp.server
python -m grocery_mcp.server --httpHTTP endpoints:
MCP:
http://localhost:8080/mcpHealth:
http://localhost:8080/healthOpenAPI:
http://localhost:8080/docsRetailers:
http://localhost:8080/v1/retailersProduct search:
http://localhost:8080/v1/products/searchHandoffs:
POST http://localhost:8080/v1/handoffs
When DATABASE_URL is configured, handoffs, Outpost cart plans, and OAuth
dynamic client registrations are persisted in PostgreSQL. Without it, local
development uses process memory.
MCP tools
find_grocery_retailerssearch_grocery_productscreate_grocery_handoffstart_grocery_checkoutget_grocery_handoffcreate_grocery_order_templatelist_grocery_order_templatescreate_handoff_from_template
Example handoff input:
{
"retailer": "kettle_range",
"location_id": "milwaukee",
"items": [
{"name": "boneless chicken thighs", "quantity": 2, "unit": "lb"},
{"name": "ground beef", "quantity": 1, "unit": "lb"}
]
}Data behavior
Product names, prices, availability, and links come from each retailer's public customer storefront at request time. These storefront interfaces are not formal partner APIs and can change without notice. Responses include match confidence, alternatives, and observation timestamps so clients can make this uncertainty visible.
Matching requires strong token overlap, rejects obvious cross-category substitutions, and prefers available products. If no safe result exists, the item is explicitly unmatched rather than replaced with a loosely related item.
Reusable templates persist the retailer, location, and normalized grocery items. Running a template always performs fresh catalog searches and creates a new review-only handoff.
Directory listings
Registry name: io.github.AndrewVG23/grocery-mcp.
Step | Action |
Official MCP Registry | Tag |
Claim GitHub repo; hosted URL tab → | |
External HTTP → same MCP URL (OAuth) | |
Submit repo |
Server card: https://grocery-mcp-production.up.railway.app/.well-known/mcp/server-card.json
Tests
ruff check .
pytestAvailable Tools
7 toolscreate_grocery_handoffAInspect
Match a grocery list to direct retailer product links for manual checkout.
Args:
retailer: kettle_range or outpost.
items: Grocery items with name and optional quantity/unit/brand/notes.
location_id: Store id from find_grocery_retailers.
postal_code: Optional user postal code, retained for future retailer routing.
Inputs: items (required), retailer (required), location_id, postal_code. Returns: object
create_grocery_order_templateAInspect
Save a reusable grocery list without searching or placing an order.
Inputs: name (required), items (required), retailer (required), location_id, +1 more. Returns: object
create_handoff_from_templateAInspect
Run fresh storefront searches for all items in a reusable template.
Inputs: template_id (required). Returns: object
find_grocery_retailersAInspect
List supported grocery retailers and pickup storefront locations.
Inputs: no named parameters. Returns: object
get_grocery_handoffBInspect
Retrieve a previously generated product-link handoff.
Inputs: handoff_id (required). Returns: object
list_grocery_order_templatesAInspect
List reusable grocery order templates saved on this service.
Inputs: no named parameters. Returns: object
search_grocery_productsAInspect
Search one retailer's public catalog and return ranked direct product links.
Args:
retailer: kettle_range or outpost.
query: Product name, such as boneless chicken thighs.
location_id: Store id from find_grocery_retailers.
limit: Maximum matches, 1-10.
brand: Optional preferred brand.
Inputs: query (required), retailer (required), brand, limit, +1 more. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 7 tools
Each tool targets a distinct action: finding retailers, searching products, creating/retrieving handoffs, and managing templates. The purposes are clearly separated even where related, such as create_grocery_handoff vs create_handoff_from_template.
All tools follow a consistent snake_case verb_noun pattern (find, search, create, get, list). The naming is predictable and easy to infer, with no mixed conventions.
Seven tools is well-scoped for a grocery-specific MCP server. Each tool covers a necessary step in the workflow without redundancy or bloat.
Core workflows are covered: retailer discovery, product search, handoff creation/retrieval, and template creation/listing/use. Minor gaps exist such as no template deletion or update, but these are non-critical for the primary use case.
Maintenance
Related MCP Connectors
Search products from independent stores. Read-only remote MCP; no sign-in. Buy on merchant sites.
Search and look up products across thousands of online stores, normalized into one schema.
Search and look up products across thousands of online stores, normalized into one schema.
Search multi-merchant supply, checkout, and track orders via MCP.
Related MCP Servers
AlicenseNot gradedqualityBmaintenanceAON(Agent Offer Network) MCP connects AI agents to real, buyable products and services with live pricing and tracked links—enabling builders to earn developer revenue share from attributed clicks and conversions. AON MCP Server owned by aon.pro4Apache 2.0- AlicenseAqualityBmaintenanceEnables MCP clients to search Walmart products by keyword or category, retrieve product details including the buy box and other sellers, and page through customer reviews with filters, all as structured JSON without a Walmart developer account.363 npm5MIT
- FlicenseNot gradedqualityBmaintenanceEnables cross-merchant product search and catalog filtering through an MCP endpoint, allowing agents to query products across demo stores by text, price, stock, and merchant.-
- AlicenseNot gradedqualityCmaintenanceEnables users to search grocery products and stores, manage a cart, sync purchase history, and predict needed items through MCP tools. It also stores food preferences as server instructions so connected agents can respect them automatically.1MIT