Skip to main content
Glama

create_order

Assemble a basket and get exact prices plus Stripe checkout links. Checkout runs on Stripe's hosted page, completed by whoever holds the payment credentials. Pass dryRun:true to REHEARSE: same validation, same price math, clearly labeled, no order recorded, no links issued, nothing billed — integration-test the full flow risk-free. Item ids — plans: 'pilot', 'desk-private', and 'api' (the Metered API account: your identified key — self-issue one FREE at POST /api/keys, no human in the loop — with billing activated by the desk on this order, usage billed monthly at tariff rates, nothing preset — get_quote prices your exact basket first, get_account shows the live statement); unit: 'watch' (reads of the watched question included); and 'balance' — a BALANCE on your own key, funded once with an amount in USD (min $5, max $500) and drawn down at the flat published Read rate as you ask. Reads are metered per use at the flat tariff rate and are never sold as PREPAID PACKS — a pack is a discounted bundle sized to your guess about how much you will use, and we do not sell one. A BALANCE is a different thing and is sold: the same meter funded in advance, at LIST, no discount, no expiry, no minimum draw, unused balance refundable in full on request. It exists so your principal fills a card form ONCE, ever, instead of once per purchase. Live UNIT prices come from /api/tariff and this description states none of them — the balance band above is a limit on what you may FUND, not a price. Watch topics are SELF-SERVE end to end: pass topics and every topic something we keep reads comes back with a checkout link at the published Watch rate — including one nobody watches yet, whose price the desk mints on demand with no human in the loop (that one needs your identified key, free and self-issued in one call at POST /api/keys, and arrives in minutes; poll get_order or the statusUrl on the line). Each quoted topic carries its coverage state from the same check get_quote runs, and coverage decides the sale: a topic nothing we keep reads yet, or one the check could not confirm, comes back status: "not-covered" at $0 with no checkout link and is never minted, beside the free propose_topic call that asks us to start keeping it. We never bill for coverage we cannot fill. The api line still records intent and the desk activates the account. Every line states its own state and what to do next. A live (non-dryRun) order returns handoff: a ready-to-forward note for whoever holds the payment credentials — what is being bought, the price, the money-back terms, the payment link(s), and how you can poll get_order until it is paid.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
emailNoContact email to attach to the order intent (optional)
itemsYesArray of {id, quantity?, amount?} — catalog ids above; `quantity` applies to unit items only, and `amount` (USD, min 5 / max 500) applies to the 'balance' item only and is required on it
dryRunNotrue → rehearse: validate + price the basket, record nothing, issue no links, bill nothing
topicsNoOptional: the topic names this order's Watch lines cover. Pass each topic's `name` from get_quote verbatim, so this order checks the same topic the quote priced and you see the same verdict; your own words are checked as written and can read differently. Topic numbers are not accepted: a digit-only entry is refused with an explanation, never guessed at. Carried verbatim onto the recorded intent so scoped concerns survive the quote→order handoff. Max 12, each ≤200 chars.
quoteIdNoOptional: the quoteId from get_quote — recorded on the order intent so the desk provisions against that exact quote.
idempotencyKeyNoOptional client key (≤128 chars): makes the orderId deterministic and a retried call return the original intent instead of recording a second one — safe machine retries

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / topics / description
      Previous value: -"Optional: the quoted topic names (or 1-based topic numbers as strings) this order's Watch lines cover — carried verbatim onto the recorded intent so scoped concerns survive the quote→order handoff. Max 12, each ≤200 chars."New value: +"Optional: the topic names this order's Watch lines cover. Pass each topic's `name` from get_quote verbatim, so this order checks the same topic the quote priced and you see the same verdict; your own words are checked as written and can read differently. Topic numbers are not accepted: a digit-only entry is refused with an explanation, never guessed at. Carried verbatim onto the recorded intent so scoped concerns survive the quote→order handoff. Max 12, each ≤200 chars."
  2. Changed1 schema field changed
    • changedInput schema / properties / items / description
      Previous value: -"Array of {id, quantity?} — catalog ids above; quantity applies to unit items only"New value: +"Array of {id, quantity?, amount?} — catalog ids above; `quantity` applies to unit items only, and `amount` (USD, min 5 / max 500) applies to the 'balance' item only and is required on it"
  3. First observed

TDQS

A3.8/5.0
Behavior4/5

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

Annotations establish readOnlyHint=false, openWorldHint=true, idempotentHint=false, and destructiveHint=false, and the description adds substantial context beyond them: dryRun records and bills nothing, balance funding limits, unused balance refundability, no billing for unconfirmable coverage, and the live-order `handoff` payload with polling instructions. The volume of untangling needed to extract these traits keeps it from a 5.

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

Conciseness2/5

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

The description is severely bloated and poorly front-loaded. Long tangents about prepaid packs not being sold, the principal filling a card form once, and the balance/unit distinction consume sentences that do not help an agent call the tool, and the key operational facts (dryRun, quoteId, handoff) are scattered rather than organized.

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?

For a payment-creating tool with no output schema and six parameters, the description covers the important surface: item types, dry-run behavior, coverage verdicts, and the returned `handoff`. It omits a clean statement of the non-handoff response shape, but is otherwise adequately complete for the agent to call it correctly.

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 description coverage is 100%, so the baseline is 3, but the description materially adds meaning the schema does not carry: it enumerates the catalog ids ('pilot', 'desk-private', 'api', 'watch', 'balance'), explains that amount applies only to the balance item, and clarifies topics semantics (verbatim names, digit-only rejected, max 12). This genuinely supplements the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a clear verb and resource: 'Assemble a basket and get exact prices plus Stripe checkout links.' It implicitly distinguishes itself from get_quote and get_order by framing this as assembling/pricing the basket, though it never crisply names the sibling boundary (it only references get_quote inside the item catalog discussion). Purpose is specific but buried under a large amount of surrounding text.

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?

Provides real when-to-use guidance: pass dryRun:true to rehearse the full flow risk-free, run get_quote to price the exact basket first, and use the propose_topic sibling for topics that come back 'not-covered'. It lacks an explicit when-NOT-to-use statement or a direct contrast with get_quote/create semantics, so it stops short of 5.

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