CraveUp MCP Server
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CraveUp MCP Server onboard Demo Bistro brand and import menu"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Crave Up MCP Server
A Model Context Protocol (MCP) server that lets AI agents onboard restaurant brands and manage Crave menus, storefronts, and mobile releases — entirely from natural language in chat
Quick Start | Available Tools | Authentication | Documentation
Overview
This MCP server provides Crave platform integration for Claude Code, Cursor, and other MCP-compatible clients. It covers the full merchant lifecycle: creating an organization, wiring a repo, importing menus, configuring locations, going live with subscriptions and payments, managing discounts, and dispatching guarded Expo/EAS mobile releases.
Key Features
Lifecycle Tooling — browser auth, onboarding, go-live, location settings, menus, discounts, readiness checks, mobile releases, and sandbox data
Natural-Language Onboarding — "hook up this repo for Demo Bistro" → login → create org → wire
.env→ import menu → run iOSIdempotent Writes — menu imports, discount creation, and sandbox seeding are safe to re-run
Guarded Mobile Releases — internal TestFlight only; paid EAS work requires a scoped Expo token plus explicit confirmation, and public App Store release remains human-controlled
TypeScript — full type safety with Zod validation
Tested — Vitest coverage for tools, clients, config, auth, and readiness logic
Note: this is a local MCP server. It runs as a stdio subprocess on the developer's machine. An agent can start secure Crave Up browser sign-in/sign-up through
start_crave_auth; the resulting session is shared with the CLI.
After rebuilding
packages/mcp/dist, restart the MCP server in your client (or reload the window) so new tools appear.
Related MCP server: Toast MCP Server
Quick Start
Installation
# From npm (published package)
CRAVEUP_ENVIRONMENT=sandbox npx -y @craveup/mcp
# Inspect the executable without configuring credentials
npx -y @craveup/mcp --help
# Or from the monorepo
pnpm --filter @craveup/mcp build # compiles to dist/Configuration
Claude Code. Register separate sandbox and production processes at user scope so the environment boundary remains visible in every tool call. This is a local stdio server, so there is no hosted MCP URL:
claude mcp add -s user craveup-sandbox \
-e CRAVEUP_ENVIRONMENT=sandbox \
-- npx -y @craveup/mcp
claude mcp add -s user craveup-production \
-e CRAVEUP_ENVIRONMENT=production \
-- npx -y @craveup/mcpRun /mcp in Claude Code to inspect the registration. Start a new Claude Code
session if the current session does not refresh its tool inventory.
Do not switch an already-running server between environments. Use the
craveup-sandbox tools while building and testing, then explicitly select the
craveup-production tools when preparing to launch. Each process has its own
dashboard host, API-key prefix, Clerk configuration, and stored browser session.
Option A — Full NL development bootstrap (recommended for new brands). Register the MCP server without an API key. No repo checkout is needed:
{
"mcpServers": {
"craveup": {
"command": "npx",
"args": ["-y", "@craveup/mcp"],
"env": {
"CRAVEUP_ENVIRONMENT": "sandbox"
}
}
}
}The agent calls start_crave_auth, opens the returned Crave Up URL, and then calls
complete_crave_auth. The user can sign in or create a free account in that browser flow. The
server stores the resulting shared CLI/MCP session in the macOS keychain (or
~/.config/craveup/credentials.json). Alternatively set CRAVEUP_ACCESS_TOKEN in the MCP env.
To exercise tools that are on main but not yet published, swap the command for the local build:
"command": "node", "args": ["/path/to/craveup-turborepo/packages/mcp/dist/cli.js"].
Option B — Menu-only (existing location + API key). Create a merchant API key in Crave Business Manager → Settings → Developer → API Keys:
{
"mcpServers": {
"craveup": {
"command": "npx",
"args": ["-y", "@craveup/mcp"],
"env": {
"CRAVEUP_ENVIRONMENT": "sandbox",
"CRAVEUP_API_KEY": "crv_test_…",
"CRAVEUP_LOCATION_ID": "<default location id>"
}
}
}
}CRAVEUP_ENVIRONMENT is required. The environment selects all dashboard, API, and Clerk hosts
together. CRAVEUP_LOCATION_ID is optional; every menu tool also accepts an explicit locationId.
Mobile releases. To dispatch mobile release workflows, also set a scoped Expo robot-user token in the MCP env:
{
"env": {
"EXPO_TOKEN": "<scoped Expo robot-user token>"
}
}Example chat flow
"This demo-bistro repo — hook it up to Crave for Demo Bistro. Login if you need to, create the org, import the menu, and run it on the iOS simulator."
Agent sequence:
whoami— confirm the shared sessionIf needed:
start_crave_auth→ open its URL →complete_crave_authCreate the organization in Business Manager while MCP organization creation is idempotency-blocked; create any scoped private key there, never through chat
connect_project({ projectPath: "…/demo-bistro", locationId })import_menu(…)from the restaurant sourceRun the storefront or iOS app locally
Exercise menu, fulfillment, and cart flows in sandbox; ordinary Stripe payment admission remains cutover locked
Only after direct-charge activation and an explicit production decision: switch environments and complete subscription and payment onboarding
Available Tools
Entities
CRUD-style operations are available for the following entity types:
Entity | Create | Get | Update | Delete | List |
Organization | ✅ | - | - | - | - |
Location | ✅ | - | ✅ | ✅ | ✅ |
Store Settings | - | ✅ | ✅ | - | - |
Menu | ✅ | - | ✅ | - | ✅ |
Product | ✅¹ | ✅ | ✅ | ✅ | - |
Discount | ✅ | - | - | - | ✅ |
Order | - | - | - | - | ✅ |
Customer | - | - | - | - | ✅ |
Subscription | ✅² | - | - | - | ✅ |
Mobile Release | ✅³ | ✅ | - | - | - |
¹ Products are created in bulk via import_menu. ² start_subscription_checkout opens a Stripe Checkout session; plans themselves are read-only. ³ start_mobile_release dispatches an EAS workflow run; deletion/cancellation stays in EAS.
Checks & Guides
Check | Tool Name | Description |
Go-live Status |
| The dashboard's 6 go-live steps with completion state + next actions |
Storefront Readiness |
| Reads |
Mobile Release Readiness |
| Read-only Expo/EAS preflight for internal releases |
Onboarding Flow |
| NL checklist: login → create org → connect repo → import menu → run |
Session |
| Verify the |
MCP Compatibility |
| Runtime versions, policy digest, and fail-closed compatibility blockers |
Integration Guide |
| Crave.js implementation guidance: storefront, menu display, checkout |
Tool Reference
Tool | Description |
| Return a hosted Crave Up sign-in/sign-up URL for the agent to open |
| Finish the loopback callback and persist the shared CLI/MCP session |
| Abandon a pending sign-in and release its loopback listener |
Tool | Description |
| NL checklist: login → create org → connect repo → import menu → run |
| Verify the |
| Create merchant + location without minting or returning a plaintext API key |
| Write the public API origin and location ID into an Expo app's |
Tool | Description |
| Return the MCP version, tool-policy digest, and unavailable compatibility evidence without credentials |
Tool | Description |
| The dashboard's 6 go-live steps with completion state + next actions |
| Create a location ( |
| Soft-archive a location (frees slug; hides from dashboard) |
| Dashboard locations-stats for the merchant |
| Active orders for a location |
| Customers page for a location |
| Set the street address; the server geocodes (no lat/lng needed) |
| Enable pickup / table service / delivery / room service |
| Production-only plans with price, interval, and trial info |
| Production-only Stripe Checkout URL for the user to pay in the browser |
Tool | Description |
| Read store hours, scheduled-order flag, tax, takeout |
| Set hours ( |
| Toggle order-ahead when closed |
| Enable/disable takeout pickup |
| One-shot fix for "Restaurant is closed. Scheduled orders are not allowed." |
Tool | Description |
| Idempotent full menu import; forces |
| Explicitly activate/deactivate a menu (use when |
| Read back menus exactly as the storefront API serves them |
| Fetch one product with its modifier group ids |
| Partial edits: name, description, price, availability |
| Sold-out toggles |
| Remove a product (category references cleaned up) |
| Implementation guidance: storefront setup, menu display, checkout, import format |
Tool | Description |
| List location promo codes and their current configuration |
| Idempotently create an order-level fixed or percentage promo code (percentage capped at 100) |
Tool | Description |
| Side-effect-free |
The readiness tool reads the published menu and ordering availability, then reads
private integration status for payment configuration. It does not create a cart
or a PaymentIntent. During the current direct-charge cutover, a configured Stripe
integration still reports ready: false: ordinary Stripe checkout in sandbox and
production fails closed with STRIPE_DIRECT_CHARGE_CUTOVER_INCOMPLETE. Surface
checkout as temporarily unavailable and do not retry or bypass that response.
Run craveup apps configure in the Expo/React Native project and commit the generated workflows before using these tools. EAS builds consume plan minutes.
Tool | Description |
| Read-only local preflight for EAS project identity, workflow, credentials, and internal target |
| Dispatch the fixed internal TestFlight workflow after exact confirmation |
| Read the EAS workflow run, build jobs, and submission jobs |
start_mobile_release cannot publish publicly. iOS always goes to internal TestFlight first; public App Store review remains an explicit App Store Connect action. Use craveup apps publish play-internal for Android; the CLI blocks submission unless the local EAS submit profile targets Google Play's internal track.
Tool | Description |
| Idempotently create customers, orders, ratings, and funnel events for the dev test organization. Requires |
Authentication
This server authenticates to Crave with a merchant API key (menu, discount, and readiness tools), a shared CLI/MCP browser session (organization, onboarding, go-live, and location-settings tools), and optionally an Expo token (mobile release tools). The agent starts browser authentication with start_crave_auth; the user can sign in or create an account on the Crave Up-hosted page.
Important: Sandbox vs production
Environment | Dashboard | API | Clerk issuer | API key |
|
|
|
|
|
|
|
|
|
|
Set CRAVEUP_ENVIRONMENT explicitly in the MCP server configuration. The server derives the whole
profile from that value and rejects a test/live key or endpoint mismatch before sending a request.
Sandbox and production sessions are stored separately.
For daily development, register two named MCP servers instead of mutating one server's environment in-process:
craveup-sandbox: build the storefront, configure menus and locations, and exercise catalog and cart flows without crossing into live data. Stripe payment admission remains hard locked during the direct-charge cutover.craveup-production: use the live dashboard and live API-key namespace. Dashboard and setup tools remain usable before onboarding is complete. Checkout remains gated on subscription, Stripe Connect KYC/banking, and cutover activation.
Browser authentication is explicit: call start_crave_auth, open the returned Clerk authorization
URL, then call complete_crave_auth. Normal MCP calls reuse that persisted session and do not open a
browser again.
Test Setup (recommended for management tools)
Sign in to Crave Business Manager → Settings → Developer → API Keys
Create a key for the location you want to work with — copy the
crv_test_…valueSet
CRAVEUP_ENVIRONMENT=sandbox, the server-onlyCRAVEUP_API_KEY, and optionallyCRAVEUP_LOCATION_IDin the MCP server env. Public guides, project wiring, and published menu reads do not send this key.For session-authenticated tools, use
start_crave_authandcomplete_crave_auth, or runcraveup login; both paths use the same secure local session
Live Setup
Start a separate MCP process with
CRAVEUP_ENVIRONMENT=production; do not reuse sandbox credentialsOpen the production dashboard and continue configuring the organization even if the commercial checklist is incomplete
When the business is ready to accept real payments, complete the go-live checklist —
get_onboarding_statusshows the six steps and what's missingVerify payments with
check_storefront_readiness— production requires merchant StripechargesEnabledMint a
crv_live_…key in Business Manager
Once you have credentials
CRAVEUP_ENVIRONMENT=sandbox # required: sandbox or production
CRAVEUP_API_KEY=crv_test_… # prefix must match the environment
CRAVEUP_LOCATION_ID=<location id> # optional default; every tool also accepts locationId
CRAVEUP_ACCESS_TOKEN=<session token> # optional alternative to the keychain session
EXPO_TOKEN=<scoped robot-user token> # only for mobile release toolsEndpoint overrides are normally unnecessary. Sandbox loopback URLs are allowed for local
development. Other custom deployments require CRAVEUP_ALLOW_CUSTOM_ENDPOINTS=true, and the
environment remains visible in whoami and mutating responses.
The private API transport rejects redirects rather than following them, so API-key and session authorization headers are never replayed to a redirect target.
Credential safety
Do not paste Apple passwords, 2FA codes, App Store Connect keys, or Google service-account JSON into chat. Bootstrap interactive credentials in a visible terminal; EAS stores the reusable submission credentials. EXPO_TOKEN must be a scoped Expo robot-user token, never a personal account token.
Common pitfalls
New tools not appearing. After rebuilding
packages/mcp/dist, restart the MCP server in your client (or reload the window) — clients cache the tool list per process.Keys are location-scoped. The API rejects requests for locations the key cannot access; use the key minted for the location you're targeting, or pass an explicit
locationId.Session tools failing while key tools work. The two auth modes are independent — a valid
CRAVEUP_API_KEYdoes not log you in. Callstart_crave_auth, open the returned URL, then callcomplete_crave_auth."Restaurant is closed. Scheduled orders are not allowed." Not an auth problem: run
open_location_for_orders({ locationId })for the one-shot fix, then retry.Sandbox seeding refuses to run.
seed_sandbox_analyticsis guarded by design: it requiresCRAVEUP_ENVIRONMENT=sandbox; there is no production override.
Development
Building
pnpm --filter @craveup/mcp build # compile to dist/Testing
pnpm --filter @craveup/mcp test # Vitest unit and MCP round-trip suitesProject Structure
src/
├── clients/ # Crave + Expo/EAS API clients
├── tools/ # MCP tool definitions (9 categories)
├── handlers/ # Business logic (readiness, onboarding, guides)
├── helpers/ # Zod schemas, session, env config
├── cli.ts # stdio entry point (craveup-mcp bin)
└── index.ts # Server assembly + tool registration
tests/
└── unit/ # Vitest suites
docs/
├── ARCHITECTURE.md # Layers, auth modes & design decisions
└── TESTING.md # Testing patterns & conventionsDocumentation
Document | Description |
Version history and all changes | |
Layers, authentication modes, and design decisions | |
Testing strategy, in-memory MCP transport pattern, conventions | |
Hosted Crave Up MCP server guide + Crave.js integration docs (also served at runtime via | |
MCP specification |
Error Handling
Every tool returns the same versioned MerchantOperationResult in both text and
structuredContent. Review-required writes default to a side-effect-free dry run; apply requires the
exact intent digest, and destructive/paid/release operations also require an explicit confirmation
phrase. The generated mutation inventory is the source of truth for
credentials, scopes, risks, preview requirements, and current idempotency strategy.
Policies marked unverified fail closed even after preview. At present this applies to
create_organization, create_location, start_subscription_checkout, and
start_mobile_release; use Business Manager or the provider workflow until the authoritative
service supplies a durable operation identity and response-loss reconciliation.
Tools return structured MCP error results (isError: true) rather than throwing: missing or invalid auth reports which credential is needed (session vs API key vs EXPO_TOKEN), and the API rejects keys that cannot access the requested location. Paid EAS dispatch requires an exact confirmation phrase, location deletion is a recoverable soft-archive, and sandbox seeding refuses to run unless all dev-environment guards are set. The current digest binds environment, policy, and requested arguments; it does not yet bind authoritative target pre-state. get_mcp_capabilities reports that limitation, and also reports project generation, API-range compatibility, cursor pagination, and durable jobs as unavailable until their reviewed release evidence exists.
Contributing
Note: development happens in the private Crave Up monorepo; the public craveup/craveup-mcp repo is a read-only mirror synced automatically from
packages/mcp. Bug reports and feature requests are welcome as issues on the mirror; direct pushes and PRs there will be overwritten by the next sync.
Tool naming convention
get_*/list_*/check_*— read-onlycreate_*/update_*/set_*/delete_*— writes, idempotent where possiblestart_*— kicks off an external process (checkout, EAS workflow) and returns a handle
Add tests in tests/unit/ for every new tool; pnpm --filter @craveup/mcp test must pass before publishing (prepublishOnly runs build + tests).
License
MIT — see LICENSE.
Available Tools
38 toolscancel_crave_authCancel Crave Up authenticationAIdempotent
Cancel a pending browser authentication flow and close its local callback.
Inputs: no named parameters. Returns: data, mode, status, changes, +6 more
check_mobile_release_readinessCheck mobile app release readinessARead-onlyIdempotent
Read-only Expo/EAS preflight for internal TestFlight or Google Play internal testing. Checks app identity, production build profile, generated workflow, internal-only Android track, EAS project link, and EXPO_TOKEN. Run craveup apps configure first.
Inputs: target, projectPath. Returns: data, mode, status, changes, +6 more
check_storefront_readinessCheck if a location can accept storefront ordersARead-onlyIdempotent
Hybrid wizard readiness probe: verifies menu has products, a read-only ordering-readiness GET reports takeout availability without creating a cart, and payment configuration is ready. Connected Square is authoritative and must itself be ready; otherwise Stripe is used. It does not create a PaymentIntent or Square payment. Does not use dashboard isOnboardingCompleted. Public probes use the direct Storefront API; private integration status still requires CRAVEUP_API_KEY.
Inputs: locationId. Returns: data, mode, status, changes, +6 more
complete_crave_authComplete Crave Up authenticationAIdempotent
Complete the browser login started by start_crave_auth and save the shared CLI/MCP session securely.
Inputs: no named parameters. Returns: data, mode, status, changes, +6 more
connect_projectWire a repo to CraveBIdempotent
Write the public API origin and location ID into an Expo/React Native project .env. Browser and mobile storefronts connect directly without an API key.
Inputs: locationId (required), projectPath (required), mode, baseUrl, +2 more. Returns: data, mode, status, changes, +6 more
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.
Inputs: name (required), mode, address, planDigest, +1 more. Returns: data, mode, status, changes, +6 more
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.
Inputs: code (required), amount (required), isFixed (required), startDate (required), +14 more. Returns: data, mode, status, changes, +6 more
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.
Inputs: name (required), mode, country, mintApiKey, +2 more. Returns: data, mode, status, changes, +6 more
delete_locationArchive (soft-delete) a locationADestructiveIdempotent
Soft-deletes a location: sets archivedAt, frees the slug, removes it from the merchant location list and Clerk org metadata. Order/menu rows remain for audit. Use to remove unused duplicates. Requires craveup login.
Inputs: locationId (required), mode, planDigest, confirmationToken. Returns: data, mode, status, changes, +6 more
delete_productDelete a productADestructiveIdempotent
Remove a product from the location. Category references are cleaned up.
Inputs: productId (required), mode, locationId, planDigest, +1 more. Returns: data, mode, status, changes, +6 more
get_integration_guideGet Crave.js implementation guidanceARead-onlyIdempotent
Documented patterns for implementing a Crave storefront: SDK setup, menu display, checkout flow, and the bulk menu import format. Read the relevant guide before writing storefront code.
Inputs: topic (required). Returns: data, mode, status, changes, +6 more
get_location_ordersList active orders at a locationARead-onlyIdempotent
Fetch active (new) orders for a location — same data as the Orders Manager. Requires craveup login.
Inputs: locationId. Returns: data, mode, status, changes, +6 more
get_location_settingsRead location store settingsARead-onlyIdempotent
Fetch store hours, scheduled-order flag, tax settings, and takeout config for a location. Requires craveup login (Clerk session).
Inputs: locationId. Returns: data, mode, status, changes, +6 more
get_mcp_capabilitiesGet Crave MCP compatibility statusARead-onlyIdempotent
Return safe runtime versions, the tool-policy digest, and fail-closed capability blockers. Use this before project generation or long-running automation.
Inputs: no named parameters. Returns: data, mode, status, changes, +6 more
get_mobile_release_statusGet an EAS mobile release runARead-onlyIdempotent
Fetch a previously dispatched EAS Workflow run and its build/submission jobs. Requires the same scoped EXPO_TOKEN used to start the release.
Inputs: workflowRunId (required). Returns: data, mode, status, changes, +6 more
get_onboarding_flowCrave Up NL onboarding checklistARead-onlyIdempotent
How to take a restaurant repo from zero to a live Crave-powered app in one chat: login → create org → connect .env → import menu → run.
Inputs: no named parameters. Returns: data, mode, status, changes, +6 more
get_onboarding_statusRead go-live onboarding statusARead-onlyIdempotent
Fetch the 6 dashboard go-live steps (subscription, business information, address, hours, menu, ordering methods) with completion state and the suggested next action for each pending required step. Sandbox marks subscription and Stripe Connect as not required. In production, the business-information step lists the outstanding Stripe KYC items (outstandingRequirements) — tell the user what Stripe still needs, then hand them the Stripe-hosted link. Completing all six marks the merchant onboarded. Requires craveup login.
Inputs: no named parameters. Returns: data, mode, status, changes, +6 more
get_productGet a productARead-onlyIdempotent
Fetch one product (menu-editor view) by id, including its modifier group ids.
Inputs: productId (required), locationId. Returns: data, mode, status, changes, +6 more
list_customersList customers at a locationARead-onlyIdempotent
Fetch the dashboard Customers page for a location (grouped by Crave customerId). Guest checkouts with email now create a customerId. Requires craveup login.
Inputs: page, limit, locationId. Returns: data, mode, status, changes, +6 more
list_discountsList location discountsARead-onlyIdempotent
List every discount configured for one authorized location. Requires a Crave merchant API key; the API verifies that the key can access the requested location.
Inputs: locationId. Returns: data, mode, status, changes, +6 more
list_locationsList merchant locationsARead-onlyIdempotent
List locations for the authenticated merchant (dashboard locations-stats). Use to verify multi-location setup without opening the browser. Requires craveup login.
Inputs: limit. Returns: data, mode, status, changes, +6 more
list_subscription_plansList Crave Up subscription plansARead-onlyIdempotent
List available subscription plans (name, price, billing interval, trial). Use the priceId with start_subscription_checkout. Production only; sandbox development does not require a subscription. Requires craveup login.
Inputs: no named parameters. Returns: data, mode, status, changes, +6 more
open_location_for_ordersUnblock ordering for a locationAIdempotent
Fixes "Restaurant is closed. Scheduled orders are not allowed." by setting 24/7 store hours, enabling scheduled orders, and enabling takeout. Requires craveup login.
Inputs: mode, locationId, planDigest, confirmationToken. Returns: data, mode, status, changes, +6 more
seed_sandbox_analyticsSeed sandbox analytics test dataAIdempotent
Create deterministic customers, orders, ratings, and storefront funnel events for the Alvin's Test Hospitality Group dev organization. This tool is idempotent and refuses production hosts, production API processes, non-dev databases, and mismatched locations.
Inputs: locationId (required), confirmationSlug (required), mode, planDigest, +1 more. Returns: data, mode, status, changes, +6 more
set_fulfillment_methodsSet ordering methodsAIdempotent
Choose how customers order: takeout (pickup), table_side, delivery, room_service. At least one is required to accept orders; store hours must be set first. Requires craveup login.
Inputs: fulfillmentMethods (required), mode, locationId, planDigest, +1 more. Returns: data, mode, status, changes, +6 more
set_location_addressSet location street addressAIdempotent
Update a location address (shown on the storefront and used for delivery/pickup). Omit lat/lng — the server geocodes the address. Requires craveup login.
Inputs: city (required), state (required), street (required), country (required), +9 more. Returns: data, mode, status, changes, +6 more
set_product_availabilitySet product availabilityBIdempotent
Mark a product available or sold out (today / indefinitely).
Inputs: productId (required), availability (required), mode, locationId, +2 more. Returns: data, mode, status, changes, +6 more
set_scheduled_orders_enabledEnable or disable scheduled ordersAIdempotent
Toggle order-ahead when the restaurant is closed. Preserves existing tax settings unless overridden. Requires craveup login.
Inputs: mode, enabled, taxRate, locationId, +3 more. Returns: data, mode, status, changes, +6 more
set_takeout_enabledEnable or disable takeout pickupAIdempotent
Turn takeout on/off for a location. Copies the location main schedule when enabling. Requires craveup login.
Inputs: mode, enabled, locationId, planDigest, +1 more. Returns: data, mode, status, changes, +6 more
start_crave_authSign in or sign up for Crave UpAIdempotent
Start secure browser authentication for CLI and MCP access. Open the returned Crave Up URL for the user; they can sign in or create a free account without leaving the flow.
Inputs: no named parameters. Returns: data, mode, status, changes, +6 more
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.
Inputs: appId (required), target (required), confirmation (required), mode, +4 more. Returns: data, mode, status, changes, +6 more
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.
Inputs: priceId (required), mode, returnUrl, planDigest, +1 more. Returns: data, mode, status, changes, +6 more
update_productUpdate a productAIdempotent
Change a product's name, description, price, or availability. Fields you omit keep their current values. Use import_menu for structural changes (images, modifiers).
Inputs: productId (required), mode, name, price, +5 more. Returns: data, mode, status, changes, +6 more
update_store_hoursUpdate location store hoursAIdempotent
Set when a location accepts orders. Use preset always_open for dev/demo, or pass a custom 7-day schedule. Requires craveup login.
Inputs: mode, scope, preset, schedule, +3 more. Returns: data, mode, status, changes, +6 more
whoamiCheck Crave login sessionARead-onlyIdempotent
Verify the MCP server can read a craveup login session (CLI keychain or CRAVEUP_ACCESS_TOKEN).
Inputs: no named parameters. Returns: data, mode, status, changes, +6 more
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
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.
Maintenance
Related MCP Connectors
Run your restaurant from an AI client: orders, menu, reports, refunds, payouts and staff.
Run your restaurant group's events, leads, invoices and marketing drafts from your AI assistant.
Run customer onboarding from your AI tool: build plans, deploy agents, find bottlenecks.
Connect AI to store orders, products and inventory with scoped access and human approvals.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables any AI agent to discover, query, and order from a restaurant's storefront via MCP tools. It handles menu lookup, modifier validation, and enforces a mandatory confirmation gate before payment, replacing the human-operated phone line.-
- AlicenseAqualityCmaintenanceEnables AI assistants to manage restaurant operations by integrating with Toast POS, including orders, menus, employees, payments, inventory, and reporting through 50+ tools and 18 React apps.816MIT

Canuckeats MCPofficial
FlicenseNot gradedqualityDmaintenanceEnables AI agents to browse menus and place real food delivery orders from UberEats and DoorDash across 89 Canadian cities.1-- FlicenseBqualityDmaintenanceEnables AI assistants to manage Gerent365 restaurant and business operations via natural language, including employees, schedules, payroll, tips, time tracking, customers, products, reservations, and reports.531-