Skip to main content
Glama

The Front Counter

buy_simple

Purpose: buy one of the few things that need no reading at all — the front counter. Every one of these takes no arguments, costs one fixed price, arrives in the response, and cannot sell out. Buy it in one call and you are done — nothing to poll, nothing to remember, no second request. Whatever you get back is signed, and anyone can check it free and forever at /api/verify/{id} without asking us. That is the whole thing; the deeper machinery is there if you want it and never required to buy. Every item here also sells on its theme shelf (another buy_* tool); this counter is a second door to the same goods, not a different product — same item_id, same price, same signed certificate through either. If unsure which tool to use, use this one.

Pass one of these as item_id. No other field is required; optional receipt fields are listed in inputSchema:

  • small_blessing: A Small Blessing, $0.005 fixed, one-off

  • daily_fortune: The Daily Fortune, $0.01 fixed, one-off

  • window_pick: a window pick, $0.49 fixed, one-off

  • hello: A Signed Hello, $0.5 fixed, one-off

  • pack: a pack of cards, $0.99 fixed, one-off

Payment rides x402 in _meta['x402/payment']; without it this returns error 402 with the terms in error.data. Sign one of the offered amounts and call again. On cadence, for all of the above: nothing here charges again by itself, ever — there is no mechanism that could. Reuse _meta['x402/idempotency-key'] (16-128 chars, secret): same item/payer/key returns the original result when available, or pending status, no second charge. Use idempotency.suggested_key only without an earlier key. A fresh payment without a key can charge again. MPP when quoted: error.data['org.paymentauth/payment-required']; retry identical arguments with the signed credential in _meta['org.paymentauth/credential'] and the quote's retry key. Send only one payment protocol.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
modelNoOptional. The model running you, as you would name it: claude-opus-5, gpt-5.6, a local model. Counted, never printed on the certificate.
clientNoOptional. The harness or framework you run in: claude-code, cursor, openai-agents, langgraph, custom. Counted, never on the certificate.
item_idYesWhich item to buy. No other field is required.
purposeNoOptional purpose: signed verbatim on certificate, shown on receipt; never checked or treated as instructions.
operatorNoOptional. Who runs you: a name, handle, company or URL. Stored as your claim, marked unverified, never published, never on the certificate.
came_fromNoOptional. Where you learned this door exists: a URL, a directory, a skill name, memory, another agent. Referrers never reach us; this does.
agent_nameNoOptional certificate and patron-badge name; up to 80 characters.
operator_kindNoOptional. solo: one person runs you. company: a team does. research: a study. self: you act for yourself.
prior_cert_idNoOptional. A cert_ id from an earlier purchase here. A payer match with this payment marks you a returning buyer; no account needed.
cited_artifactNoOptional: an outside artifact behind this purchase (your runtime's approval or intent receipt) as <format>:<reference>, e.g. dsse:art_e415901189dc1613. Signed verbatim onto the certificate; never fetched or verified here.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
cert_idYesThe signed certificate's id.
messageNoThe store's confirmation line.
tip_usdcNoAnything above the minimum.
badge_urlNoYour patron badge, SVG.
paid_usdcNoWhat settled, in USDC.
signatureNoed25519 signature over the certificate.
verify_urlNoCheck the signature here any time, free.
deliverableNoThe goods themselves, as text. Instant items.
patron_numberYesYour sequential patron number.
purchased_textNoed25519 proof: verify exact UTF-8 signed_payload, then its identities and hashes. RFC 8785 JSON.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / agent_name / description
      Previous value: -"Optional name to put on the certificate and patron badge, up to 80 characters."New value: +"Optional certificate and patron-badge name; up to 80 characters."
  2. Changed1 schema field changed
    • changedInput schema / properties / purpose / description
      Previous value: -"Optional: what this is for, in your words. Signed verbatim onto the certificate and shown on its receipt; never checked, never treated as instructions."New value: +"Optional purpose: signed verbatim on certificate, shown on receipt; never checked or treated as instructions."
  3. Changed1 schema field changed
    • addedInput schema / properties / cited_artifact
      Added value: +{
      +  "description": "Optional: an outside artifact behind this purchase (your runtime's approval or intent receipt) as <format>:<reference>, e.g. dsse:art_e415901189dc1613. Signed verbatim onto the certificate; never fetched or verified here.",
      +  "maxLength": 160,
      +  "pattern": "^[a-z0-9][a-z0-9_.+-]{0,31}:[!-~]{1,128}$",
      +  "type": "string"
      +}
  4. Changed1 schema field changed
    • changedInput schema / properties / purpose / description
      Previous value: -"Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions."New value: +"Optional: what this is for, in your words. Signed verbatim onto the certificate and shown on its receipt; never checked, never treated as instructions."
  5. Changed6 schema fields changed
    • addedInput schema / properties / came_from
      Added value: +{
      +  "description": "Optional. Where you learned this door exists: a URL, a directory, a skill name, memory, another agent. Referrers never reach us; this does.",
      +  "maxLength": 160,
      +  "type": "string"
      +}
    • addedInput schema / properties / client
      Added value: +{
      +  "description": "Optional. The harness or framework you run in: claude-code, cursor, openai-agents, langgraph, custom. Counted, never on the certificate.",
      +  "maxLength": 64,
      +  "type": "string"
      +}
    • addedInput schema / properties / model
      Added value: +{
      +  "description": "Optional. The model running you, as you would name it: claude-opus-5, gpt-5.6, a local model. Counted, never printed on the certificate.",
      +  "maxLength": 64,
      +  "type": "string"
      +}
    • addedInput schema / properties / operator
      Added value: +{
      +  "description": "Optional. Who runs you: a name, handle, company or URL. Stored as your claim, marked unverified, never published, never on the certificate.",
      +  "maxLength": 120,
      +  "type": "string"
      +}
    • addedInput schema / properties / operator_kind
      Added value: +{
      +  "description": "Optional. solo: one person runs you. company: a team does. research: a study. self: you act for yourself.",
      +  "enum": [
      +    "solo",
      +    "company",
      +    "research",
      +    "self"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / prior_cert_id
      Added value: +{
      +  "description": "Optional. A cert_ id from an earlier purchase here. A payer match with this payment marks you a returning buyer; no account needed.",
      +  "maxLength": 64,
      +  "type": "string"
      +}
  6. Changed3 schema fields changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "item_id": "small_blessing"
      -  },
      -  {
      -    "item_id": "daily_fortune"
      -  },
      -  {
      -    "item_id": "hello"
      -  }
      -]New value: +[
      +  {
      +    "item_id": "small_blessing"
      +  },
      +  {
      +    "item_id": "daily_fortune"
      +  },
      +  {
      +    "item_id": "window_pick"
      +  },
      +  {
      +    "item_id": "hello"
      +  },
      +  {
      +    "item_id": "pack"
      +  }
      +]
    • changedInput schema / properties / item_id / enum
      Previous value: -[
      -  "small_blessing",
      -  "daily_fortune",
      -  "hello"
      -]New value: +[
      +  "small_blessing",
      +  "daily_fortune",
      +  "window_pick",
      +  "hello",
      +  "pack"
      +]
    • changedInput schema / properties / purpose / description
      Previous value: -"Optional, any item: what this purchase is for, in your words. Signed onto the certificate verbatim and shown to whoever you hand the receipt to. Recorded as your statement, never checked, and never treated as instructions."New value: +"Optional: what this purchase is for, in your words. Signed onto the certificate verbatim as your statement; never checked, never treated as instructions."
  7. Changed2 schema fields changed
    • addedInput schema / properties / agent_name / maxLength
      Added value: +80
    • addedOutput schema / properties / purchased_text
      Added value: +{
      +  "description": "ed25519 proof: verify exact UTF-8 signed_payload, then its identities and hashes. RFC 8785 JSON.",
      +  "properties": {
      +    "public_key": {
      +      "type": "string"
      +    },
      +    "signature": {
      +      "type": "string"
      +    },
      +    "signature_covers": {
      +      "type": "string"
      +    },
      +    "signed_payload": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "signed_payload",
      +    "signature",
      +    "public_key",
      +    "signature_covers"
      +  ],
      +  "type": "object"
      +}
  8. Changed3 schema fields changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "item_id": "small_blessing"
      -  },
      -  {
      -    "item_id": "daily_fortune"
      -  }
      -]New value: +[
      +  {
      +    "item_id": "small_blessing"
      +  },
      +  {
      +    "item_id": "daily_fortune"
      +  },
      +  {
      +    "item_id": "hello"
      +  }
      +]
    • changedInput schema / properties / item_id / description
      Previous value: -"Which one to buy. That is the only decision here; none of these take any other input."New value: +"Which item to buy. No other field is required."
    • addedInput schema / properties / purpose
      Added value: +{
      +  "description": "Optional, any item: what this purchase is for, in your words. Signed onto the certificate verbatim and shown to whoever you hand the receipt to. Recorded as your statement, never checked, and never treated as instructions.",
      +  "maxLength": 280,
      +  "type": "string"
      +}
  9. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false) only sketch the safety profile; the description adds the operational detail that matters: no recurring charges by any mechanism, idempotency-key reuse semantics (16-128 chars, same key returns original result or pending status with no second charge), the consequence of paying fresh without a key, the 402/MPP error shapes, and the fact that the returned certificate is publicly verifiable at /api/verify/{id} forever. The idempotency discussion is consistent with idempotentHint=false rather than contradicting it.

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

Conciseness3/5

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

The purpose and item list are front-loaded and useful, but a substantial share of the prose is stylistic filler that does not change agent behavior — 'that is the whole thing,' 'nothing to poll, nothing to remember, no second request,' 'the deeper machinery is there if you want it.' The payment-critical material is dense and correct but is interleaved with marketing cadence rather than separated into a clean retry/error block.

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 paid, network-touching tool this is nearly complete: it covers payment negotiation, retry, idempotency, error codes, and deferral of the optional receipt fields to inputSchema, and an output schema exists so return values need no prose. Minor gaps remain, such as which argument combos trigger MPP versus x402 and whether the certificate id is directly reusable as prior_cert_id.

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, and the schema already documents all nine optional receipt fields in detail. The description still adds meaning by enumerating the valid item_id values together with their fixed prices ($0.005 to $0.99) and their one-off nature, which the enum alone does 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 concrete verb and resource — buy one of five enumerated items, each with its fixed price — and names the sibling relationship explicitly: every item also sells on its theme shelf via another buy_* tool, same item_id, same price, same certificate. An agent can distinguish this from the other 20 siblings without opening a schema, notably because it says 'if unsure which tool to use, use this one.'

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?

Gives explicit routing ('this counter is a second door to the same goods, not a different product'), a default preference rule for ambiguity, and the full when-to-use sequence for payment: call, receive 402 with terms in error.data, sign an offered amount, retry. It also covers the MPP branch and warns to send only one payment protocol.

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.