CraveUp MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| EXPO_TOKEN | No | Scoped Expo robot-user token. Required only for mobile release tools. | |
| CRAVEUP_API_KEY | No | Merchant API key. Must match the environment prefix (crv_test_ for sandbox, crv_live_ for production). Used for menu, discount, and readiness tools. | |
| CRAVEUP_ENVIRONMENT | Yes | Required. The environment selects all dashboard, API, and Clerk hosts together. Must be 'sandbox' or 'production'. | |
| CRAVEUP_LOCATION_ID | No | Optional default location ID. Every tool also accepts an explicit locationId. | |
| CRAVEUP_ACCESS_TOKEN | No | Optional alternative to the keychain session. A session token for CLI/MCP shared browser authentication. | |
| CRAVEUP_ALLOW_CUSTOM_ENDPOINTS | No | Set to 'true' to allow custom deployments with endpoint overrides. Normally unnecessary. | false |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_mcp_capabilitiesA | Return safe runtime versions, the tool-policy digest, and fail-closed capability blockers. Use this before project generation or long-running automation. |
| start_crave_authA | 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. |
| complete_crave_authA | Complete the browser login started by start_crave_auth and save the shared CLI/MCP session securely. |
| cancel_crave_authA | Cancel a pending browser authentication flow and close its local callback. |
| get_onboarding_flowA | 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. |
| whoamiA | Verify the MCP server can read a craveup login session (CLI keychain or CRAVEUP_ACCESS_TOKEN). |
| create_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. |
| connect_projectB | 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. |
| get_location_settingsA | Fetch store hours, scheduled-order flag, tax settings, and takeout config for a location. Requires craveup login (Clerk session). |
| update_store_hoursA | Set when a location accepts orders. Use preset always_open for dev/demo, or pass a custom 7-day schedule. Requires craveup login. |
| set_scheduled_orders_enabledA | Toggle order-ahead when the restaurant is closed. Preserves existing tax settings unless overridden. Requires craveup login. |
| set_takeout_enabledA | Turn takeout on/off for a location. Copies the location main schedule when enabling. Requires craveup login. |
| open_location_for_ordersA | Fixes "Restaurant is closed. Scheduled orders are not allowed." by setting 24/7 store hours, enabling scheduled orders, and enabling takeout. Requires craveup login. |
| check_mobile_release_readinessA | 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. |
| start_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. |
| get_mobile_release_statusA | Fetch a previously dispatched EAS Workflow run and its build/submission jobs. Requires the same scoped EXPO_TOKEN used to start the release. |
| get_onboarding_statusA | 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. |
| create_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. |
| delete_locationA | 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. |
| list_locationsA | List locations for the authenticated merchant (dashboard locations-stats). Use to verify multi-location setup without opening the browser. Requires craveup login. |
| get_location_ordersA | Fetch active (new) orders for a location — same data as the Orders Manager. Requires craveup login. |
| list_customersA | Fetch the dashboard Customers page for a location (grouped by Crave customerId). Guest checkouts with email now create a customerId. Requires craveup login. |
| set_location_addressA | Update a location address (shown on the storefront and used for delivery/pickup). Omit lat/lng — the server geocodes the address. Requires craveup login. |
| set_fulfillment_methodsA | 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. |
| list_subscription_plansA | 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. |
| start_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. |
| seed_sandbox_analyticsA | 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. |
| list_discountsA | 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. |
| create_order_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. |
| import_menuA | 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. |
| set_menu_activeA | 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. |
| list_menusA | Read back the menus exactly as the storefront API serves them (menus → categories → products). Use to verify an import or inspect current state. |
| get_productA | Fetch one product (menu-editor view) by id, including its modifier group ids. |
| update_productA | Change a product's name, description, price, or availability. Fields you omit keep their current values. Use import_menu for structural changes (images, modifiers). |
| set_product_availabilityB | Mark a product available or sold out (today / indefinitely). |
| delete_productA | Remove a product from the location. Category references are cleaned up. |
| check_storefront_readinessA | 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. |
| get_integration_guideA | 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 38 tools
Most tools cleanly separate by resource and action (auth, locations, menu, orders, billing, mobile). A few naming pairs and composite helpers overlap conceptually, such as get_onboarding_flow vs get_onboarding_status and open_location_for_orders vs the individual settings toggles, but descriptions are generally sufficient to disambiguate.
Tool names consistently follow a snake_case verb-first pattern (get_, create_, set_, list_, update_, delete_, start_, complete_, cancel_). 'whoami' is the only stylistic outlier, but it is a recognizable standard command and does not create confusion.
38 tools is well above the 25-tool threshold for feeling appropriately scoped. The server covers a broad restaurant-platform domain, but the set feels heavy and includes composite helpers and meta guides that could be consolidated.
Core lifecycles are covered for auth, locations, menu products, and mobile releases. However, order handling ends at fetching active orders, discounts have no update/delete, and subscription management lacks cancellation/update paths, leaving some workflows with dead ends.