{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-06T05:53:36.694Z","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner","markdownUrl":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner.md","server":{"slug":"io-usefulapi-upper-route-planner","name":"Upper Route Planner MCP by usefulapi","registryName":"io.usefulapi/upper-route-planner","description":"Read Upper drivers and stops; create and optimize routes, assign drivers, share routes to the app.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"upper-route-planner","type":"remote","identifier":"https://upper-route-planner.usefulapi.io/mcp","withdrawn":false,"url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner","version":"1.11.3","transport":null,"scoredAt":"2026-11-06T01:27:20.956Z"},"score":{"total":18,"tier":"low","status":"scored","weekDelta":-46,"history":[{"date":"2026-11-06","total":18},{"date":"2026-11-05","total":18},{"date":"2026-11-04","total":18},{"date":"2026-11-03","total":18},{"date":"2026-11-02","total":18},{"date":"2026-11-01","total":67},{"date":"2026-10-31","total":67},{"date":"2026-10-30","total":64},{"date":"2026-10-29","total":63},{"date":"2026-10-28","total":63},{"date":"2026-10-27","total":62},{"date":"2026-10-26","total":62},{"date":"2026-10-25","total":61}]},"categories":[{"name":"Endpoint Security","score":46,"verdict":"fail","reasons":["The endpoint's TLS certificate is valid, in date, and uses a strong key.","Authorisation not yet verified: we couldn't confirm whether this endpoint requires it.","HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.","HSTS check failed: the Strict-Transport-Security header is absent.","DNSSEC check failed: this domain isn't protected by DNSSEC."],"codes":[{"code":"tls.valid","args":{}},{"code":"auth.unreachable","args":{}},{"code":"https.inconclusive","args":{"reason":"redirect_not_https"}},{"code":"headers.hsts_absent","args":{}},{"code":"dnssec.absent","args":{}}]},{"name":"Transport & Reachability","score":0,"verdict":"fail","reasons":["Transport check failed: declared streamable-http, but the endpoint redirected instead of responding directly."],"codes":[{"code":"transport.redirected","args":{"transport":"streamable-http"}}]},{"name":"Schema Quality & AI Usability","score":0,"verdict":"unverified","reasons":["Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list."],"codes":[{"code":"schema.unreachable","args":{}}]},{"name":"Stability & Change Management","score":0,"verdict":"unverified","reasons":["Stability not yet verified: not enough scan history yet (needs a 30-day window)."],"codes":[{"code":"stability.insufficient_history","args":{}}]},{"name":"Tool Coverage","score":0,"verdict":"unverified","reasons":["Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list."],"codes":[{"code":"toolquality.unreachable","args":{}}]},{"name":"Tool Safety","score":0,"verdict":"unverified","reasons":["Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list."],"codes":[{"code":"toolsafety.unreachable","args":{}}]},{"name":"Capabilities","score":0,"verdict":"unverified","reasons":["Capabilities not yet verified: we couldn't read the endpoint's capabilities."],"codes":[{"code":"cap.unreachable","args":{}}]}],"inconclusive":["Authorisation not yet verified: we couldn't confirm whether this endpoint requires it.","HTTPS enforcement could not be verified: the plaintext port redirected somewhere other than https, so enforcement is unproven.","Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list.","Stability not yet verified: not enough scan history yet (needs a 30-day window).","Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.","Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.","Capabilities not yet verified: we couldn't read the endpoint's capabilities."],"malware":[],"components":[{"slug":"upper-route-planner","type":"remote","identifier":"https://upper-route-planner.usefulapi.io/mcp","withdrawn":false,"score":18,"current":true,"url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner","markdownUrl":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner.md"}],"facts":[{"label":"Endpoint","value":"https://upper-route-planner.usefulapi.io/mcp"},{"label":"Transports","value":"streamable-http"},{"label":"Auth","value":"none"},{"label":"Version","value":"1.11.3"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"upper_list_drivers","title":"List drivers","description":"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.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":55},{"name":"upper_list_stops","title":"List stops","description":"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.","inputs":[{"name":"limit","type":"integer","required":false,"description":"Most stops to return, 1-500 (default 100)."},{"name":"offset","type":"integer","required":false,"description":"Skip this many stops (use next_offset from the previous reply to read on)."},{"name":"route_id","type":"integer","required":false,"description":"Only the stops on this route."},{"name":"scheduled","type":"boolean","required":false,"description":"With route_id only: true = scheduled stops, false = unscheduled stops of that route."},{"name":"unscheduled","type":"boolean","required":false,"description":"Without route_id: true = unscheduled stops across all routes."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":226},{"name":"upper_get_optimization_status","title":"Get route optimization status","description":"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.","inputs":[{"name":"route_id","type":"integer","required":true,"description":"The route id."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":67},{"name":"upper_get_custom_fields","title":"Get stop custom fields","description":"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.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":55},{"name":"upper_get_capacity_fields","title":"Get capacity fields","description":"The workspace's five capacity-field slots (capacity1 - capacity5: label, unit, enabled) used for load planning. GET /ext-get-capacity-fields.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":43},{"name":"upper_create_route","title":"Create route","description":"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.","inputs":[{"name":"optimize_for","type":"string","required":false,"description":"Optimize for time or distance."},{"name":"pickup_settings","type":"string","required":false,"description":"When pickups are sequenced: auto, before or after the deliveries."},{"name":"route_date","type":"string","required":false,"description":"Route start date, yyyy-mm-dd (default today)."},{"name":"route_name","type":"string","required":false,"description":"Route name (default: New Route)."},{"name":"service_time","type":"integer","required":false,"description":"Per-stop service (dwell) time in seconds."},{"name":"units","type":"string","required":false,"description":"Distance units: miles or km."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":168},{"name":"upper_update_route","title":"Update route","description":"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.","inputs":[{"name":"optimize_for","type":"string","required":false,"description":"Optimize for time or distance."},{"name":"pickup_settings","type":"string","required":false,"description":"When pickups are sequenced: auto, before or after."},{"name":"route_date","type":"string","required":false,"description":"New start date, yyyy-mm-dd."},{"name":"route_id","type":"integer","required":true,"description":"The route to update."},{"name":"route_name","type":"string","required":false,"description":"New route name."},{"name":"service_time","type":"integer","required":false,"description":"Per-stop service (dwell) time in seconds."},{"name":"units","type":"string","required":false,"description":"Distance units: miles or km."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":147},{"name":"upper_create_stop","title":"Create stop","description":"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.","inputs":[{"name":"address","type":"string","required":true,"description":"Street address of the stop (geocoded by Upper)."},{"name":"capacity_fields","type":"object","required":false,"description":"Capacity values (integers) for load planning, keys capacity1 - capacity5."},{"name":"city","type":"string","required":false,"description":"City (overrides the geocoded value)."},{"name":"company_name","type":"string","required":false,"description":"Company name for the stop."},{"name":"contact_name","type":"string","required":false,"description":"Contact (recipient) name."},{"name":"custom_fields","type":"object","required":false,"description":"Custom field values keyed by slot (custom1 - custom5). Only fields enabled in the workspace (and in the plan) are stored."},{"name":"customer_system_id","type":"string","required":false,"description":"Your own identifier for the stop (for cross-referencing)."},{"name":"email","type":"string","required":false,"description":"Contact email."},{"name":"end_time","type":"string","required":false,"description":"Latest service time (time window end), HH:MM or HH:MM:SS."},{"name":"nick_name","type":"string","required":false,"description":"Short label for the stop."},{"name":"note","type":"string","required":false,"description":"Free-text note shown to the driver."},{"name":"parcel_count","type":"integer","required":false,"description":"Number of parcels at the stop."},{"name":"phone","type":"string","required":false,"description":"Contact phone number; non-digits are stripped by Upper."},{"name":"phone_country_code","type":"string","required":false,"description":"Phone dialing code, for example 1."},{"name":"pin_color","type":"string","required":false,"description":"Map pin colour, hex like #FF6600."},{"name":"route_id","type":"integer","required":false,"description":"Route to attach the stop to; omit for an unscheduled stop."},{"name":"start_time","type":"string","required":false,"description":"Earliest service time (time window start), HH:MM or HH:MM:SS."},{"name":"state","type":"string","required":false,"description":"State or region (overrides the geocoded value)."},{"name":"stop_duration","type":"integer","required":false,"description":"Service duration at the stop, in seconds."},{"name":"stop_priority","type":"string","required":false,"description":"Stop priority, for example Normal, High, Urgent."},{"name":"stop_type","type":"string","required":false,"description":"Stop type, for example Delivery or Pickup."},{"name":"zipcode","type":"string","required":false,"description":"Postal code (overrides the geocoded value)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":474},{"name":"upper_update_stop","title":"Update stop","description":"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.","inputs":[{"name":"address","type":"string","required":false,"description":"New street address (re-geocoded)."},{"name":"capacity_fields","type":"object","required":false,"description":"Capacity values (integers) for load planning, keys capacity1 - capacity5."},{"name":"city","type":"string","required":false,"description":"City (only used when no address is passed)."},{"name":"company_name","type":"string","required":false,"description":"Company name for the stop."},{"name":"contact_name","type":"string","required":false,"description":"Contact (recipient) name."},{"name":"custom_fields","type":"object","required":false,"description":"Custom field values keyed by slot (custom1 - custom5). Only fields enabled in the workspace (and in the plan) are stored."},{"name":"customer_system_id","type":"string","required":false,"description":"Your own identifier for the stop (for cross-referencing)."},{"name":"email","type":"string","required":false,"description":"Contact email."},{"name":"end_time","type":"string","required":false,"description":"Latest service time (time window end), HH:MM or HH:MM:SS."},{"name":"nick_name","type":"string","required":false,"description":"Short label for the stop."},{"name":"note","type":"string","required":false,"description":"Free-text note shown to the driver."},{"name":"parcel_count","type":"integer","required":false,"description":"Number of parcels at the stop."},{"name":"phone","type":"string","required":false,"description":"Contact phone number; non-digits are stripped by Upper."},{"name":"phone_country_code","type":"string","required":false,"description":"Phone dialing code, for example 1."},{"name":"pin_color","type":"string","required":false,"description":"Map pin colour, hex like #FF6600."},{"name":"route_id","type":"integer","required":false,"description":"Move the stop to this route."},{"name":"start_time","type":"string","required":false,"description":"Earliest service time (time window start), HH:MM or HH:MM:SS."},{"name":"state","type":"string","required":false,"description":"State or region (only used when no address is passed)."},{"name":"stop_duration","type":"integer","required":false,"description":"Service duration at the stop, in seconds."},{"name":"stop_id","type":"integer","required":true,"description":"The stop to update."},{"name":"stop_priority","type":"string","required":false,"description":"Stop priority, for example Normal, High, Urgent."},{"name":"stop_type","type":"string","required":false,"description":"Stop type, for example Delivery or Pickup."},{"name":"zipcode","type":"string","required":false,"description":"Postal code (only used when no address is passed)."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":495},{"name":"upper_assign_drivers","title":"Assign drivers to a route","description":"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.","inputs":[{"name":"driver_ids","type":"array","required":true,"description":"Driver ids to assign."},{"name":"route_id","type":"integer","required":true,"description":"The route."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":103},{"name":"upper_optimize_route","title":"Optimize route","description":"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.","inputs":[{"name":"route_id","type":"integer","required":true,"description":"The route to optimize."},{"name":"timezone","type":"string","required":false,"description":"IANA timezone for the optimization, for example America/New_York."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":109},{"name":"upper_share_route_to_drivers","title":"Share route to drivers","description":"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.","inputs":[{"name":"driver_ids","type":"array","required":false,"description":"Drivers to notify (default: the route's assigned drivers)."},{"name":"route_id","type":"integer","required":true,"description":"The route to share."},{"name":"timezone","type":"string","required":false,"description":"IANA timezone, for example America/New_York."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":125}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-06T01:27:20.000Z","track":"remote","endpoint":"https://upper-route-planner.usefulapi.io/mcp","declaredUrl":null,"truncated":false,"tls":{"outcome":"valid","label":"Valid","version":"TLS 1.3","cipherSuite":"TLS_AES_128_GCM_SHA256","chainError":null,"certificates":[{"subject":"CN=usefulapi.io","issuer":"CN=WE1,O=Google Trust Services,C=US","notBefore":"2026-09-13T08:55:39Z","notAfter":"2026-12-12T09:54:12Z","keyType":"ECDSA","keyBits":256,"isCa":false},{"subject":"CN=WE1,O=Google Trust Services,C=US","issuer":"CN=GTS Root R4,O=Google Trust Services LLC,C=US","notBefore":"2023-12-13T09:00:00Z","notAfter":"2029-02-20T14:00:00Z","keyType":"ECDSA","keyBits":256,"isCa":true},{"subject":"CN=GTS Root R4,O=Google Trust Services LLC,C=US","issuer":"CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE","notBefore":"2023-11-15T03:43:21Z","notAfter":"2028-01-28T00:00:42Z","keyType":"ECDSA","keyBits":384,"isCa":true}]},"dnssec":{"result":"insecure","label":"Not signed","name":"upper-route-planner.usefulapi.io.","steps":[{"zone":".","outcome":"verified","label":"Verified"},{"zone":"io.","outcome":"verified","label":"Verified"},{"zone":"usefulapi.io.","outcome":"insecure_proven","label":"Unsigned (proven)"}]},"auth":{"outcome":"inconclusive","label":"Inconclusive","gate":null,"gateLabel":null,"status":302,"authorizationServers":[]},"httpsRedirect":{"outcome":"inconclusive","label":"Inconclusive","status":302},"transports":[{"transport":"streamable-http","outcome":"redirected","label":"Redirected","status":302,"followed":false}],"provenance":null,"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":null},"mismatches":[],"changelog":{"trackingSince":"2026-10-25","recent":[{"id":"chg_01a1ae77-ac8c-740c-a3d5-a7859ce2942a","kind":"score.rubric_changed","summary":"We updated how we score, so this day's move reflects our rubric, not a change to the server","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-06","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner#chg-chg_01a1ae77-ac8c-740c-a3d5-a7859ce2942a"},{"id":"chg_01a199dd-2db1-7ce5-9165-6cb7cd43df85","kind":"check.unverifiable","summary":"Stability (0.23 → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner#chg-chg_01a199dd-2db1-7ce5-9165-6cb7cd43df85"},{"id":"chg_01a199dd-2db2-79de-9f5c-cb0c36147fa3","kind":"check.unverifiable","summary":"Tool safety (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner#chg-chg_01a199dd-2db2-79de-9f5c-cb0c36147fa3"},{"id":"chg_01a199dd-2db3-7239-84aa-fb69cbd8a722","kind":"check.unverifiable","summary":"Authorization (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner#chg-chg_01a199dd-2db3-7239-84aa-fb69cbd8a722"},{"id":"chg_01a199dd-2db3-7abb-88eb-377e79cc8bea","kind":"check.unverifiable","summary":"Schema quality (100 → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner#chg-chg_01a199dd-2db3-7abb-88eb-377e79cc8bea"},{"id":"chg_01a199dd-2db4-723d-a871-fee864ed980e","kind":"check.unverifiable","summary":"Capabilities (pass → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner#chg-chg_01a199dd-2db4-723d-a871-fee864ed980e"},{"id":"chg_01a199dd-2db5-7322-8882-555d646bb244","kind":"check.unverifiable","summary":"Tool coverage (100 → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner#chg-chg_01a199dd-2db5-7322-8882-555d646bb244"},{"id":"chg_01a199dd-2db5-79e4-b282-648a781d3650","kind":"capture.status_changed","summary":"Endpoint reachability (reachable → not serving MCP)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner#chg-chg_01a199dd-2db5-79e4-b282-648a781d3650"},{"id":"chg_01a199dd-2db6-7223-8716-878cbbc0def1","kind":"score.total_changed","summary":"Trust score (67 → 18)","materiality":"functional","direction":"regression","scoreDelta":-49,"occurredOn":"2026-11-02","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner#chg-chg_01a199dd-2db6-7223-8716-878cbbc0def1"},{"id":"chg_01a193fe-16f9-7a10-bb61-16e97863acca","kind":"check.verdict","summary":"Authorization (partial → pass)","materiality":"security","direction":"improvement","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner#chg-chg_01a193fe-16f9-7a10-bb61-16e97863acca"},{"id":"chg_01a193fe-16fa-72f8-a9d6-be09c9749166","kind":"check.verdict","summary":"MCP protocol (fail → pass)","materiality":"functional","direction":"improvement","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner#chg-chg_01a193fe-16fa-72f8-a9d6-be09c9749166"},{"id":"chg_01a193fe-16fa-7903-9ea8-7136e5c60a99","kind":"prompt.added","summary":"New prompt “assign_drivers_optimize_and_wait_for_the_result”","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner#chg-chg_01a193fe-16fa-7903-9ea8-7136e5c60a99"},{"id":"chg_01a193fe-16fa-7d7d-937d-21ec9df7bef6","kind":"prompt.added","summary":"New prompt “find_stops_that_are_not_on_a_route_yet”","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner#chg-chg_01a193fe-16fa-7d7d-937d-21ec9df7bef6"},{"id":"chg_01a193fe-16fb-736a-a476-0fe2f63697cd","kind":"prompt.added","summary":"New prompt “move_or_correct_a_stop”","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner#chg-chg_01a193fe-16fb-736a-a476-0fe2f63697cd"},{"id":"chg_01a193fe-16fb-78ce-98fe-e43b02aff5c6","kind":"prompt.added","summary":"New prompt “review_the_stops_of_one_route”","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner#chg-chg_01a193fe-16fb-78ce-98fe-e43b02aff5c6"},{"id":"chg_01a193fe-16fb-7c43-8c9f-4744a69cdabe","kind":"prompt.added","summary":"New prompt “send_a_finished_route_to_the_drivers_app”","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner#chg-chg_01a193fe-16fb-7c43-8c9f-4744a69cdabe"},{"id":"chg_01a193fe-16fc-7156-a54e-9f57825907e3","kind":"prompt.added","summary":"New prompt “set_up_tomorrow_s_route_from_a_list_of_addresses”","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner#chg-chg_01a193fe-16fc-7156-a54e-9f57825907e3"},{"id":"chg_01a193fe-16fc-7898-88ce-dd0da2040041","kind":"server.version_changed","summary":"Server version (1.7.0 → 1.9.0)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner#chg-chg_01a193fe-16fc-7898-88ce-dd0da2040041"},{"id":"chg_01a193fe-16fd-7051-b0d2-7cddf97c68c9","kind":"protocol.version_changed","summary":"MCP protocol version (2025-06-18 → 2025-11-25)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner#chg-chg_01a193fe-16fd-7051-b0d2-7cddf97c68c9"},{"id":"chg_01a193fe-16fd-75af-a164-edaec8e967cf","kind":"score.total_changed","summary":"Trust score (64 → 67)","materiality":"functional","direction":"improvement","scoreDelta":3,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner#chg-chg_01a193fe-16fd-75af-a164-edaec8e967cf"}],"truncated":true,"feedUrl":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner/changelog.json"},"links":{"html":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner","markdown":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner.md","changelogJson":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner/changelog.json","changelogRss":"https://verifymcp.io/servers/io-usefulapi-upper-route-planner/upper-route-planner.xml","external":[{"label":"Remote endpoint","href":"https://upper-route-planner.usefulapi.io/mcp"},{"label":"Repository","href":"https://github.com/m190/usefulapi-mcp"},{"label":"Website","href":"https://usefulapi.io/upper-route-planner/"}]}}