Shortlist Pass Local Businesses
Myrtle Beach food trucks, restaurants, shops and HOAs: live menus, stops, pickup times, order links.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"local-businesses": {
"url": "https://app.shortlistpass.com/mcp"
}
}
}Remote endpoints
https://app.shortlistpass.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (6)
🟢search_businesses(town, category, query)
Searches real local businesses on Shortlist Pass (food trucks, restaurants, shops, HOAs and more). Optional filters: a town slug (e.g. "myrtle-beach"), a business category key (e.g. "food_truck", "restaurant", "bakery"), and a free-text query. The query matches every word, in any order, against the business name, headline and type, and also against its active menu items (name, description, tags, category); a business found through its menu carries matched_items (id, name, price, up to 5). For food trucks, matched items come from the full catalog and menu_note says so; what is sold on a given day is per stop. Businesses with a menu match rank first. Returns up to 25 matches, each with its subdomain, which is the identifier the other tools take. Demo and test pages are not included.
Input Schema
{
"type": "object",
"properties": {
"town": {
"description": "Town slug, e.g. \"myrtle-beach\"",
"type": "string",
"maxLength": 80
},
"category": {
"description": "Business category key, e.g. \"food_truck\"",
"type": "string",
"maxLength": 80
},
"query": {
"description": "Free-text query, e.g. \"empanadas\" or \"buffalo chicken fries\"; matched word-by-word against the business and its menu items",
"type": "string",
"maxLength": 80
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_business(subdomain)
Returns the public profile of one Shortlist business: name, type, description, town, phone, website, page URL, hours (fixed locations only), whether online ordering is open, and the order page URL when it is. Mobile businesses (food trucks) have no fixed address; their locations are the upcoming stops in the upcoming-events data.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"description": "The business subdomain, e.g. \"nitos\" for nitos.shortlistpass.com",
"type": "string",
"minLength": 1,
"maxLength": 63
}
},
"required": [
"subdomain"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_menu(subdomain)
Returns the current public menu of one business: every active item with its id (use it in start_order), name, description, price, category, tags, available and sold_out flags, an image URL, and options: its sizes and add-ons (group key, label, and each choice's value, label and price). Prices are in US dollars. For a business with menu_source "event" (food trucks), this is the full catalog of everything it sells; what is sold on a given day is listed per stop in the upcoming-events data, and the note field states this. The response includes the business summary with the order page URL when ordering is open.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"description": "The business subdomain, e.g. \"nitos\"",
"type": "string",
"minLength": 1,
"maxLength": 63
}
},
"required": [
"subdomain"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_trucks_tonight(city, days)
Food trucks in one city today (local time), in two lists. "tonight" (status "out_tonight"): trucks with a stop confirmed for today — truck name, park if it is at one, address, start and end time, open_now, the truck page link, and order_url only when that truck is taking preorders for that stop. "usually_here" (status "usually_here"): trucks that regularly park at a listed park but have NO stop confirmed for today — say "usually here", never "out tonight". Also lists the parks with today's and usual truck counts. Optional "days" (1-7, default 1): also returns "days", the posted stops for today and the next days grouped by date (truck, where, start, end, open_now, page link); a day with no posted stop is left out. Test pages, private events and cancelled or hidden stops are never included. Cities: Myrtle Beach, Austin.
Input Schema
{
"type": "object",
"properties": {
"city": {
"description": "City name or slug, e.g. \"Austin\" or \"myrtle-beach\"",
"type": "string",
"minLength": 2,
"maxLength": 60
},
"days": {
"description": "How many days from today, 1-7 (default 1)",
"type": "integer",
"minimum": 1,
"maximum": 7
}
},
"required": [
"city"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_upcoming_events(subdomain)
Returns the upcoming published events and stops for one business; for a food truck these are its locations. Each has a name, ISO start and end with the local offset, location name and address, whether pre-orders are open for that stop, the pickup time slots still available with remaining capacity (null means no cap), and a menu with menu_status: "set" means the items listed are what is sold at that stop and their offering ids are accepted by start_order for that stop; "not_live" means the business has not put a menu on that stop yet, the menu is empty, menu_note carries the explanation, and start_order does not accept the stop; "catalog" means a fixed business whose standing menu applies. Recurring events carry a recurrence description and the next date. Cancelled and test events are not included.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"description": "The business subdomain, e.g. \"nitos\"",
"type": "string",
"minLength": 1,
"maxLength": 63
}
},
"required": [
"subdomain"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡start_order(subdomain, event_id, pickup_time, items, customer, ...)
Creates a short-lived cart for a customer at one Shortlist business and returns a cart_url on the business's own page, where the customer reviews the order and pays through the business's checkout. Input is offering ids (preferred) or item names, and quantities; prices are not accepted. Order by id from get_menu or the stop's menu. If you only have a name, send it as name: when it is unclear or not on the menu, no cart is made and the reply (error "needs_choice") lists each line as matched, choose (options with ids) or not_found (genuinely close items with ids, or none) with a message to read to your user; ask them and resend with the offering_id. The server prices every line from the menu, applies the business's deals and tax, and returns the resulting quote. For businesses with menu_source "event" (food trucks), event_id is required and identifies one upcoming stop; the offering ids accepted are those listed in that stop's menu in the upcoming-events data, and pickup_time is one of that stop's open pickup_slots. A stop whose menu_status is "not_live" is refused. The cart expires in 30 minutes. This tool does not accept payment details or addresses; payment happens on the business's page at the returned cart_url. In the quote, total_before_tip excludes the optional tip, which the customer chooses on the checkout page; quote.tip.note states the business's suggested percentage. agent.name is recorded on the cart and the order so the business can see which assistant helped.
Input Schema
{
"type": "object",
"properties": {
"subdomain": {
"description": "The business subdomain, e.g. \"nitos\"",
"type": "string",
"minLength": 1,
"maxLength": 63
},
"event_id": {
"description": "A stop id from the upcoming-events results. Required for businesses with menu_source \"event\".",
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"pickup_time": {
"description": "One of the stop's open pickup_slots, \"HH:MM\" 24-hour",
"type": "string",
"pattern": "^\\d{2}:\\d{2}$"
},
"items": {
"minItems": 1,
"maxItems": 12,
"type": "array",
"items": {
"type": "object",
"properties": {
"offering_id": {
"description": "An offering id from the stop's menu (or from get_menu for a fixed business). Preferred.",
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"name": {
"description": "Only when you have no id: the item's name as your user said it. If it is unclear the reply is error \"needs_choice\" with options (ids) per line; ask your user and resend with the offering_id.",
"type": "string",
"minLength": 1,
"maxLength": 120
},
"quantity": {
"description": "Whole number, 1 to 100",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"options": {
"description": "The offering's own variant or modifier choices, by option value or label",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
}
}
},
"required": [
"quantity"
]
}
},
"customer": {
"description": "Customer details, if provided; pre-filled on the order sheet",
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 80
},
"phone": {
"type": "string",
"maxLength": 30
},
"email": {
"type": "string",
"maxLength": 120
}
}
},
"agent": {
"description": "The name of the assistant placing the order, e.g. { \"name\": \"Claude\" }. Optional; defaults to \"AI assistant\".",
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 60
}
},
"required": [
"name"
]
}
},
"required": [
"subdomain",
"items"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence