Track parcels across 3000+ carriers with 17TRACK: register numbers, read tracking events and quota.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
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.
WRITE: assign a different carrier to registered tracking numbers (up to 10 per call), for example when auto-detection picked the wrong one. A number can change carrier at most 5 times, and a successful change can be charged as one shipment (see track17_get_quota). POST /changecarrier.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
WRITE: assign a different carrier to registered tracking numbers (up to 10 per call), for example when auto-detection picked the wrong one. A number can change carrier at most 5 times, and a successful change can be charged as one shipment (see track17_get_quota). POST /changecarrier.
| Argument | Type | Description |
|---|---|---|
| changes* | array |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"changes"
],
"properties": {
"changes": {
"type": "array",
"items": {
"type": "object",
"required": [
"number",
"carrier_new"
],
"properties": {
"number": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{5,50}$",
"description": "Tracking number (5-50 letters, digits or hyphens)."
},
"carrier_new": {
"type": "integer",
"maximum": 9999999,
"description": "The correct carrier code.",
"exclusiveMinimum": 0
},
"carrier_old": {
"type": "integer",
"maximum": 9999999,
"description": "The current carrier code; only needed when the number is tracked under several carriers.",
"exclusiveMinimum": 0
}
}
},
"maxItems": 10,
"minItems": 1
}
}
}WRITE: set the tag (your own label, max 100 characters) of a registered tracking number. It replaces the old tag. Free. POST /changeinfo.
| Argument | Type | Description |
|---|---|---|
| tag* | string | The new tag (max 100 characters; an empty string clears it). |
| number* | string | Tracking number (5-50 letters, digits or hyphens). |
| carrier | integer | Carrier code; needed if the number is tracked under several carriers. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"number",
"tag"
],
"properties": {
"tag": {
"type": "string",
"maxLength": 100,
"description": "The new tag (max 100 characters; an empty string clears it)."
},
"number": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{5,50}$",
"description": "Tracking number (5-50 letters, digits or hyphens)."
},
"carrier": {
"type": "integer",
"maximum": 9999999,
"description": "Carrier code; needed if the number is tracked under several carriers.",
"exclusiveMinimum": 0
}
}
}The account's tracking quota: total, used, remaining, used today, the daily registration limit (0 = no limit) and the free e-mail quota. Each registered tracking number uses 1 quota. POST /getquota.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Full tracking details (status, sub-status, milestones, every carrier event with time and location, estimated delivery) for up to 10 numbers that are ALREADY registered on this account. Free: it does not use quota. A number that is not registered comes back in `rejected` — register it first with track17_register_numbers, or use track17_realtime_lookup. POST /gettrackinfo.
| Argument | Type | Description |
|---|---|---|
| numbers* | array | Registered numbers, each with an optional carrier code (needed if the number is tracked under several carriers). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"numbers"
],
"properties": {
"numbers": {
"type": "array",
"items": {
"type": "object",
"required": [
"number"
],
"properties": {
"number": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{5,50}$",
"description": "Tracking number (5-50 letters, digits or hyphens)."
},
"carrier": {
"type": "integer",
"maximum": 9999999,
"description": "17TRACK numeric carrier code (for example 3011 = China Post, 100003 = FedEx). Full list: https://res.17track.net/asset/carrier/info/apicarrier.all.json",
"exclusiveMinimum": 0
}
}
},
"maxItems": 10,
"minItems": 1,
"description": "Registered numbers, each with an optional carrier code (needed if the number is tracked under several carriers)."
}
}
}Search the tracking numbers registered on this account (40 per page) with their carrier, status, registration and last-update times, and latest event. Filter by number(s), carrier, tracking state, package status or registration date. Free: it does not use quota. POST /gettracklist.
| Argument | Type | Description |
|---|---|---|
| carrier | integer | 17TRACK numeric carrier code (for example 3011 = China Post, 100003 = FedEx). Full list: https://res.17track.net/asset/carrier/info/apicarrier.all.json |
| numbers | array | Only these tracking numbers (up to 200). |
| page_no | integer | Page number, from 1 (omit for the first page). Use the reply's next_page. |
| order_by | string | Sort order. |
| data_origin | string | How the number was added. |
| package_status | string | Only packages in this main status. |
| tracking_status | string | Only numbers currently being tracked, or stopped. |
| register_time_to | string | Registered on or before this date (yyyy-mm-dd). |
WRITE (uses quota): look up ONE tracking number directly at the carrier right now, without registering it. Costs 1 quota per call (standard: carrier data up to 3 hours old). If the number is already registered, a changed result is also pushed to the account. Not supported for USPS, Royal Mail, Australia Post, Direct Freight Express, DHL eCommerce US and DHL Global Forwarding; some accounts are not enabled for real-time lookups. POST /getRealTimeTrackInfo.
| Argument | Type | Description |
|---|---|---|
| number* | string | Tracking number (5-50 letters, digits or hyphens). |
| carrier | integer | 17TRACK numeric carrier code (for example 3011 = China Post, 100003 = FedEx). Full list: https://res.17track.net/asset/carrier/info/apicarrier.all.json |
| ship_date | string | A date, yyyy-mm-dd. |
| phone_number_last_4 | string | Last 4 digits of the recipient phone, for carriers that require it. |
| destination_postal_code | string | Recipient postal code, for carriers that require it. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"number"
],
"properties": {
"number": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{5,50}$",
"description": "Tracking number (5-50 letters, digits or hyphens)."
},
"carrier": {
"type": "integer",
"maximum": 9999999,
"description": "17TRACK numeric carrier code (for example 3011 = China Post, 100003 = FedEx). Full list: https://res.17track.net/asset/carrier/info/apicarrier.all.json",
"exclusiveMinimum": 0
},
"ship_date": {
"type": "string",
"pattern": "^\\d{4}[-/]\\d{2}[-/]\\d{2}$",
"description": "A date, yyyy-mm-dd."
},
"phone_number_last_4": {
"type": "string",
"pattern": "^\\d{4}$",
"description": "Last 4 digits of the recipient phone, for carriers that require it."
},
"destination_postal_code": {
"type": "string",
"maxLength": 20,
"minLength": 1,
"description": "Recipient postal code, for carriers that require it."
}
}
}WRITE (uses quota): start tracking up to 10 tracking numbers per call. Each ACCEPTED number costs 1 quota from this account (see track17_get_quota); rejected numbers cost nothing. Deleting and re-registering a number costs again. 17TRACK then updates the status itself every 6-12 hours; read it with track17_get_tracking. The carrier is detected automatically unless a carrier code is given. No e-mail notifications are enabled. POST /register.
| Argument | Type | Description |
|---|---|---|
| numbers* | array | 1-10 numbers to register. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"numbers"
],
"properties": {
"numbers": {
"type": "array",
"items": {
"type": "object",
"required": [
"number"
],
"properties": {
"tag": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Your own label for the shipment (max 100 characters), for example an order id."
},
"lang": {
"type": "string",
"pattern": "^[A-Za-z]{2,3}(-[A-Za-z]{2,4})?$",
"description": "Translation language code, for example en."
},
"number": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{5,50}$",
"description": "Tracking number (5-50 letters, digits or hyphens)."
},
"remark": {
"type": "string",
"maxLength": 1000,
"minLength": 1,
"description": "Free note (max 1000 characters)."
},
"carrier": {
"type": "integer",
"maximum": 9999999,
"description": "17TRACK numeric carrier code (for example 3011 = China Post, 100003 = FedEx). Full list: https://res.17track.net/asset/carrier/info/apicarrier.all.json",
"exclusiveMinimum": 0
},
"order_no": {
"type": "string",
"maxLength": 50,
"minLength": 5,
"description": "Order number (5-50 characters)."
},
"ship_date": {
"type": "string",
"pattern": "^\\d{4}[-/]\\d{2}[-/]\\d{2}$",
"description": "A date, yyyy-mm-dd."
},
"origin_country": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Origin country, ISO 3166-1 alpha-2 (for example CN)."
},
"destination_country": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Destination country, ISO 3166-1 alpha-2."
},
"phone_number_last_4": {
"type": "string",
"pattern": "^\\d{4}$",
"description": "Last 4 digits of the recipient phone, required by some carriers."
},
"destination_postal_code": {
"type": "string",
"maxLength": 20,
"minLength": 1,
"description": "Recipient postal code, required by some carriers."
}
}
},
"maxItems": 10,
"minItems": 1,
"description": "1-10 numbers to register."
}
}
}WRITE: restart tracking of stopped numbers (up to 10 per call). Each number can be restarted only ONCE in its lifetime, so a second restart is rejected. POST /retrack.
| Argument | Type | Description |
|---|---|---|
| numbers* | array |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"numbers"
],
"properties": {
"numbers": {
"type": "array",
"items": {
"type": "object",
"required": [
"number"
],
"properties": {
"number": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{5,50}$",
"description": "Tracking number (5-50 letters, digits or hyphens)."
},
"carrier": {
"type": "integer",
"maximum": 9999999,
"description": "17TRACK numeric carrier code (for example 3011 = China Post, 100003 = FedEx). Full list: https://res.17track.net/asset/carrier/info/apicarrier.all.json",
"exclusiveMinimum": 0
}
}
},
"maxItems": 10,
"minItems": 1
}
}
}WRITE: stop tracking registered numbers (up to 10 per call). The numbers stay in the account for 90 days with their history and can be restarted ONCE each with track17_retrack. Stopping does not refund quota. POST /stoptrack.
| Argument | Type | Description |
|---|---|---|
| numbers* | array |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"numbers"
],
"properties": {
"numbers": {
"type": "array",
"items": {
"type": "object",
"required": [
"number"
],
"properties": {
"number": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{5,50}$",
"description": "Tracking number (5-50 letters, digits or hyphens)."
},
"carrier": {
"type": "integer",
"maximum": 9999999,
"description": "17TRACK numeric carrier code (for example 3011 = China Post, 100003 = FedEx). Full list: https://res.17track.net/asset/carrier/info/apicarrier.all.json",
"exclusiveMinimum": 0
}
}
},
"maxItems": 10,
"minItems": 1
}
}
}| register_time_from | string | Registered on or after this date (yyyy-mm-dd). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"carrier": {
"type": "integer",
"maximum": 9999999,
"description": "17TRACK numeric carrier code (for example 3011 = China Post, 100003 = FedEx). Full list: https://res.17track.net/asset/carrier/info/apicarrier.all.json",
"exclusiveMinimum": 0
},
"numbers": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9-]{5,50}$",
"description": "Tracking number (5-50 letters, digits or hyphens)."
},
"maxItems": 200,
"minItems": 1,
"description": "Only these tracking numbers (up to 200)."
},
"page_no": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (omit for the first page). Use the reply's next_page.",
"exclusiveMinimum": 0
},
"order_by": {
"enum": [
"RegisterTimeAsc",
"RegisterTimeDesc",
"TrackTimeAsc",
"TrackTimeDesc"
],
"type": "string",
"description": "Sort order."
},
"data_origin": {
"enum": [
"Api",
"Manual",
"Import"
],
"type": "string",
"description": "How the number was added."
},
"package_status": {
"enum": [
"NotFound",
"InfoReceived",
"InTransit",
"Expired",
"AvailableForPickup",
"OutForDelivery",
"DeliveryFailure",
"Delivered",
"Exception"
],
"type": "string",
"description": "Only packages in this main status."
},
"tracking_status": {
"enum": [
"Tracking",
"Stopped"
],
"type": "string",
"description": "Only numbers currently being tracked, or stopped."
},
"register_time_to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Registered on or before this date (yyyy-mm-dd)."
},
"register_time_from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Registered on or after this date (yyyy-mm-dd)."
}
}
}