Order food from Cordering white-label restaurants: browse menus, confirm, then place an order.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Check the current status of an order the user has already placed, using the order number returned by place_order. Reports whether the restaurant has accepted it, whether it is on its way, and whether it has finished (delivered or declined). There is no background tracking and no notification: call this again when the user asks, and only until the order is reported as finished.
The order number returned by place_order.
clientId of the restaurant the order was placed with, from the list_vendors result. Omit only when the server is configured for a single restaurant.
Check the current status of an order the user has already placed, using the order number returned by place_order. Reports whether the restaurant has accepted it, whether it is on its way, and whether it has finished (delivered or declined). There is no background tracking and no notification: call this again when the user asks, and only until the order is reported as finished.
| Argument | Type | Description |
|---|---|---|
| orderId* | integer | The order number returned by place_order. |
| clientId | integer | clientId of the restaurant the order was placed with, from the list_vendors result. Omit only when the server is configured for a single restaurant. |
{
"type": "object",
"required": [
"orderId"
],
"properties": {
"orderId": {
"type": "integer",
"description": "The order number returned by place_order."
},
"clientId": {
"type": "integer",
"description": "clientId of the restaurant the order was placed with, from the list_vendors result. Omit only when the server is configured for a single restaurant."
}
},
"additionalProperties": false
}Show which accounts are signed in, per restaurant, and which one is active. Useful when the user keeps separate work and personal accounts.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Show the restaurant's menu to the user as a visual HTML document — a horizontally-scrollable category strip with item photos, names and prices. Present the returned HTML by opening it as an HTML artifact; do NOT paste the markup into the chat as text. (Ordering does not require this — prepare_order resolves item names on its own.)
| Argument | Type | Description |
|---|---|---|
| clientId | integer | clientId of the restaurant, from a list_vendors result. Omit only when the server is configured for a single restaurant. |
| vendorId | integer | vendorId of the restaurant, from a list_vendors result. Omit only when the server is configured for a single restaurant. |
{
"type": "object",
"required": [],
"properties": {
"clientId": {
"type": "integer",
"description": "clientId of the restaurant, from a list_vendors result. Omit only when the server is configured for a single restaurant."
},
"vendorId": {
"type": "integer",
"description": "vendorId of the restaurant, from a list_vendors result. Omit only when the server is configured for a single restaurant."
}
},
"additionalProperties": false
}Find restaurants (vendors) available for ordering. This is the discovery entry point: each card shows the clientId and vendorId that list_menu and prepare_order need. Call it with no arguments to list every restaurant — that is the normal case. Returns a complete, self-contained HTML document of vendor cards (logo, address, phone, delivery fee) — restaurants open today first in colour, those closed today greyed out at the bottom. Present the returned HTML to the user by opening it as an HTML artifact; do not paste the markup into the chat.
| Argument | Type | Description |
|---|---|---|
| city | string | City to filter by. Pass this ONLY when the user named a city themselves; never guess one from context, because a filter that matches nothing hides restaurants the user could have ordered from. |
{
"type": "object",
"required": [],
"properties": {
"city": {
"type": "string",
"description": "City to filter by. Pass this ONLY when the user named a city themselves; never guess one from context, because a filter that matches nothing hides restaurants the user could have ordered from."
}
},
"additionalProperties": false
}Start signing the user in to a restaurant so they can place orders. Browsing the menu never needs this — only ordering and saving an address do. Returns a URL the user must open in a browser to sign in with Google or Apple; afterwards they copy the 'code' value from the address bar and you call submit_login_code. Each restaurant has its own login, so this must be done per restaurant.
| Argument | Type | Description |
|---|---|---|
| clientId | integer | clientId of the restaurant to sign in to, from a list_vendors result. Omit only when the server is configured for a single restaurant. |
{
"type": "object",
"required": [],
"properties": {
"clientId": {
"type": "integer",
"description": "clientId of the restaurant to sign in to, from a list_vendors result. Omit only when the server is configured for a single restaurant."
}
},
"additionalProperties": false
}Sign the user out. By default signs out of every restaurant; pass a clientId to sign out of one, and an account label to sign out just that account.
| Argument | Type | Description |
|---|---|---|
| label | string | Account label to sign out, e.g. 'work'. Omit to sign out every account at that restaurant. |
| clientId | integer | clientId of the restaurant to sign out of. Omit to sign out everywhere. |
{
"type": "object",
"required": [],
"properties": {
"label": {
"type": "string",
"description": "Account label to sign out, e.g. 'work'. Omit to sign out every account at that restaurant."
},
"clientId": {
"type": "integer",
"description": "clientId of the restaurant to sign out of. Omit to sign out everywhere."
}
},
"additionalProperties": false
}Place an order previously staged by prepare_order. Requires the confirmationToken returned by prepare_order. This causes a real order to be sent to the vendor.
| Argument | Type | Description |
|---|---|---|
| confirmationToken* | string | The confirmationToken returned by prepare_order. |
{
"type": "object",
"required": [
"confirmationToken"
],
"properties": {
"confirmationToken": {
"type": "string",
"description": "The confirmationToken returned by prepare_order."
}
},
"additionalProperties": false
}Resolve a natural-language food order (one or more items) to concrete menu items and return a summary plus a confirmation token. Does NOT place the order. Call place_order with the returned token to actually place it. Delivery is as soon as possible by default; pass 'date' to ask for a later time instead. Each call covers one delivery, so an order for more than one day means one call per day. The restaurant may still refuse a time it is not open for.
| Argument | Type | Description |
|---|---|---|
| date | string | Delivery date-time as an ISO-8601 UTC instant, e.g. '2026-07-25T12:00:00Z'. Must be in the future. Defaults to 5 minutes from now (as soon as possible) — only pass this when the user asks for a specific time. |
| items* | array | The item(s) to order — one or more lines, each with an item name, an optional quantity (default 1), an optional size, and optional extra ingredients by name. |
| notes | string | Optional notes for the vendor. |
| cutlery | boolean | Whether to ask the restaurant to include disposable cutlery. Only pass this when the user says either way; omit to leave it to the restaurant's default. Ignored (with a note) by vendors that do not offer it. |
| clientId | integer | clientId of the restaurant, from a list_vendors result. Omit only when the server is configured for a single restaurant. |
| vendorId | integer | vendorId of the restaurant, from a list_vendors result. Omit only when the server is configured for a single restaurant. |
Complete a sign-in started by login, using the 'code' value the user copied from the browser address bar. On success the user can place orders from that restaurant.
| Argument | Type | Description |
|---|---|---|
| code* | string | The code value copied from the redirect URL after signing in. |
| label | string | Optional label for this account, e.g. 'work' or 'personal'. Defaults to the email address on the account. |
| clientId | integer | clientId of the restaurant being signed in to. Omit if only one sign-in is in progress. |
{
"type": "object",
"required": [
"code"
],
"properties": {
"code": {
"type": "string",
"description": "The code value copied from the redirect URL after signing in."
},
"label": {
"type": "string",
"description": "Optional label for this account, e.g. 'work' or 'personal'. Defaults to the email address on the account."
},
"clientId": {
"type": "integer",
"description": "clientId of the restaurant being signed in to. Omit if only one sign-in is in progress."
}
},
"additionalProperties": false
}Choose which signed-in account to order with at a restaurant, e.g. to switch between work and personal. The account must already be signed in via login.
| Argument | Type | Description |
|---|---|---|
| label* | string | Account label to make active, e.g. 'work'. |
| clientId | integer | clientId of the restaurant. Omit only when the server is configured for a single restaurant. |
{
"type": "object",
"required": [
"label"
],
"properties": {
"label": {
"type": "string",
"description": "Account label to make active, e.g. 'work'."
},
"clientId": {
"type": "integer",
"description": "clientId of the restaurant. Omit only when the server is configured for a single restaurant."
}
},
"additionalProperties": false
}| bringTerminal | boolean | Whether the courier should bring a card terminal so the order can be paid by card on delivery. Pass true when the user wants to pay by card, false for cash; omit when they do not say. Ignored (with a note) by vendors that cannot take card on delivery. |
| deliveryAddress* | string | Delivery address text, e.g. 'Orlovica Pavla 26'. |
{
"type": "object",
"required": [
"items",
"deliveryAddress"
],
"properties": {
"date": {
"type": "string",
"description": "Delivery date-time as an ISO-8601 UTC instant, e.g. '2026-07-25T12:00:00Z'. Must be in the future. Defaults to 5 minutes from now (as soon as possible) — only pass this when the user asks for a specific time."
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"item"
],
"properties": {
"item": {
"type": "string",
"description": "Menu item name, e.g. 'Margherita'."
},
"size": {
"type": "string",
"description": "Requested size by name, e.g. '33cm' or 'Large'. Selects that size variant of the item; omit for the standard size. A size the item is not available in is rejected with the list of sizes it does offer."
},
"extras": {
"type": "array",
"items": {
"type": "string"
},
"description": "Extra ingredients to add to this item, by name, e.g. ['Šunka']. Each must be one of the extras that item offers (its own composition ingredients are not addable); repeat a name to add it twice."
},
"quantity": {
"type": "integer",
"format": "int32",
"description": "Quantity for this item, at least 1. Defaults to 1 if omitted."
}
}
},
"description": "The item(s) to order — one or more lines, each with an item name, an optional quantity (default 1), an optional size, and optional extra ingredients by name."
},
"notes": {
"type": "string",
"description": "Optional notes for the vendor."
},
"cutlery": {
"type": "boolean",
"description": "Whether to ask the restaurant to include disposable cutlery. Only pass this when the user says either way; omit to leave it to the restaurant's default. Ignored (with a note) by vendors that do not offer it."
},
"clientId": {
"type": "integer",
"description": "clientId of the restaurant, from a list_vendors result. Omit only when the server is configured for a single restaurant."
},
"vendorId": {
"type": "integer",
"description": "vendorId of the restaurant, from a list_vendors result. Omit only when the server is configured for a single restaurant."
},
"bringTerminal": {
"type": "boolean",
"description": "Whether the courier should bring a card terminal so the order can be paid by card on delivery. Pass true when the user wants to pay by card, false for cash; omit when they do not say. Ignored (with a note) by vendors that cannot take card on delivery."
},
"deliveryAddress": {
"type": "string",
"description": "Delivery address text, e.g. 'Orlovica Pavla 26'."
}
},
"additionalProperties": false
}