CraveUp MCP Server
OfficialClick on "Install 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., "@CraveUp MCP Serveronboard Demo Bistro brand and import menu"
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.
Crave Up MCP Server
A Model Context Protocol (MCP) server that lets AI agents onboard restaurant brands and manage Crave menus, storefronts, and mobile releases — entirely from natural language in chat
Quick Start | Available Tools | Authentication | Documentation
Overview
This MCP server provides Crave platform integration for Claude Code, Cursor, and other MCP-compatible clients. It covers the full merchant lifecycle: creating an organization, wiring a repo, importing menus, configuring locations, going live with subscriptions and payments, managing discounts, and dispatching guarded Expo/EAS mobile releases.
Key Features
Lifecycle Tooling — browser auth, onboarding, go-live, location settings, menus, discounts, readiness checks, mobile releases, and sandbox data
Natural-Language Onboarding — "hook up this repo for Demo Bistro" → login → create org → wire
.env→ import menu → run iOSIdempotent Writes — menu imports, discount creation, and sandbox seeding are safe to re-run
Guarded Mobile Releases — internal TestFlight only; paid EAS work requires a scoped Expo token plus explicit confirmation, and public App Store release remains human-controlled
TypeScript — full type safety with Zod validation
Tested — Vitest coverage for tools, clients, config, auth, and readiness logic
Note: this is a local MCP server. It runs as a stdio subprocess on the developer's machine. An agent can start secure Crave Up browser sign-in/sign-up through
start_crave_auth; the resulting session is shared with the CLI.
After rebuilding
packages/mcp/dist, restart the MCP server in your client (or reload the window) so new tools appear.
Related MCP server: 402 MCP Restaurant Finder
Quick Start
Installation
# From npm (published package)
CRAVEUP_ENVIRONMENT=sandbox npx -y @craveup/mcp
# Inspect the executable without configuring credentials
npx -y @craveup/mcp --help
# Or from the monorepo
pnpm --filter @craveup/mcp build # compiles to dist/Configuration
Claude Code. Register separate sandbox and production processes at user scope so the environment boundary remains visible in every tool call. This is a local stdio server, so there is no hosted MCP URL:
claude mcp add -s user craveup-sandbox \
-e CRAVEUP_ENVIRONMENT=sandbox \
-- npx -y @craveup/mcp
claude mcp add -s user craveup-production \
-e CRAVEUP_ENVIRONMENT=production \
-- npx -y @craveup/mcpRun /mcp in Claude Code to inspect the registration. Start a new Claude Code
session if the current session does not refresh its tool inventory.
Do not switch an already-running server between environments. Use the
craveup-sandbox tools while building and testing, then explicitly select the
craveup-production tools when preparing to launch. Each process has its own
dashboard host, API-key prefix, Clerk configuration, and stored browser session.
Option A — Full NL development bootstrap (recommended for new brands). Register the MCP server without an API key. No repo checkout is needed:
{
"mcpServers": {
"craveup": {
"command": "npx",
"args": ["-y", "@craveup/mcp"],
"env": {
"CRAVEUP_ENVIRONMENT": "sandbox"
}
}
}
}The agent calls start_crave_auth, opens the returned Crave Up URL, and then calls
complete_crave_auth. The user can sign in or create a free account in that browser flow. The
server stores the resulting shared CLI/MCP session in the macOS keychain (or
~/.config/craveup/credentials.json). Alternatively set CRAVEUP_ACCESS_TOKEN in the MCP env.
To exercise tools that are on main but not yet published, swap the command for the local build:
"command": "node", "args": ["/path/to/craveup-turborepo/packages/mcp/dist/cli.js"].
Option B — Menu-only (existing location + API key). Create a merchant API key in Crave Business Manager → Settings → Developer → API Keys:
{
"mcpServers": {
"craveup": {
"command": "npx",
"args": ["-y", "@craveup/mcp"],
"env": {
"CRAVEUP_ENVIRONMENT": "sandbox",
"CRAVEUP_API_KEY": "crv_test_…",
"CRAVEUP_LOCATION_ID": "<default location id>"
}
}
}
}CRAVEUP_ENVIRONMENT is required. The environment selects all dashboard, API, and Clerk hosts
together. CRAVEUP_LOCATION_ID is optional; every menu tool also accepts an explicit locationId.
Mobile releases. To dispatch mobile release workflows, also set a scoped Expo robot-user token in the MCP env:
{
"env": {
"EXPO_TOKEN": "<scoped Expo robot-user token>"
}
}Example chat flow
"This demo-bistro repo — hook it up to Crave for Demo Bistro. Login if you need to, create the org, import the menu, and run it on the iOS simulator."
Agent sequence:
whoami— confirm the shared sessionIf needed:
start_crave_auth→ open its URL →complete_crave_authCreate the organization in Business Manager while MCP organization creation is idempotency-blocked; create any scoped private key there, never through chat
connect_project({ projectPath: "…/demo-bistro", locationId })import_menu(…)from the restaurant sourceRun the storefront or iOS app locally
Exercise menu, fulfillment, and cart flows in sandbox; ordinary Stripe payment admission remains cutover locked
Only after direct-charge activation and an explicit production decision: switch environments and complete subscription and payment onboarding
Available Tools
Entities
CRUD-style operations are available for the following entity types:
Entity | Create | Get | Update | Delete | List |
Organization | ✅ | - | - | - | - |
Location | ✅ | - | ✅ | ✅ | ✅ |
Store Settings | - | ✅ | ✅ | - | - |
Menu | ✅ | - | ✅ | - | ✅ |
Product | ✅¹ | ✅ | ✅ | ✅ | - |
Discount | ✅ | - | - | - | ✅ |
Order | - | - | - | - | ✅ |
Customer | - | - | - | - | ✅ |
Subscription | ✅² | - | - | - | ✅ |
Mobile Release | ✅³ | ✅ | - | - | - |
¹ Products are created in bulk via import_menu. ² start_subscription_checkout opens a Stripe Checkout session; plans themselves are read-only. ³ start_mobile_release dispatches an EAS workflow run; deletion/cancellation stays in EAS.
Checks & Guides
Check | Tool Name | Description |
Go-live Status |
| The dashboard's 6 go-live steps with completion state + next actions |
Storefront Readiness |
| Reads |
Mobile Release Readiness |
| Read-only Expo/EAS preflight for internal releases |
Onboarding Flow |
| NL checklist: login → create org → connect repo → import menu → run |
Session |
| Verify the |
MCP Compatibility |
| Runtime versions, policy digest, and fail-closed compatibility blockers |
Integration Guide |
| Crave.js implementation guidance: storefront, menu display, checkout |
Tool Reference
Tool | Description |
| Return a hosted Crave Up sign-in/sign-up URL for the agent to open |
| Finish the loopback callback and persist the shared CLI/MCP session |
| Abandon a pending sign-in and release its loopback listener |
Tool | Description |
| NL checklist: login → create org → connect repo → import menu → run |
| Verify the |
| Create merchant + location without minting or returning a plaintext API key |
| Write the public API origin and location ID into an Expo app's |
Tool | Description |
| Return the MCP version, tool-policy digest, and unavailable compatibility evidence without credentials |
Tool | Description |
| The dashboard's 6 go-live steps with completion state + next actions |
| Create a location ( |
| Soft-archive a location (frees slug; hides from dashboard) |
| Dashboard locations-stats for the merchant |
| Active orders for a location |
| Customers page for a location |
| Set the street address; the server geocodes (no lat/lng needed) |
| Enable pickup / table service / delivery / room service |
| Production-only plans with price, interval, and trial info |
| Production-only Stripe Checkout URL for the user to pay in the browser |
Tool | Description |
| Read store hours, scheduled-order flag, tax, takeout |
| Set hours ( |
| Toggle order-ahead when closed |
| Enable/disable takeout pickup |
| One-shot fix for "Restaurant is closed. Scheduled orders are not allowed." |
Tool | Description |
| Idempotent full menu import; forces |
| Explicitly activate/deactivate a menu (use when |
| Read back menus exactly as the storefront API serves them |
| Fetch one product with its modifier group ids |
| Partial edits: name, description, price, availability |
| Sold-out toggles |
| Remove a product (category references cleaned up) |
| Implementation guidance: storefront setup, menu display, checkout, import format |
Tool | Description |
| List location promo codes and their current configuration |
| Idempotently create an order-level fixed or percentage promo code (percentage capped at 100) |
Tool | Description |
| Side-effect-free |
The readiness tool reads the published menu and ordering availability, then reads
private integration status for payment configuration. It does not create a cart
or a PaymentIntent. During the current direct-charge cutover, a configured Stripe
integration still reports ready: false: ordinary Stripe checkout in sandbox and
production fails closed with STRIPE_DIRECT_CHARGE_CUTOVER_INCOMPLETE. Surface
checkout as temporarily unavailable and do not retry or bypass that response.
Run craveup apps configure in the Expo/React Native project and commit the generated workflows before using these tools. EAS builds consume plan minutes.
Tool | Description |
| Read-only local preflight for EAS project identity, workflow, credentials, and internal target |
| Dispatch the fixed internal TestFlight workflow after exact confirmation |
| Read the EAS workflow run, build jobs, and submission jobs |
start_mobile_release cannot publish publicly. iOS always goes to internal TestFlight first; public App Store review remains an explicit App Store Connect action. Use craveup apps publish play-internal for Android; the CLI blocks submission unless the local EAS submit profile targets Google Play's internal track.
Tool | Description |
| Idempotently create customers, orders, ratings, and funnel events for the dev test organization. Requires |
Authentication
This server authenticates to Crave with a merchant API key (menu, discount, and readiness tools), a shared CLI/MCP browser session (organization, onboarding, go-live, and location-settings tools), and optionally an Expo token (mobile release tools). The agent starts browser authentication with start_crave_auth; the user can sign in or create an account on the Crave Up-hosted page.
Important: Sandbox vs production
Environment | Dashboard | API | Clerk issuer | API key |
|
|
|
|
|
|
|
|
|
|
Set CRAVEUP_ENVIRONMENT explicitly in the MCP server configuration. The server derives the whole
profile from that value and rejects a test/live key or endpoint mismatch before sending a request.
Sandbox and production sessions are stored separately.
For daily development, register two named MCP servers instead of mutating one server's environment in-process:
craveup-sandbox: build the storefront, configure menus and locations, and exercise catalog and cart flows without crossing into live data. Stripe payment admission remains hard locked during the direct-charge cutover.craveup-production: use the live dashboard and live API-key namespace. Dashboard and setup tools remain usable before onboarding is complete. Checkout remains gated on subscription, Stripe Connect KYC/banking, and cutover activation.
Browser authentication is explicit: call start_crave_auth, open the returned Clerk authorization
URL, then call complete_crave_auth. Normal MCP calls reuse that persisted session and do not open a
browser again.
Test Setup (recommended for management tools)
Sign in to Crave Business Manager → Settings → Developer → API Keys
Create a key for the location you want to work with — copy the
crv_test_…valueSet
CRAVEUP_ENVIRONMENT=sandbox, the server-onlyCRAVEUP_API_KEY, and optionallyCRAVEUP_LOCATION_IDin the MCP server env. Public guides, project wiring, and published menu reads do not send this key.For session-authenticated tools, use
start_crave_authandcomplete_crave_auth, or runcraveup login; both paths use the same secure local session
Live Setup
Start a separate MCP process with
CRAVEUP_ENVIRONMENT=production; do not reuse sandbox credentialsOpen the production dashboard and continue configuring the organization even if the commercial checklist is incomplete
When the business is ready to accept real payments, complete the go-live checklist —
get_onboarding_statusshows the six steps and what's missingVerify payments with
check_storefront_readiness— production requires merchant StripechargesEnabledMint a
crv_live_…key in Business Manager
Once you have credentials
CRAVEUP_ENVIRONMENT=sandbox # required: sandbox or production
CRAVEUP_API_KEY=crv_test_… # prefix must match the environment
CRAVEUP_LOCATION_ID=<location id> # optional default; every tool also accepts locationId
CRAVEUP_ACCESS_TOKEN=<session token> # optional alternative to the keychain session
EXPO_TOKEN=<scoped robot-user token> # only for mobile release toolsEndpoint overrides are normally unnecessary. Sandbox loopback URLs are allowed for local
development. Other custom deployments require CRAVEUP_ALLOW_CUSTOM_ENDPOINTS=true, and the
environment remains visible in whoami and mutating responses.
The private API transport rejects redirects rather than following them, so API-key and session authorization headers are never replayed to a redirect target.
Credential safety
Do not paste Apple passwords, 2FA codes, App Store Connect keys, or Google service-account JSON into chat. Bootstrap interactive credentials in a visible terminal; EAS stores the reusable submission credentials. EXPO_TOKEN must be a scoped Expo robot-user token, never a personal account token.
Common pitfalls
New tools not appearing. After rebuilding
packages/mcp/dist, restart the MCP server in your client (or reload the window) — clients cache the tool list per process.Keys are location-scoped. The API rejects requests for locations the key cannot access; use the key minted for the location you're targeting, or pass an explicit
locationId.Session tools failing while key tools work. The two auth modes are independent — a valid
CRAVEUP_API_KEYdoes not log you in. Callstart_crave_auth, open the returned URL, then callcomplete_crave_auth."Restaurant is closed. Scheduled orders are not allowed." Not an auth problem: run
open_location_for_orders({ locationId })for the one-shot fix, then retry.Sandbox seeding refuses to run.
seed_sandbox_analyticsis guarded by design: it requiresCRAVEUP_ENVIRONMENT=sandbox; there is no production override.
Development
Building
pnpm --filter @craveup/mcp build # compile to dist/Testing
pnpm --filter @craveup/mcp test # Vitest unit and MCP round-trip suitesProject Structure
src/
├── clients/ # Crave + Expo/EAS API clients
├── tools/ # MCP tool definitions (9 categories)
├── handlers/ # Business logic (readiness, onboarding, guides)
├── helpers/ # Zod schemas, session, env config
├── cli.ts # stdio entry point (craveup-mcp bin)
└── index.ts # Server assembly + tool registration
tests/
└── unit/ # Vitest suites
docs/
├── ARCHITECTURE.md # Layers, auth modes & design decisions
└── TESTING.md # Testing patterns & conventionsDocumentation
Document | Description |
Version history and all changes | |
Layers, authentication modes, and design decisions | |
Testing strategy, in-memory MCP transport pattern, conventions | |
Hosted Crave Up MCP server guide + Crave.js integration docs (also served at runtime via | |
MCP specification |
Error Handling
Every tool returns the same versioned MerchantOperationResult in both text and
structuredContent. Review-required writes default to a side-effect-free dry run; apply requires the
exact intent digest, and destructive/paid/release operations also require an explicit confirmation
phrase. The generated mutation inventory is the source of truth for
credentials, scopes, risks, preview requirements, and current idempotency strategy.
Policies marked unverified fail closed even after preview. At present this applies to
create_organization, create_location, start_subscription_checkout, and
start_mobile_release; use Business Manager or the provider workflow until the authoritative
service supplies a durable operation identity and response-loss reconciliation.
Tools return structured MCP error results (isError: true) rather than throwing: missing or invalid auth reports which credential is needed (session vs API key vs EXPO_TOKEN), and the API rejects keys that cannot access the requested location. Paid EAS dispatch requires an exact confirmation phrase, location deletion is a recoverable soft-archive, and sandbox seeding refuses to run unless all dev-environment guards are set. The current digest binds environment, policy, and requested arguments; it does not yet bind authoritative target pre-state. get_mcp_capabilities reports that limitation, and also reports project generation, API-range compatibility, cursor pagination, and durable jobs as unavailable until their reviewed release evidence exists.
Contributing
Note: development happens in the private Crave Up monorepo; the public craveup/craveup-mcp repo is a read-only mirror synced automatically from
packages/mcp. Bug reports and feature requests are welcome as issues on the mirror; direct pushes and PRs there will be overwritten by the next sync.
Tool naming convention
get_*/list_*/check_*— read-onlycreate_*/update_*/set_*/delete_*— writes, idempotent where possiblestart_*— kicks off an external process (checkout, EAS workflow) and returns a handle
Add tests in tests/unit/ for every new tool; pnpm --filter @craveup/mcp test must pass before publishing (prepublishOnly runs build + tests).
License
MIT — see LICENSE.
Available Tools
38 toolscancel_crave_authCancel Crave Up authenticationAIdempotent
Cancel a pending browser authentication flow and close its local callback.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey idempotency, non-destructiveness, and the mutation nature. The description adds useful behavioral detail by specifying that the cancellation also closes the local callback, which goes beyond the structured metadata. There is no contradiction with the annotations.
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 a single, front-loaded sentence with no filler. Every phrase earns its place: the action, the target resource, and the local side effect are all stated efficiently.
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 zero parameters, an output schema, and annotations covering idempotency and destructiveness, the description is sufficient for an agent to invoke the tool correctly. It could mention the relationship to start_crave_auth or complete_crave_auth more explicitly, but the sibling names and the term 'pending' supply enough context.
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?
This tool has zero parameters, so the description bears no burden for parameter documentation. The schema fully covers the parameter surface, and the description accurately focuses on the tool's action instead.
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 uses a specific verb ('Cancel') and names the resource ('pending browser authentication flow') and the side effect ('close its local callback'). This clearly distinguishes it from siblings like start_crave_auth and complete_crave_auth, which handle initiation and completion rather than cancellation.
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 phrase 'pending browser authentication flow' gives clear context for when this tool should be used. It does not explicitly list excluded cases or name siblings as alternatives, but the pending-flow framing is enough to guide an agent toward the correct lifecycle stage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_mobile_release_readinessCheck mobile app release readinessARead-onlyIdempotent
Read-only Expo/EAS preflight for internal TestFlight or Google Play internal testing. Checks app identity, production build profile, generated workflow, internal-only Android track, EAS project link, and EXPO_TOKEN. Run craveup apps configure first.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | ios-testflight | |
| projectPath | No | . |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description's 'read-only' statement is consistent. It adds useful behavioral context beyond the annotations: the specific checks performed and the EXPO_TOKEN prerequisite, though it does not disclose failure modes or what happens when prerequisites are missing.
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 two tight sentences: the first front-loads the read-only preflight purpose and target platforms, and the second lists the checks and the required prerequisite. No filler or redundant restatement of the tool name.
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 readiness tool with a rich output schema and clear annotations, the description covers the essential context: what is checked, which platforms are supported, and what must be configured first. It could be slightly more complete by explicitly saying to run this before start_mobile_release and that success means the release can proceed.
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 0%, so the description carries some parameter burden. It indirectly explains target by naming 'internal TestFlight or Google Play internal testing,' which maps to the enum values, but it never mentions target or projectPath by name. projectPath is only covered by its schema default, leaving part of the parameter semantics implicit.
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: a 'read-only Expo/EAS preflight' that 'checks app identity, production build profile, generated workflow, internal-only Android track, EAS project link, and EXPO_TOKEN.' It clearly distinguishes itself from siblings by emphasizing read-only readiness checks rather than starting or monitoring a release.
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 makes the context clear: use as a preflight before internal TestFlight or Google Play internal testing, and it gives an explicit prerequisite: 'Run craveup apps configure first.' It does not explicitly contrast with siblings like start_mobile_release or get_mobile_release_status, but the intended placement is implied well.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_storefront_readinessCheck if a location can accept storefront ordersARead-onlyIdempotent
Hybrid wizard readiness probe: verifies menu has products, a read-only ordering-readiness GET reports takeout availability without creating a cart, and payment configuration is ready. Connected Square is authoritative and must itself be ready; otherwise Stripe is used. It does not create a PaymentIntent or Square payment. Does not use dashboard isOnboardingCompleted. Public probes use the direct Storefront API; private integration status still requires CRAVEUP_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| locationId | No | Omit to use CRAVEUP_LOCATION_ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and idempotent annotations, the description explicitly guarantees no cart creation, no PaymentIntent, no Square payment, and no reliance on dashboard isOnboardingCompleted. It also clarifies the authoritative payment provider logic and CRAVEUP_API_KEY requirement, providing rich behavioral context.
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 dense but efficient, leading with the core purpose and then adding only essential constraints: what is verified, side-effect guarantees, payment provider logic, and auth requirements. Every sentence adds value and there is no 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 one optional parameter and an output schema present, the description covers everything needed for correct invocation: object, checks, fallback behavior, side-effect absence, auth requirements, and intentionally avoided data sources. Nothing material 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?
The schema already documents locationId at 100% coverage, including the 'omit to use CRAVEUP_LOCATION_ID' behavior. The description mentions CRAVEUP_API_KEY in an auth context but does not add new parameter-level semantics beyond the schema, so the baseline 3 is appropriate.
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 clearly identifies the tool as a readiness probe and enumerates exactly what it checks: menu has products, takeout availability via a read-only GET, and payment configuration readiness. This makes both the verb and resource unambiguous and distinguishes it from onboarding or order-management 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?
The description provides concrete context for when the result is meaningful, including the Square-authoritative-versus-Stripe fallback logic and the public/private API key distinction. However, it does not explicitly name alternative tools or state when not to use this tool, so some sibling-routing is left to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_crave_authComplete Crave Up authenticationAIdempotent
Complete the browser login started by start_crave_auth and save the shared CLI/MCP session securely.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond annotations by noting that the shared CLI/MCP session is saved securely and that this step completes an existing browser login. It does not contradict the idempotentHint or readOnlyHint annotations.
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?
A single, compact sentence conveys the action, prerequisite, and outcome with no redundancy or filler. Every word contributes to understanding when and why to call the tool.
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 zero-parameter, idempotent tool with an output schema, the description sufficiently covers the prerequisite start_crave_auth step, the action of completing login, and the result of saving the session. No additional invocation-relevant details are 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?
The tool has zero parameters, so the input schema fully describes the parameter surface. The description appropriately avoids inventing parameter details, and a no-parameter tool warrants the baseline score of 4.
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 clearly states the specific action: completing a browser login initiated by start_crave_auth and saving the shared session. It differentiates itself from the sibling start_crave_auth and cancel_crave_auth by describing the completion step of the auth flow.
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 establishes the correct context by referencing a login 'started by start_crave_auth', making it clear this tool is the follow-up step. It does not explicitly discuss when not to use it or compare with cancel_crave_auth, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_projectWire a repo to CraveBIdempotent
Write the public API origin and location ID into an Expo/React Native project .env. Browser and mobile storefronts connect directly without an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Preview by default. Apply requires the exact returned planDigest. | dry-run |
| baseUrl | No | API base URL; omit for production api.craveup.com | |
| locationId | Yes | Crave location id from create_organization | |
| planDigest | No | Exact digest returned by a dry-run of the same arguments. | |
| projectPath | Yes | Absolute path to the app repo root | |
| confirmationToken | No | Required exact phrase for destructive, paid, or release operations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says the tool writes to .env, but it omits the central two-phase behavior: the default mode is dry-run and an actual write requires an exact planDigest, with confirmationToken possibly required for certain operations. Because of this omission, an agent may call the tool expecting a write and instead get only a preview.
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 short sentences front-load the core action and follow with the outcome, with no filler. Every phrase earns its place.
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 tool with a dry-run/apply workflow, a required planDigest, and a confirmation-token field, the description is too thin to orient an agent. The rich schema partially compensates, but the description does not convey the workflow or the fact that the default mode does not actually write.
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%, so the schema fully documents all six parameters. The description adds no parameter-specific meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.
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 and target: writing the public API origin and location ID into an Expo/React Native project .env. This makes the tool's purpose clear and distinguishes it from generic setup tools, though it does not explicitly name alternatives or conditions.
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 second sentence implies the tool is used when setting up browser and mobile storefronts so they can connect without an API key. However, it never states prerequisites, when to prefer this over other setup tools, or when not to use it, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_locationCreate a new locationA
Create an additional location under the authenticated merchant (multi-location setup). POSTs { restaurantDisplayName } to /api/v1/locations (Clerk session required), then optionally PATCHes /address (pass lat/lng to skip geocoding). Returns the Crave location id — follow with update_store_hours, import_menu, set_menu_active, set_fulfillment_methods. Requires craveup login. After rebuilding @craveup/mcp, restart the Cursor MCP server.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Preview by default. Apply requires the exact returned planDigest. | dry-run |
| name | Yes | Display name (max 30 chars) | |
| address | No | ||
| planDigest | No | Exact digest returned by a dry-run of the same arguments. | |
| confirmationToken | No | Required exact phrase for destructive, paid, or release operations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Reveals important mutation behavior beyond the annotations: POST to /api/v1/locations, optional PATCH to /address, geocoding behavior when lat/lng are omitted, and the returned Crave location id. Annotations only indicate non-read-only and non-destructive, so these side-effect and auth details add real value. It doesn't mention the dry-run/apply mode, though that is covered in the schema.
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 first three sentences are dense and front-load purpose, auth, behavior, and next steps. The final sentence about rebuilding @craveup/mcp and restarting the Cursor MCP server is a developer meta-note that doesn't materially help tool invocation, but the overall description still earns its length.
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 mutation tool with a rich schema and output schema, the description supplies the missing execution context: endpoint, required authentication, optional address behavior, return value, and suggested follow-up tools. No critical operational detail needed to invoke the tool 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 already covers about 80% of parameters, so the baseline is 3, and the description adds some useful context such as 'pass lat/lng to skip geocoding.' However, the description says the request POSTs { restaurantDisplayName } while the actual required parameter is name, creating potential confusion for an agent mapping arguments to parameters.
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 action and scope: 'Create an additional location under the authenticated merchant (multi-location setup).' This clearly distinguishes it from siblings like list_locations, delete_location, and set_location_address. The verb, resource, and business context are all present.
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 clear context: multi-location setup, requires craveup login and Clerk session, and lists follow-up tools such as update_store_hours and import_menu. It does not explicitly contrast with sibling tools or state when not to use it, so it stops short of full usage-exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_order_discountCreate an order-level discountB
Idempotently create an order-level promo code at one authorized location. If the code already exists, returns it without creating a duplicate. Percentage amounts must be at most 100. Use list_discounts afterward to verify the stored configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| mode | No | Preview by default. Apply requires the exact returned planDigest. | dry-run |
| amount | Yes | ||
| isFixed | Yes | ||
| disabled | No | ||
| maxUsage | No | ||
| startDate | Yes | ||
| startTime | No | 12:00 AM | |
| expireDate | Yes | ||
| expireTime | No | 11:59 PM | |
| locationId | No | Omit to use CRAVEUP_LOCATION_ID | |
| planDigest | No | Exact digest returned by a dry-run of the same arguments. | |
| description | No | ||
| oncePerOrder | No | ||
| oncePerCustomer | No | ||
| minItemsQuantity | No | ||
| confirmationToken | No | Required exact phrase for destructive, paid, or release operations. | |
| minPurchaseAmount | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description claims 'Idempotently create... If the code already exists, returns it without creating a duplicate,' but the idempotentHint annotation is false. This is a direct annotation contradiction, so the score must be 1 regardless of the useful dedup and percentage-cap details.
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 short sentences, front-loaded with the action. Each sentence contributes a distinct fact: idempotent create behavior, amount constraint, and verification workflow. No filler or 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 a complex 18-parameter tool with a dry-run/apply mechanism, the description omits the critical mode workflow and confirmation-token requirement. It mentions verification, but an agent cannot safely perform a real apply operation from the description alone.
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?
With only 22% schema coverage, the description needed to compensate for the 18 parameters, but it only adds the amount cap and 'one authorized location.' It fails to explain the dry-run/apply flow, planDigest, confirmationToken, code format, dates, or other required fields.
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: 'Idempotently create an order-level promo code at one authorized location.' This clearly distinguishes it from siblings that create locations, list discounts, or update products.
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?
Provides clear context: use for creating an order-level promo code at one authorized location, and verify with list_discounts afterward. It doesn't explicitly enumerate when-not-to-use alternatives, but the scope is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_organizationCreate a Crave merchant organizationA
Create a new restaurant org (merchant + default location). Requires craveup login. MCP never mints or returns a plaintext API key; create scoped credentials in Business Manager.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Preview by default. Apply requires the exact returned planDigest. | dry-run |
| name | Yes | Organization / brand name, e.g. "Demo Bistro" | |
| country | No | US | |
| mintApiKey | No | Must remain false. Create scoped credentials in Business Manager. | |
| planDigest | No | Exact digest returned by a dry-run of the same arguments. | |
| confirmationToken | No | Required exact phrase for destructive, paid, or release operations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds non-obvious behavioral context beyond the annotations: it creates both a merchant and default location, requires prior login, and will never return a plaintext API key. These complement annotations such as readOnlyHint=false and openWorldHint=true without contradicting them. Parameter-level behavior is left to the schema, which is reasonable.
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 two sentences with no filler. The first sentence states the action and scope, and the second provides an essential credential caveat. Every clause earns its place, and it does not redundantly paraphrase schema properties.
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?
The tool is moderately complex with six parameters and a dry-run/apply flow, but the schema and output schema cover most parameter-level and return-value details. The description fills the important non-schema gaps: authentication requirement, default-location creation, and credential expectations. It does not narrate the dry-run/apply sequence, but that is already specified in the schema's mode and planDigest descriptions.
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 83%, and the schema already documents mode, planDigest, confirmationToken, country, and mintApiKey. The description adds little parameter-specific meaning, except reinforcing that no API key is minted or returned, which overlaps with mintApiKey's const:false. The baseline of 3 is appropriate because the schema carries the parameter documentation burden.
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: 'Create a new restaurant org (merchant + default location).' This is more specific than the title and distinguishes it from create_location by noting the tool also creates a default location. It is clear, non-tautological, and immediately tells an agent what the tool accomplishes.
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 gives clear preconditions: 'Requires craveup login' and directs users to create scoped credentials in Business Manager rather than expecting an API key from MCP. The purpose statement makes the primary use case obvious. It does not explicitly contrast with sibling tools like create_location, so it stops short of full alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_locationArchive (soft-delete) a locationADestructiveIdempotent
Soft-deletes a location: sets archivedAt, frees the slug, removes it from the merchant location list and Clerk org metadata. Order/menu rows remain for audit. Use to remove unused duplicates. Requires craveup login.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Preview by default. Apply requires the exact returned planDigest. | dry-run |
| locationId | Yes | Crave location id to archive | |
| planDigest | No | Exact digest returned by a dry-run of the same arguments. | |
| confirmationToken | No | Required exact phrase for destructive, paid, or release operations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include destructiveHint=true and readOnlyHint=false, and the description meaningfully elaborates beyond these: it specifies what is modified (archivedAt, slug, location list, Clerk org metadata) and what is preserved (order/menu rows for audit). It also discloses an authentication requirement. No contradiction with annotations exists.
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 three sentences with no filler. Each sentence earns its place: first states the operation and effects, second clarifies retention/audit behavior and use case, third gives an auth prerequisite. Information is front-loaded.
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?
The description is complete for this tool's complexity: it covers what the operation does, what remains intact, when to use it, and the login requirement. The input schema fully documents parameters, and an output schema exists, so return-value details are not required here.
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 every parameter already has a meaningful description, including dry-run/default behavior and the planDigest requirement. The tool description adds no extra parameter-level guidance, so the baseline score of 3 applies.
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 clearly states a specific verb ('Soft-deletes') and resource ('a location'), then enumerates concrete effects (sets archivedAt, frees the slug, removes from merchant location list and Clerk org metadata). It also differentiates this from a hard delete by noting order/menu rows remain for audit, distinguishing it from a sibling like delete_product.
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?
'Use to remove unused duplicates' gives an explicit intended use case, and 'Requires craveup login' adds an operational prerequisite. It does not explicitly name alternative tools or state when not to use it, but the purpose and context are clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_productDelete a productADestructiveIdempotent
Remove a product from the location. Category references are cleaned up.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Preview by default. Apply requires the exact returned planDigest. | dry-run |
| productId | Yes | ||
| locationId | No | ||
| planDigest | No | Exact digest returned by a dry-run of the same arguments. | |
| confirmationToken | No | Required exact phrase for destructive, paid, or release operations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is destructive, and the description adds a useful non-obvious side effect: category references are cleaned up. It does not explicitly mention the confirmationToken or two-phase dry-run/apply behavior, but those are documented in the input schema and there is no contradiction with the annotations.
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 two short sentences with no filler. The action is front-loaded, and the second sentence adds a meaningful side effect without unnecessary elaboration.
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?
The schema and annotations carry much of the operational burden: destructive intent, dry-run mode, planDigest, confirmationToken, and output schema are all covered. The description supplements this with location scope and category cleanup, leaving only the missing tool-selection guidance as the main 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?
Schema descriptions cover mode, planDigest, and confirmationToken (60% coverage), and the description does not repeat those details. It only weakly clarifies location-related context via 'from the location'; productId and locationId remain undocumented, though their names are fairly self-explanatory.
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 ('Remove') and resource ('a product') with a location scope, making it immediately clear what the tool does. It also distinguishes itself from siblings like delete_location and update_product by naming the exact target and action.
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?
There is no guidance about when to use this tool versus alternatives such as update_product, set_product_availability, or delete_location. The dry-run/apply flow appears only in the schema, not as usage guidance in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_integration_guideGet Crave.js implementation guidanceARead-onlyIdempotent
Documented patterns for implementing a Crave storefront: SDK setup, menu display, checkout flow, and the bulk menu import format. Read the relevant guide before writing storefront code.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | Which guide to fetch |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered. The description adds that this is informational documentation, but does not reveal additional behavioral nuance, so it lands at the baseline for annotation-covered tools.
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, both purposeful. The first sentence front-loads the scope and contents; the second gives clear action guidance. No filler or redundancy.
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 simple one-enum-parameter tool with a full output schema and strong annotations, the description covers what the tool is, what it contains, and when to use it. 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% and the enum values are described. The description adds value by mapping each enum to a concrete guide topic ('SDK setup', 'menu display', 'checkout flow', 'bulk menu import format'), helping the agent pick the right topic without additional research.
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 names the specific resource ('Crave storefront implementation guidance') and lists the exact guide topics: SDK setup, menu display, checkout flow, and bulk menu import format. This clearly distinguishes it from sibling tools like get_onboarding_flow or check_storefront_readiness.
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 gives explicit usage context: 'Read the relevant guide before writing storefront code.' It does not name alternatives or exclusions, but the timing and purpose are clear enough for an agent to know when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_location_ordersList active orders at a locationARead-onlyIdempotent
Fetch active (new) orders for a location — same data as the Orders Manager. Requires craveup login.
| Name | Required | Description | Default |
|---|---|---|---|
| locationId | No | Omit to use CRAVEUP_LOCATION_ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, openWorld, and non-destructive behavior. The description adds the login requirement ('Requires craveup login') and the data-source equivalence with the Orders Manager, which are useful behavioral details beyond the annotations.
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 concise sentences with no wasted words. The main operation and scope are front-loaded, and the auth prerequisite earns its place as essential usage information.
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 simple read-only list tool with an output schema, safety annotations, and fully described parameters, the description covers the operation, scope, data source, and auth requirement. Nothing essential is missing for an agent to invoke it correctly.
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?
The single parameter locationId is fully described in the schema, including the default behavior when omitted ('Omit to use CRAVEUP_LOCATION_ID'). With 100% schema coverage, the baseline of 3 applies; the description adds no additional parameter-level detail.
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: 'Fetch active (new) orders for a location,' reinforced by the title 'List active orders at a location.' The phrase 'same data as the Orders Manager' adds clarity and helps distinguish it from the many setup/management sibling tools.
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?
Provides clear context for when to use the tool: retrieving active orders for a location, and notes the login prerequisite. It does not name explicit alternatives or exclusions, but no sibling tool serves the same order-fetching purpose, so the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_location_settingsRead location store settingsARead-onlyIdempotent
Fetch store hours, scheduled-order flag, tax settings, and takeout config for a location. Requires craveup login (Clerk session).
| Name | Required | Description | Default |
|---|---|---|---|
| locationId | No | Omit to use CRAVEUP_LOCATION_ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context by specifying the authentication requirement and exactly which settings are fetched. No contradiction with annotations.
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 a single, tightly packed sentence that front-loads the action and the data being fetched, followed by the auth requirement. There is no filler, redundancy, or restating of the tool name.
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 tool with one optional parameter, the description is complete: it states what is returned, the authentication needed, and the scope. The output schema handles return-value documentation, and annotations handle the safety profile. No critical information 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 description coverage is 100%, and the single optional parameter locationId is fully documented in the schema, including the fallback to CRAVEUP_LOCATION_ID. The description adds no additional parameter-level semantics, so it meets the baseline 3 for high schema coverage.
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 uses a specific verb ('Fetch') and names the exact resource: store hours, scheduled-order flag, tax settings, and takeout config for a location. This clearly distinguishes it from sibling mutation tools like update_store_hours, set_scheduled_orders_enabled, and set_takeout_enabled, as well as from list_locations.
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 context is clear: use this tool to retrieve read-only settings for a location. The description also states the authentication prerequisite (CraveUp login), which is important operational guidance. However, it does not explicitly name alternative tools for mutating those settings, so the when-not-to-use guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mcp_capabilitiesGet Crave MCP compatibility statusARead-onlyIdempotent
Return safe runtime versions, the tool-policy digest, and fail-closed capability blockers. Use this before project generation or long-running automation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds meaningful behavioral context beyond those annotations by mentioning 'fail-closed capability blockers' and 'safe runtime versions,' which indicates that the tool reports restrictions or blockers rather than merely providing general information. No contradiction with annotations exists.
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 consists of two tight sentences. The first sentence front-loads the specific outputs, and the second sentence provides a clear usage directive. There is no padding or repetition of information already available in the schema or annotations.
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 input parameters, rich annotations, an output schema, and a description that states both outputs and appropriate use context, the description is fully sufficient for an agent to select and call this tool correctly. There is no missing invocation-relevant detail.
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?
The tool has zero parameters, so parameter-level explanation is unnecessary. With a 100% schema description coverage baseline and no parameters to document, the description does not need to compensate for missing parameter semantics.
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 clearly states the tool returns three specific pieces of information: safe runtime versions, a tool-policy digest, and fail-closed capability blockers. It is clear about the tool's resource and purpose, though it does not explicitly distinguish itself from sibling tools such as get_integration_guide or the various readiness-check tools.
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 gives explicit guidance on when to use the tool: before project generation or long-running automation. It does not mention when not to use it or name alternative tools, but the stated context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mobile_release_statusGet an EAS mobile release runARead-onlyIdempotent
Fetch a previously dispatched EAS Workflow run and its build/submission jobs. Requires the same scoped EXPO_TOKEN used to start the release.
| Name | Required | Description | Default |
|---|---|---|---|
| workflowRunId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is read-only, idempotent, and non-destructive. The description adds a genuinely useful behavioral/auth detail: the same scoped EXPO_TOKEN used to start the release is required to fetch it. No contradiction with annotations was found.
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 concise sentences: the first states the core action and resource, and the second adds the only essential prerequisite. There is no redundant phrasing 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?
For a simple single-parameter, read-only status tool with an output schema and safety annotations, the description covers the key operational need: what is fetched and what token context is required. It could be slightly stronger by explicitly naming the expected usage flow relative to starting a release, but nothing critical 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?
There is only one parameter, workflowRunId, and the schema provides its type and UUID format but no semantic description. The tool description's phrase 'previously dispatched EAS Workflow run' gives some context that the ID refers to a prior workflow run, but it does not explicitly state that this ID is returned by start_mobile_release or how to obtain it.
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 uses a specific verb ('Fetch') and a clear resource ('a previously dispatched EAS Workflow run and its build/submission jobs'), which makes the tool's purpose unambiguous. It also distinguishes this from sibling tools like start_mobile_release and check_mobile_release_readiness by focusing on fetching an existing run's status.
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 phrase 'previously dispatched' implies this should be used after a release has been started, and the token requirement ties it to the dispatch action. However, there is no explicit guidance about when to prefer this over check_mobile_release_readiness or other related sibling tools, so the routing is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_onboarding_flowCrave Up NL onboarding checklistARead-onlyIdempotent
How to take a restaurant repo from zero to a live Crave-powered app in one chat: login → create org → connect .env → import menu → run.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful context by showing the tool returns an orchestrated sequence (login → create org → connect .env → import menu → run) rather than performing those actions itself. This helps clarify the tool's informational nature, and it does not contradict the annotations.
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 a single sentence that front-loads the goal and uses a compact arrow-separated list for the steps. There is no filler, and every part contributes to understanding what the tool provides.
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 zero parameters, a rich set of safety annotations, and an output schema present, the description is complete for calling this tool. It tells the agent the tool returns an onboarding checklist, which is all that is needed to invoke it correctly.
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?
The tool has zero parameters, so there are no parameter semantics for the description to clarify. The baseline of 4 applies; no additional parameter explanation is necessary.
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 clearly states the resource: a step-by-step onboarding flow from a restaurant repo to a live Crave-powered app, delivered as a checklist. It does not just restate the tool name and is distinguishable from related status tools, though it does not explicitly contrast with 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?
The phrasing 'How to take a restaurant repo from zero to a live Crave-powered app' implies the tool is for retrieving the onboarding sequence, but it does not explicitly say when to choose this over alternatives such as get_onboarding_status or start_crave_auth. Usage context is present, but no exclusions or alternative routing are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_onboarding_statusRead go-live onboarding statusARead-onlyIdempotent
Fetch the 6 dashboard go-live steps (subscription, business information, address, hours, menu, ordering methods) with completion state and the suggested next action for each pending required step. Sandbox marks subscription and Stripe Connect as not required. In production, the business-information step lists the outstanding Stripe KYC items (outstandingRequirements) — tell the user what Stripe still needs, then hand them the Stripe-hosted link. Completing all six marks the merchant onboarded. Requires craveup login.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the readOnly/idempotent annotations: sandbox vs. production differences, Stripe KYC handling, the meaning of completing all six steps, and the login prerequisite. It provides actionable guidance about what the agent should do with the results.
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 four focused sentences, front-loaded with the core function, then adding only necessary environment and action details. Every sentence earns its place, and there is no redundant restating of the tool name or title.
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?
Given the tool has no parameters and an output schema that handles return values, the description covers all remaining context: the steps involved, sandbox/prod nuance, the Stripe KYC action, completion semantics, and authentication. The agent can correctly decide when to call it and how to act on the result.
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 the schema provides no opportunities for ambiguity. The description appropriately focuses on behavior and output rather than parameter details, which is enough for a parameterless tool.
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 names a specific verb ('Fetch'), a concrete resource ('the 6 dashboard go-live steps'), and the data returned (completion state, suggested next action). It clearly differentiates itself from siblings like get_onboarding_flow by focusing on status and next actions rather than the flow definition.
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 makes the primary use case obvious: retrieve go-live onboarding status and drive the user through required next steps. It doesn't explicitly name alternatives or exclusion conditions, but the context is clear enough that an agent would know when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_productGet a productARead-onlyIdempotent
Fetch one product (menu-editor view) by id, including its modifier group ids.
| Name | Required | Description | Default |
|---|---|---|---|
| productId | Yes | ||
| locationId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, idempotent, non-destructive profile. The description adds valuable behavioral context by specifying the 'menu-editor view' and that modifier group IDs are included, which is not visible from annotations or the schema alone. It does not contradict the annotations.
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 a single, front-loaded sentence with no filler. Every phrase earns its place, and the most important identifying details are stated immediately.
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?
The core fetch semantics are clear, and the output schema plus annotations cover much of the safety and return-shape context. However, locationId's role is undocumented, and there is no explicit guidance about when not to use this tool, leaving a small but meaningful 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?
Schema description coverage is 0%, so the description must compensate. 'By id' clarifies productId, but locationId is left completely unexplained: the agent cannot tell why it exists or when to pass it. With two parameters, half of the parameter semantics are missing.
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 uses a specific verb and resource: 'Fetch one product (menu-editor view) by id.' It also states the view and included data ('including its modifier group ids'), which distinguishes it from mutation or management siblings like update_product, delete_product, and list_menus.
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 use case is implied: call this when you need a single product by its ID and its modifier groups. However, it does not explicitly mention alternatives or exclusion conditions, such as using update_product for modifications, so the guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_customersList customers at a locationARead-onlyIdempotent
Fetch the dashboard Customers page for a location (grouped by Crave customerId). Guest checkouts with email now create a customerId. Requires craveup login.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| locationId | No | Omit to use CRAVEUP_LOCATION_ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and non-destructive behavior, so the description need not repeat those. It adds meaningful context beyond annotations: results are grouped by customerId, guest checkouts with email now generate a customerId, and authentication is required.
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 short sentences, front-loaded with the primary behavior. The guest-checkout note is slightly tangential but still relevant to understanding the customerId grouping, and the login requirement is essential. No wasteful 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 a simple read-only listing tool with an output schema and strongly descriptive annotations, the description is largely complete: it covers scope, grouping, and auth. The main omission is parameter-level detail, but the schema already encodes page/limit constraints and the optional locationId default.
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 only 33%, and the description does not compensate for the undocumented page and limit parameters. It reinforces the locationId concept but says nothing about pagination semantics or how page/limit interact.
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 opens with 'Fetch the dashboard Customers page for a location', which is a specific verb plus resource and scope. It further clarifies grouping by Crave customerId, making it easy to distinguish from the many sibling tools that deal with locations, orders, or products.
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 tool's purpose is clearly implied, and the 'Requires craveup login' line gives an important precondition. However, the description never explicitly states when to prefer this tool over alternatives or when not to use it, so usage guidance remains mostly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_discountsList location discountsARead-onlyIdempotent
List every discount configured for one authorized location. Requires a Crave merchant API key; the API verifies that the key can access the requested location.
| Name | Required | Description | Default |
|---|---|---|---|
| locationId | No | Omit to use CRAVEUP_LOCATION_ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is well covered. The description adds meaningful context beyond those annotations by disclosing the API key requirement and that the API verifies key access to the requested location, which is directly useful for invocation planning.
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 with no filler: the core behavior is front-loaded, and the authentication requirement follows immediately. Every word contributes to helping the agent understand what the tool does and what is needed to call it.
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 single-optional-parameter read-only tool with a rich annotation set and an output schema, the description is complete. It covers the essential invocation context (API key requirement, authorization check, location scoping) without needing to explain return values because the output schema exists.
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 locationId parameter already includes a clear 'Omit to use CRAVEUP_LOCATION_ID' explanation. The description reinforces that the operation targets 'one authorized location' but adds no new parameter-level semantics beyond what the schema provides, so the baseline of 3 applies.
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 uses a specific verb ('List') and resource ('every discount configured for one authorized location'), making the tool's purpose immediately clear. It also distinguishes itself from write-sibling create_order_discount by focusing on enumeration, and from list_locations by targeting discounts rather than locations.
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 provides clear context: this tool lists discounts for a single authorized location and requires a Crave merchant API key. It does not explicitly name alternatives or when-not-to-use conditions, so it falls short of a 5, but the purpose is specific enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_locationsList merchant locationsARead-onlyIdempotent
List locations for the authenticated merchant (dashboard locations-stats). Use to verify multi-location setup without opening the browser. Requires craveup login.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Default 50 |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that the tool is read-only, idempotent, and non-destructive. The description adds useful context beyond those hints by specifying that the operation is scoped to the authenticated merchant and that it requires a craveup login, which addresses authentication requirements.
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 three short sentences, each adding distinct value: what the tool does, when to use it, and what prerequisite is needed. There is no redundancy 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?
This is a simple read-only list operation with one optional parameter, an output schema, and strong annotations. The description covers the tool's purpose, use case, scope, and authentication requirement, so nothing essential is missing for an agent to invoke it correctly.
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%, so the single optional limit parameter is fully documented in the schema with min, max, and default. The description does not need to repeat parameter information, and the baseline of 3 applies given the high coverage.
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 clearly states a specific verb and resource: 'List locations for the authenticated merchant.' It also adds the dashboard context ('dashboard locations-stats') and a concrete use case, which distinguishes it from related location tools like create_location, get_location_settings, and delete_location.
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 provides a clear use case: 'Use to verify multi-location setup without opening the browser.' It does not explicitly name alternative tools or exclusion conditions, but the intended purpose is clear enough for an agent to decide when to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_subscription_plansList Crave Up subscription plansARead-onlyIdempotent
List available subscription plans (name, price, billing interval, trial). Use the priceId with start_subscription_checkout. Production only; sandbox development does not require a subscription. Requires craveup login.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior. The description adds meaningful context beyond those annotations by specifying the production-only constraint and the requirement for a craveup login, which are not captured in the structured annotations.
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 short sentences with no filler. The action and key fields come first, followed by downstream routing and environment requirements, so the most decision-relevant information is front-loaded.
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 zero parameters, an output schema present, and annotations covering the safety profile, the description provides everything needed to call and use the tool correctly: login requirement, environment constraint, returned fields, and downstream integration.
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?
The tool has zero parameters, so the baseline is 4. The description adds value by listing the output fields (name, price, billing interval, trial) and explaining how the resulting priceId is used, which helps an agent interpret the tool's response without any input 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 uses a specific verb and resource ('List available subscription plans') and names the key fields (name, price, billing interval, trial), making the tool's purpose unmistakable. It also differentiates itself from start_subscription_checkout by explicitly pointing to the priceId relationship.
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 clearly states when the tool is needed: production use, while sandbox development does not require a subscription. It also names the downstream tool to use with the returned priceId, giving an agent concrete routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_location_for_ordersUnblock ordering for a locationAIdempotent
Fixes "Restaurant is closed. Scheduled orders are not allowed." by setting 24/7 store hours, enabling scheduled orders, and enabling takeout. Requires craveup login.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Preview by default. Apply requires the exact returned planDigest. | dry-run |
| locationId | No | Omit to use CRAVEUP_LOCATION_ID | |
| planDigest | No | Exact digest returned by a dry-run of the same arguments. | |
| confirmationToken | No | Required exact phrase for destructive, paid, or release operations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as non-read-only, non-destructive, and idempotent; the description adds useful behavioral detail by listing the three changes it applies and the login requirement. It does not mention the dry-run/apply flow, but that is carried by the input schema, so the description complements rather than contradicts the annotations.
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 with no filler; the error symptom and required changes are front-loaded ahead of the login prerequisite. Every word earns its place.
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 mutating tool with a rich input schema and output schema, the description covers the trigger, the actions, and the auth requirement. It could have added an explicit pointer to start_crave_auth or the dry-run-first sequence, but those are inferable from siblings and schema, leaving only a minor 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?
Schema description coverage is 100%, with all four parameters fully documented including enums, defaults, and the planDigest pattern. The description adds no parameter-level detail, so the schema-coverage baseline of 3 is appropriate.
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 ('fixes') plus a concrete error message and the exact configuration changes (24/7 hours, scheduled orders, takeout). This distinguishes it from single-purpose siblings like update_store_hours or set_takeout_enabled without needing to name 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?
Explicitly ties the tool to a specific error condition, telling an agent when to invoke it, and notes the prerequisite login. It does not explicitly contrast with individual sibling tools or state when not to use it, but the error-message trigger provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seed_sandbox_analyticsSeed sandbox analytics test dataAIdempotent
Create deterministic customers, orders, ratings, and storefront funnel events for the Alvin's Test Hospitality Group dev organization. This tool is idempotent and refuses production hosts, production API processes, non-dev databases, and mismatched locations.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Preview by default. Apply requires the exact returned planDigest. | dry-run |
| locationId | Yes | Exact dev location id returned by list_locations | |
| planDigest | No | Exact digest returned by a dry-run of the same arguments. | |
| confirmationSlug | Yes | ||
| confirmationToken | No | Required exact phrase for destructive, paid, or release operations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses deterministic generation, idempotence, and the refusal to operate on production hosts, production API processes, non-dev databases, or mismatched locations. Even though idempotentHint is already annotated, the production refusal and deterministic behavior add concrete runtime context. It does not explain return values or the dry-run/apply flow, but the output schema and mode parameter cover those.
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 compact sentences place the purpose and scope first, and the guardrail behavior second. Every sentence earns its place with no filler or redundant enumeration of parameters.
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?
The tool is moderately complex, but the input schema covers 80% of parameters, an output schema exists, and annotations already declare idempotence and non-destructiveness. The description adds the critical dev-vs-production guardrail and data-domain overview. It is slightly incomplete only in not spelling out the dry-run-before-apply workflow on its own, though mode and planDigest schema descriptions effectively convey 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 description coverage is 80%, so the description can rely on the schema for parameter meaning. The prose only indirectly references location/confirmation via the dev organization, adding no syntax or format detail beyond what the schema already provides. This meets the high-coverage baseline but does not surpass it.
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 uses a specific verb and resource: 'Create deterministic customers, orders, ratings, and storefront funnel events' for a named dev organization. This clearly distinguishes the tool from sibling read/manage tools like list_customers or get_location_orders.
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 a clear context clue by scoping to the Alvin's Test Hospitality Group dev organization and excludes production/non-dev environments. However, it never names alternative tools or states an explicit when-to-use condition such as 'use this when you need sandbox analytics seed data', leaving sibling comparison to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_fulfillment_methodsSet ordering methodsAIdempotent
Choose how customers order: takeout (pickup), table_side, delivery, room_service. At least one is required to accept orders; store hours must be set first. Requires craveup login.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Preview by default. Apply requires the exact returned planDigest. | dry-run |
| locationId | No | Omit to use CRAVEUP_LOCATION_ID | |
| planDigest | No | Exact digest returned by a dry-run of the same arguments. | |
| confirmationToken | No | Required exact phrase for destructive, paid, or release operations. | |
| fulfillmentMethods | Yes | Enables the listed methods and disables the rest |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, destructive, idempotent, and open-world traits. The description adds valuable behavioral context beyond the annotations by stating that setting at least one method is prerequisite to accepting orders, store hours must be configured beforehand, and authentication is required. This helps the agent understand operational dependencies and consequences.
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 compact and front-loaded: the core purpose and available options appear first, followed by the most important operational constraints. Every sentence earns its place, with no redundant wording or unnecessary background.
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?
Combined with the fully documented input schema and rich annotations, the description provides enough context for an agent to invoke the tool safely: prerequisites, required auth, and the operational effect are clear. The dry-run/apply flow and token requirements are left to the schema, which is acceptable, though a brief prose mention of the dry-run default could have helped agents avoid accidental applies.
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?
The input schema already describes all five parameters with detailed descriptions, including the dry-run/apply mechanism, locationId fallback, planDigest requirement, confirmationToken, and fulfillmentMethods behavior. The description adds no new parameter-level semantics beyond listing the same enum values already present in 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 clearly states that the tool lets you choose how customers order and enumerates the possible methods: takeout, table_side, delivery, room_service. It is easy to infer that this configures fulfillment methods, and the purpose is not misleading. However, it does not explicitly differentiate itself from narrower sibling tools like set_takeout_enabled or set_scheduled_orders_enabled.
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 provides useful context: at least one fulfillment method is required to accept orders, store hours must be set first, and a craveup login is required. It does not, however, explicitly explain when to use this tool versus alternatives such as set_takeout_enabled, nor does it state any exclusions or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_location_addressSet location street addressAIdempotent
Update a location address (shown on the storefront and used for delivery/pickup). Omit lat/lng — the server geocodes the address. Requires craveup login.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | ||
| lng | No | ||
| city | Yes | ||
| mode | No | Preview by default. Apply requires the exact returned planDigest. | dry-run |
| state | Yes | State, region, or emirate | |
| street | Yes | ||
| country | Yes | ||
| zipCode | Yes | ||
| timezone | Yes | Explicit IANA timezone for this physical location, for example America/Los_Angeles | |
| locationId | No | Omit to use CRAVEUP_LOCATION_ID | |
| planDigest | No | Exact digest returned by a dry-run of the same arguments. | |
| streetOptional | No | Suite / unit | |
| confirmationToken | No | Required exact phrase for destructive, paid, or release operations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/destructive intent, and the description adds meaningful behavioral context: the address is geocoded server-side when lat/lng are omitted, and a craveup login is required. This goes beyond the structured annotations without contradicting them.
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 three short sentences, front-loaded with the core purpose, and every sentence adds value. It avoids repetition of schema details and annotations.
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?
The tool has 13 parameters, a default dry-run mode, and an apply mode that requires planDigest and possibly confirmationToken. The description omits this two-phase workflow entirely, which is a critical gap for an agent trying to invoke the tool safely and correctly.
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 54%, so the description carries partial responsibility for parameter meaning. It usefully explains that lat/lng should be omitted and geocoding will occur, but it leaves the dry-run/apply mode, planDigest, and confirmationToken semantics to 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 clearly states the tool updates a location address and provides context about where that address is used (storefront, delivery/pickup). It does not explicitly distinguish this tool from siblings such as create_location or get_location_settings, so it misses the top tier.
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 gives useful context—addresses appear on the storefront and are used for delivery/pickup—and an instruction to omit lat/lng so the server geocodes. However, it does not mention when to prefer this tool over alternatives or provide any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_product_availabilitySet product availabilityBIdempotent
Mark a product available or sold out (today / indefinitely).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Preview by default. Apply requires the exact returned planDigest. | dry-run |
| productId | Yes | ||
| locationId | No | ||
| planDigest | No | Exact digest returned by a dry-run of the same arguments. | |
| availability | Yes | ||
| confirmationToken | No | Required exact phrase for destructive, paid, or release operations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as non-read-only, non-destructive, idempotent, and open-world. The description adds limited context by naming the availability states and time scopes, but it does not disclose the important dry-run-first requirement or that confirmToken may be required for destructive/paid/release operations. No contradiction exists, but the description adds only modest behavioral nuance beyond annotations.
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 a single, front-loaded sentence with no filler. It is appropriately brief for a simple availability-setting operation, though it is arguably too terse given the important dry-run/apply protocol and six parameters.
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?
The schema provides substantial context through mode, planDigest, and confirmationToken descriptions, and an output schema exists, so the short description is minimally viable. However, the description does not mention the two-phase safety flow, location scoping, or why an agent should select this tool over sibling product-related tools, leaving important contextual gaps.
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 only 50%, so the description should compensate for undocumented parameters. It only elaborates the availability enum in natural language; productId, locationId, and the critical mode/planDigest/confirmationToken flow are left entirely to the schema. The description does not meaningfully add parameter semantics beyond what the schema already exposes.
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 and resource: 'Mark a product available or sold out' with temporal options 'today / indefinitely'. This is clear and unlikely to be confused with delete_product or update_product at first glance, though it does not explicitly differentiate itself from those sibling tools.
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?
There is no guidance on when to use this tool versus alternatives such as update_product, nor any explanation of the dry-run/apply workflow. The schema hints at the two-phase behavior through 'mode', but the description itself does not tell the agent when to choose this tool or how to safely execute the update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_scheduled_orders_enabledEnable or disable scheduled ordersAIdempotent
Toggle order-ahead when the restaurant is closed. Preserves existing tax settings unless overridden. Requires craveup login.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Preview by default. Apply requires the exact returned planDigest. | dry-run |
| enabled | No | ||
| taxRate | No | Omit to keep the location tax rate | |
| locationId | No | ||
| planDigest | No | Exact digest returned by a dry-run of the same arguments. | |
| taxRateInclusive | No | ||
| confirmationToken | No | Required exact phrase for destructive, paid, or release operations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavior beyond the annotations: it preserves tax settings unless overridden and states the auth prerequisite. Annotations already cover read-only/destructive/idempotency, so the extra context is meaningful rather than redundant.
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 tight sentences, each carrying distinct information: what the tool does, a side-effect safeguard, and a prerequisite. No repetition or padding.
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?
The dry-run/apply flow and confirmation token are covered by the rich schema, so the description does not need to repeat them. It provides the missing operational context (auth, tax preservation) and is complete enough for an agent to use the tool safely.
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?
With 57% schema coverage, the schema already documents mode, taxRate, planDigest, and confirmationToken. The description adds value by tying the tax-related parameters to preservation behavior, but enabled and locationId still get no semantic help beyond their names/types.
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 names a specific action and resource: toggling order-ahead/scheduled orders when the restaurant is closed. It is clear, though it does not explicitly distinguish it from similar sibling tools such as set_takeout_enabled.
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 a clear context for use ('when the restaurant is closed') and an important prerequisite (craveup login). It does not name alternative tools or state when not to use it, stopping short of explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_takeout_enabledEnable or disable takeout pickupAIdempotent
Turn takeout on/off for a location. Copies the location main schedule when enabling. Requires craveup login.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Preview by default. Apply requires the exact returned planDigest. | dry-run |
| enabled | No | ||
| locationId | No | ||
| planDigest | No | Exact digest returned by a dry-run of the same arguments. | |
| confirmationToken | No | Required exact phrase for destructive, paid, or release operations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as non-read-only, idempotent, and non-destructive; the description adds that enabling copies the location main schedule and that login is required. This enriches the behavioral profile beyond the annotations without contradicting them. There is no statement that conflicts with the annotation hints.
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 short sentences; the first delivers the core action and the second adds a critical side effect and auth requirement. No wasted words.
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 annotations, schema, and an output schema available, the description fills the remaining gaps: the schedule-copy behavior and the login prerequisite. It doesn't describe the apply/confirmation-token flow, but that is fully covered by the schema. Nothing essential for calling the tool 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 descriptions already cover mode, planDigest, and confirmationToken, leaving 60% of parameters with schema docs. The description doesn't elaborate on locationId or enabled, but their meaning is readily inferable from the schema names and the tool purpose. No additional parameter semantics are provided, so a baseline score is appropriate.
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 ('Turn takeout on/off') with a clear resource ('for a location'). The name and title align, and the schedule-copy note adds behavioral specificity. Doesn't explicitly compare to sibling tools, but the domain (takeout) is unambiguous.
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 the use case: toggling takeout pickup for a location, but doesn't name alternatives like set_scheduled_orders_enabled or open_location_for_orders. It provides a prerequisite (craveup login) and a behavioral caveat (schedule copy on enable), which is useful but stops short of explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_crave_authSign in or sign up for Crave UpAIdempotent
Start secure browser authentication for CLI and MCP access. Open the returned Crave Up URL for the user; they can sign in or create a free account without leaving the flow.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotent behavior and a non-read-only operation. The description adds useful behavioral context: it returns a URL, the agent must open it for the user, and the user can authenticate without leaving the flow. No contradiction with the annotations is present.
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 two short sentences with no filler. It leads with the core purpose, then immediately gives the actionable next step for the agent, making the most important information easy to scan.
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 zero-parameter start-flow tool, the description covers what the agent needs to do: invoke it, take the returned URL, and open it for the user. A small gap is that it does not explicitly mention the continuation step (complete_crave_auth), but the flow context and sibling naming make this reasonably inferable.
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?
The tool has zero parameters, so there is no parameter detail for the description to provide. The baseline for parameter-free tools is 4, and the description appropriately focuses on the action and returned URL rather than inventing 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 clear verb ('Start secure browser authentication') and an explicit resource ('for CLI and MCP access'), plus what the user will do (sign in or create an account). It is easily distinguished from the sibling tools complete_crave_auth and cancel_crave_auth by the 'start' framing.
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 clearly positions this as the initial step in a browser-based auth flow and explains that the agent should open the returned URL. It does not explicitly name complete_crave_auth or cancel_crave_auth as follow-up/alternative tools, but the start-versus-complete/cancel distinction is strongly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_mobile_releaseStart an approved internal mobile releaseA
Dispatch the committed Crave Up EAS Workflow for internal TestFlight. This consumes paid EAS build minutes. Requires EXPO_TOKEN from a scoped Expo robot user and the exact confirmation phrase. Android stays CLI-only so the local Play internal-track setting can be verified immediately before submission. This tool cannot publish to the public store.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Preview by default. Apply requires the exact returned planDigest. | dry-run |
| appId | Yes | EAS project UUID from extra.eas.projectId | |
| gitRef | No | main | |
| target | Yes | ||
| changelog | No | ||
| planDigest | No | Exact digest returned by a dry-run of the same arguments. | |
| confirmation | Yes | Exact approval phrase required before paid EAS work is queued | |
| confirmationToken | No | Required exact phrase for destructive, paid, or release operations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond annotations: it consumes paid EAS build minutes, requires a scoped robot user token, and cannot publish publicly. It could mention side effects or rollback, but the cost and authorization disclosure is strong.
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?
Four sentences, each carrying real content: pipeline, cost, prerequisites, and platform/store scope. The main action is front-loaded and there is no filler or 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?
Given the 8-parameter, paid, release-oriented operation, the description adequately covers action, prerequisites, and exclusions while the schema covers the dry-run/apply flow and output schema covers return values. It would be stronger if it explicitly referenced the readiness/status siblings or the two-phase flow, but nothing critical 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?
Description adds EXPO_TOKEN context and reinforces confirmation gating, but it does not explain gitRef or changelog semantics, nor does it disambiguate confirmationToken from confirmation. The schema already covers most parameter formats, so this is adequate but not exceptional.
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?
Description names a specific action ('dispatch'), a specific resource ('committed Crave Up EAS Workflow'), and a specific target ('internal TestFlight'), while explicitly ruling out public store publication. This clearly differentiates start_mobile_release from the readiness/status 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?
The description gives explicit context and exclusions: Android stays CLI-only, public store publishing is not possible, and EXPO_TOKEN plus an exact confirmation phrase are required. It does not name an alternative sibling tool, but the when-not guidance is concrete and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_subscription_checkoutStart subscription checkoutA
Create a Stripe Checkout URL for the chosen plan. Give the URL to the user to open in a browser — card entry cannot be automated. After payment, poll get_onboarding_status until the subscription step completes (webhook latency of a few seconds). Production only; sandbox development does not require a subscription. Requires craveup login.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Preview by default. Apply requires the exact returned planDigest. | dry-run |
| priceId | Yes | From list_subscription_plans | |
| returnUrl | No | Where Stripe redirects after checkout; defaults to the dashboard | |
| planDigest | No | Exact digest returned by a dry-run of the same arguments. | |
| confirmationToken | No | Required exact phrase for destructive, paid, or release operations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only provide coarse flags, so the description carries most of the behavioral burden. It adds valuable context: the human must open the URL, webhook latency exists, checkout is production-only, and login is required. It does not, however, surface the paid-operation confirmation-token requirement or the dry-run/apply sequencing, which are important behavioral traits beyond the raw schema.
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?
Five short sentences, each earning its place: the core action, the user step, the post-payment polling behavior, the environment restriction, and the auth requirement. The most important information is front-loaded.
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?
Paired with the complete schema and output schema, the description gives the agent enough to act. However, the two-phase dry-run/apply flow and the confirmation-token requirement for paid operations are only present in the schema, not in the operational narrative, leaving a real gap for a non-trivial paid checkout flow.
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 schema already explains mode, priceId, returnUrl, planDigest, and confirmationToken. The description only indirectly references the plan via 'chosen plan' and adds no real parameter-level meaning, so it stays at the baseline.
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 and resource: 'Create a Stripe Checkout URL for the chosen plan.' This clearly separates it from sibling tools like list_subscription_plans, get_onboarding_status, and auth tools, and it even identifies the follow-up polling step.
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 explicit when-to-use context: give the URL to the user because card entry cannot be automated, poll get_onboarding_status after payment, and avoid this tool in sandbox because a subscription is not required there. It also names the auth prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_productUpdate a productAIdempotent
Change a product's name, description, price, or availability. Fields you omit keep their current values. Use import_menu for structural changes (images, modifiers).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Preview by default. Apply requires the exact returned planDigest. | dry-run |
| name | No | ||
| price | No | ||
| productId | Yes | ||
| locationId | No | ||
| planDigest | No | Exact digest returned by a dry-run of the same arguments. | |
| description | No | ||
| availability | No | ||
| confirmationToken | No | Required exact phrase for destructive, paid, or release operations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds an important behavioral detail beyond the annotations: omitted fields keep their current values, indicating a partial update. However, it does not disclose the two-phase dry-run/apply behavior, planDigest requirement, or confirmationToken semantics, which are significant behavioral traits for this mutation tool.
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 two concise sentences with no filler. The core action and field list are front-loaded, and the alternative-tool guidance is compact and actionable.
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?
The tool has 9 parameters, an output schema, and a non-trivial dry-run/apply flow, yet the description omits the mode/planDigest/confirmationToken process and locationId context. The input schema fills some gaps with field descriptions, but the description alone is not enough to fully guide an agent through the update workflow.
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?
With only 33% schema description coverage, the description partially compensates by listing the editable fields and explaining partial-update semantics. It does not explain mode, planDigest, confirmationToken, productId, or locationId beyond what the schema already states, so the compensation is incomplete.
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 uses a specific verb ('Change') with a clear resource ('a product') and names the exact editable fields (name, description, price, availability). It distinguishes itself from import_menu for structural changes, but does not differentiate from the sibling set_product_availability, which overlaps on the availability field.
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 use import_menu for structural changes (images, modifiers), which provides a clear when-not-to-use condition. However, it does not mention when to prefer this over set_product_availability or explain the dry-run/apply workflow, so the guidance is useful but not fully complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_store_hoursUpdate location store hoursAIdempotent
Set when a location accepts orders. Use preset always_open for dev/demo, or pass a custom 7-day schedule. Requires craveup login.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Preview by default. Apply requires the exact returned planDigest. | dry-run |
| scope | No | organization updates the shared default; location creates or updates this location override | location |
| preset | No | always_open = 24/7; business_9am_10pm; custom = provide schedule | always_open |
| schedule | No | ||
| locationId | No | ||
| planDigest | No | Exact digest returned by a dry-run of the same arguments. | |
| confirmationToken | No | Required exact phrase for destructive, paid, or release operations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish a mutating but non-destructive and idempotent operation, so the description only needs to add behavioral context. It contributes the authentication requirement via 'Requires craveup login.' It does not contradict any annotation, and 'Set when a location accepts orders' consistently implies a write operation.
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 two short sentences with the core action front-loaded and no filler. Every sentence earns its place: one states what the tool does and the other gives preset and authentication context.
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?
The input schema is unusually detailed and an output schema exists, so the description can focus on high-level context. It supplies the login requirement and the 7-day custom schedule, but for a 7-parameter workflow it could also mention the dry-run/apply model at the tool level; nevertheless, the schema covers that 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?
The description adds some parameter-level meaning by explaining that always_open is for dev/demo and that a custom preset requires a 7-day schedule. The input schema already provides substantial descriptions for mode, scope, planDigest, and confirmationToken, so the description does not need to repeat those.
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 opens with the active verb 'Set' and defines the resource as 'when a location accepts orders,' which clearly identifies the operation as updating recurring store hours. It does not explicitly distinguish itself from sibling tools like open_location_for_orders or set_scheduled_orders_enabled, but the mention of presets and a weekly schedule conveys the recurring-hours semantics.
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 conditional usage guidance: 'Use preset always_open for dev/demo, or pass a custom 7-day schedule,' and it notes the cravingup login prerequisite. However, it does not say when to prefer this tool over the many sibling location and schedule tools, nor does it offer exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiCheck Crave login sessionARead-onlyIdempotent
Verify the MCP server can read a craveup login session (CLI keychain or CRAVEUP_ACCESS_TOKEN).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| mode | Yes | |
| status | Yes | |
| changes | Yes | |
| summary | Yes | |
| operation | Yes | |
| planDigest | Yes | |
| environment | Yes | |
| nextActions | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful context by specifying the credential sources queried (CLI keychain or CRAVEUP_ACCESS_TOKEN), which is useful auth-related behavior beyond what the annotations provide. It does not cover failure behavior, but this is a minor gap given the output schema exists.
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 a single, focused sentence that front-loads the action, names the resource, and includes the key credential context. Every part contributes meaning and there is no redundant wording.
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 zero-parameter, read-only verification tool with robust annotations and a declared output schema, the description is complete. It tells the agent exactly what is verified and where credentials come from, and the output schema covers the return shape, so nothing essential 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?
The tool has zero parameters and the schema description coverage is 100%, so there is nothing for the description to add about parameters. Per the baseline for zero-parameter tools, this is adequate.
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 uses a specific verb, 'Verify', and names the exact resource: the MCP server's ability to read a craveup login session. It also identifies the credential sources (CLI keychain or CRAVEUP_ACCESS_TOKEN), making the tool's purpose unmistakable and clearly distinct from auth-flow siblings like start_crave_auth and complete_crave_auth.
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 states what the tool does but does not explicitly say when to use it versus alternatives, and it does not mention that this should be used to check an existing session before starting a new auth flow. The usage context is implied by the action 'Verify' and the sibling tool names, but no explicit when/when-not guidance is provided.
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. Dates show when Glama detected each change.
38 tool updates
v0.6.1- First observed
cancel_crave_auth - First observed
check_mobile_release_readiness - First observed
check_storefront_readiness - First observed
complete_crave_auth - First observed
connect_project - First observed
create_location - First observed
create_order_discount - First observed
create_organization - First observed
delete_location - First observed
delete_product - First observed
get_integration_guide - First observed
get_location_orders - First observed
get_location_settings - First observed
get_mcp_capabilities - First observed
get_mobile_release_status - First observed
get_onboarding_flow - First observed
get_onboarding_status - First observed
get_product - First observed
import_menu - First observed
list_customers - First observed
list_discounts - First observed
list_locations - First observed
list_menus - First observed
list_subscription_plans - First observed
open_location_for_orders - First observed
seed_sandbox_analytics - First observed
set_fulfillment_methods - First observed
set_location_address - First observed
set_menu_active - First observed
set_product_availability - First observed
set_scheduled_orders_enabled - First observed
set_takeout_enabled - First observed
start_crave_auth - First observed
start_mobile_release - First observed
start_subscription_checkout - First observed
update_product - First observed
update_store_hours - First observed
whoami
TDQS
Most tools cleanly separate by resource and action (auth, locations, menu, orders, billing, mobile). A few naming pairs and composite helpers overlap conceptually, such as get_onboarding_flow vs get_onboarding_status and open_location_for_orders vs the individual settings toggles, but descriptions are generally sufficient to disambiguate.
Tool names consistently follow a snake_case verb-first pattern (get_, create_, set_, list_, update_, delete_, start_, complete_, cancel_). 'whoami' is the only stylistic outlier, but it is a recognizable standard command and does not create confusion.
38 tools is well above the 25-tool threshold for feeling appropriately scoped. The server covers a broad restaurant-platform domain, but the set feels heavy and includes composite helpers and meta guides that could be consolidated.
Core lifecycles are covered for auth, locations, menu products, and mobile releases. However, order handling ends at fetching active orders, discounts have no update/delete, and subscription management lacks cancellation/update paths, leaving some workflows with dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Run your restaurant from an AI client: orders, menu, reports, refunds, payouts and staff.
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
Build and manage AI-native customer support agents from Claude or any MCP client.
AI-native restaurant discovery: verified/menu-indexed/discovered tiers + signed allergy-safety data.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables any AI agent to discover, query, and order from a restaurant's storefront via MCP tools. It handles menu lookup, modifier validation, and enforces a mandatory confirmation gate before payment, replacing the human-operated phone line.-
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to browse restaurants and menus for free, and place orders with USDC payment via x402.-
- AlicenseAqualityDmaintenanceEnables AI assistants to manage restaurant operations by integrating with Toast POS, including orders, menus, employees, payments, inventory, and reporting through 50+ tools and 18 React apps.811MIT

Canuckeats MCPofficial
FlicenseNot gradedqualityDmaintenanceEnables AI agents to browse menus and place real food delivery orders from UberEats and DoorDash across 89 Canadian cities.1-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/craveup-oss/craveup-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server