Skip to main content
Glama
craveup-oss

CraveUp MCP Server

Official
by craveup-oss

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

License: MIT npm Tests

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 iOS

  • Idempotent 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/mcp

Run /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:

  1. whoami — confirm the shared session

  2. If needed: start_crave_auth → open its URL → complete_crave_auth

  3. Create the organization in Business Manager while MCP organization creation is idempotency-blocked; create any scoped private key there, never through chat

  4. connect_project({ projectPath: "…/demo-bistro", locationId })

  5. import_menu(…) from the restaurant source

  6. Run the storefront or iOS app locally

  7. Exercise menu, fulfillment, and cart flows in sandbox; ordinary Stripe payment admission remains cutover locked

  8. 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

get_onboarding_status

The dashboard's 6 go-live steps with completion state + next actions

Storefront Readiness

check_storefront_readiness

Reads ordering-readiness without creating a cart; reports payment configuration without proving admission

Mobile Release Readiness

check_mobile_release_readiness

Read-only Expo/EAS preflight for internal releases

Onboarding Flow

get_onboarding_flow

NL checklist: login → create org → connect repo → import menu → run

Session

whoami

Verify the craveup login session is readable

MCP Compatibility

get_mcp_capabilities

Runtime versions, policy digest, and fail-closed compatibility blockers

Integration Guide

get_integration_guide

Crave.js implementation guidance: storefront, menu display, checkout


Tool Reference

Tool

Description

start_crave_auth

Return a hosted Crave Up sign-in/sign-up URL for the agent to open

complete_crave_auth

Finish the loopback callback and persist the shared CLI/MCP session

cancel_crave_auth

Abandon a pending sign-in and release its loopback listener

Tool

Description

get_onboarding_flow

NL checklist: login → create org → connect repo → import menu → run

whoami

Verify the craveup login session is readable

create_organization

Create merchant + location without minting or returning a plaintext API key

connect_project

Write the public API origin and location ID into an Expo app's .env; remove legacy browser keys

Tool

Description

get_mcp_capabilities

Return the MCP version, tool-policy digest, and unavailable compatibility evidence without credentials

Tool

Description

get_onboarding_status

The dashboard's 6 go-live steps with completion state + next actions

create_location

Create a location (restaurantDisplayName + optional address PATCH)

delete_location

Soft-archive a location (frees slug; hides from dashboard)

list_locations

Dashboard locations-stats for the merchant

get_location_orders

Active orders for a location

list_customers

Customers page for a location

set_location_address

Set the street address; the server geocodes (no lat/lng needed)

set_fulfillment_methods

Enable pickup / table service / delivery / room service

list_subscription_plans

Production-only plans with price, interval, and trial info

start_subscription_checkout

Production-only Stripe Checkout URL for the user to pay in the browser

Tool

Description

get_location_settings

Read store hours, scheduled-order flag, tax, takeout

update_store_hours

Set hours (always_open, business_9am_10pm, or custom 7-day schedule)

set_scheduled_orders_enabled

Toggle order-ahead when closed

set_takeout_enabled

Enable/disable takeout pickup

open_location_for_orders

One-shot fix for "Restaurant is closed. Scheduled orders are not allowed."

Tool

Description

import_menu

Idempotent full menu import; forces menu.isActive=true by default

set_menu_active

Explicitly activate/deactivate a menu (use when list_menus shows inactive)

list_menus

Read back menus exactly as the storefront API serves them

get_product

Fetch one product with its modifier group ids

update_product

Partial edits: name, description, price, availability

set_product_availability

Sold-out toggles

delete_product

Remove a product (category references cleaned up)

get_integration_guide

Implementation guidance: storefront setup, menu display, checkout, import format

Tool

Description

list_discounts

List location promo codes and their current configuration

create_order_discount

Idempotently create an order-level fixed or percentage promo code (percentage capped at 100)

Tool

Description

check_storefront_readiness

Side-effect-free ordering-readiness GET without creating a cart; reports payment configuration without proving admission

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

check_mobile_release_readiness

Read-only local preflight for EAS project identity, workflow, credentials, and internal target

start_mobile_release

Dispatch the fixed internal TestFlight workflow after exact confirmation

get_mobile_release_status

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

seed_sandbox_analytics

Idempotently create customers, orders, ratings, and funnel events for the dev test organization. Requires CRAVEUP_ENVIRONMENT=sandbox and a sandbox Clerk session.


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

sandbox

sandbox.dashboard.craveup.com

dev-api-43233223.craveup.com

refined-mosquito-31.clerk.accounts.dev

crv_test_…

production

dashboard.craveup.com

api.craveup.com

clerk.craveup.com

crv_live_…

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.

  1. Sign in to Crave Business ManagerSettingsDeveloperAPI Keys

  2. Create a key for the location you want to work with — copy the crv_test_… value

  3. Set CRAVEUP_ENVIRONMENT=sandbox, the server-only CRAVEUP_API_KEY, and optionally CRAVEUP_LOCATION_ID in the MCP server env. Public guides, project wiring, and published menu reads do not send this key.

  4. For session-authenticated tools, use start_crave_auth and complete_crave_auth, or run craveup login; both paths use the same secure local session

Live Setup

  1. Start a separate MCP process with CRAVEUP_ENVIRONMENT=production; do not reuse sandbox credentials

  2. Open the production dashboard and continue configuring the organization even if the commercial checklist is incomplete

  3. When the business is ready to accept real payments, complete the go-live checklist — get_onboarding_status shows the six steps and what's missing

  4. Verify payments with check_storefront_readiness — production requires merchant Stripe chargesEnabled

  5. Mint 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 tools

Endpoint 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_KEY does not log you in. Call start_crave_auth, open the returned URL, then call complete_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_analytics is guarded by design: it requires CRAVEUP_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 suites

Project 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 & conventions

Documentation

Document

Description

CHANGELOG.md

Version history and all changes

docs/ARCHITECTURE.md

Layers, authentication modes, and design decisions

docs/TESTING.md

Testing strategy, in-memory MCP transport pattern, conventions

docs.craveup.com

Hosted Crave Up MCP server guide + Crave.js integration docs (also served at runtime via get_integration_guide)

modelcontextprotocol.io

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-only

  • create_* / update_* / set_* / delete_* — writes, idempotent where possible

  • start_* — 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 tools
cancel_crave_authCancel Crave Up authenticationA
Idempotent

Cancel a pending browser authentication flow and close its local callback.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 readinessA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoios-testflight
projectPathNo.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 ordersA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
locationIdNoOmit to use CRAVEUP_LOCATION_ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 authenticationA
Idempotent

Complete the browser login started by start_crave_auth and save the shared CLI/MCP session securely.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 CraveB
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoPreview by default. Apply requires the exact returned planDigest.dry-run
baseUrlNoAPI base URL; omit for production api.craveup.com
locationIdYesCrave location id from create_organization
planDigestNoExact digest returned by a dry-run of the same arguments.
projectPathYesAbsolute path to the app repo root
confirmationTokenNoRequired exact phrase for destructive, paid, or release operations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoPreview by default. Apply requires the exact returned planDigest.dry-run
nameYesDisplay name (max 30 chars)
addressNo
planDigestNoExact digest returned by a dry-run of the same arguments.
confirmationTokenNoRequired exact phrase for destructive, paid, or release operations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYes
modeNoPreview by default. Apply requires the exact returned planDigest.dry-run
amountYes
isFixedYes
disabledNo
maxUsageNo
startDateYes
startTimeNo12:00 AM
expireDateYes
expireTimeNo11:59 PM
locationIdNoOmit to use CRAVEUP_LOCATION_ID
planDigestNoExact digest returned by a dry-run of the same arguments.
descriptionNo
oncePerOrderNo
oncePerCustomerNo
minItemsQuantityNo
confirmationTokenNoRequired exact phrase for destructive, paid, or release operations.
minPurchaseAmountNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

B3.3/5.0
Behavior1/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoPreview by default. Apply requires the exact returned planDigest.dry-run
nameYesOrganization / brand name, e.g. "Demo Bistro"
countryNoUS
mintApiKeyNoMust remain false. Create scoped credentials in Business Manager.
planDigestNoExact digest returned by a dry-run of the same arguments.
confirmationTokenNoRequired exact phrase for destructive, paid, or release operations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 locationA
DestructiveIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoPreview by default. Apply requires the exact returned planDigest.dry-run
locationIdYesCrave location id to archive
planDigestNoExact digest returned by a dry-run of the same arguments.
confirmationTokenNoRequired exact phrase for destructive, paid, or release operations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 productA
DestructiveIdempotent

Remove a product from the location. Category references are cleaned up.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoPreview by default. Apply requires the exact returned planDigest.dry-run
productIdYes
locationIdNo
planDigestNoExact digest returned by a dry-run of the same arguments.
confirmationTokenNoRequired exact phrase for destructive, paid, or release operations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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 guidanceA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYesWhich guide to fetch

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 locationA
Read-onlyIdempotent

Fetch active (new) orders for a location — same data as the Orders Manager. Requires craveup login.

ParametersJSON Schema
NameRequiredDescriptionDefault
locationIdNoOmit to use CRAVEUP_LOCATION_ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 settingsA
Read-onlyIdempotent

Fetch store hours, scheduled-order flag, tax settings, and takeout config for a location. Requires craveup login (Clerk session).

ParametersJSON Schema
NameRequiredDescriptionDefault
locationIdNoOmit to use CRAVEUP_LOCATION_ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 statusA
Read-onlyIdempotent

Return safe runtime versions, the tool-policy digest, and fail-closed capability blockers. Use this before project generation or long-running automation.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 runA
Read-onlyIdempotent

Fetch a previously dispatched EAS Workflow run and its build/submission jobs. Requires the same scoped EXPO_TOKEN used to start the release.

ParametersJSON Schema
NameRequiredDescriptionDefault
workflowRunIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 checklistA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 statusA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 productA
Read-onlyIdempotent

Fetch one product (menu-editor view) by id, including its modifier group ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
productIdYes
locationIdNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

import_menuImport a full menu into CraveA
Idempotent

Store a complete menu (categories, products, prices, image URLs, modifiers) at a Crave location in one call. Use this after extracting a menu from a website, PDF, or photos. Idempotent: re-importing updates existing items by name instead of duplicating. Forces menu.isActive=true unless explicitly set false. Follow with set_menu_active if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
menuNoMenu-level settings; the menu is activated by default
modeNoPreview by default. Apply requires the exact returned planDigest.dry-run
categoriesYesThe full menu tree: categories containing products, in display order
locationIdNoCrave location id; omit to use the CRAVEUP_LOCATION_ID default
planDigestNoExact digest returned by a dry-run of the same arguments.
confirmationTokenNoRequired exact phrase for destructive, paid, or release operations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the idempotentHint annotation, the description discloses the mechanism: 're-importing updates existing items by name instead of duplicating.' It also surfaces a non-obvious side effect: 'Forces menu.isActive=true unless explicitly set false.' These are actionable behavioral details not present in the annotations, and there is no contradiction with them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, each earning its place: scope of import, source use-case, idempotency behavior, activation default and follow-up. It is front-loaded with the core action and contains no filler or restatements of schema fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with nested objects and a two-phase dry-run/apply flow, the description orients the agent well on the bulk import scenario, idempotency, and post-import activation. It does not mention the required dry-run-then-apply workflow or confirmationToken, but the schema's mode and planDigest descriptions fully cover those, so the gap is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3 even without parameter details in the description. The description adds meaningful semantics by explaining that re-import matches items by name and that isActive defaults to true unless set otherwise, which reinforces and extends the schema's weightier parameters. It does not duplicate enum or format details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Store a complete menu ... at a Crave location in one call') and enumerates exactly what is included: categories, products, prices, image URLs, modifiers. This clearly distinguishes it from sibling tools like update_product, delete_product, and set_menu_active, which operate on a single item or activation state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit context: 'Use this after extracting a menu from a website, PDF, or photos,' and provides a follow-up action ('Follow with set_menu_active if needed'). However, it does not explicitly state when not to use the tool or name alternatives for partial updates, so it stops short of a 5.

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 locationA
Read-onlyIdempotent

Fetch the dashboard Customers page for a location (grouped by Crave customerId). Guest checkouts with email now create a customerId. Requires craveup login.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNo
locationIdNoOmit to use CRAVEUP_LOCATION_ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 discountsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
locationIdNoOmit to use CRAVEUP_LOCATION_ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 locationsA
Read-onlyIdempotent

List locations for the authenticated merchant (dashboard locations-stats). Use to verify multi-location setup without opening the browser. Requires craveup login.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoDefault 50

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_menusList menus at a locationA
Read-onlyIdempotent

Read back the menus exactly as the storefront API serves them (menus → categories → products). Use to verify an import or inspect current state.

ParametersJSON Schema
NameRequiredDescriptionDefault
locationIdNoOmit to use the CRAVEUP_LOCATION_ID default

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value by revealing the exact hierarchy returned and the relationship to the storefront API, which is useful behavioral context beyond the annotations. No contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The core behavior is front-loaded, and the usage intent is stated in the second sentence. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation with rich annotations and an output schema present, the description covers the task, scope, and intended use cases. Nothing essential is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the sole parameter, locationId, is adequately documented in the schema with the default behavior explained. The tool description adds no parameter-specific detail beyond that, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('read back') and resource ('menus') and explicitly defines the scope as menus → categories → products exactly as the storefront API serves them. It differentiates from siblings like import_menu, set_menu_active, and get_product by emphasizing read-only inspection of the hierarchical menu structure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states clear use cases: 'verify an import or inspect current state.' It does not explicitly enumerate exclusions or alternatives, but the purpose is unambiguous and the intended context is well conveyed. Missing an explicit 'when not to use' keeps it from a 5.

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 plansA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 locationA
Idempotent

Fixes "Restaurant is closed. Scheduled orders are not allowed." by setting 24/7 store hours, enabling scheduled orders, and enabling takeout. Requires craveup login.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoPreview by default. Apply requires the exact returned planDigest.dry-run
locationIdNoOmit to use CRAVEUP_LOCATION_ID
planDigestNoExact digest returned by a dry-run of the same arguments.
confirmationTokenNoRequired exact phrase for destructive, paid, or release operations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 dataA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoPreview by default. Apply requires the exact returned planDigest.dry-run
locationIdYesExact dev location id returned by list_locations
planDigestNoExact digest returned by a dry-run of the same arguments.
confirmationSlugYes
confirmationTokenNoRequired exact phrase for destructive, paid, or release operations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 methodsA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoPreview by default. Apply requires the exact returned planDigest.dry-run
locationIdNoOmit to use CRAVEUP_LOCATION_ID
planDigestNoExact digest returned by a dry-run of the same arguments.
confirmationTokenNoRequired exact phrase for destructive, paid, or release operations.
fulfillmentMethodsYesEnables the listed methods and disables the rest

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 addressA
Idempotent

Update a location address (shown on the storefront and used for delivery/pickup). Omit lat/lng — the server geocodes the address. Requires craveup login.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNo
lngNo
cityYes
modeNoPreview by default. Apply requires the exact returned planDigest.dry-run
stateYesState, region, or emirate
streetYes
countryYes
zipCodeYes
timezoneYesExplicit IANA timezone for this physical location, for example America/Los_Angeles
locationIdNoOmit to use CRAVEUP_LOCATION_ID
planDigestNoExact digest returned by a dry-run of the same arguments.
streetOptionalNoSuite / unit
confirmationTokenNoRequired exact phrase for destructive, paid, or release operations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_menu_activeActivate or deactivate a menuA
Idempotent

Set menu.isActive explicitly so the storefront serves it without falling back to an inactive first menu. Prefer after import_menu when list_menus shows isActive:false. Requires CRAVEUP_API_KEY.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoPreview by default. Apply requires the exact returned planDigest.dry-run
menuIdYes
isActiveNo
locationIdNo
planDigestNoExact digest returned by a dry-run of the same arguments.
confirmationTokenNoRequired exact phrase for destructive, paid, or release operations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a write, idempotent, non-destructive operation. The description adds useful context beyond that: it explains why setting isActive matters, references the storefront fallback behavior, and notes the API key requirement. The dry-run/apply flow is left to the schema, but the description still contributes meaningful 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: the purpose, the recommended workflow context, and the auth requirement. The description is front-loaded and contains no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with an output schema and strong annotations, the description covers the essential workflow, auth, and effect. It does not mention the dry-run/apply round-trip, but the input schema documents that. Overall the agent has enough context to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%, and the description does not compensate for the undocumented menuId, isActive, or locationId parameters. It clarifies the isActive concept indirectly, but it does not explain how menuId or locationId should be obtained or used, leaving a real gap for an agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Set menu.isActive explicitly' and states the consequence for the storefront. It clearly distinguishes itself from related siblings by placing it in the import_menu/list_menus workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit guidance: 'Prefer after import_menu when list_menus shows isActive:false.' This identifies when the tool is appropriate in the workflow. It does not state exclusions or alternatives beyond that, but for this domain the guidance is clear.

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 availabilityB
Idempotent

Mark a product available or sold out (today / indefinitely).

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoPreview by default. Apply requires the exact returned planDigest.dry-run
productIdYes
locationIdNo
planDigestNoExact digest returned by a dry-run of the same arguments.
availabilityYes
confirmationTokenNoRequired exact phrase for destructive, paid, or release operations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

B3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 ordersA
Idempotent

Toggle order-ahead when the restaurant is closed. Preserves existing tax settings unless overridden. Requires craveup login.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoPreview by default. Apply requires the exact returned planDigest.dry-run
enabledNo
taxRateNoOmit to keep the location tax rate
locationIdNo
planDigestNoExact digest returned by a dry-run of the same arguments.
taxRateInclusiveNo
confirmationTokenNoRequired exact phrase for destructive, paid, or release operations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 pickupA
Idempotent

Turn takeout on/off for a location. Copies the location main schedule when enabling. Requires craveup login.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoPreview by default. Apply requires the exact returned planDigest.dry-run
enabledNo
locationIdNo
planDigestNoExact digest returned by a dry-run of the same arguments.
confirmationTokenNoRequired exact phrase for destructive, paid, or release operations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 UpA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoPreview by default. Apply requires the exact returned planDigest.dry-run
appIdYesEAS project UUID from extra.eas.projectId
gitRefNomain
targetYes
changelogNo
planDigestNoExact digest returned by a dry-run of the same arguments.
confirmationYesExact approval phrase required before paid EAS work is queued
confirmationTokenNoRequired exact phrase for destructive, paid, or release operations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoPreview by default. Apply requires the exact returned planDigest.dry-run
priceIdYesFrom list_subscription_plans
returnUrlNoWhere Stripe redirects after checkout; defaults to the dashboard
planDigestNoExact digest returned by a dry-run of the same arguments.
confirmationTokenNoRequired exact phrase for destructive, paid, or release operations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 productA
Idempotent

Change a product's name, description, price, or availability. Fields you omit keep their current values. Use import_menu for structural changes (images, modifiers).

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoPreview by default. Apply requires the exact returned planDigest.dry-run
nameNo
priceNo
productIdYes
locationIdNo
planDigestNoExact digest returned by a dry-run of the same arguments.
descriptionNo
availabilityNo
confirmationTokenNoRequired exact phrase for destructive, paid, or release operations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 hoursA
Idempotent

Set when a location accepts orders. Use preset always_open for dev/demo, or pass a custom 7-day schedule. Requires craveup login.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoPreview by default. Apply requires the exact returned planDigest.dry-run
scopeNoorganization updates the shared default; location creates or updates this location overridelocation
presetNoalways_open = 24/7; business_9am_10pm; custom = provide schedulealways_open
scheduleNo
locationIdNo
planDigestNoExact digest returned by a dry-run of the same arguments.
confirmationTokenNoRequired exact phrase for destructive, paid, or release operations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 sessionA
Read-onlyIdempotent

Verify the MCP server can read a craveup login session (CLI keychain or CRAVEUP_ACCESS_TOKEN).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
modeYes
statusYes
changesYes
summaryYes
operationYes
planDigestYes
environmentYes
nextActionsYes
schemaVersionYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 38 tool updatesv0.6.1
    • First observedcancel_crave_auth
    • First observedcheck_mobile_release_readiness
    • First observedcheck_storefront_readiness
    • First observedcomplete_crave_auth
    • First observedconnect_project
    • First observedcreate_location
    • First observedcreate_order_discount
    • First observedcreate_organization
    • First observeddelete_location
    • First observeddelete_product
    • First observedget_integration_guide
    • First observedget_location_orders
    • First observedget_location_settings
    • First observedget_mcp_capabilities
    • First observedget_mobile_release_status
    • First observedget_onboarding_flow
    • First observedget_onboarding_status
    • First observedget_product
    • First observedimport_menu
    • First observedlist_customers
    • First observedlist_discounts
    • First observedlist_locations
    • First observedlist_menus
    • First observedlist_subscription_plans
    • First observedopen_location_for_orders
    • First observedseed_sandbox_analytics
    • First observedset_fulfillment_methods
    • First observedset_location_address
    • First observedset_menu_active
    • First observedset_product_availability
    • First observedset_scheduled_orders_enabled
    • First observedset_takeout_enabled
    • First observedstart_crave_auth
    • First observedstart_mobile_release
    • First observedstart_subscription_checkout
    • First observedupdate_product
    • First observedupdate_store_hours
    • First observedwhoami

TDQS

A3.6/5.0
Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count2/5

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.

Completeness3/5

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

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

Latest Blog Posts

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