Track parcels across 2,500+ carriers and 3PLs: live delivery status, event history, carrier lookup.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Ship24 API key as a Bearer token, e.g. 'Bearer apik_...'
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Creates up to 100 trackers in one request. Each tracker object accepts the same fields as create_tracker — see that tool for field details. Not fully idempotent: retrying a failed bulk request may partially create trackers. Returns counts of created, ignored (duplicate), and failed trackers plus per-item details.
Array of tracker objects to create (minimum 1, maximum 100).
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Creates up to 100 trackers in one request. Each tracker object accepts the same fields as create_tracker — see that tool for field details. Not fully idempotent: retrying a failed bulk request may partially create trackers. Returns counts of created, ignored (duplicate), and failed trackers plus per-item details.
| Argument | Type | Description |
|---|---|---|
| trackers* | array | Array of tracker objects to create (minimum 1, maximum 100). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"trackers"
],
"properties": {
"trackers": {
"type": "array",
"items": {
"type": "object",
"required": [
"trackingNumber"
],
"properties": {
"settings": {
"type": "object",
"properties": {
"restrictTrackingToCourierCode": {
"type": "boolean",
"description": "When true, tracking is restricted to the specified courierCode(s) only."
}
}
},
"courierCode": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 3,
"description": "Courier codes for this tracker (max 3). Use get_couriers for valid codes. IMPORTANT: Check each courier's requiredFields array — any listed fields should be provided, otherwise the courier may not return any tracking data."
},
"courierName": {
"type": "string"
},
"orderNumber": {
"type": "string"
},
"trackingUrl": {
"type": "string",
"format": "uri"
},
"shippingDate": {
"type": "string"
},
"trackingNumber": {
"type": "string",
"minLength": 1
},
"clientTrackerId": {
"type": "string"
},
"originCountryCode": {
"type": "string",
"maxLength": 2,
"minLength": 2
},
"shipmentReference": {
"type": "string"
},
"destinationPostCode": {
"type": "string"
},
"destinationCountryCode": {
"type": "string",
"maxLength": 2,
"minLength": 2
}
}
},
"maxItems": 100,
"minItems": 1,
"description": "Array of tracker objects to create (minimum 1, maximum 100)."
}
}
}Creates a new tracker for a tracking number. Use when the user explicitly wants ongoing monitoring or webhook updates; results arrive asynchronously — for immediate results use track or search_tracking. Idempotent: same parameters reuse the existing tracker; any field change creates a new one. Subscribes to webhook updates if configured. Returns the created tracker including its Ship24 trackerId.
| Argument | Type | Description |
|---|---|---|
| settings | object | |
| courierCode | array | Courier codes for this tracker (max 3). Use get_couriers for valid codes. IMPORTANT: Check each courier's requiredFields array — any listed fields should be provided, otherwise the courier may not return any tracking data. |
| courierName | string | Courier name (informational). |
| orderNumber | string | Associated order number. |
| trackingUrl | string | Courier tracking URL. |
| shippingDate | string | Date the package was shipped (YYYY-MM-DD or ISO 8601). |
| trackingNumber* | string | Tracking number to monitor. |
| clientTrackerId | string | Your unique identifier for this tracker, for lookup via searchBy=clientTrackerId. |
Retrieves the full webhook push history for a tracker. Returns metadata (trackingNumber, trackerId, clientTrackerId, webhookUrl, lastSuccessfulPushAt, lastFailedPushAt) and a list of all sent or failed pushes with status, pushTimestamp, requestBody, responseBody, responseHeaders, and responseStatusCode. Pending (unsent) webhooks are excluded. Results are sorted newest first. Rate-limited to 1 request/second per tracker.
| Argument | Type | Description |
|---|---|---|
| searchBy | string | How to interpret trackerId: default is Ship24 trackerId, use "clientTrackerId" for your own reference. |
| trackerId* | string | Ship24 trackerId, or clientTrackerId when searchBy="clientTrackerId". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"trackerId"
],
"properties": {
"searchBy": {
"enum": [
"trackerId",
"clientTrackerId"
],
"type": "string",
"description": "How to interpret trackerId: default is Ship24 trackerId, use \"clientTrackerId\" for your own reference."
},
"trackerId": {
"type": "string",
"minLength": 1,
"description": "Ship24 trackerId, or clientTrackerId when searchBy=\"clientTrackerId\"."
}
}
}Returns the list of all couriers supported by Ship24, including their unique courier codes, human-readable names, and any special tracking requirements. Use this tool to discover valid courierCode values before creating or updating trackers, or to help identify which courier handles a particular tracking number format. Note: this endpoint has a rate limit of 1 request/second; cache results when possible.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Retrieves a single tracker by trackerId (or clientTrackerId when searchBy is set). Returns tracker metadata only — use get_tracking_results for events and status.
| Argument | Type | Description |
|---|---|---|
| searchBy | string | How to interpret trackerId: default is Ship24 trackerId, use "clientTrackerId" for your own reference. |
| trackerId* | string | Ship24 trackerId, or clientTrackerId when searchBy="clientTrackerId". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"trackerId"
],
"properties": {
"searchBy": {
"enum": [
"trackerId",
"clientTrackerId"
],
"type": "string",
"description": "How to interpret trackerId: default is Ship24 trackerId, use \"clientTrackerId\" for your own reference."
},
"trackerId": {
"type": "string",
"minLength": 1,
"description": "Ship24 trackerId, or clientTrackerId when searchBy=\"clientTrackerId\"."
}
}
}Returns full tracking results for an existing tracker: metadata, shipment status, all events in order, and delivery statistics. Primary tool for "where is my package?" when you have a trackerId. statusMilestone values: pending | info_received | in_transit | out_for_delivery | failed_attempt | available_for_pickup | delivered | exception.
| Argument | Type | Description |
|---|---|---|
| searchBy | string | How to interpret trackerId: default is Ship24 trackerId, use "clientTrackerId" for your own reference. |
| trackerId* | string | Ship24 trackerId, or clientTrackerId when searchBy="clientTrackerId". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"trackerId"
],
"properties": {
"searchBy": {
"enum": [
"trackerId",
"clientTrackerId"
],
"type": "string",
"description": "How to interpret trackerId: default is Ship24 trackerId, use \"clientTrackerId\" for your own reference."
},
"trackerId": {
"type": "string",
"minLength": 1,
"description": "Ship24 trackerId, or clientTrackerId when searchBy=\"clientTrackerId\"."
}
}
}Returns a paginated list of all trackers. Supports offset (page/limit) or cursor-based pagination. Filter by subscription status with isSubscribed.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (1-indexed). |
| sort | any | Sort order by createdAt. 1 = ascending (oldest first, default), -1 = descending (newest first). |
| limit | integer | Results per page (max 500). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Page number (1-indexed).",
"exclusiveMinimum": 0
},
"sort": {
"anyOf": [
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": -1
}
],
"description": "Sort order by createdAt. 1 = ascending (oldest first, default), -1 = descending (newest first)."
},
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "Results per page (max 500)."
}
}
}Replays all webhook events for a tracker. Use when your endpoint missed or failed to process previous notifications. Terminates any in-flight webhook delivery for this tracker and invalidates its existing webhook payload records before regenerating and resending them — do not call repeatedly in quick succession. Rate-limited to 1 request/second per tracker.
| Argument | Type | Description |
|---|---|---|
| searchBy | string | How to interpret trackerId: default is Ship24 trackerId, use "clientTrackerId" for your own reference. |
| trackerId* | string | Ship24 trackerId, or clientTrackerId when searchBy="clientTrackerId". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"trackerId"
],
"properties": {
"searchBy": {
"enum": [
"trackerId",
"clientTrackerId"
],
"type": "string",
"description": "How to interpret trackerId: default is Ship24 trackerId, use \"clientTrackerId\" for your own reference."
},
"trackerId": {
"type": "string",
"minLength": 1,
"description": "Ship24 trackerId, or clientTrackerId when searchBy=\"clientTrackerId\"."
}
}
}Default tool for one-off tracking lookups ('track X', 'where is my package'). Synchronous per-call plan endpoint: returns full results (status, events, statistics) immediately and creates NO tracker on the account. Billed per call. Requires an active per-call plan — if it fails with no_active_subscription, use the track tool instead.
| Argument | Type | Description |
|---|---|---|
| courierCode | array | Courier codes for this tracker (max 3). Use get_couriers for valid codes. IMPORTANT: Check each courier's requiredFields array — any listed fields should be provided, otherwise the courier may not return any tracking data. |
| shippingDate | string | Date the package was shipped (YYYY-MM-DD or ISO 8601). |
| trackingNumber* | string | Tracking number to look up. 5-50 alphanumeric characters, hyphens, underscores, dots, or slashes. |
| originCountryCode | string | Origin country code (ISO alpha-2). |
| destinationPostCode | string | Destination postal/ZIP code. |
| destinationCountryCode | string | Destination country code (ISO alpha-2). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"trackingNumber"
],
"properties": {
"courierCode": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 3,
"description": "Courier codes for this tracker (max 3). Use get_couriers for valid codes. IMPORTANT: Check each courier's requiredFields array — any listed fields should be provided, otherwise the courier may not return any tracking data."
},
"shippingDate": {
"type": "string",
"description": "Date the package was shipped (YYYY-MM-DD or ISO 8601)."
},
"trackingNumber": {
"type": "string",
"pattern": "^[a-zA-Z0-9\\-_/.]*$",
"maxLength": 50,
"minLength": 5,
"description": "Tracking number to look up. 5-50 alphanumeric characters, hyphens, underscores, dots, or slashes."
},
"originCountryCode": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Origin country code (ISO alpha-2)."
},
"destinationPostCode": {
"type": "string",
"description": "Destination postal/ZIP code."
},
"destinationCountryCode": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Destination country code (ISO alpha-2)."
}
}
}Returns existing tracking results for a raw tracking number across trackers already on the account, without needing a trackerId. Free read: never creates a tracker and never triggers a new crawl. Responds 404 tracker_not_found if no tracker exists for that number — in that case use search_tracking (per-call) or track (per-shipment). Use this first when a tracker may already exist.
| Argument | Type | Description |
|---|---|---|
| trackingNumber* | string | The raw shipment tracking number to search for (e.g. 1Z999AA10123456784). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"trackingNumber"
],
"properties": {
"trackingNumber": {
"type": "string",
"minLength": 1,
"description": "The raw shipment tracking number to search for (e.g. 1Z999AA10123456784)."
}
}
}Creates a persistent tracker on the account AND returns full tracking results synchronously in one call (per-shipment plan). Idempotent: same payload reuses the existing tracker. Prefer search_tracking for one-off lookups when the per-call plan is available. If the returned shipment is still pending with no events, call get_tracking_results once with the returned trackerId before answering. Accepts the same fields as create_tracker — see that tool for field details.
| Argument | Type | Description |
|---|---|---|
| settings | object | |
| courierCode | array | Courier codes for this tracker (max 3). Use get_couriers for valid codes. IMPORTANT: Check each courier's requiredFields array — any listed fields should be provided, otherwise the courier may not return any tracking data. |
| courierName | string | |
| orderNumber | string | |
| trackingUrl | string | |
| shippingDate | string | |
| trackingNumber* | string | |
| clientTrackerId | string | |
| originCountryCode |
Partially updates a tracker (PATCH). Only provided fields are changed. Common uses: toggling isSubscribed, correcting destination details, or setting a clientTrackerId.
| Argument | Type | Description |
|---|---|---|
| searchBy | string | How to interpret trackerId: default is Ship24 trackerId, use "clientTrackerId" for your own reference. |
| settings | object | |
| trackerId* | string | The tracker to update (Ship24 trackerId or clientTrackerId). |
| courierCode | array | Courier codes for this tracker (max 3). Use get_couriers for valid codes. IMPORTANT: Check each courier's requiredFields array — any listed fields should be provided, otherwise the courier may not return any tracking data. |
| isSubscribed | boolean | true to subscribe to webhooks, false to unsubscribe. |
| shippingDate | string | Ship date (YYYY-MM-DD or ISO 8601). Immutable once tracking data exists. |
| originCountryCode | string | Origin country code (ISO alpha-2). Immutable once tracking data exists. |
| destinationPostCode | string | |
| originCountryCode | string | Origin country code (ISO alpha-2, e.g. US). |
| shipmentReference | string | Internal reference for the shipment. |
| destinationPostCode | string | Destination postal/ZIP code. |
| destinationCountryCode | string | Destination country code (ISO alpha-2). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"trackingNumber"
],
"properties": {
"settings": {
"type": "object",
"properties": {
"restrictTrackingToCourierCode": {
"type": "boolean",
"description": "When true, tracking is restricted to the specified courierCode(s) only."
}
}
},
"courierCode": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 3,
"description": "Courier codes for this tracker (max 3). Use get_couriers for valid codes. IMPORTANT: Check each courier's requiredFields array — any listed fields should be provided, otherwise the courier may not return any tracking data."
},
"courierName": {
"type": "string",
"description": "Courier name (informational)."
},
"orderNumber": {
"type": "string",
"description": "Associated order number."
},
"trackingUrl": {
"type": "string",
"format": "uri",
"description": "Courier tracking URL."
},
"shippingDate": {
"type": "string",
"description": "Date the package was shipped (YYYY-MM-DD or ISO 8601)."
},
"trackingNumber": {
"type": "string",
"minLength": 1,
"description": "Tracking number to monitor."
},
"clientTrackerId": {
"type": "string",
"description": "Your unique identifier for this tracker, for lookup via searchBy=clientTrackerId."
},
"originCountryCode": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Origin country code (ISO alpha-2, e.g. US)."
},
"shipmentReference": {
"type": "string",
"description": "Internal reference for the shipment."
},
"destinationPostCode": {
"type": "string",
"description": "Destination postal/ZIP code."
},
"destinationCountryCode": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Destination country code (ISO alpha-2)."
}
}
}| string |
| shipmentReference | string |
| destinationPostCode | string |
| destinationCountryCode | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"trackingNumber"
],
"properties": {
"settings": {
"type": "object",
"properties": {
"restrictTrackingToCourierCode": {
"type": "boolean",
"description": "When true, tracking is restricted to the specified courierCode(s) only."
}
}
},
"courierCode": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 3,
"description": "Courier codes for this tracker (max 3). Use get_couriers for valid codes. IMPORTANT: Check each courier's requiredFields array — any listed fields should be provided, otherwise the courier may not return any tracking data."
},
"courierName": {
"type": "string"
},
"orderNumber": {
"type": "string"
},
"trackingUrl": {
"type": "string",
"format": "uri"
},
"shippingDate": {
"type": "string"
},
"trackingNumber": {
"type": "string",
"minLength": 1
},
"clientTrackerId": {
"type": "string"
},
"originCountryCode": {
"type": "string",
"maxLength": 2,
"minLength": 2
},
"shipmentReference": {
"type": "string"
},
"destinationPostCode": {
"type": "string"
},
"destinationCountryCode": {
"type": "string",
"maxLength": 2,
"minLength": 2
}
}
}| destinationCountryCode |
| string |
| Destination country code (ISO alpha-2). Immutable once tracking data exists. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"trackerId"
],
"properties": {
"searchBy": {
"enum": [
"trackerId",
"clientTrackerId"
],
"type": "string",
"description": "How to interpret trackerId: default is Ship24 trackerId, use \"clientTrackerId\" for your own reference."
},
"settings": {
"type": "object",
"properties": {
"restrictTrackingToCourierCode": {
"type": "boolean",
"description": "When true, tracking is restricted to the specified courierCode(s) only."
}
}
},
"trackerId": {
"type": "string",
"minLength": 1,
"description": "The tracker to update (Ship24 trackerId or clientTrackerId)."
},
"courierCode": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 3,
"description": "Courier codes for this tracker (max 3). Use get_couriers for valid codes. IMPORTANT: Check each courier's requiredFields array — any listed fields should be provided, otherwise the courier may not return any tracking data."
},
"isSubscribed": {
"type": "boolean",
"description": "true to subscribe to webhooks, false to unsubscribe."
},
"shippingDate": {
"type": "string",
"description": "Ship date (YYYY-MM-DD or ISO 8601). Immutable once tracking data exists."
},
"originCountryCode": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Origin country code (ISO alpha-2). Immutable once tracking data exists."
},
"destinationPostCode": {
"type": "string"
},
"destinationCountryCode": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Destination country code (ISO alpha-2). Immutable once tracking data exists."
}
}
}