Curri's Model Context Protocol server gives any MCP-aware agent — Claude Desktop, Claude Code, Cursor, your own server-to-server bot — the same delivery, account, and operations tools Curri uses internally.
In Claude Code, one command connects Curri MCP and the OAuth flow walks you through sign-in — no token to manage, no config file to edit. Same path works in Cursor and any other MCP client that supports OAuth dynamic client registration.
claude mcp add --transport http curri-api https://mcp.curri.com/mcp --scope userSame OAuth flow, different client. Hand this prompt to the agent running on your machine — it knows where its own config file lives and will wire Curri MCP up correctly.
For backend agents, batch jobs, and anything that isn't a local MCP client. Any HTTP library that can POST JSON-RPC 2.0 with an OAuth bearer token works. Run the authorization-code flow once to mint a token, then keep it fresh with the refresh token you get back — API keys are not accepted here.
curl -X POST https://mcp.curri.com/mcp \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/list" }'The server forwards each tool call to api.curri.com/graphql with your token, so resolver-level auth and validation apply just like a normal Curri API client. Tools you didn't grant a scope for aren't registered at all — they never appear in tools/list.
7 tools available. Every entry below is the title and name an MCP client sees on tools/list.
Quote a delivery across two or more stops using the same logged-in pricing flow as the curri-app booking wizard. Returns one row per vehicle with the whole-route price for the requested priority, a price comparison across all three priority tiers, and accessorial and toll breakdowns. To book, pass the row `id` to `book_delivery` for a two-stop route, or as `quoteId` to `book_multi_stop_delivery` for three or more stops. Booking is a two-step, preview-then-commit flow: call the booking tool with `intent: "preview"`, confirm with the operator, then call again with `intent: "commit"`.
Book a delivery using a quote id from `quote_delivery`. This places a PAID booking, so it is two-phase: call with `intent: "preview"` to see what will be booked plus a `stateHash`, confirm with the operator, then call again with `intent: "commit"` and the same `stateHash` to place the booking. Returns the delivery id, external id, tracking URL, and status. Books a two-stop route only — for three or more stops, use `book_multi_stop_delivery`.
Book a delivery without first calling `quote_delivery` — sets `skipQuote: true` on the underlying bookDelivery mutation. This places a PAID booking, so it is two-phase: call with `intent: "preview"` to see the route and vehicle plus a `stateHash`, confirm with the operator, then call again with `intent: "commit"` and the same `stateHash`. Use this when your agent already knows the vehicle type and doesn't need to show the caller a quote first.
Book a route with three or more stops using one vehicle row from `quote_delivery` — pass that row's `id` as `quoteId`, a contact for every stop, and the orders that move between stops. This places a PAID booking, so it is two-phase: call with `intent: "preview"` to see what will be booked plus a `stateHash`, confirm with the operator, then call again with `intent: "commit"` and the same `stateHash`. The route is booked as one delivery with every stop on it; returns its id, external id, tracking URL, and status.
Look up a delivery by any of its identifiers (internal id, external id, hashed public id, or payload external id). Returns status, tracking info, origin/destination, and scheduling fields.
List deliveries visible to the authenticated API user, with optional filters by free-text query, account, vehicle type, or status. Returns a compact summary of each delivery (ids, status, priority, timestamps, tracking URL, origin/destination city-state). Use `get_delivery` to fetch full details for a specific id.
Full status report for a payload (an item to be delivered): status timeline, manifest items, delivery windows (with a premium-window flag), origin/destination, account, tracking link, stops and stop tasks with arrival/departure/completion times, and proof-of-delivery photo URLs. Curri admins additionally get the admin page link and Home Depot batch lifecycle details. Look up by payload id, or by order/PO number within an account.