Stovefront
Server Details
Find US home kitchens on Stovefront, read their menus and pickup times, and build order links.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 4 tools
Each tool targets a distinct step of the ordering funnel: discover kitchens (search_kitchens), inspect one kitchen's full catalog (get_menu), inspect availability slots (get_pickup_windows), and validate a basket plus produce a cart link (build_order_link). The only mild overlap is that search_kitchens returns a truncated dish list while get_menu returns the full menu, but the descriptions make the boundary explicit (search snippet vs. one kitchen's complete menu).
All four names follow a consistent verb_noun snake_case pattern (get_, search_, build_). No camelCase, no vague bare verbs, and the verbs accurately reflect read vs. construct actions.
Four tools is on the lean side but each maps to a real, non-redundant step in the flow, so nothing feels padded. It sits at the low edge of the comfortable 3-15 range, with no redundant or speculative tools.
The surface covers the full customer-side lifecycle: discovery, menu/dietary/allergen detail, availability and cutoff, and basket validation leading to a checkout link — with order placement deliberately delegated to the storefront. Minor gaps remain around post-order concerns (no order status/lookup or kitchen profile detail beyond what search returns), but agents can work around these via the returned storefront links.
Available Tools
4 toolsbuild_order_linkBuild an order linkARead-onlyIdempotentInspect
Checks that the given dishes can be ordered now in those quantities (stock, cutoff, quantity rules, one shared pickup time) and returns a link to the kitchen's own storefront with them already in the cart. It does not place an order or take payment: the customer reviews and submits the order request on the storefront, and the cook confirms it.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| kitchen | Yes | Kitchen slug or storefront link, e.g. "stephanie-s-bite-of-heaven" or "https://app.stovefront.com/<slug>" |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | The kitchen's storefront with these items in the cart |
| items | Yes | |
| notes | Yes | |
| pickup | Yes | |
| kitchen | Yes | |
| currency | Yes | |
| orderModel | Yes | |
| instruction | Yes | |
| estimatedSubtotalCents | Yes | Before any delivery fee |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, and the description adds real value on top: it enumerates the four validation rules applied and explains that the downstream ordering happens elsewhere via customer submit and cook confirmation. Undisclosed is what happens when validation fails (error vs. partial result) and whether the generated link expires.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler: the validation/return behavior is front-loaded, and the 'does not place an order' caveat follows immediately where it prevents the most likely misuse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is rightly omitted, and annotations cover the safety profile. Given a two-parameter tool, the remaining gap is failure behavior when a dish fails stock/cutoff checks, which an agent would want before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: kitchen and dish_id carry descriptions, quantity has only min/max bounds. The description mentions quantities being checked against rules and a single shared pickup time, which adds a little semantic framing, but it doesn't explain the quantity limits, the 20-item cap, or what a valid kitchen identifier looks like beyond the schema. Mid-coverage baseline of 3 fits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource: validates dishes/quantities against stock, cutoff, quantity rules and shared pickup time, then returns a storefront link with the cart pre-filled. That is precise enough to tell what the tool produces. It never names a sibling (get_menu, get_pickup_windows, search_kitchens), so the differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence sets a clear boundary: this does not place an order or take payment, the customer submits on the storefront and the cook confirms. That is an explicit when-not, which keeps the agent from treating it as a checkout tool. What's missing is routing guidance for the alternatives (e.g. call get_menu first to obtain dish_ids, get_pickup_windows for timing), which the schema only hints at.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pickup_windowsGet pickup and delivery timesARead-onlyIdempotentInspect
Returns a kitchen's upcoming pickup and delivery times that are open for ordering, each with its order cutoff and the pickup place name. Kitchens with scheduled times list each slot; kitchens with weekly pickup list each pickup time and the dishes it serves. Street addresses are never included.
| Name | Required | Description | Default |
|---|---|---|---|
| kitchen | Yes | Kitchen slug or storefront link, e.g. "stephanie-s-bite-of-heaven" or "https://app.stovefront.com/<slug>" |
Output Schema
| Name | Required | Description |
|---|---|---|
| model | Yes | |
| notes | Yes | |
| kitchen | Yes | |
| windows | Yes | |
| delivery | Yes | Weekly-pickup kitchens: whether the cook delivers. Scheduled-slot kitchens list delivery times in windows. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuine context beyond that: order cutoff values, the pickup place name, two distinct kitchen modes (scheduled slots vs. weekly pickup with dishes), and the privacy constraint that street addresses are never returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each doing distinct work: return content, mode-dependent shape, and a data-privacy boundary. The most important information (what is returned and that slots are orderable) is front-loaded with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't enumerate return fields, yet it still sketches the payload (cutoff, place name, dishes per slot), which is helpful. An agent has enough to call it correctly; only the relationship to sibling tools in the ordering workflow is unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single kitchen parameter is well documented with slug and storefront-link examples. The description only refers to 'a kitchen's' times and adds no syntax, format, or validation detail beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: it returns a kitchen's upcoming pickup and delivery slots that are open for ordering, along with cutoff times and pickup place names. This clearly differs from get_menu and build_order_link, but no sibling is named explicitly, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: the caller supplies a kitchen slug and receives orderable slots. There is no explicit statement of when to prefer this over get_menu or build_order_link, no prerequisites, and no exclusions, so the agent must infer the workflow position.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_kitchensSearch kitchensARead-onlyIdempotentInspect
Finds published Stovefront kitchens and the dishes they have open for ordering. Matches words against kitchen names, dish names and categories, and can filter by dietary tags, pickup date and the area a kitchen serves. Returns each kitchen's name, storefront link, short description, service area and up to 8 matching dishes with price, dietary tags, stock and next pickup. Sample storefronts and kitchens hidden from search are not included.
| Name | Required | Description | Default |
|---|---|---|---|
| area | No | City or neighborhood, matched against the area each kitchen says it serves | |
| limit | No | Kitchens per page, default 10 | |
| query | No | Words to match in kitchen names, dish names and categories, e.g. "tamales" | |
| cursor | No | nextCursor from the previous page | |
| dietary | No | Every dish returned has all of these tags | |
| pickup_to | No | End of a date range, inclusive | |
| pickup_date | No | Only dishes that can be picked up or delivered on this kitchen-local date | |
| pickup_from | No | Start of a date range (use with pickup_to, at most 31 days) |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| currency | Yes | |
| nextCursor | Yes | Pass as cursor for the next page; null when there are no more |
| orderModel | Yes | |
| orderModelNote | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely non-obvious behavior: only published kitchens, samples and search-hidden kitchens excluded, and a cap of up to 8 matching dishes per kitchen. It does not mention rate limits, ranking order, or cursor behavior, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in the first sentence and filtering/exclusions in the second; there is no filler. The long enumeration of return fields is somewhat redundant given that an output schema exists, which costs it the top score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations carrying safety and an output schema carrying return shape, the description covers the pieces that matter most: published-only scope, exclusion of hidden/sample kitchens, and the 8-dish cap. Pagination via cursor and result ordering are left unaddressed, but the schema documents the cursor, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every filter is documented in-schema, down to the enum list and date format. The description restates which filters exist without adding syntax or edge-case semantics beyond the schema (e.g. how multiple dietary tags combine, or how query terms are weighted), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (finds) plus a precisely scoped resource: published Stovefront kitchens and the dishes they have open for ordering. It also states what is excluded (sample storefronts, hidden kitchens), which makes it distinguishable from get_menu, get_pickup_windows and build_order_link without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the search/filter use case clear (keywords, dietary tags, pickup date, area), so usage is implied. But it never says when to prefer this over the siblings - e.g. that get_menu is the way to see a single kitchen's full menu or get_pickup_windows for timing detail.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- First observed
build_order_link - First observed
get_menu - First observed
get_pickup_windows - First observed
search_kitchens
Related MCP Connectors
Search direct grocery storefronts and create product-link pickup handoffs.
Pickup orders at Japanese restaurants for AI agents: find stores, read menus, place orders. No auth.
AI meal plans that fill your Kroger/Instacart cart - pantry-aware lists, all from chat.
Find free public recipes; import links and plan meals from your cookbook. Private tools need a plan.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceTurns a local business's menu, hours, and booking rules from one JSON config into voice-callable tools, so an Alexa+ assistant can answer questions, quote and place pickup orders, check order status, and book appointments with customer confirmation. Works for restaurants, barbershops, salons, and clinics as a self-hosted Streamable HTTP server with a live owner dashboard.MIT
- AlicenseAqualityCmaintenanceEnables an AI assistant to browse restaurants and menus, manage a cart, reorder past orders, review checkout details, and place food delivery orders, returning a payment link to complete payment.13MIT
- AlicenseNot gradedqualityDmaintenanceYour digital kitchen, powered by AI. Track what you have, discover what you can cook, and get guided through every recipe — step by step, timer by timer.MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to discover and order food from multiple delivery services (DoorDash, UberEats, Grubhub) using A2A protocol and process payments via Stripe with AP2 protocol mandates for cryptographically signed user authorization.1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.