Stovefront
Find US home kitchens on Stovefront, read their menus and pickup times, and build order links.
¿Debería usar esto?
Calidad y seguridad
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"stovefront": {
"url": "https://app.stovefront.com/mcp"
}
}
}Puntos de conexión remotos
https://app.stovefront.com/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (4)
🟢search_kitchens(query, dietary, pickup_date, pickup_from, pickup_to, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"query": {
"description": "Words to match in kitchen names, dish names and categories, e.g. \"tamales\"",
"type": "string",
"maxLength": 200
},
"dietary": {
"description": "Every dish returned has all of these tags",
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"enum": [
"vegan",
"vegetarian",
"glutenFree",
"dairyFree",
"eggFree",
"nutFree",
"soyFree",
"paleo",
"spicy",
"containsNuts"
]
}
},
"pickup_date": {
"description": "Only dishes that can be picked up or delivered on this kitchen-local date",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"pickup_from": {
"description": "Start of a date range (use with pickup_to, at most 31 days)",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"pickup_to": {
"description": "End of a date range, inclusive",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"area": {
"description": "City or neighborhood, matched against the area each kitchen says it serves",
"type": "string",
"maxLength": 100
},
"limit": {
"description": "Kitchens per page, default 10",
"type": "integer",
"minimum": 1,
"maximum": 20
},
"cursor": {
"description": "nextCursor from the previous page",
"type": "string",
"maxLength": 12
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Esquema de salida
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"kitchen": {
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Pass as `kitchen` to the other tools"
},
"name": {
"type": "string"
},
"url": {
"type": "string",
"description": "The kitchen's own storefront"
},
"description": {
"type": [
"string",
"null"
]
},
"area": {
"type": "object",
"properties": {
"city": {
"type": [
"string",
"null"
]
},
"region": {
"type": [
"string",
"null"
]
},
"serviceArea": {
"description": "Neighborhoods or towns the kitchen serves, as the cook wrote it",
"type": [
"string",
"null"
]
}
},
"required": [
"city",
"region",
"serviceArea"
],
"additionalProperties": false
},
"timezone": {
"type": "string"
}
},
"required": [
"slug",
"name",
"url",
"description",
"area",
"timezone"
],
"additionalProperties": false
},
"orderableNow": {
"type": "boolean"
},
"orderableDishCount": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"matchingDishCount": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"matchingDishes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Pass as dish_id to build_order_link"
},
"kind": {
"type": "string",
"enum": [
"dish",
"package"
]
},
"name": {
"type": "string"
},
"category": {
"type": [
"string",
"null"
]
},
"price": {
"description": "US dollars",
"type": [
"number",
"null"
]
},
"priceCents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"currency": {
"type": "string",
"const": "USD"
},
"dietary": {
"type": "array",
"items": {
"type": "string",
"enum": [
"vegan",
"vegetarian",
"glutenFree",
"dairyFree",
"eggFree",
"nutFree",
"soyFree",
"paleo",
"spicy",
"containsNuts"
]
}
},
"stock": {
"type": "object",
"properties": {
"left": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
],
"description": "Units left; null when the cook does not show a count or sells without a limit"
},
"low": {
"type": "boolean",
"description": "True when 10 or fewer are left"
}
},
"required": [
"left",
"low"
],
"additionalProperties": false
},
"orderCutoffAt": {
"type": [
"string",
"null"
]
},
"nextPickup": {
"anyOf": [
{
"type": "object",
"properties": {
"slotId": {
"description": "Scheduled time id (scheduled-slot kitchens); null for fixed weekly pickup",
"type": [
"string",
"null"
]
},
"method": {
"type": "string",
"enum": [
"pickup",
"delivery"
]
},
"date": {
"description": "Kitchen-local date, YYYY-MM-DD",
"type": [
"string",
"null"
]
},
"startAt": {
"description": "RFC 3339 with the kitchen's UTC offset",
"type": [
"string",
"null"
]
},
"endAt": {
"type": [
"string",
"null"
]
},
"orderCutoffAt": {
"description": "Last moment to order for this time",
"type": [
"string",
"null"
]
},
"place": {
"description": "Pickup place name; never a street address",
"type": [
"string",
"null"
]
},
"deliveryFeeCents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"minimumOrderCents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
}
},
"required": [
"slotId",
"method",
"date",
"startAt",
"endAt",
"orderCutoffAt",
"place",
"deliveryFeeCents",
"minimumOrderCents"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"url": {
"description": "Link to this dish on the kitchen's storefront",
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"kind",
"name",
"category",
"price",
"priceCents",
"currency",
"dietary",
"stock",
"orderCutoffAt",
"nextPickup",
"url"
],
"additionalProperties": false
}
}
},
"required": [
"kitchen",
"orderableNow",
"orderableDishCount",
"matchingDishCount",
"matchingDishes"
],
"additionalProperties": false
}
},
"nextCursor": {
"description": "Pass as cursor for the next page; null when there are no more",
"type": [
"string",
"null"
]
},
"currency": {
"type": "string",
"const": "USD"
},
"orderModel": {
"type": "string",
"const": "request_then_confirm"
},
"orderModelNote": {
"type": "string"
}
},
"required": [
"results",
"nextCursor",
"currency",
"orderModel",
"orderModelNote"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_menu(kitchen, week, include_unavailable)
Returns one kitchen's menu: the dishes and meal packages that can be ordered now, with price, dietary tags, allergen notes, stock, order cutoff, next pickup or delivery time, quantity rules and any required options. Also returns the payment methods the kitchen accepts and its order model (orders are requests the cook confirms).
Esquema de entrada
{
"type": "object",
"properties": {
"kitchen": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Kitchen slug or storefront link, e.g. \"stephanie-s-bite-of-heaven\" or \"https://app.stovefront.com/<slug>\""
},
"week": {
"description": "Only this menu week (its Monday, YYYY-MM-DD, as listed in weeks)",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"include_unavailable": {
"description": "Also list sold-out and closed offers, with the reason. Default false",
"type": "boolean"
}
},
"required": [
"kitchen"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Esquema de salida
{
"type": "object",
"properties": {
"kitchen": {
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Pass as `kitchen` to the other tools"
},
"name": {
"type": "string"
},
"url": {
"type": "string",
"description": "The kitchen's own storefront"
},
"description": {
"type": [
"string",
"null"
]
},
"area": {
"type": "object",
"properties": {
"city": {
"type": [
"string",
"null"
]
},
"region": {
"type": [
"string",
"null"
]
},
"serviceArea": {
"description": "Neighborhoods or towns the kitchen serves, as the cook wrote it",
"type": [
"string",
"null"
]
}
},
"required": [
"city",
"region",
"serviceArea"
],
"additionalProperties": false
},
"timezone": {
"type": "string"
},
"sample": {
"type": "boolean",
"description": "True for a sample storefront that takes no orders"
}
},
"required": [
"slug",
"name",
"url",
"description",
"area",
"timezone",
"sample"
],
"additionalProperties": false
},
"orderModel": {
"type": "string",
"const": "request_then_confirm"
},
"orderModelNote": {
"type": "string"
},
"currency": {
"type": "string",
"const": "USD"
},
"fulfillmentModel": {
"type": "string",
"enum": [
"scheduled_slots",
"weekly_pickup"
]
},
"paymentMethods": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"label": {
"type": "string"
}
},
"required": [
"id",
"label"
],
"additionalProperties": false
}
},
"weeks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"weekId": {
"type": "string"
},
"label": {
"type": [
"string",
"null"
]
},
"orderableOfferCount": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"weekId",
"label",
"orderableOfferCount"
],
"additionalProperties": false
},
"description": "Menu weeks with something open for ordering; pass one as week to narrow the list"
},
"offerCount": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Offers matching the request; offers may list fewer"
},
"offers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Pass as dish_id to build_order_link"
},
"kind": {
"type": "string",
"enum": [
"dish",
"package"
]
},
"name": {
"type": "string"
},
"category": {
"type": [
"string",
"null"
]
},
"price": {
"description": "US dollars",
"type": [
"number",
"null"
]
},
"priceCents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"currency": {
"type": "string",
"const": "USD"
},
"dietary": {
"type": "array",
"items": {
"type": "string",
"enum": [
"vegan",
"vegetarian",
"glutenFree",
"dairyFree",
"eggFree",
"nutFree",
"soyFree",
"paleo",
"spicy",
"containsNuts"
]
}
},
"stock": {
"type": "object",
"properties": {
"left": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
],
"description": "Units left; null when the cook does not show a count or sells without a limit"
},
"low": {
"type": "boolean",
"description": "True when 10 or fewer are left"
}
},
"required": [
"left",
"low"
],
"additionalProperties": false
},
"orderCutoffAt": {
"type": [
"string",
"null"
]
},
"nextPickup": {
"anyOf": [
{
"type": "object",
"properties": {
"slotId": {
"description": "Scheduled time id (scheduled-slot kitchens); null for fixed weekly pickup",
"type": [
"string",
"null"
]
},
"method": {
"type": "string",
"enum": [
"pickup",
"delivery"
]
},
"date": {
"description": "Kitchen-local date, YYYY-MM-DD",
"type": [
"string",
"null"
]
},
"startAt": {
"description": "RFC 3339 with the kitchen's UTC offset",
"type": [
"string",
"null"
]
},
"endAt": {
"type": [
"string",
"null"
]
},
"orderCutoffAt": {
"description": "Last moment to order for this time",
"type": [
"string",
"null"
]
},
"place": {
"description": "Pickup place name; never a street address",
"type": [
"string",
"null"
]
},
"deliveryFeeCents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"minimumOrderCents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
}
},
"required": [
"slotId",
"method",
"date",
"startAt",
"endAt",
"orderCutoffAt",
"place",
"deliveryFeeCents",
"minimumOrderCents"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"url": {
"description": "Link to this dish on the kitchen's storefront",
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"weekId": {
"type": [
"string",
"null"
]
},
"allergens": {
"type": "object",
"properties": {
"contains": {
"type": [
"string",
"null"
]
},
"mayContain": {
"type": [
"string",
"null"
]
}
},
"required": [
"contains",
"mayContain"
],
"additionalProperties": false
},
"servings": {
"type": [
"string",
"null"
]
},
"orderable": {
"type": "boolean"
},
"unavailableReason": {
"anyOf": [
{
"type": "string",
"enum": [
"menu_closed",
"not_offered",
"sold_out",
"past_cutoff",
"no_pickup_time"
]
},
{
"type": "null"
}
]
},
"quantity": {
"type": "object",
"properties": {
"minimum": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"increment": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"maximumPerCustomer": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
}
},
"required": [
"minimum",
"increment",
"maximumPerCustomer"
],
"additionalProperties": false
},
"requiredChoices": {
"type": "array",
"items": {
"type": "string"
},
"description": "Option groups the customer must choose on the storefront"
},
"includes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"quantity": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"name",
"quantity"
],
"additionalProperties": false
},
"description": "Dishes in a meal package"
}
},
"required": [
"id",
"kind",
"name",
"category",
"price",
"priceCents",
"currency",
"dietary",
"stock",
"orderCutoffAt",
"nextPickup",
"url",
"description",
"weekId",
"allergens",
"servings",
"orderable",
"unavailableReason",
"quantity",
"requiredChoices",
"includes"
],
"additionalProperties": false
}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"kitchen",
"orderModel",
"orderModelNote",
"currency",
"fulfillmentModel",
"paymentMethods",
"weeks",
"offerCount",
"offers",
"notes"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_pickup_windows(kitchen)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"kitchen": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Kitchen slug or storefront link, e.g. \"stephanie-s-bite-of-heaven\" or \"https://app.stovefront.com/<slug>\""
}
},
"required": [
"kitchen"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Esquema de salida
{
"type": "object",
"properties": {
"kitchen": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"url": {
"type": "string"
},
"timezone": {
"type": "string"
},
"sample": {
"type": "boolean"
}
},
"required": [
"slug",
"name",
"url",
"timezone",
"sample"
],
"additionalProperties": false
},
"model": {
"type": "string",
"enum": [
"scheduled_slots",
"weekly_pickup"
]
},
"windows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slotId": {
"description": "Scheduled time id (scheduled-slot kitchens); null for fixed weekly pickup",
"type": [
"string",
"null"
]
},
"method": {
"type": "string",
"enum": [
"pickup",
"delivery"
]
},
"date": {
"description": "Kitchen-local date, YYYY-MM-DD",
"type": [
"string",
"null"
]
},
"startAt": {
"description": "RFC 3339 with the kitchen's UTC offset",
"type": [
"string",
"null"
]
},
"endAt": {
"type": [
"string",
"null"
]
},
"orderCutoffAt": {
"description": "Last moment to order for this time",
"type": [
"string",
"null"
]
},
"place": {
"description": "Pickup place name; never a street address",
"type": [
"string",
"null"
]
},
"deliveryFeeCents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"minimumOrderCents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"dishIds": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
]
}
},
"required": [
"slotId",
"method",
"date",
"startAt",
"endAt",
"orderCutoffAt",
"place",
"deliveryFeeCents",
"minimumOrderCents",
"dishIds"
],
"additionalProperties": false
}
},
"delivery": {
"anyOf": [
{
"type": "object",
"properties": {
"offered": {
"type": "boolean"
},
"feeCents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"dates": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"offered",
"feeCents",
"dates"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Weekly-pickup kitchens: whether the cook delivers. Scheduled-slot kitchens list delivery times in windows."
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"kitchen",
"model",
"windows",
"delivery",
"notes"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢build_order_link(kitchen, items)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"kitchen": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "Kitchen slug or storefront link, e.g. \"stephanie-s-bite-of-heaven\" or \"https://app.stovefront.com/<slug>\""
},
"items": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"dish_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "An offer id from get_menu or search_kitchens"
},
"quantity": {
"type": "integer",
"minimum": 1,
"maximum": 99
}
},
"required": [
"dish_id",
"quantity"
],
"additionalProperties": false
}
}
},
"required": [
"kitchen",
"items"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Esquema de salida
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The kitchen's storefront with these items in the cart"
},
"kitchen": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"slug",
"name",
"url"
],
"additionalProperties": false
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"dish_id": {
"type": "string"
},
"kind": {
"type": "string",
"enum": [
"dish",
"package"
]
},
"name": {
"type": "string"
},
"quantity": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"unitPriceCents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"lineTotalCents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
}
},
"required": [
"dish_id",
"kind",
"name",
"quantity",
"unitPriceCents",
"lineTotalCents"
],
"additionalProperties": false
}
},
"estimatedSubtotalCents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
],
"description": "Before any delivery fee"
},
"currency": {
"type": "string",
"const": "USD"
},
"pickup": {
"anyOf": [
{
"type": "object",
"properties": {
"slotId": {
"description": "Scheduled time id (scheduled-slot kitchens); null for fixed weekly pickup",
"type": [
"string",
"null"
]
},
"method": {
"type": "string",
"enum": [
"pickup",
"delivery"
]
},
"date": {
"description": "Kitchen-local date, YYYY-MM-DD",
"type": [
"string",
"null"
]
},
"startAt": {
"description": "RFC 3339 with the kitchen's UTC offset",
"type": [
"string",
"null"
]
},
"endAt": {
"type": [
"string",
"null"
]
},
"orderCutoffAt": {
"description": "Last moment to order for this time",
"type": [
"string",
"null"
]
},
"place": {
"description": "Pickup place name; never a street address",
"type": [
"string",
"null"
]
},
"deliveryFeeCents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"minimumOrderCents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
}
},
"required": [
"slotId",
"method",
"date",
"startAt",
"endAt",
"orderCutoffAt",
"place",
"deliveryFeeCents",
"minimumOrderCents"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"orderModel": {
"type": "string",
"const": "request_then_confirm"
},
"instruction": {
"type": "string"
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"url",
"kitchen",
"items",
"estimatedSubtotalCents",
"currency",
"pickup",
"orderModel",
"instruction",
"notes"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Comunidad
Evidencia