Skip to main content
The Effect Coffee Shop MCP server exposes eight tools that cover the full lifecycle of a coffee order — from browsing the menu through placing, tracking, and fulfilling orders. Each tool maps directly to a method on the internal CoffeeOrderApp service.

list_menu

List the current coffee menu. Returns every MenuItem available for ordering. No input parameters required.

Response

(array)
MenuItem[]
An array of all menu items currently offered.

place_order

Create a new coffee order. The server validates the drink ID, size, milk, and temperature against the menu before persisting the order.

Parameters

customerName
string
required
The name of the customer placing the order.
drinkId
string
required
The drink to order. Must be a valid DrinkId: espresso, americano, latte, cappuccino, cold-brew, or tea.
size
string
required
Cup size. One of small, medium, or large.
milk
string
Milk preference. One of whole, oat, almond, or none. Defaults to the drink’s first available milk if omitted.
temperature
string
Serving temperature. One of hot, iced, or extra-hot. Defaults to the drink’s first available temperature if omitted.
shots
integer
Number of espresso shots. Must not exceed the drink’s maxShots. Defaults to 1 for espresso-based drinks and 0 for tea.
notes
string
Free-text special instructions for the barista.

Response

(object)
CoffeeOrder
The newly created order with status pending.

get_order

Fetch a single order by its ID.

Parameters

orderId
string
required
The order’s unique identifier. Must match the pattern order-{N} (e.g., order-42).

Response

(object)
CoffeeOrder
The full order record. See place_order → Response for the complete field list.

list_orders

List orders, optionally filtered by status. Returns all orders when no filter is supplied.

Parameters

status
string
Filter by order status. One of pending, brewing, ready, picked-up, or cancelled. Omit to return all orders.

Response

(array)
CoffeeOrder[]
An array of matching orders, ordered by creation time. See place_order → Response for per-object field details.

start_brewing

Transition an order from pending to brewing. Call this when the barista begins preparing the drink.

Parameters

orderId
string
required
ID of the order to start brewing. Must currently have status pending.

Response

(object)
CoffeeOrder
The updated order with status: "brewing".
Returns InvalidOrderStatusTransitionError (409) if the order is not in pending status.

mark_ready

Transition an order from brewing to ready. Call this when the drink is prepared and waiting for pickup.

Parameters

orderId
string
required
ID of the order to mark as ready. Must currently have status brewing.

Response

(object)
CoffeeOrder
The updated order with status: "ready".
Returns InvalidOrderStatusTransitionError (409) if the order is not in brewing status.

pick_up_order

Transition an order from ready to picked-up. This is a terminal status — the order lifecycle is complete.

Parameters

orderId
string
required
ID of the order being picked up. Must currently have status ready.

Response

(object)
CoffeeOrder
The updated order with status: "picked-up".
Returns InvalidOrderStatusTransitionError (409) if the order is not in ready status.

cancel_order

Cancel a pending or brewing order. Once cancelled, no further transitions are possible.

Parameters

orderId
string
required
ID of the order to cancel. Must currently have status pending or brewing.

Response

(object)
CoffeeOrder
The updated order with status: "cancelled".
Returns InvalidOrderStatusTransitionError (409) if the order is already ready, picked-up, or cancelled.

Build docs developers (and LLMs) love