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 non-Curri-email accounts and for any server-to-server caller. Grab a user ID and API key from your Curri dashboard, then hand them to your AI with the prompt below — it generates the base64-encoded Basic-auth header and writes the right config for whichever client you're running.
If you'd rather do it without an AI in the loop, here are the steps the prompt above is asking for.
1. Generate the token.
echo -n "user_XXXXXXXXXX:YOUR-API-KEY" | base642a. Claude Code:
claude mcp add --transport http curri-api https://mcp.curri.com/mcp \
--header "Authorization: Basic $TOKEN" --scope user2b. Claude Desktop — edit ~/Library/Application Support/Claude/claude_desktop_config.json and add:
{
"mcpServers": {
"curri-api": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.curri.com/mcp",
"--header",
"Authorization: Basic $TOKEN"
]
}
}
}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 a Basic-auth header works.
curl -X POST https://mcp.curri.com/mcp \
-H "Authorization: Basic $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 credentials, so resolver-level auth and validation apply just like a normal Curri API client.
6 tools available. Every entry below is the title and name an MCP client sees on tools/list.
Quote a delivery across one or more stops using the same logged-in pricing flow as the curri-app booking wizard. Returns the per-vehicle price for the requested priority, plus a price comparison across all three priority tiers, plus accessorial and toll breakdowns. Pass the returned quote `id` to `book_delivery` to book. Booking is a two-step, preview-then-commit flow: call `book_delivery` 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. For a multi-stop booking, supply `deliveryPayloadInputs` referencing the per-leg quote ids.
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.
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.