Zhiyong Parcel Tracking
Server Details
Track parcel status and scan history; currently supports UniUni only.
- Status
- Healthy
- Uptime
- 100.0% over 20 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 1 tool
With only one tool, there is no possibility of misselection; track_parcel has a single, unmistakable purpose (parcel lookup by tracking number). The description thoroughly enumerates inputs and outcomes, so an agent always knows when to call it.
The lone tool name, track_parcel, follows a clean verb_noun snake_case convention. There are no other names to conflict with, so consistency is trivially satisfied.
A single tool is thin for an MCP server, though it is defensible given the deliberately narrow scope (one carrier, one operation). It sits at the borderline of the 1-2 tool range rather than being an extreme mismatch.
The core lookup operation is well covered, including rich outcome states and error handling. However, there is no batch tracking, no carrier enumeration, and no history/status-refresh operation, leaving notable gaps for agents handling multiple parcels or carriers.
Available Tools
1 tooltrack_parcelTrack a parcel or shipmentARead-onlyInspect
For a user-requested parcel, package, shipment, order-delivery, or waybill lookup. Required tracking_number: 5–64 letters, digits, or hyphens. If the user supplied exactly one valid number, call this tool and deliver the actual result. carrier is optional and defaults to UniUni, the only supported carrier today; additional carriers are planned but not available yet. A named unsupported carrier returns unsupported_carrier without querying UniUni. language is optional (en or zh), default en. Inspect isError and structuredContent.outcome rather than HTTP status alone. Distinguish found outcomes (delivered/in_transit), not_found, invalid, unsupported_carrier, rate_limited, carrier_error, and configuration_error. Event times are carrier-local; locations are approximate. Precise addresses, coordinates, staff, internal IDs, and raw carrier payloads are excluded. No separate lookup-authorization flag is required. Lookup inputs and filtered results are logged for up to 30 days or 1,000 records. Full MCP/A2A request sequence and result-handling workflow: https://delivery.zhiyong.dev/agent-workflow.json.
| Name | Required | Description | Default |
|---|---|---|---|
| carrier | No | Optional carrier name; defaults to UniUni when omitted. UniUni is currently the only supported carrier; another named carrier is rejected without a lookup. | |
| language | No | Language for event titles, details and locations. Defaults to English. | en |
| tracking_number | Yes | One user-provided parcel tracking or waybill number. This validates syntax only, not whether a parcel exists. Current carrier coverage is UniUni. |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | Yes | Whether the carrier found a matching parcel. |
| detail | No | Actionable explanation for validation, carrier, configuration, or rate-limit errors. |
| events | No | Privacy-filtered scan history in carrier-local display time; street addresses and internal fields are excluded. |
| status | No | Localized, normalized latest delivery status when a parcel is found. |
| carrier | Yes | Carrier requested by the caller, or UniUni when omitted. Only UniUni is currently supported. |
| outcome | Yes | Normalized lookup outcome, including validation and temporary service errors. |
| status_code | No | Carrier status code, when available. |
| status_kind | No | Normalized delivery state. |
| tracking_number | No | The requested parcel tracking or waybill number. |
| estimated_delivery | No | Carrier-provided estimated delivery date, when available. |
| supported_carriers | Yes | Carriers currently available through this service. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=true), and the description goes well beyond them: it enumerates the full outcome taxonomy, states that times are carrier-local and locations approximate, lists what is deliberately excluded from results, notes that no separate lookup-authorization flag is required, and discloses a 30-day/1,000-record logging retention window. The idempotentHint=false annotation is consistent with a live tracking lookup whose underlying state changes, so there is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is long but front-loaded: the purpose and the required tracking_number constraint come first, followed by parameter defaults, then error handling, then data-handling caveats. Most sentences earn their place, though the outcome taxonomy and exclusions list make it denser than strictly necessary for a three-parameter read tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value shape need not be explained, yet the description still tells the agent how to interpret results (isError, structuredContent.outcome, found vs not_found vs rate_limited vs configuration_error). Combined with carrier defaults, privacy exclusions, logging retention, and a link to the full workflow document, nothing an agent needs to call or interpret this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (including the enum and defaults) are already documented in the schema itself. The description largely restates the 5-64 character constraint and the UniUni default; its only additive note is the carrier roadmap ('additional carriers are planned but not available yet'), which is marginal. Baseline 3 is appropriate when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb-plus-resource scope and enumerates the user-facing synonyms it covers (parcel, package, shipment, order-delivery, waybill), so an agent immediately knows what request class routes here. There are no sibling tools to disambiguate against, and the title reinforces the same meaning without adding noise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger condition ('If the user supplied exactly one valid number, call this tool and deliver the actual result') and an explicit boundary for the carrier parameter (defaults to UniUni, named unsupported carriers are rejected without querying). The guidance on inspecting isError and structuredContent.outcome rather than HTTP status is actionable operating instruction rather than vague context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
track_parcel6 fields changed- added
Input schema / properties / carrierAdded value: +{ + "description": "Optional carrier name; defaults to UniUni when omitted. UniUni is currently the only supported carrier; another named carrier is rejected without a lookup.", + "maxLength": 64, + "minLength": 1, + "type": "string" +} - changed
Input schema / properties / tracking_number / descriptionPrevious value: -"Parcel tracking or waybill number. Current carrier coverage is UniUni."New value: +"One user-provided parcel tracking or waybill number. This validates syntax only, not whether a parcel exists. Current carrier coverage is UniUni." - added
Output schema / properties / carrierAdded value: +{ + "description": "Carrier requested by the caller, or UniUni when omitted. Only UniUni is currently supported.", + "type": "string" +} - changed
Output schema / properties / outcome / enumPrevious value: -[ - "delivered", - "in_transit", - "not_found", - "invalid", - "configuration_error", - "carrier_error", - "rate_limited" -]New value: +[ + "delivered", + "in_transit", + "not_found", + "invalid", + "unsupported_carrier", + "configuration_error", + "carrier_error", + "rate_limited" +] - added
Output schema / properties / supported_carriersAdded value: +{ + "description": "Carriers currently available through this service.", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "found", - "outcome" -]New value: +[ + "found", + "outcome", + "carrier", + "supported_carriers" +]
1 tool update
- Changed
track_parcel3 fields changed- changed
Input schema / properties / language / defaultPrevious value: -"zh"New value: +"en" - changed
Input schema / properties / language / descriptionPrevious value: -"Language for event titles, details and locations."New value: +"Language for event titles, details and locations. Defaults to English." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "detail": { + "description": "Actionable explanation for validation, carrier, configuration, or rate-limit errors.", + "type": "string" + }, + "estimated_delivery": { + "description": "Carrier-provided estimated delivery date, when available.", + "type": "string" + }, + "events": { + "description": "Privacy-filtered scan history in carrier-local display time; street addresses and internal fields are excluded.", + "items": { + "additionalProperties": false, + "properties": { + "detail": { + "description": "Safe, normalized event explanation, when available.", + "type": "string" + }, + "location": { + "description": "Approximate city or region, when available.", + "type": "string" + }, + "status": { + "description": "Localized, normalized event title.", + "type": "string" + }, + "time": { + "description": "Event time as displayed by the carrier, without UTC conversion.", + "type": "string" + }, + "time_basis": { + "enum": [ + "carrier_local" + ], + "type": "string" + } + }, + "required": [ + "time", + "time_basis", + "status" + ], + "type": "object" + }, + "type": "array" + }, + "found": { + "description": "Whether the carrier found a matching parcel.", + "type": "boolean" + }, + "outcome": { + "description": "Normalized lookup outcome, including validation and temporary service errors.", + "enum": [ + "delivered", + "in_transit", + "not_found", + "invalid", + "configuration_error", + "carrier_error", + "rate_limited" + ], + "type": "string" + }, + "status": { + "description": "Localized, normalized latest delivery status when a parcel is found.", + "type": "string" + }, + "status_code": { + "description": "Carrier status code, when available.", + "type": "string" + }, + "status_kind": { + "description": "Normalized delivery state.", + "enum": [ + "delivered", + "in_transit", + "exception" + ], + "type": "string" + }, + "tracking_number": { + "description": "The requested parcel tracking or waybill number.", + "type": "string" + } + }, + "required": [ + "found", + "outcome" + ], + "type": "object" +}
1 tool update
- Changed
track_parcel1 field changed- changed
Input schema / properties / tracking_number / descriptionPrevious value: -"A UniUni parcel tracking / waybill number (UniUni 运单号)."New value: +"Parcel tracking or waybill number. Current carrier coverage is UniUni."
1 tool update
- Changed
track_parcel2 fields changed- changed
Input schema / properties / language / descriptionPrevious value: -"Language for status labels."New value: +"Language for event titles, details and locations." - changed
Input schema / properties / tracking_number / descriptionPrevious value: -"The UniUni tracking / waybill number."New value: +"A UniUni parcel tracking / waybill number (UniUni 运单号)."
1 tool update
- First observed
track_parcel
Related MCP Connectors
Track 542 carriers (USPS, UPS, FedEx, UniUni, LTL) via MCP, API, Webhooks & Watches.
Track parcels across 2,500+ carriers and 3PLs: live delivery status, event history, carrier lookup.
Track packages across 1,300+ global carriers with real-time status and AI-powered delivery dates.
Auto-detect carrier from tracking number: USPS, UPS, FedEx, DHL, India Post, more.
Related MCP Servers
- AlicenseBqualityDmaintenanceAllows tracking of parcel deliveries across various carriers using the 17track.net API, with automatic or manual carrier detection.25 npm6MIT
- FlicenseAqualityBmaintenanceEnables parcel tracking via YunTrack, supporting single or batch tracking numbers and returning raw JSON from the YunTrack Query API.1-
- AlicenseNot gradedqualityCmaintenanceEnables AI clients to track Japanese parcel shipments from carriers such as Japan Post, Sagawa, Yamato, Seino, and Fukuyama by tracking number, automatically detecting the carrier (or accepting an explicit carrier choice) and returning delivery status.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI to query your personal package tracking information from Taobao, JD, and Cainiao after a one-time QR code login.1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.