Developer

MCP server

Let an AI assistant work your restaurant. OrderRestro speaks the Model Context Protocol, so Claude and other MCP clients can look up orders, assign drivers, book tables, edit the menu and run reports — with exactly the permissions of the person who made the key.

Overview

The server exposes 40 tools over the Model Context Protocol (Streamable HTTP, stateless). It is not a separate service — it is built into OrderRestro at one URL:

https://<your-orderrestro-domain>/api/v1/mcp

It is separate from the REST API: the REST API is for your website’s backend and uses an integration key; the MCP server is for AI clients and uses a personal key that acts as you.

Get a key

  1. Sign in and open Settings > API Keys > Personal API keys & MCP.
  2. Choose New key and name it after the assistant or device.
  3. Copy the key (it starts with ordr_staff_). It is shown once.

Every request sends Authorization: Bearer <key>. The key acts as you, with your exact role permissions: every tool re-checks the permission the matching screen in the app would need, so an assistant can never do more than you could yourself. Revoke a key and it stops working immediately.

Connect a client

Claude Code

claude mcp add --transport http orderrestro \
  https://your-domain/api/v1/mcp \
  --header "Authorization: Bearer ordr_staff_..."

Clients that only run local (stdio) servers

Bridge the remote server with mcp-remote:

{
  "mcpServers": {
    "orderrestro": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://your-domain/api/v1/mcp",
        "--header", "Authorization: Bearer ordr_staff_..."
      ]
    }
  }
}

Any other MCP client

Point it at the URL with the Authorization header. The server is stateless: each request is authenticated on its own, only POST is accepted, and GET/DELETE return 405.

Try it with curl

List the tools
curl -X POST https://your-domain/api/v1/mcp \
  -H "Authorization: Bearer ordr_staff_..." \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Call a tool
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
     "params":{"name":"create_order","arguments":{
       "branchId":"<branchId>","type":"TAKEAWAY","guestName":"Asha",
       "items":[{"menuItemId":"<itemId>","quantity":2}]}}}'

Results come back as text content holding JSON:

list_locations result
{"result":{"content":[{"type":"text","text":"[{\"id\":\"…\",\"name\":\"Main Branch\",\"address\":null,\"phone\":null}]"}]},"jsonrpc":"2.0","id":3}

Problems are returned as a tool result with isError: true, not as an HTTP failure:

{"result":{"content":[{"type":"text","text":"Error: Missing permission: refunds.process"}],"isError":true},"jsonrpc":"2.0","id":1}
{"result":{"content":[{"type":"text","text":"Error: \"branchId\" is required and must be a string"}],"isError":true},"jsonrpc":"2.0","id":8}

A missing, wrong or revoked key is an HTTP 401.

What you can ask

  • “How were sales yesterday, and which dishes sold best this week?” — dashboard_summary, run_report
  • “Which deliveries are still without a driver? Assign Ravi to the first one.” — list_deliveries, assign_driver
  • “Book a table for four tomorrow at 8pm under Mehta.” — create_reservation
  • “Add a Paneer Tikka at ₹240 to Starters.” — create_menu_item
  • “Approve Priya’s leave request for Friday.” — list_leave_requests, decide_leave_request
  • “What was our profit this month, and what do we owe in tax by rate?” — profit_and_loss, gst_report

What it will not do

Some actions are deliberately not available over MCP, whatever the role: taking payment at checkout (it needs a real payment terminal), creating or changing staff accounts and roles, and restoring backups. Read-only tools are marked as such so a client can approve them automatically while asking before it runs a write.

Tool reference (40)

Generated from the server's own tool definitions, so it always matches what your assistant sees.

Locations & dashboard

ToolWhat it doesNeedsArguments
list_locations
read-only
List the caller's restaurant's active locations (branches) — id, name, address, phone.Any signed-in staff membernone
dashboard_summary
read-only
Today's sales/orders summary for one location.Any signed-in staff member
  • branchId string, required

Orders

ToolWhat it doesNeedsArguments
list_open_orders
read-only
List currently open orders for one location, optionally filtered to one table.Create Orders
  • branchId string, required
  • tableId string
get_order
read-only
Get full detail (items, KOTs, payments) for one order.Create Orders
  • branchId string, required
  • orderId string, required
create_order
changes data
Create a new takeaway/delivery/dine-in order at one location.Create Orders
  • branchId string, required
  • type string (DINE_IN | TAKEAWAY | DELIVERY | PHONE)
  • tableId string
  • guestName string
  • notes string
  • items array, required
cancel_order
changes data
Cancel an OPEN order the kitchen has not started yet. Fails if the kitchen already began preparing it, or if it is already paid (use refund_order instead).Cancel Orders
  • branchId string, required
  • orderId string, required
refund_order
changes data
Refund some or all of a PAID order. Amount cannot exceed what remains refundable.Process Refunds
  • branchId string, required
  • orderId string, required
  • amount number, required
  • method string, required
  • reason string

Delivery

ToolWhat it doesNeedsArguments
list_deliveries
read-only
List delivery orders for one location — active ones by default, or finished/failed ones with history=true. Each shows address, zone, fee, driver and delivery status.Manage Deliveries
  • branchId string, required
  • history boolean
list_delivery_zones
read-only
List a location's delivery zones (fee, minimum order, ETA, pincodes).Manage Deliveries
  • branchId string, required
assign_driver
changes data
Assign a staff member as the driver for a delivery order.Manage Deliveries
  • branchId string, required
  • orderId string, required
  • driverId string, required
update_delivery_status
changes data
Move a delivery along: ASSIGNED -> PICKED_UP -> DELIVERED (or FAILED).Manage Deliveries
  • branchId string, required
  • orderId string, required
  • status string, required

Reservations

ToolWhat it doesNeedsArguments
list_reservations
read-only
List reservations for one location, optionally on one date (YYYY-MM-DD).Manage Reservations
  • branchId string, required
  • date string
create_reservation
changes data
Create a new table reservation at one location.Manage Reservations
  • branchId string, required
  • customerName string, required
  • phone string
  • guestCount number, required
  • reservedAt string, required
  • durationMinutes number
  • tableId string
  • specialRequests string
update_reservation_status
changes data
Transition a reservation to a new status: one of ${RESERVATION_STATUS_VALUES.join(', ')}.Manage Reservations
  • branchId string, required
  • reservationId string, required
  • status string, required

Menu

ToolWhat it doesNeedsArguments
create_menu_category
changes data
Create a new menu category (e.g. "Chicken", "Cocktail") at one location.Manage Menu
  • branchId string, required
  • name string, required
  • sortOrder number
update_menu_category
changes data
Rename, reorder, or activate/deactivate an existing menu category.Manage Menu
  • branchId string, required
  • categoryId string, required
  • name string
  • sortOrder number
  • isActive boolean
delete_menu_category
changes data
Permanently delete a menu category. Fails if it still has items — delete or move those first.Manage Menu
  • branchId string, required
  • categoryId string, required
create_menu_item
changes data
Create a new menu item (dish) inside an existing category, with price and optional image URL.Manage Menu
  • branchId string, required
  • categoryId string, required
  • name string, required
  • price number, required
  • description string
  • imageUrl string
  • isVeg boolean
  • spiceLevel string
update_menu_item
changes data
Change any fields (price, name, description, image, availability, veg flag, spice level) on an existing menu item.Manage Menu
  • branchId string, required
  • itemId string, required
  • name string
  • price number
  • description string
  • imageUrl string
  • isVeg boolean
  • isActive boolean
  • spiceLevel string
delete_menu_item
changes data
Permanently delete a menu item.Manage Menu
  • branchId string, required
  • itemId string, required

Floors & tables

ToolWhat it doesNeedsArguments
create_floor
changes data
Create a new floor or dining section (e.g. "Main Hall", "Bar") at one location.Manage Tables
  • branchId string, required
  • name string, required
  • sortOrder number
update_floor
changes data
Rename or reorder an existing floor/section.Manage Tables
  • branchId string, required
  • floorId string, required
  • name string
  • sortOrder number
create_tables_bulk
changes data
Create multiple tables at once on one floor/section, given a list of table numbers.Manage Tables
  • branchId string, required
  • floorId string, required
  • numbers array, required
  • capacity number
  • shape string
update_table
changes data
Change a table's number, name, capacity, shape or notes.Manage Tables
  • branchId string, required
  • tableId string, required
  • number string
  • name string
  • capacity number
  • shape string
  • notes string
update_table_status
changes data
Change a table's status: one of ${TABLE_STATUS_VALUES.join(', ')}.Manage Tables
  • branchId string, required
  • tableId string, required
  • status string, required
delete_table
changes data
Permanently delete a table.Manage Tables
  • branchId string, required
  • tableId string, required

Staff

ToolWhat it doesNeedsArguments
clock_in
changes data
Clock the calling staff member in at a location.Any signed-in staff member
  • branchId string, required
  • note string
clock_out
changes data
Clock the calling staff member out of their open shift.Any signed-in staff membernone
list_attendance
read-only
List staff clock-in/clock-out records for one location, optionally on one date (YYYY-MM-DD) or for one staff member. A null clockOutAt means the person is still on shift.Manage Staff Attendance
  • branchId string, required
  • date string
  • userId string
list_shifts
read-only
List scheduled staff shifts for one location, optionally between two dates (YYYY-MM-DD).Manage Staff Schedules, Leave & Payroll
  • branchId string, required
  • from string
  • to string
list_leave_requests
read-only
List staff leave requests for one location, optionally only PENDING, APPROVED or REJECTED.Manage Staff Schedules, Leave & Payroll
  • branchId string, required
  • status string
decide_leave_request
changes data
Approve or reject a pending leave request.Manage Staff Schedules, Leave & Payroll
  • branchId string, required
  • leaveId string, required
  • status string, required (APPROVED | REJECTED)
staff_performance
read-only
Per-staff orders, sales, tips, hours worked and sales per hour between two dates (YYYY-MM-DD).Manage Staff Schedules, Leave & Payroll
  • branchId string, required
  • from string, required
  • to string, required

Accounting & reports

ToolWhat it doesNeedsArguments
profit_and_loss
read-only
Net sales, expenses by category, payroll cost and net profit for a location between two dates (YYYY-MM-DD).Manage Accounting
  • branchId string, required
  • from string, required
  • to string, required
gst_report
read-only
Taxable value and tax collected, grouped by tax rate, between two dates (YYYY-MM-DD).Manage Accounting
  • branchId string, required
  • from string, required
  • to string, required
list_expenses
read-only
List recorded expenses for a location between two dates (YYYY-MM-DD).Manage Accounting
  • branchId string, required
  • from string, required
  • to string, required
run_report
read-only
Run a catalog report (sales-daily, sales-by-item, popular-items, slow-movers, payment-methods, discounts, tax, peak-hours, food-cost, customers, retention, staff-sales, table-turnover, reservations, delivery, waste, inventory-valuation) for a location between two dates (YYYY-MM-DD). Returns columns and rows.Access Reports
  • branchId string, required
  • report string, required
  • from string, required
  • to string, required

Marketing & operations

ToolWhat it doesNeedsArguments
list_coupons
read-only
List coupon codes for a location with usage counts.Manage Coupons, Promotions & Campaigns
  • branchId string, required
list_promotions
read-only
List automatic time-window discounts for a location.Manage Coupons, Promotions & Campaigns
  • branchId string, required
list_equipment
read-only
List kitchen/restaurant equipment with next service due dates and overdue flags.Manage Equipment & Documents
  • branchId string, required