# Agent operational workflows

These workflows require an authorised MCP connection. Discover the tools and
their schemas before acting. All example record identifiers are fictional.

## Resolve the restaurant context

1. If advertised, call `business_mcp_context` with `{}` to read the selected
   business. Otherwise use the connection’s authorised context. If the intended
   business is ambiguous, ask the operator to clarify; do not guess an
   identifier.
2. Call `place_list` with the schema-required business context.
3. Match the requested location against returned records. Ask for clarification
   if names are ambiguous.
4. Keep the chosen business and location attached to subsequent calls and report
   summaries. A location name alone is not a globally unique identifier.

## Read bookings for a requested service

1. Resolve the authorised location.
2. Clarify the requested date and time zone when “today”, “tomorrow”, or “this
   weekend” is ambiguous.
3. Inspect `place_bookings_list`'s advertised schema. Apply only its supported
   date, status, segment, and pagination fields.
4. Fetch the requested range. Follow pagination or clearly state that the result
   is partial.
5. Summarise only the requested operational information. Avoid repeating guest
   contact details or private notes when they are unnecessary.

Reading bookings does not check live seating availability or create a
reservation. Refer unsupported changes to the operator's
[booking workflow](/reservations/bookings).

### Verify a read before summarising it

For each context, location, booking, or insight call, check the MCP error flag
and the actual structured envelope before using the data:

| Check | Required outcome |
| ----- | ---------------- |
| Tool and revision | The response belongs to the requested tool and the discovered contract. Rediscover after a schema or catalogue change. |
| Envelope status | Use returned data only after `ok`. A `too_large` response needs a narrower query; `pending_approval` is not completed work. |
| Restaurant context | Returned records belong to the authorised business and intended location. Stop on a mismatch. |
| Result shape | Validate advertised fields and narrow unconstrained results. Do not invent an `items`, `total`, or `nextCursor` field. |
| Retrieval coverage | Follow the operation's actual continuation information. If completion cannot be established, label the summary as partial. |
| Time and freshness | Keep the requested interval, time zone, retrieval time, and any returned computation time with the summary. |

Do not manufacture an empty result from a missing `result` field, an invalid
envelope, or a failed call. An empty successful page and unavailable data have
different meanings. If the operation does not establish how to continue, explain
the limit and hand off the unresolved question rather than increasing scope or
guessing a pagination strategy.

### Example calls

These are MCP `tools/call` parameters, validated against the current local
advertised input schemas. All identifiers are fictional. Substitute authorised
returned identifiers and the requested interval; rediscover the connected
schemas before use.

```json
{ "name": "business_mcp_context", "arguments": {} }
```

```json
{
  "name": "place_list",
  "arguments": { "businessId": "example-business", "limit": 20 }
}
```

For a London service on 13 October 2026, the following UTC instants span the
local calendar day (UTC+01:00 on that date). Choose the operator's intended
service interval rather than assuming every trading day ends at midnight. Follow
the returned list's pagination contract to retrieve further pages.

```json
{
  "name": "place_bookings_list",
  "arguments": {
    "businessId": "example-business",
    "placeId": "example-location",
    "limit": 50,
    "filter": {
      "status": ["CONFIRMED", "ARRIVED"],
      "startAt": {
        "from": "2026-10-12T23:00:00Z",
        "to": "2026-10-13T23:00:00Z"
      }
    },
    "sort": { "field": "startAt", "direction": "asc" }
  }
}
```

## Read a customer brief

Discover `insights_business`, resolve the authorised business, and choose the
requested window from its actual schema. The current local schema accepts `7d`,
`30d`, `90d`, and `365d`.

```json
{
  "name": "insights_business",
  "arguments": { "businessId": "example-business", "window": "30d" }
}
```

Validate the result envelope and actual insight fields. Keep the selected window
and returned computation time with the summary. Missing or empty data is not a
reason to substitute the Console's Sample preview. Explain that member-linked
guest insight differs from all restaurant takings and a daily close. A
feature/precondition error needs the operator's supported setup path, not a
permission workaround.

Summarise only the guest information needed for the authorised request. A
follow-up suggestion does not authorise a call, email, discount or access to
another business's records. Do not claim that reading the brief or a visible
Mark handled control recorded contact. Use a discovered authorised tool and a
verified saved result if the operator explicitly requests a supported change.

## Change a menu's notes

1. Resolve the authorised business and location.
2. List or read the menu to establish its `collectionId` and current notes.
3. Confirm the target and exact new text, or the explicit request to clear it.
   Do not rewrite unrelated menu information.
4. Validate against the discovered update schema. Send the required restaurant
   context and notes change only. Additional fields in a broader tool schema are
   not permission to change them.
5. Interpret the actual result. If approval is pending, say it is queued and
   wait for the authorised approval path; do not report success.
6. Refetch the same menu and compare the returned notes with the intended value.
   Report a verified match, a pending result, or an unresolved difference.

Do not overwrite a newer edit to resolve an unexplained difference. Read the
current state and ask the operator how to proceed.

This example changes only notes using the current local schema. It intentionally
omits unrelated update fields. A different deployed schema can require different
context fields; do not copy this example without discovery.

```json
{
  "name": "place_menus_update",
  "arguments": {
    "placeId": "example-location",
    "collectionId": "example-menu",
    "notes": "Lunch menu available until 15:00."
  }
}
```

## Investigate stock without claiming a physical count

Resolve the requested location, then discover
`place_stock_analytics_stockAnalysis`. The current local contract requires the
authorised business and location; it compares recorded on-hand quantities with
configured par levels and reorder points.

```json
{
  "name": "place_stock_analytics_stockAnalysis",
  "arguments": {
    "businessId": "example-business",
    "placeId": "example-location"
  }
}
```

Apply the read-result checks above. Verify the returned units, currency, item
identity and configuration before interpreting a deviation or value. Missing
costs or targets are not zero, and recorded on-hand stock is not a fresh
physical count. Give the stock manager the specific items to investigate rather
than ordering, adjusting quantities, or marking a count complete.

For an explicitly requested comparison across the authorised business, discover
`business_stock_crossLocation_dashboard`. Do not broaden a single-location
question to every restaurant automatically.

```json
{
  "name": "business_stock_crossLocation_dashboard",
  "arguments": { "businessId": "example-business" }
}
```

To review count-cadence alerts, discover `business_stock_alert_overdueCount`.
Its current contract uses each location's configured cadence, with a fallback
threshold where applicable. A seven-day fallback is not a universal count policy.

```json
{
  "name": "business_stock_alert_overdueCount",
  "arguments": { "businessId": "example-business", "thresholdDays": 7 }
}
```

An overdue alert is an investigation prompt, not a count record or proof that
someone counted the shelves. Summarise only the requested locations and hand the
physical work to the responsible operator.

## Hand off unsupported stock operations

The current local business catalogue has stock configuration, alert and report
tools, but does not advertise these operational actions:

| Requested work | Operator workflow |
| -------------- | ----------------- |
| Start, enter, submit or approve a physical count | [Stock counts](/stock/counts) |
| Create, send or receive a purchase order | [Purchase orders](/guides/purchase-orders) and [Receiving](/stock/receiving) |
| Record an unplanned delivery | [Unplanned deliveries](/stock/unplanned-deliveries) |
| Log waste | [Waste](/stock/waste) |
| Make a general manual stock adjustment | [Quick adjustment](/stock/levels#record-an-authorised-quick-adjustment) |
| Send or receive a stock transfer | [Transfers](/stock/transfers) |
| Create or complete a prep batch | [Prep](/stock/prep) |

Rediscover the connected catalogue before deciding what it supports. Report,
alert, proposal or prep-list tools do not perform these actions. In particular,
`place_stock_adjust_openingBalance` is initial stock setup; do not substitute it
for a count, delivery, waste entry or corrective adjustment. A write scope does
not make an absent workflow callable.

Hand over the authorised business/location, relevant item or document references,
observed result, physical checks still needed, and intended outcome. Keep supplier
contacts and operational records in authorised channels. Verify the operator's
saved result before reporting the stock task complete.

## Help an operator with a printer or close of day

Identify the symptom, device, and working location. Read the relevant
[operator troubleshooting guide](/troubleshooting) and explain the steps. The
operator must perform physical checks and supported app actions. Do not claim to
inspect a printer, verify cash, or close a day without an available authorised
tool and a result establishing that action.

## Stop when the request exceeds the connection

Stop on an unresolved identity, missing permission, unsupported tool, uncertain
financial outcome, or conflicting state. Explain what was verified and what the
authorised operator needs to check. Do not seek another tenant's context or
infer a private endpoint as a workaround.
