Skip to main content
Glama

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

get_rates

Compare every available UPS service on a lane (or price one service_code) with negotiated account prices and estimated delivery dates

track_shipment

Current status, delivery estimate and scan history for a tracking number. Ships an MCP Apps tracking card for hosts that support the io.modelcontextprotocol/ui extension

landed_cost

Duties, VAT and brokerage estimate for an international shipment (per-commodity lines, incoterm-aware)

Related MCP server: Shipi MCP

Setup

  1. 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.

  2. 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..."
  1. Run:

uv run colleag-mcp-ups            # stdio (default)
MCP_TRANSPORT=streamable-http uv run colleag-mcp-ups   # HTTP

Claude 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_LIMITED error 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 tools
get_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
to_cityYes
to_nameYes
width_cmNo
height_cmNo
length_cmNo
weight_kgYes
service_codeNo
to_postal_codeNo
to_address_lineNo
to_country_codeYes
to_state_provinceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
currencyNoEUR
incotermNoDAP
commoditiesYes
export_countryNo
import_countryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tracking_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

A4.3/5.0
Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Manage 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.
    18
    9
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    17
    MIT

Latest Blog Posts

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