OFW MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OFW MCPshow me my recent messages from my co-parent"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Toast MCP
A Model Context Protocol server that connects Claude to the diner side of Toast. It finds restaurants that take orders through Toast and reads their menus, and, when you are signed in to toast.app, reads your own order history, loyalty programs and Toast Cash.
AI-developed project. Claude Code built this codebase and maintains it, and no human has audited the implementation. Review the code and tool permissions before you use it.
What you can do
"Which restaurants near me can I order takeout from on Toast right now?"
"What's on the menu at https://order.toasttab.com/online/…? Anything vegetarian under $12?"
"Is the oat-milk latte at that café out of stock today?"
"Compare the online menu with the full in-store menu."
"What did I order from that Thai place last week, and what did it cost?"
"How close am I to a reward at my coffee shop? What's my Toast Cash balance?"
Related MCP server: OurFamilyWizard MCP
How it works
Toast's diner-facing sites (order.toasttab.com) and its ordering GraphQL gateway (ws-api.toasttab.com/do-federated-gateway) sit behind Cloudflare. Cloudflare refuses server-side clients: it serves a challenge page, or the gateway answers {"errors":[{"message":"Forbidden"}]}. This server therefore makes no direct requests. Every call goes through your own browser via the ContextMint Bridge extension, using @fetchproxy/server on 127.0.0.1:37149. You pass any "verify you are human" check yourself, in your own tab. Nothing is bypassed.
Tools
Tool | What it does |
| Restaurants near a latitude/longitude that are open for takeout (or delivery) at a given time, nearest first. Each result includes its GUID, shortUrl, ordering link, address and distance. |
| Turns a Toast link, shortUrl or GUID into the restaurant GUID that |
| Reads the online-ordering menu, the full register (POS) menu, or both merged. Supports search, out-of-stock filtering and a limit. |
| Your order history, newest first: restaurant, time, dining option, status, items and total. Pages with |
| One past order as a receipt: items with modifiers, subtotal, tax, tip, service charges, payments and delivery details. |
| Your restaurant loyalty programs: balances and progress toward the next reward. |
| Your Toast Cash: balance, next expiry, expiring units and received units (gifts name the sender). |
| Runs a read-only GraphQL query against the gateway, for exploring data the other tools don't cover. Mutations are refused. |
| Round-trips the bridge and gateway, and names the hop that failed. |
All of these tools are read-only. None of them places an order, touches a cart, redeems a reward or changes your account. The four account tools (toast_list_orders, toast_get_order, toast_get_loyalty, toast_get_wallet) work only while you are signed in to toast.app in the bridged browser.
What is verified and what isn't
The operations behind the dedicated tools (nearbyRestaurants, menusV3 and restaurantV2ByShortUrl) were live-verified on 2026-10-24 through a bridged browser. Menu prices are in dollars, and both TAKE_OUT and DELIVERY work. The gateway only answers requests that carry a guest session, which the server mints itself from an order.toasttab.com page through your browser, so you don't need to do anything beyond keeping that tab open.
The account tools run Toast's own guest-app queries (copied verbatim from toast.app's bundle), and every shape they parse was captured live and kept, scrubbed, as a test fixture. They authenticate with your toast.app access token, which the bridge reads from that one cookie for each call. The server never refreshes the token (refreshing rotates it and would sign your browser out), so if it has lapsed you'll be asked to reload toast.app. Saved payment methods and the account profile are deliberately not exposed.
Install
Install the ContextMint Bridge extension from its releases page. Chrome takes the unpacked zip.
Open any restaurant's ordering page on
https://order.toasttab.comand leave the tab open. It relays the API calls. For the account tools, also keep a signed-inhttps://toast.apptab open.Add the server to your MCP client:
{
"mcpServers": {
"toast": { "command": "npx", "args": ["-y", "toasttab-mcp"] }
}
}Node 22 or later is required. No credentials are configured here. On first run, the extension asks you to approve the pairing. It lists toasttab.com and toast.app, and a read of the toast-customer-access cookie for the account tools.
Configuration (all optional)
Variable | Default | Purpose |
|
| Bridge WebSocket port |
|
| Bridge bind interface (hosted setups only) |
|
| Bridge identity keypair location |
Troubleshooting
Run toast_healthcheck first.
"Forbidden" or "edge … refused": your browser hasn't passed Toast's Cloudflare check yet. Open
order.toasttab.com, let it load (complete any check), then retry."No order.toasttab.com tab is open": open any
order.toasttab.com/online/<restaurant>page in the browser that runs the extension."not signed in" / "sign-in has expired" (account tools): open or reload
toast.appand sign in, then retry.Directory comes back empty at night:
nearbyRestaurantslists only restaurants open atwhen. Pass a daytimewhen.
Acknowledgement of terms
This server reaches Toast as you, through your browser, so Toast's guest terms of service govern how you use it. The maintainer has not reviewed those terms against this use. Read them yourself before you rely on this server. The project is not affiliated with or endorsed by Toast, Inc. It is for personal use: don't use it to bulk-harvest restaurant data.
Development
npm install
npm test # typecheck + vitest (all mocked, no network)
npm run build # typecheck + esbuild bundle → dist/bundle.jsLicense
MIT
Available Tools
9 toolstoast_find_restaurantsARead-onlyIdempotent
Find restaurants that take orders through Toast near a point (latitude/longitude — this server has no geocoder, so convert an address or city first). Returns each restaurant's GUID (what toast_get_menu needs), shortUrl, ordering link, address and distance, nearest first. Toast's directory lists restaurants OPEN for the dining option at when (default now): an empty or short result late at night means closed, not absent — retry with a daytime when. Optional name filters the results. There is no paging: total is every match and limit (default 25, max 300) is how many come back.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Only restaurants whose name contains this (case/punctuation-insensitive). | |
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact (default) returns the shaped result; "full" returns the Toast gateway's raw `data` object untouched. | |
| when | No | ISO-8601 date-time the order would be fulfilled at. Default: now. | |
| limit | No | Max restaurants to return (default 25). | |
| latitude | Yes | Latitude of the search centre, decimal degrees. | |
| longitude | Yes | Longitude of the search centre, decimal degrees. | |
| radius_miles | No | Search radius in miles (0.1–25, default 2). Toast caps one answer at 300 restaurants. | |
| dining_option | No | TAKE_OUT (default) or DELIVERY. DELIVERY lists only restaurants that deliver to the point. | TAKE_OUT |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, open-world, and idempotent, but the description adds important behavior: the directory lists restaurants OPEN for the dining option at `when`, empty results may reflect closure, and there is no paging. These details materially affect how an agent interprets and retries calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then layers return format, prerequisites, caveats, and result limits in a logical order. Despite being dense, every sentence carries operational value and avoids repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an eight-parameter, no-output-schema tool, the description is complete enough to call correctly: it explains required geocoding, return fields, nearest-first ordering, open-now filtering, empty-result interpretation, and paging behavior. No critical agent-facing behavior is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameter descriptions already carry most semantics. The description still adds useful meaning for `when` (default now and its effect on open restaurants), `limit`/`total` (no paging and `total` is every match), and the optional `name` filter, though it does not elaborate on `view`, `radius_miles`, or `dining_option` beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: find restaurants that take orders through Toast near a latitude/longitude point. It also distinguishes the result's GUID as the input needed by toast_get_menu, making the tool's role clear against siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent to convert an address or city first because the server has no geocoder, and it explains that empty or short late-night results mean restaurants are closed rather than absent, recommending a daytime `when` retry. It also notes the optional `name` filter and the relationship between `total` and `limit` without paging.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toast_get_loyaltyARead-onlyIdempotent
Your Toast restaurant loyalty programs: for each, the restaurant, program name, balances (e.g. POINTS), and reward progress (target, left to target, whether a reward is available, Toast's own reward messages). Needs a toast.app sign-in in the browser running ContextMint Bridge.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact (default) returns the shaped result; "full" returns the Toast gateway's raw `data` object untouched. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, so the safety profile is covered. The description adds a genuinely useful behavioral fact: it requires a toast.app browser sign-in via ContextMint Bridge, which no structured field conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the resource and returned fields, then the auth requirement. The field enumeration is slightly long but each element earns its place by telling the agent what to expect.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, single-optional-param tool with no output schema, the description adequately covers both what it returns and the auth prerequisite. Nothing critical to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'view' enum is fully documented in the schema. The description adds nothing about the compact/full axis, so the baseline of 3 is appropriate when the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (Toast loyalty programs) and enumerates the returned fields (restaurant, program name, balances, reward progress), so the agent knows exactly what it fetches. It doesn't explicitly contrast with siblings like toast_get_wallet, but the loyalty focus makes it distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies it's the tool for loyalty programs but never states when to use it over toast_get_wallet or other siblings, nor any prerequisites beyond sign-in. No exclusions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toast_get_orderARead-onlyIdempotent
One of your past Toast orders as a receipt: items with modifiers and price, subtotal, discounts, tax, tip, service charges, gift card applied, total (all dollars), payments (type, card brand, last 4), and delivery address/provider when it was delivered. Takes the restaurant and order GUIDs from toast_list_orders. Needs a toast.app sign-in in the browser running ContextMint Bridge.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact (default) returns the shaped result; "full" returns the Toast gateway's raw `data` object untouched. | |
| order_guid | Yes | ||
| restaurant_guid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, so the safety profile is covered; the description adds the real operational constraint that a toast.app browser sign-in via ContextMint Bridge is required. It also details what comes back (payments, discounts, gift card, delivery) which the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the return contents, then input provenance, then the auth prerequisite — a sensible order. The field enumeration is long but earns its place since there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, describing the returned receipt fields is necessary and done thoroughly, and the auth prerequisite is stated. The only gap is guidance on choosing the `view` mode, which is a minor omission given the schema documents it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, and the description compensates for the two required GUIDs by stating their origin. However, it says nothing about the `view` parameter (compact vs full), leaving the schema's own enum text to carry that meaning alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('one of your past Toast orders as a receipt') and enumerates the concrete contents (items, modifiers, tax, tip, payments, delivery address). It is clearly distinguished from the sibling toast_list_orders, which supplies the IDs this tool consumes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says where the required inputs come from ('Takes the restaurant and order GUIDs from toast_list_orders'), which routes the agent correctly. It does not state any when-not condition, but for a single-record fetch there is little alternative ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toast_get_walletARead-onlyIdempotent
Your Toast Cash: the available balance (stored value such as gifted Toast Cash included), the next expiry, the units that expire, and the units you have received (gifts name the sender). All amounts in dollars. Needs a toast.app sign-in in the browser running ContextMint Bridge.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact (default) returns the shaped result; "full" returns the Toast gateway's raw `data` object untouched. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/open-world, and the description adds genuinely new context: amounts are denominated in dollars and the call requires a toast.app sign-in in a browser running ContextMint Bridge. It stops short of describing failure behavior when that sign-in is missing or how expiries are ordered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded: the payload comes first, then the units note, then the auth prerequisite. Three sentences with no filler, though the list phrasing 'the next expiry, the units that expire, and the units you have received' is slightly repetitive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the return-value burden and does so by naming the four returned data points. The auth prerequisite is the key operational detail an agent needs before calling. Only error/precondition behavior is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single `view` parameter carries a thorough enum description in the schema, so the baseline applies. The description adds no meaning about `view` beyond what the schema already says about compact vs full.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific resource (Toast Cash wallet) and enumerates exactly what is returned: available balance including gifted stored value, next expiry, expiring units, and received units. It is clearly distinct from toast_get_loyalty and the order tools, though it never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the domain ('Your Toast Cash' balance) rather than stated: no 'use this when...' clause, no mention of when to prefer it over toast_get_loyalty, and no exclusions. An agent can infer the call site but the description does not route it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toast_graphqlARead-onlyIdempotent
Run a read-only GraphQL QUERY against Toast's online-ordering gateway (ws-api.toasttab.com/do-federated-gateway) through your signed-in browser, and return its raw data and errors. For exploring fields the dedicated tools don't cover yet. Mutations and subscriptions are refused. Known-good operations: nearbyRestaurants(input:{diningOption,fulfillmentDateTime,latitude,longitude,radius}) and menusV3(input:{restaurantGuid,visibility}). Validation errors name the fields the schema lacks — use them to correct the query rather than guessing repeatedly.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | GraphQL document containing only queries/fragments. | |
| variables | No | Variables object, if the document declares any. | |
| operation_name | No | Which operation to run, if the document has several. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, but the description adds real behavior the annotations cannot: enforcement of query-only documents, return of raw data *and* errors, dependency on a signed-in browser session, and the error-recovery contract ('validation errors name the fields the schema lacks'). Missing only volume concerns (rate limits, response size, whether the 8000-char cap applies to variables too).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what it does and where, then scope restriction, then examples, then error-handling advice — a natural call order. Every sentence carries actionable content, with no restatement of the tool name or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description steps in to say it returns raw data and errors, and it covers the biggest failure mode (schema validation errors) with a concrete recovery strategy. For an open-ended escape-hatch tool, nothing an agent needs before calling it is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already defines query/variables/operation_name; the description adds meaning beyond it by naming valid operation shapes (nearbyRestaurants, menusV3 with their input fields) and by framing the query param as accepting fragments only. It adds query-construction guidance the schema cannot express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('run a read-only GraphQL query against Toast's online-ordering gateway'), names the concrete endpoint, and explicitly positions itself against the sibling set ('for exploring fields the dedicated tools don't cover yet'). An agent can distinguish this from toast_find_restaurants/toast_get_menu without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('exploring fields the dedicated tools don't cover yet') plus an explicit exclusion ('mutations and subscriptions are refused'), which steers agents toward the typed sibling tools for known use cases. Known-good operation names with their input shapes give a concrete starting point rather than open-ended guessing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toast_healthcheckVerify the ContextMint Bridge connection end-to-endARead-onlyIdempotent
Round-trips a small public ws-api.toasttab.com URL (/do-federated-gateway/v1/graphql?query=%7B__typename%7D) through ContextMint Bridge (your signed-in browser tab) and returns diagnostics: the bridge's role (host/peer/null), port, version, the extension link (linked / pair pending / not attached / never answered), the elapsed round-trip time, and a plain-English hint distinguishing 'bridge never came up' from 'extension not connected' from 'this browser can't serve a capability' from 'real ws-api.toasttab.com-side problem'. Read-only, no auth required. Call this when a real tool fails and you want to know which hop broke.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, but the description goes further by stating 'Read-only, no auth required' and detailing the diagnostic return values. It also explains that the plain-English hint distinguishes bridge-not-up, extension-not-connected, browser capability issues, and server-side problems, which is rich behavioral context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Despite being detailed, the description is front-loaded with the core action and diagnostic output, followed by a single usage sentence. The URL and enumerated diagnostic fields all earn their place because they define exactly what the tool checks and returns.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of explaining return values and does so comprehensively: bridge role, port, version, extension link state, elapsed time, and interpretive hints. It also covers auth requirements and the failure-routing use case, leaving no critical gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so parameter semantics are not applicable and the baseline is 4. The description correctly does not invent parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (round-trips a public GraphQL URL through ContextMint Bridge) and a specific outcome (connection diagnostics covering bridge role, port, version, extension link, round-trip time, and hints). It is clearly a diagnostic tool, distinguishing it from the data-oriented sibling tools like toast_list_orders and toast_get_menu.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger condition: 'Call this when a real tool fails and you want to know which hop broke.' That directly routes the agent to this tool as a fallback diagnostic after another Toast tool fails, with no ambiguity about the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toast_list_ordersARead-onlyIdempotent
Your Toast order history, newest first: each order's GUID, restaurant (GUID, name, ordering link), when it was placed (ISO-8601 UTC, plus the restaurant's time zone), dining option and status as Toast reports them, item count with the first few items, and total in dollars. Pass next_page_token from the previous answer for older orders. Use toast_get_order for a full receipt. Needs a toast.app sign-in in the browser running ContextMint Bridge.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact (default) returns the shaped result; "full" returns the Toast gateway's raw `data` object untouched. | |
| page_size | No | Orders per page (1–50, default 20). | |
| next_page_token | No | From a previous answer, to fetch the next (older) page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, so the description's job is to add operational context — which it does: sort order (newest first), the pagination contract, and the browser-based auth requirement through ContextMint Bridge. It stops short of noting rate limits or behavior when the sign-in is absent/expired.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and ordering, then the return shape, then the two operational instructions. Every sentence carries information; the field enumeration is dense but justified since no output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the return-value burden and lists the fields returned plus their formats (ISO-8601 UTC, dollars, Toast-reported status). It also covers auth prerequisite, pagination, and the sibling alternative — nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both page_size and view are already fully documented, and the description adds only the practical semantics of next_page_token (fetch older orders). That is a small but real gain over the schema, which merely says 'from a previous answer' — leaving the baseline plus a point of value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Your Toast order history, newest first') and immediately enumerates the returned fields (GUID, restaurant, timestamps, status, items, total). It explicitly contrasts with toast_get_order, so an agent can distinguish sibling scope without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative tool and the condition selecting it: 'Use toast_get_order for a full receipt.' It also states the paging procedure ('Pass next_page_token from the previous answer for older orders') and the prerequisite sign-in. Only true exclusions (e.g., filtering by restaurant or date) are unstated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toast_resolve_restaurantARead-onlyIdempotent
Turn a Toast link, shortUrl, or GUID into the restaurant GUID that toast_get_menu needs. Links that carry a GUID (toast.app r- links, ?guid= parameters, bare GUIDs) resolve without a network call; an order.toasttab.com/online/ link or bare shortUrl is looked up in Toast by its slug. Returns guid: null with a next step when Toast does not know the slug.
| Name | Required | Description | Default |
|---|---|---|---|
| reference | Yes | A Toast ordering link, toast.app link, restaurant GUID, or shortUrl slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/openWorld/idempotent, and the description adds genuinely non-obvious behavior: GUID-bearing links resolve locally with no network call, shortUrl slugs trigger a Toast lookup, and unknown slugs return guid: null plus a next step. The one omission is any hint about lookup latency/failure modes beyond the null case.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, each carrying distinct information: purpose, resolution mechanics, and the failure return. Purpose is front-loaded and there is no redundant restatement of the name or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by describing both the success return (a GUID for toast_get_menu) and the failure return (guid: null with a next step). Combined with the single-parameter schema, an agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is already documented, so the baseline is met; the description goes further by decomposing 'reference' into concrete accepted shapes (r-<guid> links, ?guid= params, bare GUIDs, order.toasttab.com shortUrls) and their differing resolution behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (resolve) and precise resource (restaurant GUID), enumerates the input forms it accepts, and explicitly names the downstream consumer toast_get_menu. It is trivially distinguishable from every sibling, which are menu/order/loyalty operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly frames this as the prerequisite step to toast_get_menu and explains the network vs no-network resolution paths. It does not, however, tell the agent what to do when it has no link/GUID at all (e.g., use toast_find_restaurants), leaving the main alternative unstated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v1.0.0- First observed
toast_find_restaurants - First observed
toast_get_loyalty - First observed
toast_get_menu - First observed
toast_get_order - First observed
toast_get_wallet - First observed
toast_graphql - First observed
toast_healthcheck - First observed
toast_list_orders - First observed
toast_resolve_restaurant
TDQS
Scored across 9 tools
The dedicated tools target clearly separate resources: resolving a link, finding nearby restaurants, fetching a menu, loyalty, orders, wallet. The only overlap is toast_graphql, which by design can reach everything the other tools cover, but its description frames it as an exploration escape hatch rather than a peer.
Every tool carries the toast_ prefix and follows the verb_noun pattern (resolve_restaurant, find_restaurants, get_menu, list_orders, get_order, get_wallet, get_loyalty), with only the meta-tools toast_graphql and toast_healthcheck omitting a verb, which is natural for them.
Nine tools is well within the ideal range for this domain, and each one earns its place: discovery, resolution, menu, order history/receipt, loyalty, wallet, plus a GraphQL escape hatch and a diagnostic tool.
The read surface is well covered end-to-end: find a restaurant, resolve its GUID, read the menu, list and fetch past orders, check loyalty and Toast Cash. Write operations are intentionally absent (mutations refused), and toast_graphql covers any remaining gaps, so there are no real dead ends.
Maintenance
Related MCP Connectors
- platform7nOAuthtech.p7n
Connect Claude to your Platform7n workspaces: chat, links, work and decks. One-click OAuth.
Connect Claude to Fathom meeting recordings, transcripts, and summaries
Family calendars, tasks, reminders, and pickup coordination for your AI assistant.
- UxenOAuthcom.rrrfirstchat
Your Telegram, WhatsApp, Instagram, mail and calendar in Claude or ChatGPT. Never sends messages.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceConnects Claude to Microsoft Outlook through the Microsoft Graph API, enabling email management (list, search, read, send) and calendar operations (list, create, accept, decline, delete events) via OAuth 2.0 authentication.1MIT
- AlicenseAqualityAmaintenanceEnables natural-language access to OurFamilyWizard for co-parenting messages, calendar, expenses, and journal.13135 npmMIT
- AlicenseAqualityAmaintenanceConnects Claude to OurFamilyWizard for natural-language access to co-parenting messages, calendar, expenses, and journal.10200 npmMIT
- AlicenseAqualityAmaintenanceA Model Context Protocol server that connects Claude to OurFamilyWizard, giving you natural-language access to your co-parenting messages, calendar, expenses, and journal.11544 npm1MIT