Skip to main content
Glama

complete_checkout

Destructive

Generate a Yoco card or Ozow instant-EFT payment link; this does NOT complete payment. Rejects cancelled checkouts and rechecks stock and totals first. An atomic claim prevents competing gateway calls. Returns payment_url or null plus status and message; cloud callers may be held. Retain a successful URL: repeat calls return payment_pending with no URL. Gateway failures raise an error, send no payment-link email and require team review rather than an automatic retry. Poll get_order with customer_email for payment status.

Input Schema

NameRequiredDescriptionDefault
checkout_idYes
payment_methodNoOverrides any value set in create_checkout/update_checkout

Output Schema

NameRequiredDescriptionDefault
ap2No
itemsNo
statusYes
messageYes
currencyNo
customerNo
next_stepNo
total_zarNo
item_countNo
checkout_idYes
payment_urlYes
payment_methodNo
provider_referenceNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • removedInput schema / properties / checkout_id / description
      Removed value: -"checkout_id returned by create_checkout."
  2. Changed1 schema field changed
    • addedInput schema / properties / checkout_id / description
      Added value: +"checkout_id returned by create_checkout."
  3. Changed3 schema fields changed
    • removedOutput schema / properties / created_at
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ]
      -}
    • changedOutput schema / properties / items / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "additionalProperties": true,
      -      "properties": {
      -        "colour": {
      -          "type": "string"
      -        },
      -        "finish": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "height": {
      -          "type": "number"
      -        },
      -        "mountType": {
      -          "type": "string"
      -        },
      -        "price": {
      -          "type": "number"
      -        },
      -        "productId": {
      -          "type": "string"
      -        },
      -        "productName": {
      -          "type": "string"
      -        },
      -        "quantity": {
      -          "type": "number"
      -        },
      -        "total": {
      -          "type": "number"
      -        },
      -        "width": {
      -          "type": "number"
      -        }
      -      },
      -      "required": [],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "colour": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "drop_mm": {
      +          "type": "number"
      +        },
      +        "mount_type": {
      +          "type": "string"
      +        },
      +        "product_name": {
      +          "type": "string"
      +        },
      +        "product_slug": {
      +          "type": "string"
      +        },
      +        "quantity": {
      +          "type": "number"
      +        },
      +        "total_price": {
      +          "type": "number"
      +        },
      +        "unit_price": {
      +          "type": "number"
      +        },
      +        "width_mm": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [],
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / payment_status
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ]
      -}
  4. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "allOf": [
      +    {
      +      "if": {
      +        "properties": {
      +          "payment_url": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "payment_url"
      +        ]
      +      },
      +      "then": {
      +        "required": [
      +          "total_zar",
      +          "currency",
      +          "payment_method"
      +        ]
      +      }
      +    }
      +  ],
      +  "properties": {
      +    "ap2": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "merchant_authorization": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "merchant_authorization"
      +      ],
      +      "type": "object"
      +    },
      +    "checkout_id": {
      +      "type": "string"
      +    },
      +    "created_at": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "currency": {
      +      "const": "ZAR",
      +      "type": "string"
      +    },
      +    "customer": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "address": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "city": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "email": {
      +          "type": "string"
      +        },
      +        "name": {
      +          "type": "string"
      +        },
      +        "phone": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        }
      +      },
      +      "required": [],
      +      "type": "object"
      +    },
      +    "item_count": {
      +      "type": "number"
      +    },
      +    "items": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "additionalProperties": true,
      +            "properties": {
      +              "colour": {
      +                "type": "string"
      +              },
      +              "finish": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "height": {
      +                "type": "number"
      +              },
      +              "mountType": {
      +                "type": "string"
      +              },
      +              "price": {
      +                "type": "number"
      +              },
      +              "productId": {
      +                "type": "string"
      +              },
      +              "productName": {
      +                "type": "string"
      +              },
      +              "quantity": {
      +                "type": "number"
      +              },
      +              "total": {
      +                "type": "number"
      +              },
      +              "width": {
      +                "type": "number"
      +              }
      +            },
      +            "required": [],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "message": {
      +      "type": "string"
      +    },
      +    "next_step": {
      +      "type": "string"
      +    },
      +    "payment_method": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "payment_status": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "payment_url": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "provider_reference": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "status": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "total_zar": {
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "checkout_id",
      +    "status",
      +    "payment_url",
      +    "message"
      +  ],
      +  "type": "object"
      +}
  5. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing the atomic claim that blocks competing gateway calls, the non-obvious idempotency behavior ('repeat calls return payment_pending with no URL'), the requirement to retain a successful URL, and the failure path (error raised, no payment-link email, manual team review instead of retry). These are exactly the traits an agent cannot infer from readOnlyHint/destructiveHint.

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?

Dense but disciplined: purpose is front-loaded, then constraints, then failure behavior, then the follow-up pointer. Every sentence carries distinct information, though the six-sentence block is heavy enough that structure (e.g., grouping into when-to-use vs. behavior) would aid scanning.

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?

Complete for a mutation tool with two parameters: it covers preconditions (stock/totals recheck, cancelled checkout rejection), concurrency safety, return expectations, failure handling, and the correct next step. With an output schema present, it does not need to detail return shapes.

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 coverage is only 50%: payment_method is documented and the description adds meaning by naming the two gateways (Yoco card, Ozow instant-EFT), but the required checkout_id is described nowhere in either the schema or the description. Partial compensation, not full.

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 ('Generate a Yoco card or Ozow instant-EFT payment link') and immediately disambiguates with 'this does NOT complete payment'. An agent can tell this apart from get_payment_methods or get_checkout without opening a schema.

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?

Gives clear operational context: rejects cancelled checkouts, rechecks stock/totals first, and directs the agent to 'Poll get_order with customer_email for payment status' as the follow-up path. It also warns against automatic retry after gateway failure. It stops short of explicitly contrasting with create_checkout/update_checkout beyond the schema note on payment_method.

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.

Resources