colleag-mcp-ups
Provides tools for UPS shipping: rate shopping with negotiated account prices, live shipment tracking with scan history and estimated delivery dates, and landed-cost estimates (duties, VAT, brokerage) for international shipments.
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., "@colleag-mcp-upsGet UPS rates from Stockholm to Berlin for a 3 kg package."
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.
colleag-mcp-ups
An MCP server for UPS shipping, running against your own UPS account: rate shopping with negotiated prices, live tracking (with an interactive MCP Apps card), and landed-cost estimates for international shipments.
Built by Colleag.ai, a CargoBeacon AB company. Works with any MCP host — Colleag.ai, Claude Desktop, VS Code, or your own client.
Read-only by design (v0.1). This release quotes, tracks and estimates — it never books shipments or spends money. Side-effecting tools (booking, pickup scheduling) will follow once host-side human-in-the-loop confirmation conventions are settled; a host, not a connector, should own the "are you sure?" step for actions that cost money.
Tools
Tool | What it does |
| Compare every available UPS service on a lane (or price one |
| Current status, delivery estimate and scan history for a tracking number. Ships an MCP Apps tracking card for hosts that support the |
| Duties, VAT and brokerage estimate for an international shipment (per-commodity lines, incoterm-aware) |
Related MCP server: Shipi MCP
Setup
Create an app on developer.ups.com ("I want to integrate UPS technology into my business") and enable the Rating, Tracking and Landed Cost products. This gives you a Client ID and Secret tied to your UPS account.
Configure environment variables:
UPS_CLIENT_ID=... # required
UPS_CLIENT_SECRET=... # required, secret
UPS_ACCOUNT_NUMBER=... # required — your 6-character shipper number
UPS_ENVIRONMENT=test # 'test' (CIE sandbox, default) or 'production'
SHIP_FROM_NAME="Acme AB" # optional defaults for the quoting origin
SHIP_FROM_ADDRESS="Industrigatan 1"
SHIP_FROM_CITY=Stockholm
SHIP_FROM_POSTAL_CODE="112 46"
SHIP_FROM_COUNTRY=SE
SHIP_FROM_PHONE="+468..."Run:
uv run colleag-mcp-ups # stdio (default)
MCP_TRANSPORT=streamable-http uv run colleag-mcp-ups # HTTPClaude Desktop
{
"mcpServers": {
"ups": {
"command": "uvx",
"args": ["colleag-mcp-ups"],
"env": {
"UPS_CLIENT_ID": "...",
"UPS_CLIENT_SECRET": "...",
"UPS_ACCOUNT_NUMBER": "...",
"UPS_ENVIRONMENT": "test"
}
}
}
}Try it without credentials
npx @modelcontextprotocol/inspector uv run colleag-mcp-ups lists the tools
and the ui://colleag-mcp-ups/tracking-card resource; calls will return a
structured configuration error until UPS credentials are set.
Notes
Access tokens are cached per
expires_in(UPS cut lifetimes to 1 h in April 2026 — never hardcode refresh intervals).Rate limits are not published by UPS; the server surfaces HTTP 429 as a structured
UPS_RATE_LIMITEDerror for the host to back off on.Tracking retention: UPS purges tracking data after ~120 days; keep your own shipment history if you need longer memory.
The MCP Apps tracking card is rendered by the host in a sandboxed iframe; hosts without the UI extension simply use the JSON tool result.
License
MIT — see LICENSE.
Available Tools
3 toolsget_ratesA
Get live UPS shipping quotes for a lane. Compares every available service with negotiated account prices and estimated delivery dates, or prices one specific service_code (07 Worldwide Express, 65 Saver, 08 Expedited, 11 Standard). Quote only — nothing is booked. Origin defaults to the configured ship-from address.
| Name | Required | Description | Default |
|---|---|---|---|
| to_city | Yes | ||
| to_name | Yes | ||
| width_cm | No | ||
| height_cm | No | ||
| length_cm | No | ||
| weight_kg | Yes | ||
| service_code | No | ||
| to_postal_code | No | ||
| to_address_line | No | ||
| to_country_code | Yes | ||
| to_state_province | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains that the tool performs live quoting, uses negotiated account prices, can filter by service code, does not book anything, and defaults origin to the configured ship-from address. It omits auth/rate-limit details, but the key behavioral traits are well covered.
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?
Three sentences with no wasted words. The main purpose is front-loaded, and the service_code clarification, no-booking warning, and origin default each add distinct value.
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 output schema exists and annotations are absent, the description covers the essential invocation semantics: quote-only behavior, service selection, and default origin. It could be more explicit about how optional dimensions interact with rating and how this tool relates to landed_cost, but it is sufficient for correct common use.
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 0%, so the description must compensate. It meaningfully explains the otherwise cryptic service_code parameter with concrete values (07, 65, 08, 11) and clarifies the origin default. It does not expand on required destination or weight parameters, but those names are fairly self-explanatory from the schema.
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 gets live UPS shipping quotes for a lane, which is a specific verb plus resource. It also distinguishes itself from siblings by focusing on rate comparison rather than tracking or landed cost calculation.
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 clear context: use this tool for quote-only UPS rates, optionally narrowed to one service code. It does not explicitly say when to prefer landed_cost or track_shipment, but the quote-centric phrasing and the 'nothing is booked' note make the intended use case unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
landed_costA
Estimate import duties, VAT and brokerage fees for an international shipment (what the receiver — or the shipper, under DDP — pays at import). One commodity line per product; an HS code improves accuracy. Not applicable to intra-EU shipments.
| Name | Required | Description | Default |
|---|---|---|---|
| currency | No | EUR | |
| incoterm | No | DAP | |
| commodities | Yes | ||
| export_country | No | ||
| import_country | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explains that the tool produces an estimate, defines who pays at import, notes the DDP nuance, and exposes accuracy sensitivity to HS codes. This is substantial behavioral context, though it does not cover data sources or handling of missing export country.
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?
Three efficient sentences, front-loaded with the main purpose, and every sentence adds useful information. No filler or redundant restatement of the tool name.
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?
The description provides a solid high-level picture and output schema exists, but with five parameters and zero schema descriptions it leaves important gaps. Import country, currency, and export country semantics are missing, and commodity item structure is only vaguely implied. It is adequate but not fully complete for confident invocation.
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 0%, so the description must compensate. It touches on commodities ('one commodity line per product', HS code) and indirectly on incoterm via DDP, but it never mentions import_country, export_country, or currency. Required parameters and accepted incoterm values are left undocumented, leaving an agent to guess critical input 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 opens with a specific verb and resource: 'Estimate import duties, VAT and brokerage fees for an international shipment.' It also clarifies the payment responsibility (receiver vs. shipper under DDP), which gives precise scope and differentiates it from sibling tools like track_shipment and get_rates.
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 clearly states when the tool is not applicable ('Not applicable to intra-EU shipments') and provides practical usage guidance ('One commodity line per product; an HS code improves accuracy'). However, it does not explicitly name alternatives among the sibling tools or explain when to prefer landed_cost over get_rates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
track_shipmentA
Track a UPS shipment by tracking number (e.g. 1Z...): current status, scheduled/actual delivery date, and recent scan events. Note: UPS retains tracking data for ~120 days.
| Name | Required | Description | Default |
|---|---|---|---|
| tracking_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It discloses what data will be returned, implies a read-only tracking operation, and usefully notes the 120-day UPS data retention limit. It does not mention error behavior or authorization, but these are minor for a simple read-style tool.
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 compact: one sentence defines the action, resource, and expected returned data, and one short note adds a relevant behavioral limitation. Every part earns its place with no filler or repetition.
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?
For a single-parameter read-only tracking tool, the description is complete: it explains the input format, the outputs, and the retention limitation. The output schema covers the exact response shape, so no additional return-value detail is necessary.
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 0%, so the description must compensate for the sole parameter. It explicitly names the tracking number as the lookup key and gives a concrete format example ('1Z...'), which helps an agent construct a valid call. This exceeds what the input schema provides.
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 identifies the verb 'Track', the resource 'a UPS shipment', and the specific outputs: current status, scheduled/actual delivery date, and recent scan events. The tracking-number example and UPS scope distinguish it from sibling tools like get_rates and landed_cost.
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 gives clear context for use: when a UPS tracking number is available and shipment status information is needed. It does not explicitly name alternatives or exclusion criteria, but the purpose is specific enough that an agent can infer when to choose it over the rate/cost-focused siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a completely distinct UPS workflow: tracking an existing shipment, getting carrier rates, and estimating import costs. There is no overlap or realistic chance of selecting the wrong tool for a task.
track_shipment and get_rates follow a clear verb_noun pattern in snake_case. landed_cost is still readable and consistent in style, but it breaks the imperative verb pattern, making it a minor deviation.
Three tools is a well-scoped count for this focused UPS visibility and cost-estimation server. Each tool covers a meaningful capability with no redundant entries.
The set covers the apparent purpose of tracking and cost estimation well: track an existing shipment, compare rates, and estimate landed cost. Shipping execution operations like creating or canceling a label are absent, but that seems outside the server's deliberate scope.
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
EasyPost MCP — multi-carrier shipping rates + package tracking (easypost.com)
Live USPS, UPS, FedEx and DHL rates from the US: domestic, Canada, UK, Germany, Australia. No scale.
Live USPS, UPS & FedEx shipping rates plus USPS postage and stamp prices. Free, no API key.
Real-time order tracking for Shopify merchants: look up, list, and refresh shipments.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to integrate with UPS shipping and logistics capabilities, including package tracking with delivery status and transit information, and address validation for U.S. and Puerto Rico locations.29MIT
- AlicenseAqualityDmaintenanceManage shipping workflows by creating labels, tracking packages, and scheduling carrier pickups. Compare live rates from major carriers like FedEx and UPS to optimize costs for every shipment. Organize logistical operations with a centralized address book and detailed shipping analytics.1891MIT
- AlicenseAqualityDmaintenanceEnables AI agents to create shipments, track packages, get rates, validate addresses, schedule pickups, and find UPS locations via the UPS API.9152MIT

Easyship MCPofficial
AlicenseNot gradedqualityDmaintenanceEnables AI agents to manage global shipping operations, including rate comparison, shipment creation, label purchasing, tracking, pickup scheduling, address validation, billing, and analytics, via natural language.17MIT
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/colleag-ai/mcp-ups'
If you have feedback or need assistance with the MCP directory API, please join our Discord server