Skip to main content
Glama

Create a fulfillment for an order

create_fulfillment
Destructive

Creates a fulfillment with a shipment tracker for specified order items, updating order status as the tracker changes.

Instructions

Rate limit: 100 requests / 10 seconds per shop. See Rate limiting.

Creates a fulfillment with a shipment tracker for provided order items. When trackers change their state, order.status will change to IN_PRODUCTION, PARTIALLY_IN_PRODUCTION, PARTIALLY_SHIPPED, SHIPPED depending on the shipping tracker info. Order updated webhooks will be triggered.

Input Schema

NameRequiredDescriptionDefault
itemsNo
accountNoExact private shop profile label; not a provider identity or authorization proof.
confirmNoSet true only when the user asked for exactly this action.
orderIdNo
payloadNoComplete current native JSON body; cannot mix with native body flags or payload_file.
payload_fileNoAbsolute regular non-symlink native JSON body file, at most1MiB. Cannot mix with payload or body flags.
shippingLabelNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed20 schema fields changedv3.0.0
    • addedInput schema / $defs
      Added value: +{
      +  "Shipping_Label": {
      +    "properties": {
      +      "trackingCompany": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "trackingNumber": {
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "trackingCompany",
      +      "trackingNumber"
      +    ],
      +    "title": "Shipping Label",
      +    "type": "object"
      +  },
      +  "items": {
      +    "items": {
      +      "properties": {
      +        "quantity": {
      +          "format": "int32",
      +          "minimum": 1,
      +          "type": "integer"
      +        },
      +        "variantId": {
      +          "format": "uuid",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "quantity",
      +        "variantId"
      +      ],
      +      "title": "Fulfillment Item",
      +      "type": "object"
      +    },
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +}
    • changedInput schema / properties / confirm / description
      Previous value: -"Explicit approval for this exact provider effect or local private-file operation."New value: +"Set true only when the user asked for exactly this action."
    • addedInput schema / properties / items / $ref
      Added value: +"#/$defs/items"
    • removedInput schema / properties / items / items
      Removed value: -{
      -  "properties": {
      -    "quantity": {
      -      "format": "int32",
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "variantId": {
      -      "format": "uuid",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "quantity",
      -    "variantId"
      -  ],
      -  "title": "Fulfillment Item",
      -  "type": "object"
      -}
    • removedInput schema / properties / items / minItems
      Removed value: -1
    • removedInput schema / properties / items / type
      Removed value: -"array"
    • addedInput schema / properties / payload / properties / items / $ref
      Added value: +"#/$defs/items"
    • removedInput schema / properties / payload / properties / items / items
      Removed value: -{
      -  "properties": {
      -    "quantity": {
      -      "format": "int32",
      -      "minimum": 1,
      -      "type": "integer"
      -    },
      -    "variantId": {
      -      "format": "uuid",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "quantity",
      -    "variantId"
      -  ],
      -  "title": "Fulfillment Item",
      -  "type": "object"
      -}
    • removedInput schema / properties / payload / properties / items / minItems
      Removed value: -1
    • removedInput schema / properties / payload / properties / items / type
      Removed value: -"array"
    • addedInput schema / properties / payload / properties / shippingLabel / $ref
      Added value: +"#/$defs/Shipping_Label"
    • removedInput schema / properties / payload / properties / shippingLabel / properties
      Removed value: -{
      -  "trackingCompany": {
      -    "minLength": 1,
      -    "type": "string"
      -  },
      -  "trackingNumber": {
      -    "minLength": 1,
      -    "type": "string"
      -  }
      -}
    • removedInput schema / properties / payload / properties / shippingLabel / required
      Removed value: -[
      -  "trackingCompany",
      -  "trackingNumber"
      -]
    • removedInput schema / properties / payload / properties / shippingLabel / title
      Removed value: -"Shipping Label"
    • removedInput schema / properties / payload / properties / shippingLabel / type
      Removed value: -"object"
    • addedInput schema / properties / shippingLabel / $ref
      Added value: +"#/$defs/Shipping_Label"
    • removedInput schema / properties / shippingLabel / properties
      Removed value: -{
      -  "trackingCompany": {
      -    "minLength": 1,
      -    "type": "string"
      -  },
      -  "trackingNumber": {
      -    "minLength": 1,
      -    "type": "string"
      -  }
      -}
    • removedInput schema / properties / shippingLabel / required
      Removed value: -[
      -  "trackingCompany",
      -  "trackingNumber"
      -]
    • removedInput schema / properties / shippingLabel / title
      Removed value: -"Shipping Label"
    • removedInput schema / properties / shippingLabel / type
      Removed value: -"object"
  2. First observedv2.0.0

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, but the description adds real value beyond them: a concrete rate limit (100 requests / 10 seconds per shop) and the side effects on order.status (IN_PRODUCTION, PARTIALLY_SHIPPED, SHIPPED, etc.) plus triggered order-updated webhooks. It still does not say what specifically is destructive or whether the call is reversible.

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?

Two short paragraphs, no filler, and the rate-limit constraint plus the state-transition behavior are stated directly. Front-loading the rate limit ahead of the tool's own purpose is slightly awkward ordering, but the text is efficient overall.

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?

For a destructive, non-idempotent mutation with no output schema, the description covers rate limits and side effects reasonably well. However it omits authentication/permission requirements and gives no parameter-level guidance for a 7-parameter, nested-object payload, leaving notable gaps.

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?

The description names no parameters at all — items, orderId, shippingLabel, account, confirm, payload and payload_file are left entirely to the schema. With 7 parameters and only 57% schema description coverage, the description does not compensate for the undocumented remainder.

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 ('Creates a fulfillment with a shipment tracker for provided order items'), which is unambiguous and distinguishable from every sibling tool, none of which touch fulfillments. The scope of what is created (fulfillment + tracker for given items) is stated up front.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, no prerequisites, and no conditions or exclusions. The description only explains downstream effects (order.status transitions), not when an agent should reach for it.

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

Deploy Server

Other Tools