upper_list_drivers
List drivers
List the active drivers on the Upper team that owns the API token: id, name, email and phone. Use the ids with upper_assign_drivers and upper_share_route_to_drivers. GET /ext-get-drivers.
Takes no parameters.
io.usefulapiPublished by usefulapi.ioOfficial publisherv1.11.3Updated Nov 5, 2026
Read Upper drivers and stops; create and optimize routes, assign drivers, share routes to the app.
The publisher's own server: Ably MCP by usefulapi
Remote MCP server for Upper Route Planner: read drivers and stops, create and optimize routes, assign drivers and push routes to the driver app.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/io.usefulapi%2Fupper-route-planner/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Add this to your client's mcpServers config.
{
"mcpServers": {
"upper-route-planner-by-usefulapi": {
"type": "http",
"url": "https://upper-route-planner.usefulapi.io/mcp"
}
}
}Live endpoint: https://upper-route-planner.usefulapi.io/mcp · Homepage: https://usefulapi.io/upper-route-planner
https://upper-route-planner.usefulapi.io/mcp.claude mcp add --transport http upper-route-planner https://upper-route-planner.usefulapi.io/mcp, then run /mcp to log in.Add only the URL. Do not add an Authorization header or an API key to the client config: the server signs you in with OAuth, and the login page asks for your Upper Route Planner credentials.
Step-by-step setup, where to find your credentials, and FAQ: https://usefulapi.io/upper-route-planner/
Add only the URL. Do not add an Authorization header or an API key to the client config: the server signs you in with OAuth, and the login page asks for your Upper Route Planner credentials.
read tools are read-only; write tools mutate data (clients should confirm them); meta tools report usage, manage your subscription or send a feature request.
*Pro has a fair use limit of 10,000 tool calls a month on this server. For more, write to [email protected].
Pro covers this server only. Subscribe with upper_upgrade (it returns a Stripe Checkout link). Cancel any time with upper_cancel_subscription: Pro continues to the end of the paid period, with no refund for the current period, and running upper_upgrade before then undoes the cancel. Or write to [email protected].
Source: servers/upper-route-planner/README.md at commit 4046075
List drivers
List the active drivers on the Upper team that owns the API token: id, name, email and phone. Use the ids with upper_assign_drivers and upper_share_route_to_drivers. GET /ext-get-drivers.
Takes no parameters.
List stops
List the team's stops in optimized order: address, coordinates, contact, time window, duration, status, route_id and custom ids. Pass route_id for one route (optionally scheduled=true/false); pass unscheduled=true (without route_id) for stops not on any route; with no filter all active stops are returned. Upper has no paging, so this tool pages locally: `limit` stops (default 100, max 500) starting at `offset`; the reply says if more remain (truncated, next_offset). GET /ext-get-stops.
limitoffsetroute_idscheduledunscheduledGet route optimization status
Check whether a route is optimized: status is optimized, pending (still running) or not_optimized, plus the queue_id of the last job. Poll this after upper_optimize_route. GET /ext-optimization-status.
route_idrequiredGet stop custom fields
The workspace's five stop custom-field slots (custom1 - custom5: type, label, enabled, required) and which are enabled. Needs the Custom fields feature in the Upper plan. GET /ext-get-custom-fields.
Takes no parameters.
Get capacity fields
The workspace's five capacity-field slots (capacity1 - capacity5: label, unit, enabled) used for load planning. GET /ext-get-capacity-fields.
Takes no parameters.
Create route
WRITE: create a new, empty route (name, date, optimization preference, units, pickup sequencing, service time). Omitted settings fall back to the account's defaults. Returns the new route_id; add stops with upper_create_stop. Calling it twice creates two routes. POST /ext-create-route.
unitsroute_dateroute_nameoptimize_forservice_timepickup_settingsUpdate route
WRITE: change settings of an existing route (name, date, optimize_for, units, pickup_settings, service_time). Only the fields you pass change. POST /ext-update-route.
unitsroute_idrequiredroute_dateroute_nameoptimize_forservice_timepickup_settingsCreate stop
WRITE: create a stop. The address is geocoded by Upper. Pass route_id to put it on a route (the route must not be active/in progress; an optimized route is flagged for re-optimization); omit it for an unscheduled stop. Calling it twice creates two stops. POST /ext-create-stop.
citynoteemailphonestateaddressrequiredzipcodeend_timeroute_idnick_namepin_colorstop_type+10 moreUpdate stop
WRITE: change an existing stop; only the fields you pass change. A new address is re-geocoded (city/state/zipcode you pass with it are ignored); city/state/zipcode apply only without an address. Passing route_id moves the stop to that route. Editing a stop on an optimized route flags the route for re-optimization; stops on an active route cannot be edited. POST /ext-update-stop.
citynoteemailphonestateaddressstop_idrequiredzipcodeend_timeroute_idnick_namepin_color+11 moreAssign drivers to a route
WRITE: assign one or more drivers (ids from upper_list_drivers) to a route, replacing the route's drivers. Every id must be an active driver on the team. If the route was already optimized it is reset to unoptimized (needs_optimization: true), so run upper_optimize_route again. POST /ext-assign-drivers.
route_idrequireddriver_idsrequiredOptimize route
WRITE: start optimizing a route's stop order. The route needs at least one stop and one assigned driver (upper_assign_drivers). It runs asynchronously: this returns status pending and a queue_id, then poll upper_get_optimization_status. If a job is already running, that job is returned. POST /ext-optimize-route.
route_idrequiredtimezoneShare route to drivers
WRITE: push a route to the drivers' mobile app NOW, which sends each driver a notification. Without driver_ids the route's assigned drivers are used; with them, every id must be an active driver on the team. Sending twice notifies twice. Confirm with the user before calling. POST /ext-share-to-driver.
route_idrequiredtimezonedriver_ids100% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
io.usefulapiOfficial publisher
Hosted MCP server for Ably that lets an assistant inspect realtime channels, presence and usage stats, publish messages, and review app configuration.
io.usefulapiOfficial publisher
Hosted ProofHub connector that lets an assistant read projects, tasks, comments, people and time entries, and create tasks or comments.
io.usefulapiOfficial publisher
Hosted, read-only MCP server that lets an assistant browse one MyOnlineStore shop's orders, products, categories, customers, discounts and newsletter…
io.usefulapiOfficial publisher
Hosted MCP server for Jostle Tasks: read users, presets, tasks and comments, and create or update tasks and post comments as your own user.
io.usefulapiOfficial publisher
Hosted MCP server for ExpenseOnDemand: read accounting exports, payroll totals and master data, and add, update or deactivate employees, customers and cost…
{ "mcpServers": { "upper-route-planner": { "url": "https://upper-route-planner.usefulapi.io/mcp" } }}