renfield-mcp-tracking
Integrates with Deutsche Post's tracking service (via DHL's Unified API) to track parcels, returning normalized status and events.
Integrates with DHL's Shipment Tracking Unified API to track parcels, returning normalized status and events.
Provides a web deep-link to DPD's tracking page for parcel tracking (no API integration).
Integrates with FedEx Track API to track parcels, returning normalized status and events.
Provides a web deep-link to Hermes' tracking page for parcel tracking (no API integration).
Integrates with UPS Track API to track parcels, returning normalized status and events.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@renfield-mcp-trackingtrack parcel 1Z999AA10123456784"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
renfield-mcp-tracking
Multi-carrier parcel-tracking MCP server for Renfield. Talks directly to carrier APIs — no third-party aggregator (no Shippo, AfterShip, EasyPost, …). Your tracking data never passes through a SaaS middleman.
Carriers
Carrier | Backend | Notes |
DHL / Deutsche Post | Shipment Tracking – Unified API | Free, production key. One endpoint covers DHL Paket, Express, Deutsche Post, Freight. Initial quota 250 calls/day. |
UPS | OAuth client-credentials + Track API | Free developer app. |
FedEx | OAuth client-credentials + Track API | Free developer app. |
DPD | Web deep-link only | No free public API for private users → returns a link into |
Hermes | Web deep-link only | → |
GLS | Web deep-link only | → |
Each API adapter self-disables when its credentials are absent — the server
still starts, and list_carriers() reports which carriers are usable. The
link-only carriers always work (they only return a tracking URL). Adding real
API access for DPD/Hermes/GLS later means dropping in a CarrierAdapter
subclass and registering it — no other code changes.
Related MCP server: DB2ST MCP
Tools
track_parcel(tracking_number, carrier="auto")— primary. Returns a normalized result:status,status_description,estimated_delivery,events(newest first),web_url,success.list_carriers()— supported carriers + configured state.detect_carrier(tracking_number)— guess the carrier from the number format (confident for UPS1Z…and DHLJJD…; ambiguous numeric numbers fall back toTRACKING_DEFAULT_CARRIER).
Normalized status values
pre_transit · transit · out_for_delivery · delivered · exception ·
unknown · not_found · link_only · not_configured · error
Configuration
Env var | Purpose |
| DHL Developer Portal app key (the |
| UPS developer app credentials. |
| FedEx developer app credentials. |
| Fallback when auto-detect is inconclusive (default |
| Override API base (test environments). |
Getting keys
DHL — register at https://developer.dhl.com/, create an app, subscribe it to Shipment Tracking – Unified, copy the key. Works against production.
UPS — https://developer.ups.com/ → create an app → OAuth client id/secret.
FedEx — https://developer.fedex.com/ → create an app → Track API.
Run
pip install -e ".[dev]"
python -m renfield_mcp_tracking # stdio MCP server
pytest -qUse in Renfield
Installed into the backend image via src/backend/requirements.txt and run as a
stdio server from config/mcp_servers.yaml (name: tracking). Enable with
TRACKING_ENABLED=true and set whichever carrier keys you have. Tools become
available to the agent as mcp.tracking.track_parcel etc.
License
MIT
Available Tools
3 toolsdetect_carrierA
Guess the carrier from a tracking-number format (best effort).
Confident only for UPS ('1Z…') and DHL ('JJD…/JD…'). For ambiguous numeric numbers it returns the configured fallback carrier and confident=False.
Args: tracking_number: The number to classify.
| Name | Required | Description | Default |
|---|---|---|---|
| tracking_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavioral traits: best effort, confident only for certain formats, returns fallback with confident=False for ambiguous numbers. Since no annotations are provided, the description carries the full burden and does so adequately.
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?
The description is extremely concise, front-loading the main purpose in the first sentence, and uses an Args section efficiently for the single parameter.
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?
Given the tool's simplicity, the description provides sufficient behavioral detail and limitations. It mentions the confident flag, though it could be slightly more explicit about the return format.
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?
The only parameter 'tracking_number' is described as 'The number to classify,' which adds minimal meaning beyond the schema. With 0% schema description coverage, the description compensates partially but not richly.
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 description clearly states the tool guesses the carrier from a tracking number format, mentioning specific carriers (UPS, DHL) and distinguishing it from siblings like list_carriers and track_parcel.
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?
The description provides clear context on when to use the tool, indicating it is for classifying a tracking number, and describes behavior like fallback carrier and confidence flag, but does not explicitly mention when not to use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_carriersA
List supported carriers and whether each is configured/usable.
'api' carriers need credentials (configured=False means missing keys). 'link' carriers always work but only return a web tracking link.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description fully discloses the tool's behavior: it returns a list of carriers with a flag indicating whether each is configured and usable. It explains the meaning of 'configured=False' for api carriers and that link carriers always work. No side effects are mentioned, which is appropriate for a read-only listing operation.
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?
The description is extremely concise: two focused sentences plus an additional clarifying line. It is front-loaded with the primary purpose, and every sentence provides essential information without redundancy.
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?
Given the tool has no parameters and an output schema exists, the description sufficiently explains what the tool returns (list of carriers with configuration status) and interprets the status values. This is complete for an agent to understand the tool's output.
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?
The tool has no parameters, so the description does not need to add meaning beyond the schema. Per guidelines, 0 parameters yields a baseline of 4. The description adds value by explaining the output semantics.
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 description clearly states the primary function: listing supported carriers and their configuration status. It distinguishes between 'api' and 'link' carriers, providing specific details that differentiate this tool from its siblings (detect_carrier, track_parcel).
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?
The description explains when to use the tool (to see available carriers and their usability) and provides context about credential requirements for 'api' carriers. However, it does not explicitly state when not to use it or mention alternative tools, though the context is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
track_parcelA
Track a parcel and return its current status, ETA and event history.
Args: tracking_number: The carrier tracking number / piece code. carrier: Carrier code (dhl, ups, fedex, dpd, hermes, gls) or "auto" to detect from the number format. Default "auto".
Returns a normalized result with: status (pre_transit / transit / out_for_delivery / delivered / exception / unknown / not_found / link_only / not_configured / error), status_description, estimated_delivery, events (newest first), web_url, and success.
| Name | Required | Description | Default |
|---|---|---|---|
| tracking_number | Yes | ||
| carrier | No | auto |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses key behaviors: carrier auto-detection, the return structure (statuses, events order, etc.), and default parameter values. This is comprehensive without annotations.
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?
The description is front-loaded with purpose and organized into Args and Returns sections. Every sentence adds value, though it is slightly verbose. Still efficiently conveys all necessary information.
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?
Given no output schema, the description thoroughly explains return fields including status enum values, events ordering, and web_url. It covers input, behavior, and output completely for a parcel tracking tool.
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?
The description adds significant meaning beyond the bare input schema. It explains tracking_number as 'carrier tracking number / piece code' and lists valid carrier codes for carrier parameter. This fully compensates for the 0% schema description coverage.
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 description clearly states the tool's action ('Track a parcel') and the resources involved ('status, ETA and event history'). It effectively distinguishes from sibling tools 'detect_carrier' and 'list_carriers' which have different purposes.
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?
The description provides implied usage (e.g., carrier auto-detection) but does not explicitly state when to use this tool versus siblings or any when-not scenarios. It lacks explicit alternatives or exclusion 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. Dates show when Glama detected each change.
3 tool updates
v1.0.0- First observed
detect_carrier - First observed
list_carriers - First observed
track_parcel
TDQS
Each tool has a distinct purpose: carrier detection, listing carriers, and tracking parcels. No overlap in functionality.
All tools follow a snake_case verb_noun pattern (detect_carrier, list_carriers, track_parcel), with consistent naming. The slight pluralization in list_carriers is natural for listing operations.
With only 3 tools, the set is concise yet sufficient for the domain of parcel tracking. Each tool earns its place without unnecessary bloat.
The tool set covers the core lifecycle: carrier detection (identify carrier from number), carrier discovery (list available carriers), and tracking (get status and events). No obvious gaps for a tracking helper server.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Track parcels across 2,500+ carriers and 3PLs: live delivery status, event history, carrier lookup.
Multi-carrier shipping functionality with built-in, discounted carrier accounts. Compare rates, generate PDF shipping labels, schedule pickups and track packages in automated way or in your chatbox, no coding required. This is a demo server that is functional with no account needed and no auth. For production use please find our production version.
Real-time order tracking for Shopify merchants: look up, list, and refresh shipments.
Track packages across 1,300+ global carriers with real-time status and AI-powered delivery dates.
Related MCP Servers
AlicenseNot gradedqualityDmaintenanceProvides shipment tracking api and logistics management capabilities through the TrackMage API. Enables creation and monitoring of shipments and orders, carrier detection, tracking checkpoint retrieval, and comprehensive logistics workflow automation.2MIT- AlicenseNot gradedqualityDmaintenanceA horizontally scalable Model Context Protocol server for exposing shipment tracking (and other data sources) as authenticated MCP tools, starting with DB Schenker's public tracking endpoint.1MIT
- FlicenseNot gradedqualityDmaintenanceEnables package tracking across multiple carriers by auto-detecting the carrier from a tracking number and returning structured events. Supports USPS, UPS, FedEx, DHL, India Post, Delhivery, BlueDart, and Aramex.-
- AlicenseAqualityCmaintenanceMCP server for tracking Japanese logistics carriers (Yamato, Sagawa, Japan Post) via mock or AfterShip adapter. Enables AI agents to query shipment status and history in natural language.3MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ebongard/renfield-mcp-tracking'
If you have feedback or need assistance with the MCP directory API, please join our Discord server