Skip to main content
Glama

SMKlog Parcel Shipping Rates

Create a payment session for a shipping label

create_checkout_link

Turns a decided shipment into a payment session for buying its shipping label: the checkout amount and a handoff URL that opens SMKlog checkout prefilled with the parcel. Use it after get_parcel_quote, passing the quote_id that call returned, so the price is reused and no second carrier call is spent. Without a quote_id it prices the shipment live from the fields. The result carries a session_id: keep it, and get_checkout_status tells you when the human has paid and when the label exists.

Side effects: it writes a session record (30-day life, readable through get_checkout_status) and is not idempotent. Calling it twice makes two sessions and, without a quote_id, spends two carrier calls. It never charges: no card is touched and nothing is reserved until the human confirms the contents certification and the carrier-adjustment consent on the page and pays there. A stale link simply reprices.

No session is returned when a person has to price the shipment: freight, oversize, a quantity above 1, or an installed lithium battery crossing a border. Quote first to learn which case applies.

Parameter rules:

  • A valid quote_id overrides product, from_zip, to_zip, to_country and quantity. service is still honored.

  • An expired quote_id falls back to live pricing from the fields. If those were omitted too, the call fails with missing_required_fields, so pass them alongside an old id.

  • service is matched as a case-insensitive fragment of the display name ("Ground Advantage", "UPS Ground Saver"). A fragment that matches nothing silently anchors the quote's first rate, which is the top of the best-value ranking and not always the cheapest, so read the service field in the result.

  • from_zip is a real 5-digit US ZIP. to_zip follows to_country (US, CA, GB, DE or AU).

  • On the four international lanes the human completes the customs declaration on the page, and duty is billed to the recipient on arrival.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
to_zipNoDestination postal code: a 5-digit ZIP for the US, or the destination country's own postal code. Required unless quote_id is given.
productNoPlain-words item description. Required unless quote_id is given.
serviceNoService to anchor the amount to, e.g. "USPS Ground Advantage". Omitted or unmatched, the amount anchors the quote's first rate, top of the best-value ranking rather than the cheapest; the human can still pick any service on the page.
from_zipNoOrigin US ZIP code, 5 digits. Required unless quote_id is given.
quantityNoIdentical parcels in this shipment. Default 1.
quote_idNoThe quote_id returned by a previous get_parcel_quote call. Valid for 15 minutes.
to_countryNoTwo-letter destination country: US (default), CA, GB, DE, AU.US

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
noteNoStanding caveats: live quote, human confirms consents and pays
amountYesLive-quoted checkout total for the anchored service, USD
intentYesAlways "session" — this tool never charges
methodNoPayment rails behind the checkout, e.g. stripe, card
serviceNoThe service the amount is anchored to
currencyYesISO currency, USD
session_idNoHandle for get_checkout_status, shaped as_ plus a UUID, good for 30 days. Null only when the session record could not be stored.
handoff_urlYesOpens the SMKlog checkout prefilled with this shipment
quote_reusedNoTrue when the amount came from a quote_id you supplied, so no carrier call was spent. False when this tool priced the shipment live -- either because no quote_id was given, or because the one given had expired.
identified_product_titleNoWhat the estimator understood the item to be

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed1 schema field changed
    • changedInput schema / properties / service / description
      Previous value: -"Service to anchor the amount to, e.g. \"USPS Ground Advantage\". Cheapest when omitted; the human can still pick any service on the page."New value: +"Service to anchor the amount to, e.g. \"USPS Ground Advantage\". Omitted or unmatched, the amount anchors the quote's first rate, top of the best-value ranking rather than the cheapest; the human can still pick any service on the page."
  2. Changed1 schema field changed
    • addedOutput schema / properties / session_id
      Added value: +{
      +  "description": "Handle for get_checkout_status, shaped as_ plus a UUID, good for 30 days. Null only when the session record could not be stored.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  3. Changed7 schema fields changed
    • changedInput schema / properties / from_zip / description
      Previous value: -"Origin 5-digit US ZIP. Required unless quote_id is given. The origin is always in the United States."New value: +"Origin US ZIP code, 5 digits. Required unless quote_id is given."
    • changedInput schema / properties / quantity / description
      Previous value: -"How many identical parcels ship together, priced as separate labels. Defaults to 1."New value: +"Identical parcels in this shipment. Default 1."
    • changedInput schema / properties / quote_id / description
      Previous value: -"The quote_id returned by a previous get_parcel_quote call, valid for 15 minutes. Pass it and the shipment is taken from that quote, which spends no second carrier call; product, from_zip, to_zip and to_country are then ignored. Omit it and this tool prices the shipment live from the fields below. If the id has expired the tool prices live instead and says so with quote_reused false."New value: +"The quote_id returned by a previous get_parcel_quote call. Valid for 15 minutes."
    • changedInput schema / properties / service / description
      Previous value: -"Optional service to anchor the amount, e.g. \"USPS Ground Advantage\". Cheapest when omitted; the human can still pick any service on the page."New value: +"Service to anchor the amount to, e.g. \"USPS Ground Advantage\". Cheapest when omitted; the human can still pick any service on the page."
    • changedInput schema / properties / to_country / description
      Previous value: -"Two-letter destination country. Omit for domestic. Sold online: US, CA, GB, DE, AU. On the four international lanes the human completes the customs declaration on the handoff page before paying, and duty is billed to the recipient on arrival (DDU) rather than added here."New value: +"Two-letter destination country: US (default), CA, GB, DE, AU."
    • addedInput schema / properties / to_country / enum
      Added value: +[
      +  "US",
      +  "CA",
      +  "GB",
      +  "DE",
      +  "AU"
      +]
    • changedInput schema / properties / to_zip / description
      Previous value: -"Destination postal code. A 5-digit ZIP when to_country is US or omitted; otherwise that country's own postal code."New value: +"Destination postal code: a 5-digit ZIP for the US, or the destination country's own postal code. Required unless quote_id is given."
  4. Changed5 schema fields changed
    • changedInput schema / properties / from_zip / description
      Previous value: -"Origin 5-digit US ZIP. The origin is always in the United States."New value: +"Origin 5-digit US ZIP. Required unless quote_id is given. The origin is always in the United States."
    • changedInput schema / properties / product / description
      Previous value: -"Plain-words item description"New value: +"Plain-words item description. Required unless quote_id is given."
    • addedInput schema / properties / quote_id
      Added value: +{
      +  "description": "The quote_id returned by a previous get_parcel_quote call, valid for 15 minutes. Pass it and the shipment is taken from that quote, which spends no second carrier call; product, from_zip, to_zip and to_country are then ignored. Omit it and this tool prices the shipment live from the fields below. If the id has expired the tool prices live instead and says so with quote_reused false.",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "product",
      -  "from_zip",
      -  "to_zip"
      -]New value: +[]
    • addedOutput schema / properties / quote_reused
      Added value: +{
      +  "description": "True when the amount came from a quote_id you supplied, so no carrier call was spent. False when this tool priced the shipment live -- either because no quote_id was given, or because the one given had expired.",
      +  "type": "boolean"
      +}
  5. Changed5 schema fields changed
    • changedInput schema / properties / from_zip / description
      Previous value: -"Origin 5-digit US ZIP"New value: +"Origin 5-digit US ZIP. The origin is always in the United States."
    • changedInput schema / properties / quantity / description
      Previous value: -"How many identical parcels ship together. Defaults to 1."New value: +"How many identical parcels ship together, priced as separate labels. Defaults to 1."
    • addedInput schema / properties / to_country
      Added value: +{
      +  "default": "US",
      +  "description": "Two-letter destination country. Omit for domestic. Sold online: US, CA, GB, DE, AU. On the four international lanes the human completes the customs declaration on the handoff page before paying, and duty is billed to the recipient on arrival (DDU) rather than added here.",
      +  "type": "string"
      +}
    • changedInput schema / properties / to_zip / description
      Previous value: -"Destination 5-digit US ZIP"New value: +"Destination postal code. A 5-digit ZIP when to_country is US or omitted; otherwise that country's own postal code."
    • changedOutput schema / description
      Previous value: -"A payment session, not a charge: the amount and the handoff URL where the human pays."New value: +"A payment session, not a charge: the amount and the handoff URL where the human pays. The amount is a live quote at this moment, not a hold or a reservation, and no money moves until the human completes the page."
  6. First observed

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already include readOnlyHint=false, idempotentHint=false, destructiveHint=false. The description adds substantial behavioral context: it writes a session record with 30-day life, is not idempotent, never charges, and describes side effects, stale links, and conditions where no session is returned. This goes far beyond what annotations alone provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-organized into labeled sections (Side effects, Parameter rules). It front-loads the core purpose and then details rules. While dense and arguably verbose, each sentence earns its place by conveying a rule or side effect an agent must know. Slightly over-long, but structure keeps it navigable.

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 stateful, non-idempotent, side-effecting tool with 7 parameters and no required fields, this description is remarkably complete. It covers preconditions (quote first), postconditions (session_id, get_checkout_status), side effects (session record, carrier calls), error cases (missing_required_fields, no session returned), and parameter interactions. The output schema exists, so return values beyond session_id are covered elsewhere.

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 coverage is 100%, but the description adds critical parameter meaning beyond the schema: quote_id overrides other fields, expired quote_id falls back to live pricing, service is matched as a case-insensitive fragment and silently anchors the first rate if unmatched, and from_zip/to_zip/to_country constraints. It explains failure modes and parameter interactions in detail, which the schema alone could not convey.

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 states a specific verb and resource ('Turns a decided shipment into a payment session for buying its shipping label') and clearly distinguishes itself from siblings by naming get_parcel_quote and get_checkout_status in the flow. It makes clear what the tool produces: a checkout amount and a handoff URL.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use this tool ('Use it after get_parcel_quote'), what to pass (quote_id), and what happens if quote_id is missing. It also names the sibling get_checkout_status for checking payment status, giving the agent a clear comparison and routing guide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.9/5.0
Disambiguation5/5

Each tool targets a distinct operation: live quote versus checkout session versus reference index versus tracking. The only potential overlap is create_checkout_link's live-pricing fallback, but its stated purpose and required quote_id flow make the boundary clear.

Naming Consistency5/5

All four tool names follow the same imperative verb_noun pattern in snake_case: create_checkout_link, get_parcel_quote, get_price_index, track_parcel. No mixed conventions or vague verbs.

Tool Count5/5

Four tools is a well-scoped set for a parcel shipping domain: one for quotes, one for checkout links, one for reference pricing, and one for tracking. Each tool earns its place without bloat or redundancy.

Completeness4/5

The core workflow is covered: get a quote, create a checkout link, and track the resulting label, with a free price-index tool for reference. Minor gaps exist around post-purchase lifecycle operations like voiding labels or retrieving session status, but those are not central to the stated purpose.