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 the shipment cannot be sold online: not a parcel (SMKlog does not arrange pallet or freight shipments), more than one box (one label per box), 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

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.
quantityNoHow many of the item ship together. 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

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.

  1. Changed1 schema field changed
    • changedInput schema / properties / quantity / description
      Previous value: -"Identical parcels in this shipment. Default 1."New value: +"How many of the item ship together. Default 1."
  2. 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."
  3. 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"
      +  ]
      +}
  4. 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."
  5. 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"
      +}
  6. 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."
  7. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare the safety profile (not read-only, not idempotent, not destructive, open-world). The description goes far beyond: it writes a 30-day session record, is not idempotent, calling twice makes two sessions and can spend two carrier calls, it never charges or reserves funds, and stale links simply reprice. This is exactly the additional context annotations cannot convey.

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?

Front-loaded with purpose and the quote_id workflow, then organized into clearly labeled 'Side effects' and 'Parameter rules' blocks. It is long, but nearly every sentence carries distinct operational information rather than 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?

Output schema exists so return values need no explanation, and the description still covers the session_id handoff to get_checkout_status, the human-in-the-loop payment step, customs handling on international lanes, and failure modes. It is complete for a mutating, non-idempotent tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning the schema lacks: quote_id overrides product/from_zip/to_zip/to_country/quantity while service is still honored, expired quote_id falls back to live pricing and fails with missing_required_fields if fields were omitted, and service is a case-insensitive fragment that silently anchors the first rate if unmatched. These precedence and fallback rules are not in 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?

States a specific verb and resource ('Turns a decided shipment into a payment session for buying its shipping label') and distinguishes itself from siblings by naming get_parcel_quote and get_checkout_status in context. An agent can tell exactly what this tool produces.

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?

Explicitly instructs to call it after get_parcel_quote and pass the returned quote_id, and describes when it will not work (non-parcel, multi-box, installed lithium battery crossing a border) with the remedy ('Quote first to learn which case applies'). This is a full when/when-not/alternative statement.

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.