CXT Software MCP by usefulapi

Track and search CXT courier orders, check drivers, propose and save order and route plans.

Should I use this

Quality & Safety

B
Description quality
97%
Schema completeness
93%
Naming quality
80%
Poisoning risk
40%
Permission match
100%
Protocol compliance
100%

Findings (5)

  • HIGHTool description contains system tag or markerin cxt_get_planning_limits
  • HIGHTool poisoning patterns detected
  • MEDIUMTool 'cxt_get_planning_limits' description contains placeholder textin cxt_get_planning_limits
  • MEDIUMTool description contains suspicious base64-like encoded stringin cxt_validate_drivers
  • INFOTool description contains placeholder or incomplete textin cxt_get_planning_limits

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~4,955Tokens (tool definitions)
~2.5 KBTypical response size
Significant attention impact (3.87% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "cxt-software": {
      "url": "https://cxt-software.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://cxt-software.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (14)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢cxt_track_shipments(tracking_numbers, include_partial_match, begin_date, end_date, page_num, ...)

Track orders and route stops by tracking number: matches a parcel reference, a parcel item barcode, or Reference1/Reference2 of an order or route stop. Returns shipment summaries with status events and proof of delivery as far as the caller's permissions allow: an INET login sees the most detail; with an Operations App login this endpoint is called without credentials (CXT lists only internet users and anonymous callers for it), which returns the limited public tracking view. Costs 1 API credit with the vendor. POST /v2/Shipments/Summaries.

Input Schema

{
  "type": "object",
  "properties": {
    "tracking_numbers": {
      "minItems": 1,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      },
      "description": "Tracking numbers, references or barcodes (1-50)."
    },
    "include_partial_match": {
      "description": "Also return partial matches (default false).",
      "type": "boolean"
    },
    "begin_date": {
      "type": "string",
      "description": "A date (2026-10-01) or an ISO 8601 date-time with a timezone, e.g. 2026-10-01T08:00:00Z."
    },
    "end_date": {
      "type": "string",
      "description": "A date (2026-10-01) or an ISO 8601 date-time with a timezone, e.g. 2026-10-01T08:00:00Z."
    },
    "page_num": {
      "description": "CXT's pageNum, documented as 'the offset for the records to return' (default 0). When has_more is true, ask for the next records and check the new page does not repeat the previous one (if it does, pageNum counts records: use a multiple of page_size).",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    },
    "page_size": {
      "description": "Results per page, 1-1000 (default 50).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 1000
    }
  },
  "required": [
    "tracking_numbers"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cxt_search_shipments(tracking_type, search_criteria, include_partial_match, begin_date, end_date, ...)

Search orders and route stops by place, address, city, state, postal code, order template, or only by date range. tracking_type says which field search_criteria is matched against: Location (origin/destination or stop name), Address, City, State, Postal (zip or zip+4), Template (order template name), Tracking (references/barcodes) or DateOnly (no criteria: everything between begin_date and end_date). Returns shipment summaries, up to 1000 per page. An INET login sees the most detail; with an Operations App login this endpoint is called without credentials (CXT lists only internet users and anonymous callers for it), so the view is limited. Costs 1 API credit with the vendor. POST /v2/Shipments/Summaries.

Input Schema

{
  "type": "object",
  "properties": {
    "tracking_type": {
      "type": "string",
      "enum": [
        "Location",
        "Address",
        "City",
        "State",
        "Postal",
        "Template",
        "Tracking",
        "DateOnly"
      ],
      "description": "Which field search_criteria matches."
    },
    "search_criteria": {
      "description": "Values to match (omit for DateOnly).",
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      }
    },
    "include_partial_match": {
      "description": "Also return partial matches (default false).",
      "type": "boolean"
    },
    "begin_date": {
      "type": "string",
      "description": "A date (2026-10-01) or an ISO 8601 date-time with a timezone, e.g. 2026-10-01T08:00:00Z."
    },
    "end_date": {
      "type": "string",
      "description": "A date (2026-10-01) or an ISO 8601 date-time with a timezone, e.g. 2026-10-01T08:00:00Z."
    },
    "page_num": {
      "description": "CXT's pageNum, documented as 'the offset for the records to return' (default 0). When has_more is true, ask for the next records and check the new page does not repeat the previous one (if it does, pageNum counts records: use a multiple of page_size).",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    },
    "page_size": {
      "description": "Results per page, 1-1000 (default 50).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 1000
    }
  },
  "required": [
    "tracking_type"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cxt_list_recent_orders(count)

The most recent orders of the signed-in INTERNET user (user type INET; the orders of their account). Costs 1 API credit with the vendor. POST /v2/Shipments/Summaries with numRecentOrders.

Input Schema

{
  "type": "object",
  "properties": {
    "count": {
      "description": "How many recent orders, 1-1000 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 1000
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cxt_get_order(order_id, include_itemized_charges)

One on-demand order with its status, confirmation, pickup, delivery and proof-of-delivery details, as an INTERNET user sees it (sign in with user type INET). Optionally with the itemized charges. Operations App users should use cxt_get_dispatch_order. Costs 1 API credit with the vendor. GET /v2/Orders/{orderId}/{includeItemizedCharges}.

Input Schema

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "CXT order id."
    },
    "include_itemized_charges": {
      "description": "Include the itemized charges (default false).",
      "type": "boolean"
    }
  },
  "required": [
    "order_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cxt_get_dispatch_order(order_id)

One on-demand order with itemized charges, as an OPERATIONS APP (X Dispatch) user sees it (sign in with user type XDISPATCH): addresses, times, driver, status events, proof of delivery. Costs 1 API credit with the vendor. GET /v2/Dispatch/Orders/{onDemandOrderId}.

Input Schema

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "CXT on-demand order id."
    }
  },
  "required": [
    "order_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cxt_get_planning_limits

The itinerary planning limits of this X Dispatch system: maxAllowedStops (shipments x 2), maxAllowedLocations and maxAllowedPlaceholders. Needs an Operations App user with the ITINERARY_PLANNING_ACCESS permission. GET /v3/ItineraryPlanning/Settings.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cxt_validate_drivers(driver_ids)

Check whether drivers are available to be planned: for each driver id, vehicle violations (for example an expired inspection) and HR violations (for example not scheduled), each with isBypassable. Changes nothing. Needs ITINERARY_PLANNING_ACCESS. POST /v3/ItineraryPlanning/Orders/Drivers/Validate.

Input Schema

{
  "type": "object",
  "properties": {
    "driver_ids": {
      "minItems": 1,
      "maxItems": 500,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      },
      "description": "Driver ids to check."
    }
  },
  "required": [
    "driver_ids"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cxt_validate_driver_for_orders(driver_id, order_ids)

Check one driver against specific orders: vehicle violations, HR violations and capability violations (for example Hazmat or Lift Gate that the driver lacks). Changes nothing. Needs ITINERARY_PLANNING_ACCESS. POST /v3/ItineraryPlanning/Orders/Drivers/{driverId}/Validate.

Input Schema

{
  "type": "object",
  "properties": {
    "driver_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Driver id."
    },
    "order_ids": {
      "minItems": 1,
      "maxItems": 3000,
      "type": "array",
      "items": {
        "type": "number",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      },
      "description": "Order ids to check the driver against."
    }
  },
  "required": [
    "driver_id",
    "order_ids"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cxt_plan_orders(order_ids, driver_ids, start_time, end_time, num_placeholders, ...)

Generate a proposed itinerary that assigns on-demand orders to drivers (pickup and delivery stops in sequence, with times, distance and unassigned stops). This only PROPOSES a plan: nothing is dispatched until cxt_save_order_plan is called. Needs ITINERARY_PLANNING_ACCESS. Check the limits with cxt_get_planning_limits first. POST /v3/ItineraryPlanning/Orders.

Input Schema

{
  "type": "object",
  "properties": {
    "order_ids": {
      "minItems": 1,
      "maxItems": 1500,
      "type": "array",
      "items": {
        "type": "number",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      },
      "description": "Order ids to plan."
    },
    "driver_ids": {
      "minItems": 1,
      "maxItems": 500,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      },
      "description": "Driver ids to plan onto."
    },
    "start_time": {
      "type": "string",
      "description": "Planning window start, local time, e.g. 2026-10-01T08:00:00."
    },
    "end_time": {
      "type": "string",
      "description": "Planning window end, local time, e.g. 2026-10-01T18:00:00."
    },
    "num_placeholders": {
      "description": "Virtual placeholder drivers (0-1000).",
      "type": "integer",
      "minimum": 0,
      "maximum": 1000
    },
    "max_orders_per_driver": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 10000
    },
    "goal": {
      "description": "Optimization goal (default QUICKEST_ROUTE).",
      "type": "string",
      "enum": [
        "QUICKEST_ROUTE",
        "SHORTEST_DISTANCE"
      ]
    },
    "enhanced_routing": {
      "description": "Enhanced routing (default OFF).",
      "type": "string",
      "enum": [
        "OFF",
        "ON"
      ]
    }
  },
  "required": [
    "order_ids",
    "driver_ids",
    "start_time",
    "end_time"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cxt_optimize_order_plan(driver_id, is_placeholder, plan_order_ids, all_input_order_ids, start_time, ...)

Re-optimize a single driver's plan after manual changes (proposal only: nothing is dispatched until cxt_save_order_plan). Needs ITINERARY_PLANNING_ACCESS. POST /v3/ItineraryPlanning/Orders/Optimize.

Input Schema

{
  "type": "object",
  "properties": {
    "driver_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Driver id (or the placeholder's id when is_placeholder)."
    },
    "is_placeholder": {
      "description": "The driver is a placeholder.",
      "type": "boolean"
    },
    "plan_order_ids": {
      "maxItems": 3000,
      "type": "array",
      "items": {
        "type": "number",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      },
      "description": "Orders currently in this driver's plan."
    },
    "all_input_order_ids": {
      "maxItems": 3000,
      "type": "array",
      "items": {
        "type": "number",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      },
      "description": "All orders in the planning run."
    },
    "start_time": {
      "type": "string",
      "description": "Local date-time without timezone, e.g. 2026-10-01T08:00:00."
    },
    "end_time": {
      "type": "string",
      "description": "Local date-time without timezone, e.g. 2026-10-01T08:00:00."
    },
    "goal": {
      "description": "Optimization goal (default QUICKEST_ROUTE).",
      "type": "string",
      "enum": [
        "QUICKEST_ROUTE",
        "SHORTEST_DISTANCE"
      ]
    },
    "enhanced_routing": {
      "description": "Enhanced routing (default OFF).",
      "type": "string",
      "enum": [
        "OFF",
        "ON"
      ]
    }
  },
  "required": [
    "driver_id",
    "plan_order_ids",
    "all_input_order_ids",
    "start_time",
    "end_time"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cxt_plan_routes(post_date, input_route_ids, output_route_ids, start_time, end_time, ...)

Generate a proposed re-sequencing of the stops of existing routes for one route date (stops move between the output routes, with times, distance and unassigned stops). Proposal only: nothing changes until cxt_save_route_plan is called. Needs ITINERARY_PLANNING_ACCESS. POST /v3/ItineraryPlanning/Routes/{postDate}.

Input Schema

{
  "type": "object",
  "properties": {
    "post_date": {
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
      "description": "Route date, yyyy-mm-dd."
    },
    "input_route_ids": {
      "minItems": 1,
      "maxItems": 500,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      },
      "description": "Route ids to take stops from."
    },
    "output_route_ids": {
      "minItems": 1,
      "maxItems": 500,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      },
      "description": "Route ids to assign stops to."
    },
    "start_time": {
      "type": "string",
      "description": "Local date-time without timezone, e.g. 2026-10-01T08:00:00."
    },
    "end_time": {
      "type": "string",
      "description": "Local date-time without timezone, e.g. 2026-10-01T08:00:00."
    },
    "num_placeholders": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000
    },
    "max_stops_per_route": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 10000
    },
    "excluded_stop_ids": {
      "description": "Stop ids to leave out of planning.",
      "maxItems": 5000,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      }
    },
    "service_time_per_stop": {
      "description": "Service time per stop, minutes.",
      "type": "integer",
      "minimum": 0,
      "maximum": 1440
    },
    "grace_period_per_stop": {
      "description": "Grace period per stop, minutes.",
      "type": "integer",
      "minimum": 0,
      "maximum": 1440
    },
    "goal": {
      "description": "Optimization goal (default QUICKEST_ROUTE).",
      "type": "string",
      "enum": [
        "QUICKEST_ROUTE",
        "SHORTEST_DISTANCE"
      ]
    },
    "enhanced_routing": {
      "description": "Enhanced routing (default OFF).",
      "type": "string",
      "enum": [
        "OFF",
        "ON"
      ]
    }
  },
  "required": [
    "post_date",
    "input_route_ids",
    "output_route_ids",
    "start_time",
    "end_time"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cxt_optimize_route_plan(post_date, route_id, is_placeholder, plan_stop_ids, input_route_ids, ...)

Re-optimize a single route after manual changes (proposal only: nothing changes until cxt_save_route_plan). Needs ITINERARY_PLANNING_ACCESS. POST /v3/ItineraryPlanning/Routes/{postDate}/Optimize.

Input Schema

{
  "type": "object",
  "properties": {
    "post_date": {
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
      "description": "Route date, yyyy-mm-dd."
    },
    "route_id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Route to optimize."
    },
    "is_placeholder": {
      "type": "boolean"
    },
    "plan_stop_ids": {
      "description": "Stops currently assigned to this route.",
      "maxItems": 5000,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      }
    },
    "input_route_ids": {
      "description": "Source routes for stops.",
      "maxItems": 500,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    },
    "excluded_stop_ids": {
      "maxItems": 5000,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      }
    },
    "start_time": {
      "type": "string",
      "description": "Local date-time without timezone, e.g. 2026-10-01T08:00:00."
    },
    "end_time": {
      "type": "string",
      "description": "Local date-time without timezone, e.g. 2026-10-01T08:00:00."
    },
    "is_batch_call": {
      "description": "Batch optimization (default false).",
      "type": "boolean"
    },
    "goal": {
      "description": "Optimization goal (default QUICKEST_ROUTE).",
      "type": "string",
      "enum": [
        "QUICKEST_ROUTE",
        "SHORTEST_DISTANCE"
      ]
    },
    "enhanced_routing": {
      "description": "Enhanced routing (default OFF).",
      "type": "string",
      "enum": [
        "OFF",
        "ON"
      ]
    }
  },
  "required": [
    "post_date",
    "route_id",
    "start_time",
    "end_time"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴cxt_save_order_plan(plans, driver_pay_locked_status, confirm)

COMMIT an order plan: assigns the orders to the drivers and DISPATCHES them (drivers receive the work in the driver app; customers may be notified by the system's own status rules). Use only after the user has seen and approved the plan from cxt_plan_orders / cxt_optimize_order_plan. Pass each driver's stops from the plan reply: id, type (PICKUP or DELIVERY), sequence and from (the scheduled time). Response is empty on success (204). Needs ITINERARY_PLANNING_ACCESS. POST /v3/ItineraryPlanning/Orders/Save.

Input Schema

{
  "type": "object",
  "properties": {
    "plans": {
      "minItems": 1,
      "maxItems": 500,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "driverId": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991
          },
          "stops": {
            "minItems": 1,
            "maxItems": 6000,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "number",
                  "exclusiveMinimum": 0,
                  "maximum": 9007199254740991,
                  "description": "Order id."
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "PICKUP",
                    "DELIVERY"
                  ]
                },
                "sequence": {
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 100000
                },
                "from": {
                  "type": "object",
                  "properties": {
                    "timeStamp": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 64
                        },
                        {
                          "type": "number"
                        }
                      ]
                    }
                  },
                  "required": [
                    "timeStamp"
                  ],
                  "additionalProperties": {},
                  "description": "Scheduled arrival: copy `from` from the plan reply, or {timeStamp: '2026-10-01T08:30:00'}."
                },
                "isNew": {
                  "description": "Whether this is a new assignment.",
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "type",
                "sequence",
                "from"
              ]
            }
          }
        },
        "required": [
          "driverId",
          "stops"
        ]
      }
    },
    "driver_pay_locked_status": {
      "description": "What to do with already locked driver pay: KEEP_LOCKED_AND_DISPATCH or UNLOCK_AND_DISPATCH.",
      "type": "string",
      "enum": [
        "KEEP_LOCKED_AND_DISPATCH",
        "UNLOCK_AND_DISPATCH"
      ]
    },
    "confirm": {
      "type": "boolean",
      "const": true,
      "description": "Must be true: the user approved this plan and wants it dispatched to the drivers now."
    }
  },
  "required": [
    "plans",
    "confirm"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴cxt_save_route_plan(post_date, plans, driver_pay_locked_status, confirm)

COMMIT a route plan for one route date: moves and re-sequences route stops as in the plan and DISPATCHES the changed routes to drivers. Use only after the user has seen and approved the plan from cxt_plan_routes / cxt_optimize_route_plan. Pass each route's stops from the plan reply: id, sequence and from (the scheduled time). Response is empty on success (204). Needs ITINERARY_PLANNING_ACCESS. POST /v3/ItineraryPlanning/Routes/{postDate}/Save.

Input Schema

{
  "type": "object",
  "properties": {
    "post_date": {
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
      "description": "Route date, yyyy-mm-dd."
    },
    "plans": {
      "minItems": 1,
      "maxItems": 500,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "routeId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "stops": {
            "minItems": 1,
            "maxItems": 6000,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 9007199254740991,
                  "description": "Route stop id."
                },
                "sequence": {
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 100000
                },
                "from": {
                  "type": "object",
                  "properties": {
                    "timeStamp": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 64
                        },
                        {
                          "type": "number"
                        }
                      ]
                    }
                  },
                  "required": [
                    "timeStamp"
                  ],
                  "additionalProperties": {},
                  "description": "Scheduled arrival: copy `from` from the plan reply, or {timeStamp: '2026-10-01T08:30:00'}."
                },
                "isNew": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "sequence",
                "from"
              ]
            }
          }
        },
        "required": [
          "routeId",
          "stops"
        ]
      }
    },
    "driver_pay_locked_status": {
      "description": "What to do with already locked driver pay: KEEP_LOCKED_AND_DISPATCH or UNLOCK_AND_DISPATCH.",
      "type": "string",
      "enum": [
        "KEEP_LOCKED_AND_DISPATCH",
        "UNLOCK_AND_DISPATCH"
      ]
    },
    "confirm": {
      "type": "boolean",
      "const": true,
      "description": "Must be true: the user approved this plan and wants it dispatched to the drivers now."
    }
  },
  "required": [
    "post_date",
    "plans",
    "confirm"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded14 tools