Wemay POS Restaurants

Lets a personal AI assistant order pickup food from independent restaurants on Wemay POS.

Connector version 1.0.0 · Contact info@ezpos.org

Endpoints

MCP server
https://mcp.wemay.app/mcp
Streamable HTTP, stateless, JSON responses only (no SSE stream). No account, API key or OAuth is required.
REST API
https://mcp.wemay.app/api
The same tools as plain HTTP + JSON, for clients that do not speak MCP.
OpenAPI 3.1
https://mcp.wemay.app/api/openapi.json
This page
https://mcp.wemay.app/docs

Connect your assistant

Use the MCP server URL https://mcp.wemay.app/mcp. Leave authentication empty; the connector is public and holds no user accounts.

Claude

Open Settings → Connectors → Add custom connector, paste the MCP server URL, and save. Then enable the connector in a conversation.

ChatGPT

Turn on developer mode in ChatGPT settings, create a custom connector (MCP, Streamable HTTP), paste the MCP server URL and choose no authentication.

Grok

Add a custom connector in Grok's connector settings, paste the MCP server URL and choose no authentication.

Other MCP clients

Any client that supports remote Streamable HTTP servers can connect: add the MCP server URL and send no credentials. To check the connection from a terminal:

curl -s https://mcp.wemay.app/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

The REST API needs no setup either:

curl -s 'https://mcp.wemay.app/api/restaurants'

Tools

ToolTitleDescription
search_restaurantsFind restaurantsFind restaurants that take orders through Wemay POS. query can be a restaurant name or address word (city, street), a cuisine (Chinese) or a dish (noodles, dumplings, fish, spicy); filler words like 'food', 'restaurant' or 'near me' are ignored, so 'Chinese food near me' works. Leave query empty to list all. Each result has match_reason (name, cuisine or dish) and, for dish matches, matched_dishes (up to 3 dishes with item_id and price). If nothing matches, matched=false and the participating restaurants are listed anyway: check their menus with get_menu (search=...) instead of telling the user nothing exists. When the user says 'near me' / 'nearby' or names a place, pass latitude and longitude first: the device location if you have it, otherwise the approximate center of the city or ZIP code the user gave. With a location, results are sorted by how well they match, then by distance_miles, and limited to radius_miles when browsing or searching by cuisine or dish; if none is that close, the nearest ones come back with outside_radius=true and you must tell the user how far they are. A query matching a restaurant's name or address always finds it, however far.

Parameters: query, latitude, longitude, radius_miles

get_restaurantRestaurant detailsAddress, phone, opening hours, whether it is open now, and temporary closures. 'scheduling' tells whether pickup can be scheduled for later, whether ASAP is available now, how many days ahead, the slot size and the earliest pickup_time.

Parameters: restaurant_id*

get_menuMenuLive online menu: categories and items with prices in USD. Sold-out items are already removed. 'options' tells whether get_item_options is needed before ordering. Filter with category_id or search for long menus.

Parameters: restaurant_id*, category_id, search

get_item_optionsItem optionsVariants (sizes) or modifier groups for one item, with min/max rules and prices. Call this for any item whose options are not 'none'.

Parameters: restaurant_id*, item_id*

quote_orderPrice a cartValidate a pickup cart and get the restaurant's own price: subtotal, tax, any card surcharge, total before tip. Nothing is ordered or charged. Also returns the pickup restaurant and address: confirm with the user that they can pick up there (see confirm_with_user) before sharing any payment link. Pass the user's latitude/longitude if known to get distance_miles and far_from_user. For a later pickup (e.g. 'tomorrow at 12:30') pass pickup_time in the restaurant's local time; it must be within business hours. When the restaurant is closed (or has no pickup times left today) an ASAP order fails with pickup_time_required: ask the user what time they want, offer next_pickup_times, and retry with pickup_time. pickup_time_outside_hours / pickup_time_out_of_window: same, offer next_pickup_times.

Parameters: restaurant_id*, items*, pickup_time, latitude, longitude

create_checkout_linkCreate checkout linkTurn a validated pickup cart into a secure payment link. Ask the customer for the name and phone number to use for pickup and pass them: most restaurants then return a short pay page showing exactly this order (tip, card / Apple Pay / Google Pay). Without them, or where the restaurant does not support it, you get a cart page where the customer enters their details. Nothing is charged or sent to the kitchen until the customer pays. Asking again for the same order returns the same link (reused=true). Before sharing the link, tell the user the pickup restaurant name and address (pickup, confirm_with_user) and confirm they can pick up there. Never ask for card details in chat. For a scheduled pickup pass the same pickup_time you quoted; scheduled orders always get the cart page, and the customer should check that the page shows that pickup time before paying. Same pickup_time errors as quote_order.

Parameters: restaurant_id*, items*, pickup_time, customer_name, customer_phone, latitude, longitude

* required parameter.

Ordering and payment

  1. Find a restaurant. The assistant searches the participating restaurants by restaurant name or address, by cuisine (for example "Chinese food") or by dish (for example "noodles" or "dumplings"). Each result says why it matched, and a dish search also returns a few matching dishes with their prices. If nothing matches, the participating restaurants are listed anyway so the assistant can check their menus. Location is optional: without it, every participating restaurant is listed. With the user's location, restaurants nearby are returned with their distance. Searching by restaurant name is not limited by distance, a cuisine or dish search is limited to restaurants nearby, and when nothing is nearby the closest few are returned with their distance noted.
  2. Read the menu and options. The live online menu is returned with sold-out items removed, together with sizes, add-ons and their rules.
  3. Get a price. The restaurant's own server prices the cart: subtotal, tax, any card surcharge and the total before tip. Nothing is ordered or charged at this step.
  4. Confirm the pickup address. Before sharing a link, the assistant confirms with the user which restaurant and pickup address the order is for.
  5. Create a checkout link. The server returns a secure link to the restaurant's payment page.
  6. The user pays on the secure payment page. The user chooses a tip and pays by card, Apple Pay or Google Pay on that page. Card numbers never pass through the assistant or this connector.
  7. The kitchen receives the order only after payment. A link that is never paid creates no order.

Privacy and data

Limits

Notes for reviewers

All listed restaurants are real, independent restaurants in the San Francisco Bay Area that use Wemay POS.

Searching, reading menus, quoting and creating links are safe to test: nothing is sent to the restaurant until the payment page is completed. Please do not complete a payment unless you intend to pick up the food.

Suggested test: "Find Qing Shu in Cupertino" → "Show me their menu" → "Quote one dish for pickup" → "Give me a checkout link".

Contact

Questions, support or security reports: info@ezpos.org