MCP
Connect AI agents safely: User MCP for operations, Developer MCP for integrations — with profiles, confirm, dry-run, and human approvals.
This guide is the Superroute MCP column in Developer Center. It covers both servers, agent security, and the live tool catalog from UserMcpToolCatalog.
https://api.miliexpress.com/mcphttps://api.miliexpress.com/mcp/developerThe Model Context Protocol (MCP) is an open standard that allows AI assistants like Claude, Cursor, and ChatGPT to interact with external tools and services. It enables your AI to perform real actions — such as tracking a package — directly within the conversation.
By configuring the Superroute MCP server, your AI assistant gains access to logistics tools without leaving your workflow.
Use the right server for the audience. Do not give unattended agents the Developer server with a full-access token.
| Server name | Endpoint | Audience | Auth |
|---|---|---|---|
superroute |
https://api.miliexpress.com/mcp |
Ops / support / business agents | Bearer + optional profile/scopes (legacy full if unset) |
superroute-developer |
https://api.miliexpress.com/mcp/developer |
Integration developers & coding agents | Connection Bearer preferred; tool api_token sunset |
Public tools like package tracking work without any authentication. Add this configuration to your MCP client:
{
"mcpServers": {
"mili-express": {
"type": "url",
"url": "https://api.miliexpress.com/mcp"
}
}
}
To use tools that require user permissions, add your API Bearer token to the configuration:
Always put tokens in MCP connection headers — never in tool arguments or prompts.
{
"mcpServers": {
"mili-express": {
"type": "url",
"url": "https://api.miliexpress.com/mcp",
"headers": {
"Authorization": "Bearer <your-api-token>",
"X-MCP-Profile": "ops-readonly"
}
}
}
}
Call the login endpoint with your credentials:
curl -X POST https://api.miliexpress.com/api/v1/user/login \ -H "Content-Type: application/json" \ -d '{"email": "you@example.com", "password": "your-password"}'
The response will include your access token:
{
"access_token": "eyJ0eXAiOiJKV1Qi...",
"token_type": "Bearer",
"expires_at": "2026-02-20 00:00:00"
}
Use the access_token value in the Authorization header of your MCP configuration.
User MCP is built for least-privilege agents. Create tokens with an MCP profile (default Ops Read-only) or pass profile/scopes headers.
Named scope bundles. Prefer ops-readonly or support for unattended agents.
| Profile | Label | Scopes |
|---|---|---|
ops-readonly |
Ops Read-only | orders:read, labels:read, routes:read, drivers:read, analytics:read, address:read, approvals:read |
support |
Support (customer service) | orders:read, analytics:read, address:read, approvals:read |
ops-write |
Ops Write (orders + labels + routes) | orders:read, orders:write, labels:read, labels:write, routes:read, routes:write, drivers:read, analytics:read, address:read, approvals:read, approvals:write |
wms-readonly |
WMS Read-only | wms:read, orders:read |
datasets-readonly |
Datasets Read-only | datasets:read |
alliance-readonly |
Alliance Read-only | alliance:read |
full |
Full Access (all MCP tools) — not for unattended agents | * |
{
"mcpServers": {
"mili-express": {
"type": "url",
"url": "https://api.miliexpress.com/mcp",
"headers": {
"Authorization": "Bearer <ops-readonly-token>",
"X-MCP-Profile": "ops-readonly"
}
}
}
}
| Header | Purpose |
|---|---|
Authorization: Bearer … | API Bearer token (connection-level). |
X-MCP-Profile | Named profile: ops-readonly, support, ops-write, wms-readonly, datasets-readonly, alliance-readonly, full. |
X-MCP-Scopes | Explicit comma-separated scopes (overrides profile). |
X-MCP-Dry-Run: 1 | Preview write tools without mutation. |
X-MCP-Require-Approval: 1 | Queue high-risk writes for human approval instead of executing. |
These tools require confirm=true on tools/call (or use the approval queue):
cancel_orderbulk_create_ordersreroute_to_addressbuild_routehold_orderrelease_orderapprove_pending_writebulk_create_orders_asyncget_shipping_detaildownload_shipping_labelcancel_shipping_labelsubmit_shipping_informationend_of_dayuniorder_canceluniorder_purchase_labeluniorder_create_batchuniorder_create_batch_asyncpay_shipping_ordercancel_shipping_orderpay_storage_ordercancel_storage_orderpay_shipoutcancel_shipoutUnattended agents should propose writes; humans approve in the app or via MCP.
Web UI path (login required): /mcp-approvals
Prefer Authorization: Bearer on the connection. Per-tool api_token is deprecated and hard-cuts after 2026-12-31.
The following tools are currently available on the MCP server: 93 live tools from the server catalog
This table is generated from UserMcpToolCatalog at request time — it stays in sync with production tools/list for authenticated full access.
| Tool | Authentication | Risk | Scopes | Description |
|---|---|---|---|---|
track_package
|
Public | low | — |
Track a package by its tracking number. Returns delivery status, tracking events timeline, and proof of delivery if available. |
otep_tracking
|
Public | low | — |
Get the unified OTEP (Open Tracking Event Protocol) timeline for a tracking number — self-delivery, third-party and carrier events normalize... |
get_capabilities
|
Public | low | — |
List MCP tools available to the current connection, with risk level, required scopes, and whether confirm=true is needed. Call this first wh... |
get_orders
|
Required | low | orders:read |
List orders with filtering and pagination. Returns order details including status, tracking, and delivery info. |
get_order_detail
|
Required | low | orders:read |
Get full details of a specific order by ID, including address, status, packages, and tracking info. |
find_order
|
Required | low | orders:read |
Fuzzy-find orders across tracking number, external tracking, ref, recipient name, and phone in a single query. Use this instead of get_order... |
get_operation_events
|
Required | low | orders:read |
Get the full audit trail for orders — every status change, who performed it, GPS coordinates, and photos. |
create_order
|
Required | medium | orders:write |
Create a delivery/pickup order. D=delivery (warehouse→customer), P=pickup (customer→warehouse), P2P=peer-to-peer. Returns order ID and track... |
cancel_order
confirm
|
Required | high | orders:write |
Cancel an existing order by order ID. Only works for orders not yet delivered. |
bulk_create_orders
confirm
|
Required | high | orders:write |
Create up to 100 delivery orders in one call. Returns a per-order success/failure summary; partial failures do not abort the batch unless st... |
reroute_to_address
confirm
|
Required | high | orders:write |
Change the delivery address of an order that has not been picked up yet: cancels the original order and recreates it with the new address. R... |
update_delivery_instruction
|
Required | medium | orders:write |
Update only the delivery_instruction field on an existing order (PATCH). Safer than full order rewrite. |
update_order_note
|
Required | medium | orders:write |
Update only the internal note field on an existing order (PATCH). |
update_time_window_by_refs
|
Required | medium | orders:write |
Bulk-update delivery time windows (and optional schedule_date) for orders identified by external refs. |
hold_order
confirm
|
Required | high | orders:write |
Put an order on HOLD so it is not dispatched until release_order. HIGH-RISK: requires confirm=true. |
release_order
confirm
|
Required | high | orders:write |
Release an order from HOLD back to NEW_ORDER. HIGH-RISK: requires confirm=true. |
propose_write
|
Required | low | approvals:read |
Queue a write/high-risk tool for human approval instead of executing it. Reviewers use list_pending_approvals + approve_pending_write. |
list_pending_approvals
|
Required | low | approvals:read |
List pending MCP write approvals for this business (or mine_only). |
approve_pending_write
confirm
|
Required | high | approvals:write |
Approve and execute a pending write proposal. HIGH-RISK: requires confirm=true. Reviewer must have scopes for the underlying tool. |
reject_pending_write
|
Required | medium | approvals:write |
Reject a pending write proposal without executing it. |
get_routes
|
Required | low | routes:read |
List delivery routes with their status, assigned driver, and order count. |
get_route_detail
|
Required | low | routes:read |
Get one route with its stop/order list. Prefer this over get_routes when you already know route_id. |
get_drivers
|
Required | low | drivers:read |
List drivers for the authenticated business (ids, names, capacity defaults). Use driver id with get_driver_routes_today or route tools. |
get_driver_routes_today
|
Required | low | routes:read, drivers:read |
Orders assigned to a driver on a given date (defaults to today). Useful for "what is driver X running today?" |
get_build_route_options
|
Required | low | routes:read |
List routing engines, balance modes, capacity types, and defaults before calling build_route. |
build_route
confirm
|
Required | high | routes:write |
Build/optimize a delivery route (POST /api/v3/client/build-route). HIGH-RISK: assigns orders to drivers. Call get_build_route_options first.... |
order_snapshot
|
Required | low | orders:read |
One-call order context for support: order detail + operation events + public tracking (when tracking number is known). Pass order_id or trac... |
list_exceptions
|
Required | low | orders:read |
List failed/returned/exception-like orders for a schedule date (default today). Read-only ops triage helper. |
get_shipping_methods
|
Required | low | labels:read |
List available shipping carriers/methods. Returns IDs and names — use the ID for rate/label tools. |
get_shipping_rate
|
Required | low | labels:read |
Get a shipping cost quote. Dry-run — no label created. Returns rate options with pricing and transit time. |
create_shipping_label
|
Required | medium | labels:write |
Book a shipment with a carrier and generate a shipping label with tracking numbers. |
quote_and_ship
|
Required | medium | labels:write |
One-shot: rate across all enabled carriers, pick the best one by strategy, create the shipping label, return tracking number. Saves 3+ tool... |
compare_all_carriers
|
Required | low | labels:read |
Get rate quotes from every enabled carrier for the same shipment, in one call. Returns a sorted comparison (cheapest first) with price + tra... |
search_address
|
Required | low | address:read |
Search and resolve addresses by postal code or free-text query. Returns structured address suggestions. |
daily_digest
|
Required | low | analytics:read |
One-call summary of today's logistics activity: total orders, by status, exceptions (failed/returned), pending pickups. Designed as the firs... |
get_orders_summary
|
Required | low | analytics:read |
Aggregate order metrics over a time window: counts by status, top carriers, on-time rate, exception count. Use period=today|week|month or pa... |
get_account_credits
|
Required | low | analytics:read |
Get the authenticated customer's wallet balance, currency, and recent topup history. Customer (B2C) accounts only — returns an error for cli... |
get_warehouses
|
Required | low | wms:read |
List WMS warehouses available to the authenticated business. |
get_inventory
|
Required | low | wms:read |
Query WMS inventory (POST /api/v1/wms/inventory). Pass filters supported by the inventory API (sku, warehouse_id, etc.). |
list_datasets
|
Required | low | datasets:read |
List custom datasets available to the business. |
get_dataset
|
Required | low | datasets:read |
Get one dataset by id (metadata/columns). |
list_dataset_groups
|
Required | low | datasets:read |
List groups inside a dataset. |
search_dataset_records
|
Required | low | datasets:read |
Search records across groups in a dataset (POST .../search). |
list_alliances
|
Required | low | alliance:read |
List alliances the authenticated business belongs to. |
get_alliance
|
Required | low | alliance:read |
Get one alliance by id. |
list_alliance_members
|
Required | low | alliance:read |
List members of an alliance. |
list_accessible_clients
|
Required | low | alliance:read |
List clients accessible via alliance partnerships. |
quote_delivery
|
Required | low | orders:read |
Get the local delivery price for a shipment before creating the order (POST /api/v1/orders/rate). No order is created. |
print_local_label
|
Required | low | orders:read |
Get the printable label of a local delivery order as a base64 PDF, with its label code and tracking numbers (POST /api/v2/shipping/getShippi... |
bulk_create_orders_async
confirm
|
Required | high | orders:write |
Queue a large batch of delivery orders for creation (POST /api/v1/client/batchOrderCreateAsync). Returns an asyncId at once; read the per-or... |
get_async_batch_result
|
Required | low | orders:read |
Read the status and per-order results of a batch queued with bulk_create_orders_async (GET /api/v1/client/async/{id}). |
get_shipping_detail
confirm
|
Required | high | labels:write |
Get the carrier shipping detail of a label order: tracking numbers, price and the label (POST /api/v1/labelservice/getShippingDetail). The f... |
download_shipping_label
confirm
|
Required | high | labels:write |
Download the label PDF of an order as base64 (POST /api/v1/shipping/getShippingLabel with base64). For a carrier label order whose label was... |
cancel_shipping_label
confirm
|
Required | high | labels:write |
Cancel (void) a carrier label with the carrier (POST /api/v1/labelservice/cancelShippingLabel). Pass the order id, or one package tracking n... |
submit_shipping_information
confirm
|
Required | high | labels:write |
Submit the shipping information of one or more label orders to their carriers (POST /api/v1/labelservice/submitShippingInformation). |
end_of_day
confirm
|
Required | high | labels:write |
Close the day with the carriers: submit the shipping information of every open label order (POST /api/v1/labelservice/endofday). |
uniorder_rate
|
Required | low | uniorder:read |
Quote one shipment across self delivery and, with quote_labels=true, every label carrier service of the account (POST /api/v1/uniorder/rate)... |
uniorder_create
|
Required | medium | uniorder:write |
Create an order at a rate_id from uniorder_rate (POST /api/v1/uniorder). The rate decides the service: a self delivery order, or a label ord... |
uniorder_get
|
Required | low | uniorder:read |
Read one uniorder order in the uniorder shape (GET /api/v1/uniorder/{orderId}). |
uniorder_label
|
Required | low | uniorder:read |
Get the label PDF of a uniorder order, base64 (GET /api/v1/uniorder/{orderId}/label). |
uniorder_tracking
|
Required | low | uniorder:read |
Get the tracking timeline of a uniorder order (GET /api/v1/uniorder/{orderId}/tracking). |
uniorder_cancel
confirm
|
Required | high | uniorder:write |
Cancel a uniorder order, self delivery or label (POST /api/v1/uniorder/{orderId}/cancel). A label order voids its carrier label. |
uniorder_purchase_label
confirm
|
Required | high | uniorder:write |
Buy the carrier label of a uniorder label order that was kept without one (LABEL_PURCHASE_FAILED), at the service chosen at create or at a n... |
uniorder_rate_batch
|
Required | low | uniorder:read |
Quote up to 20 shipments in one call (POST /api/v1/uniorder/rate/batch). Each shipment takes the uniorder_rate shape plus an optional refere... |
uniorder_create_batch
confirm
|
Required | high | uniorder:write |
Create up to 20 orders in one call, each at its own rate_id (POST /api/v1/uniorder/batch). Returns a result per order. |
uniorder_rate_batch_async
|
Required | low | uniorder:read |
Queue up to 500 shipments to quote (POST /api/v1/uniorder/rate/batch-async). Returns a job id; read the quotes with uniorder_job. |
uniorder_create_batch_async
confirm
|
Required | high | uniorder:write |
Queue up to 500 orders to create, each at its own rate_id (POST /api/v1/uniorder/batch-async). Returns a job id; read the results with unior... |
uniorder_job
|
Required | low | uniorder:read |
Read a queued uniorder batch and, once done, its results (GET /api/v1/uniorder/jobs/{jobId}). |
list_shipping_services
|
Required | low | customer_shipping:read |
List the shipping services the customer may order (GET /api/v1/customer/shipping-orders/services). Step 1 of a shipping order. Needs a custo... |
get_shipping_service_config
|
Required | low | customer_shipping:read |
Get one shipping service's order form: warehouses, surcharges, packaging, supplies, units and form fields (GET /api/v1/customer/shipping-ord... |
estimate_shipping_order
|
Required | low | customer_shipping:read |
Estimate the price of a shipping order on a service (POST /api/v1/customer/shipping-orders/services/{serviceCode}/estimate-price). No order... |
create_shipping_order
|
Required | medium | customer_shipping:write |
Create a shipping order on a service (POST /api/v1/customer/shipping-orders/services/{serviceCode}/orders). Note the package list field is `... |
pay_shipping_order
confirm
|
Required | high | customer_shipping:write |
Pay the full remaining balance of a shipping order from the customer wallet (POST /api/v1/customer/shipping-orders/{id}/pay). A fully paid p... |
get_shipping_order
|
Required | low | customer_shipping:read |
Get one shipping order of the customer (GET /api/v1/customer/shipping-orders/{id}). Needs a customer account token. |
list_shipping_orders
|
Required | low | customer_shipping:read |
List the customer's shipping orders on one service, paginated (GET /api/v1/customer/shipping-orders/services/{serviceCode}/orders). Needs a... |
cancel_shipping_order
confirm
|
Required | high | customer_shipping:write |
Cancel a pending or confirmed shipping order of the customer (POST /api/v1/customer/shipping-orders/{id}/cancel). Needs a customer account t... |
get_storage_order_config
|
Required | low | storage:read |
Get what a storage order form needs: warehouses, packaging, supplies, pickup timeframes, units, surcharges and form fields (GET /api/v1/cust... |
quote_storage_order
|
Required | low | storage:read |
Calculate the price of a storage order before creating it (POST /api/v1/customer/storage-orders/calculate-price). Storage order form fields... |
create_storage_order
|
Required | medium | storage:write |
Create a storage order (POST /api/v1/customer/storage-orders). Storage order form fields as returned by get_storage_order_config: warehouse_... |
pay_storage_order
confirm
|
Required | high | storage:write |
Pay a storage order from the customer wallet (POST /api/v1/customer/storage-orders/{id}/pay). Needs a customer account token. |
get_storage_order
|
Required | low | storage:read |
Get one storage order of the customer, with can_edit, can_cancel and each package's received flag (GET /api/v1/customer/storage-orders/{id})... |
list_storage_orders
|
Required | low | storage:read |
List the customer's storage orders, paginated (GET /api/v1/customer/storage-orders). Needs a customer account token. |
cancel_storage_order
confirm
|
Required | high | storage:write |
Cancel a storage order of the customer while its status allows it (POST /api/v1/customer/storage-orders/{id}/cancel). Needs a customer accou... |
list_stored_packages
|
Required | low | storage:read |
List the customer's stored packages that can be shipped out: received, not stocked out and not held by another ship-out, grouped by storage... |
list_shipout_services
|
Required | low | storage:read |
List the shipping services that ship out from a warehouse (GET /api/v1/customer/shipout-orders/services). pricing_method 1 = priced at once,... |
estimate_shipout
|
Required | low | storage:read |
Estimate the price of a ship-out (POST /api/v1/customer/shipout-orders/services/{serviceCode}/estimate). A manually priced service answers h... |
create_shipout
|
Required | medium | storage:write |
Create a ship-out of stored packages from one warehouse (POST /api/v1/customer/shipout-orders/services/{serviceCode}/orders). The chosen pac... |
pay_shipout
confirm
|
Required | high | storage:write |
Pay a priced ship-out from the customer wallet (POST /api/v1/customer/shipout-orders/{id}/pay). Default is the full remaining balance. Needs... |
get_shipout
|
Required | low | storage:read |
Get one ship-out of the customer with paid amount, remaining balance, can_be_paid, can_be_cancelled and its packages (GET /api/v1/customer/s... |
list_shipouts
|
Required | low | storage:read |
List the customer's ship-outs, paginated (GET /api/v1/customer/shipout-orders). Needs a customer account token. |
cancel_shipout
confirm
|
Required | high | storage:write |
Cancel a pending or confirmed ship-out and release its stored packages (POST /api/v1/customer/shipout-orders/{id}/cancel). A payment is not... |
otep_client_tracking
|
Required | low | orders:read |
Get the OTEP timeline and details (addresses, dates, proof of delivery, item counts) of one of your own shipments: a parcel tracking number,... |
otep_client_locker_storage
|
Required | low | orders:read |
Get the OTEP timeline (storage profile) and details of one of your locker storage rentals, by rental id. Requires a token. |
Select your AI client below for tailored setup instructions:
Claude Code reads MCP configuration from a .mcp.json file in your project root or home directory.
{
"mcpServers": {
"mili-express": {
"type": "url",
"url": "https://api.miliexpress.com/mcp"
}
}
}
To use authenticated tools, add the headers field:
{
"mcpServers": {
"mili-express": {
"type": "url",
"url": "https://api.miliexpress.com/mcp",
"headers": {
"Authorization": "Bearer <your-api-token>",
"X-MCP-Profile": "ops-readonly"
}
}
}
}
Cursor supports MCP servers via its built-in configuration.
{
"mcpServers": {
"mili-express": {
"type": "url",
"url": "https://api.miliexpress.com/mcp"
}
}
}
Windsurf uses a global MCP configuration file.
{
"mcpServers": {
"mili-express": {
"serverUrl": "https://api.miliexpress.com/mcp"
}
}
}
ChatGPT supports MCP connections for Plus, Pro, and Team users.
https://api.miliexpress.com/mcp2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05 https://api.miliexpress.com/.well-known/oauth-protected-resource