# Onfleet MCP connector

Connect Onfleet to Elaichi once and Claude, ChatGPT, Cursor, or any MCP client can create and update delivery tasks, check driver status, and look up recipients inside each person's own Onfleet access.

Source: https://elaichi.ai/connectors/onfleet/

## Facts

| | |
| --- | --- |
| Application | Onfleet |
| Category | Logistics |
| AI tools | 78 |
| Authentication | Connects with an API key |
| Bring your own OAuth app | No |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. Connected tools are never listed one by one, however few there are. The endpoint advertises `search_tools` and `execute_tool` instead |

## What you can ask once Onfleet is connected

- Create a delivery task for 42 Oak Street, window 2 to 4pm
- Which tasks are still unassigned for this afternoon?
- Find the recipient with phone 555 0134 and show their tasks

## Connect Onfleet in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Onfleet.
2. Optionally set Share with, then press Connect.
3. Paste an Onfleet API key. One person generates a token in Onfleet and pastes it once. Everyone else works through Share with, and never sees it.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Onfleet tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Onfleet MCP connector for Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Onfleet MCP connector for ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Onfleet MCP connector for Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Onfleet to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a Onfleet tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Onfleet through Elaichi

### Create today's delivery tasks in one go

Dispatch. Paste the day's orders and have each one created in Onfleet with its destination and recipient, then auto-assigned to the drivers who are on shift.

### Find a delivery from a phone number

Support. When a customer calls, look up the recipient by phone, pull up their task, and tell them where the delivery stands and who is bringing it.

### Reschedule a route when plans change

Operations. Update a task's time window and notes, clone a recurring pickup for tomorrow, or mark a task complete after a driver confirms by phone.

### Onboard a new driver before their shift

Fleet. Create the worker in Onfleet, put them on the right team, and correct their phone or vehicle details without opening the dashboard.

### Check whether the bulk upload finished

Warehouse. After importing hundreds of tasks, ask for the batch status and find out which tasks were created and which ones need a fix.

### Answer a client's question about their deliveries

Account management. List the tasks for a client's deliveries and summarize what was completed, what is still pending, and which drivers handled each one.

## Frequently asked questions

### How do I connect Onfleet to Claude?

In Elaichi, choose Onfleet and paste an API key from your Onfleet dashboard settings, which is the only sign-in step Onfleet asks for. There is no OAuth application to register and no client ID or secret to generate. Then open Claude, go to Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp. Your Onfleet tasks, workers, and recipients are available in Claude from that point.

### Does Onfleet work with ChatGPT and Cursor as well as Claude?

Yes. Once Onfleet is connected in Elaichi, the same endpoint, https://api.elaichi.ai/mcp, works in Claude, ChatGPT, Cursor, any other MCP client, and the Elaichi Agent. You connect Onfleet once and every client picks it up.

### What can an AI agent actually do with my Onfleet data?

An agent can create delivery and pickup tasks in Onfleet, update their time windows and notes, clone them, auto-assign them to available drivers, and mark them complete. It can look up a recipient by phone number, check the status of a bulk task upload, and add or update drivers and teams. Short, concrete asks such as "show unassigned tasks for this afternoon" work better than long paragraphs.

### Does connecting Onfleet give the AI access to my whole fleet?

The AI can only reach what the Onfleet API key you pasted can reach, and each person signs in to Elaichi as themselves before they use it. Elaichi can narrow that access further, for example to reading tasks only, but it can never widen what Onfleet itself allows.

### Can my team share one Onfleet connection?

Yes. One person connects Onfleet in Elaichi and shares it with a team, and nobody else ever sees or handles the Onfleet API key. Each teammate still signs in to Elaichi as themselves, so the audit log names the person who created or changed a task, not a shared account.

### Can I stop an agent from deleting or changing things in Onfleet?

Yes. Restrictions in Elaichi apply per action, so you can allow reading and creating Onfleet tasks while blocking deletion of tasks or workers. A restricted action is never advertised to Claude, ChatGPT, or any other client, so no prompt can reach it.

### What happens to an Onfleet connection when someone leaves?

Offboarding a person in Elaichi ends their access to Onfleet through every client at once. If they had shared an Onfleet connection with a team, it keeps working for everyone else. Disconnecting Onfleet once in Elaichi removes it from Claude, ChatGPT, Cursor, and every other client together.

### Does the Onfleet MCP connector work with Gemini, Codex, Claude Code or other MCP clients?

Yes. Onfleet is reached over the same MCP endpoint every client uses, so anything that speaks MCP can call it — Gemini, Codex, Claude Code, Windsurf, Cline, Zed and OpenCode among them — alongside Claude, ChatGPT, Cursor, and the Elaichi Agent. The tools on offer and the access behind them are identical whichever client asks. Only the setup screen differs.

## All 78 Onfleet tools

Every tool below is callable through https://api.elaichi.ai/mcp once Onfleet is connected, subject to the toolbox it is in and the restrictions on the caller.

- **Create a Onfleet task** (Create). Create a task in Onfleet, passing either existing destination/recipient IDs or inline objects that are auto-created during task creation. Returns the created task including id, shortId, state, destination, recipients, and trackingURL. Required: destination and recipients. Timestamps must be Unix time in milliseconds.
- **List all Onfleet tasks** (List). List all tasks in the Onfleet organization, sorted by creation time and filtered by a from/to Unix-millisecond range. Returns tasks including id, shortId, state, worker, destination, recipients, and notes. Required: from. Up to 64 tasks per page; pass lastId to continue paginating.
- **Get single Onfleet task by ID** (Get). Get a single Onfleet task by id, including completion details, feedback, and the live tracking URL. Returns: id, code, message. Required: id. Set assignmentHistory=true to include container assignment history.
- **Update a Onfleet task by ID** (Update). Update an Onfleet task by id, sending only the fields to change. Returns the updated task including id, shortId, state, notes, container, destination, and recipients. Required: id. For active tasks only notes and metadata can be updated; for completed tasks only metadata and customFields.
- **Delete a Onfleet task by ID** (Delete). Delete an Onfleet task by id. Returns an empty 204 response on success. Active or completed tasks cannot be deleted.
- **Onfleet tasks clone** (Action). Clone an Onfleet task by id. Returns the cloned task object including id, shortId, trackingURL, state, sourceTaskId, container, recipients, and destination. Required: task_id.
- **Onfleet tasks auto assign** (Assign). Automatically assign a list of existing Onfleet tasks to available on-duty drivers. Returns: destination. Required: tasks (array of task ids) and options.mode (distance or load).
- **Onfleet tasks batch job status** (Action). Check the status of an Onfleet asynchronous batch task-creation job. Returns: code, message. Required: batch_id.
- **Onfleet tasks batch status** (Action). Check the status of an Onfleet asynchronous batch task-creation job using the job id returned when the batch was submitted. Returns: code, message. Required: batch_async_id.
- **Onfleet tasks bulk create** (Create). Create multiple Onfleet tasks in a single synchronous batch request. Returns: destination. Required: tasks (an array of task objects). Batches over 25 tasks may hit a 70-second internal timeout; use the async batch endpoint for larger batches.
- **Onfleet tasks bulk create async** (Create). Create up to 500 Onfleet tasks in bulk asynchronously. Returns: destination. Required: tasks. Processing is asynchronous — pass the jobId to the batch job status endpoint to retrieve the created tasks.
- **Onfleet tasks complete** (Complete). Force complete an active Onfleet task by id. Returns the full task object including id, state, completionDetails, destination, and recipients. Required: task_id. Pass completionDetails to record success and notes; only active tasks can be force completed.
- **Onfleet tasks get shortid** (Get). Get a single Onfleet task by its shortId. Returns the full task object including id, shortId, state, trackingURL, destination, and recipients. Required: short_id. Usage is the same as the get single task endpoint.
- **Create a Onfleet worker** (Create). Create a worker in Onfleet. A temporary password is sent to the worker's phone by SMS along with mobile app download details. Returns the created worker including id, name, phone, teams, onDuty, accountStatus, and vehicle. Required: name, phone, teams.
- **List all Onfleet workers** (List). List all workers in your Onfleet organization. Returns worker records including id, name, phone, onDuty, teams, location, and vehicle. All filters are optional; narrow them to avoid the 70-second internal timeout on large organizations.
- **Get single Onfleet worker by ID** (Get). Get a single Onfleet worker by id. Returns the worker record including id, name, phone, onDuty, teams, tasks, location, and vehicle. Set analytics=true to include duty events, distance, and time analytics, optionally scoped with from/to (max 24 hours). Required: id.
- **Update a Onfleet worker by ID** (Update). Update an Onfleet worker by id. Returns the updated worker including id, name, phone, teams, onDuty, delayTime, and vehicle. Required: id. Note that phone cannot be updated programmatically; the request will not trigger an error.
- **Delete a Onfleet worker by ID** (Delete). Delete an Onfleet worker by id. Workers with an active task cannot be deleted until the task has been completed. Returns an empty 204 response on success. Required: id.
- **Create a Onfleet destination** (Create). Create an Onfleet destination from a parsed address (number, street, city, country) or a single unparsed string, optionally with [longitude, latitude] coordinates. Returns the destination with id, timeCreated, timeLastModified, location, address, notes, and metadata. Required: address. address.unparsed cannot be combined with location; location requires at least address.city and address.country.
- **Get single Onfleet destination by ID** (Get). Get a single Onfleet destination by id. Returns the destination object with id, timeCreated, timeLastModified, geocoded location, full address details, notes, and metadata. Required: id.
- **Create a Onfleet recipient** (Create). Create a recipient in Onfleet. The phone number is the unique identifier and cannot be changed later. Returns: id, organization, timeCreated, timeLastModified, name, phone, notes, skipSMSNotifications, metadata, code, message. Required: phone.
- **Update a Onfleet recipient by ID** (Update). Update an existing recipient in Onfleet by id. The phone number is a unique identifier and cannot be changed. Returns: id, organization, timeCreated, timeLastModified, name, phone, notes, skipSMSNotifications, metadata, code, message. Required: id.
- **Onfleet recipients get by phone** (Get). Look up a single recipient in Onfleet by phone number. Returns: id, organization, timeCreated, timeLastModified, name, phone, notes, skipSMSNotifications, metadata, code, message. Required: phone.
- **Create a Onfleet team** (Create). Create a new Onfleet team with assigned workers, managers, and an optional hub. Returns the created team object including id, name, timeCreated, workers, managers, hub, and enableSelfAssignment. Required: name, workers, managers. Team names must be unique within the organization.
- **List all Onfleet teams** (List). List all Onfleet teams in the organization. Returns an array of team objects including id, name, workers, managers, hub, tasks, timeCreated, and timeLastModified.
- **Get single Onfleet team by ID** (Get). Get a single Onfleet team by id. Returns the team object including id, name, workers, managers, hub, tasks, timeCreated, and timeLastModified. Required: id.
- **Update a Onfleet team by ID** (Update). Update an Onfleet team by id, such as reassigning its workers, managers, or hub. Returns the updated team object including id, name, timeCreated, workers, managers, and hub. Required: id. Workers and managers must exist within your organization.
- **Delete a Onfleet team by ID** (Delete). Delete an Onfleet team by id. Returns an empty response on success (the API responds 200 OK with no body). Required: id.
- **Create a Onfleet webhook** (Create). Create an Onfleet webhook that fires a request to your URL whenever the trigger condition is met. Returns: id, count, url, trigger, isEnabled, scopeId, canReceiveConnectionEvents. Requires url, name, and trigger; the URL must be HTTPS with a valid certificate and must answer Onfleet's validation check.
- **List all Onfleet webhooks** (List). List all webhooks configured in Onfleet. Returns each webhook's id, name, url, trigger, count, isEnabled, scopeId, and canReceiveConnectionEvents; isEnabled flips to false after 300 consecutive failed deliveries.
- **Delete a Onfleet webhook by ID** (Delete). Delete an Onfleet webhook by id. Returns an empty 204 response on success. Required: id.
- **Update a Onfleet webhook by ID** (Update). Update an Onfleet webhook by id, changing its url, trigger, or connection-event settings. Returns: id, name, count, url, trigger, isEnabled, scopeId, canReceiveConnectionEvents. Required: id. Submit null for scopedApiKeyId unless assigning a scoped API key.
- **Update a Onfleet container by ID** (Update). Update an Onfleet container — the ordered task-assignment list for an organization, team, or worker — to set or insert its assigned tasks. Newly included tasks are removed from other containers. Returns: type, organization, destination. Required: container_type, id. Containers hold a hard limit of 10,000 assigned tasks; concurrent mutations may return 412 responses.
- **Create a Onfleet admin** (Create). Create an Onfleet administrator in your organization with a name, email, phone, team assignments, and a type of super or standard. Returns the created admin record including id, name, email, type, isReadOnly, and timeCreated.
- **List all Onfleet admins** (List). List all administrators in your Onfleet organization, including super admins and standard dispatchers. Returns each admin with id, name, email, type, isActive, phone, teams, and metadata.
- **Update a Onfleet admin by ID** (Update). Update an Onfleet administrator's details by id. Returns the updated admin including id, name, email, type, and timeLastModified. Required: id. The type (super or standard) cannot be changed — delete and recreate the administrator instead.
- **Delete a Onfleet admin by ID** (Delete). Delete a standard Onfleet administrator by id. Returns an empty 204 response on success. Required: id. The super administrator account cannot be deleted.
- **Create a Onfleet hub** (Create). Create a hub in Onfleet: the depot location from which a team's workers start and end deliveries for route optimization. Returns the created hub object with its id, name, address, phone, teams, and timeCreated/timeLastModified timestamps.
- **List all Onfleet hubs** (List). List the hubs in your Onfleet organization — depot locations from which teams' deliveries start for route optimization. Returns hub objects with id, name, address, phone, teams, and timeCreated/timeLastModified timestamps.
- **List all Onfleet organizations** (List). Get the details of your own Onfleet organization — the top-most entity that owns administrators, teams, workers and tasks. Returns: id, name, email, timeCreated, timeLastModified, metadata.
- **Update a Onfleet organization by ID** (Update). Update an Onfleet organization's details by id. Returns the updated organization record including id, name, email, timeCreated, timeLastModified, and metadata. Required: id.
- **Get single Onfleet organization by ID** (Get). Get a single Onfleet organization by id, including linked organizations whose ids can act as Merchants or Executors on tasks. Returns: id, code, message. Required: id.
- **Create a Onfleet order** (Create). Create an Onfleet order as a one-to-one pickup/dropoff task pair routed to the courier for delivery assignment. Returns the full order object including id, shortId, pickupTask, dropoffTask, status, and timeCreated. Requires pickupTask and dropoffTask (each with a destination and optional recipients); deliveryServiceId is required only when a Service/Rate exists for the client, and client is…
- **Get single Onfleet order by ID** (Get). Get a single Onfleet order by its order shortId. Returns the full order including id, shortId, status, pickupTask and dropoffTask (each with trackingURL, destination, and requirements). Required: id — use the Order shortId, not the individual Task IDs.
- **Update a Onfleet order by ID** (Update). Update an Onfleet order by id. The request body must include both pickupTask and dropoffTask; only requirements, recipients, destination, completeAfter, completeBefore, and notes can be updated, and only until the order is active. Returns the updated order including id, shortId, pickupTask, dropoffTask, status, and timeLastModified. Required: id, pickupTask, dropoffTask. When updating…
- **Onfleet orders cancel** (Cancel). Cancel one or more Onfleet orders before they start or complete; completed orders cannot be cancelled. Returns: status, totalOrdersRemoved. Required: orderIds — an array of order IDs, wrapped in an array even for a single ID. Couriers cancelling on behalf of a client must also supply client.
- **Onfleet orders clone** (Action). Clone an existing Onfleet order as a direct copy of its pickup/dropoff pair; only clients can clone, using the original order id, and only when no rates/services are set up for them. Returns the new order with fresh id, shortId, pickupTask, dropoffTask, and timeCreated; completeAfter, completeBefore, price, currency, priceBreakdown, and deliveryService are not carried over. Required: order_id.
- **Onfleet orders reject** (Reject). Reject a client's order in Onfleet (Couriers only). Returns the rejected order record with its id, shortId, organization, and the full pickupTask/dropoffTask pair. Required: order_short_id (the order's dashboard short id) and reason.
- **Create a Onfleet route plan** (Create). Create a route plan in Onfleet to group tasks together and schedule them as a unit. Returns the created plan including id, name, state, tasks, worker, team, vehicleType, and startTime. Requires name and startTime.
- **List all Onfleet route plans** (List). List Onfleet route plans, scoped by filters such as workerId, startTimeFrom/startTimeTo, createdTimeFrom/createdTimeTo, and hasTasks. Returns an array of plans with id, name, state, tasks, worker, status, and isOverdue. Max 500 per page.
- ...and 28 more tools. Call `tools/list` via the MCP endpoint, or see the full catalog via the API, for the complete set.
