Portata is how an independent restaurant lets an AI assistant read its live menu and place a real order. This page is what our connector does, what it can reach, and the single thing it can commit.
Written for the people deciding whether to list us. Everything below was verified against the live server rather than written from intention.
One restaurant's ordering counter, exposed as tools. The menu, tonight's prices, what the kitchen has run out of, what the restaurant would send instead, and a way to place the order. Each restaurant chooses to be here and can leave at any time.
The same information is already public on that restaurant's own ordering page. The connector does not reach anything a person with a browser could not see.
| Tool | What it does | Writes? |
|---|---|---|
find_restaurant | Finds a participating restaurant by name. | No |
read_board | Tonight's menu, real prices, what is unavailable, pickup time. | No |
whats_out_tonight | What the kitchen has run out of, and when it returns if the restaurant said. | No |
what_goes_with | The restaurant's own recommendation alongside a dish, and its reason. | No |
substitute_for | What the restaurant would offer instead of something unavailable, and why. | No |
course_verdicts | Which courses the restaurant wants offered for the order so far. | No |
price_order | Prices an order. Returns the restaurant's own total. Writes nothing. | No |
place_order | Places the order with the restaurant. | Yes |
order_status | Whether a placed order or a payment handoff has completed. | No |
place_order is the only tool that changes the world. A model can explore the entire surface, price an order as many times as it likes, and change its mind, without anything happening. That separation is deliberate.
This is the part we would want a reviewer to check first, because it is the usual fear with an agent that can buy something.
place_order must send back the exact total the restaurant quoted. The restaurant refuses any order whose total does not match its own, down to the cent. A model that hallucinates a price does not get a cheap order; it gets a refusal and a sentence explaining why.
So the restaurant's price always wins, and an AI assistant can only repeat it.
Where a restaurant takes payment before cooking, place_order does not charge anything. It returns a link for the person to pay on the restaurant's own page, and the tool tells the model not to claim the order is in until order_status confirms it. The payment stays between the customer and the restaurant. We are not in it.
Every failure returns an error the model can read aloud, never an empty result. This matters more than it sounds: a model handed an empty menu concludes the restaurant has no food and tells the person so. A model handed "I could not reach the board" says that instead, which is both true and recoverable.
Refusals carry the restaurant's own sentence. If an item is not on the board, if a size is missing, if a total is wrong, the answer names the problem rather than failing silently.
The connector is unauthenticated, deliberately. Every tool reaches the same public surface as the restaurant's own ordering page: a public menu, public prices, and an order anyone can place from a browser. There is nothing behind a login to protect, so adding one would be security theatre rather than security.
No account, key or sign-in is needed to connect. If we later add a tool that acts on a restaurant owner's own account, that tool will ask for sign-in while the public ones stay open.
The server is at https://uzscpumvvstejyhcxndx.supabase.co/functions/v1/mcp. Add it as a connector, with no credentials, and all nine tools are available immediately.
The restaurant to try is Marino's, slug portata-pizza-demo. find_restaurant finds it by name. Its board carries about a hundred dishes with real prices, and at least one dish is usually marked unavailable, so whats_out_tonight and substitute_for both have something to say.
Marino's exists so that this connector can be exercised without a real kitchen receiving anything. The board says so itself: it opens with "this is a sample restaurant" and read_board returns demo: true.
Its point of sale is a sandbox account, not a live merchant. An order placed through place_order becomes a real order record in Portata and a real order in that sandbox, which is what lets you see the whole path work. No food is cooked, no money moves, and no operating restaurant is touched. Place as many as you need.
Restaurants that take real orders run the same tools against their own live till. The difference is the account behind the restaurant, not the connector.
Portata is a small company building ordering for independent restaurants. Every restaurant reachable through this connector has chosen to be, and the menus, prices and recommendations are theirs rather than ours.