Skip to main content
Glama

The price on a rig, skill, harness or agent

product_get
Read-only

Public. Is this item paid, and what does it cost? Name it by product_id, by provider_id + external_id (a registry listing — rig/skill/harness), by agent_handle (an agent), or by kind + ref. A pack is kind 'pack' + ref = the pack id. Returns {product:{id,title,model: one_time|monthly|per_run, price_cents, runs_per_pack, checkout_url}} or {free:true}; a priced item that also comes in a pack carries packs:[{pack_id,title,product_id,model,price_cents}] — buying the pack unlocks every item in it. A paid item answers any run with 402 purchase_required until you buy it: product_checkout (rail 'x402', 'usdc', 'sol' or 'rokha' for agents — no browser; 'card' for a human).

Input Schema

NameRequiredDescriptionDefault
refNoWith kind: the listing id, agent id or pack id.
kindNoWith ref: the kind of item.
product_idNoA product id, when you have one.
external_idNoWith provider_id: the listing's id in that provider.
provider_idNoWith external_id: the registry listing's provider, e.g. rokha.
agent_handleNoAn agent's handle.

Output Schema

NameRequiredDescriptionDefault
freeYes
packNoOn a pack product: {read: the pack_get call}.
packsNoPacks that carry this item: [{pack_id, title, product_id, model, price_cents}].
messageNoOnly when free.
productYes{id, kind, ref, title, model: one_time|monthly|per_run, price_cents, price, runs_per_pack, active, checkout_url}; null when free.
packs_noteNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / agent_handle / description
      Previous value: -"A Forge agent's handle."New value: +"An agent's handle."
  2. Changed2 schema fields changed
    • addedOutput schema / properties
      Added value: +{
      +  "free": {
      +    "type": "boolean"
      +  },
      +  "message": {
      +    "description": "Only when free.",
      +    "type": "string"
      +  },
      +  "pack": {
      +    "description": "On a pack product: {read: the pack_get call}.",
      +    "type": "object"
      +  },
      +  "packs": {
      +    "description": "Packs that carry this item: [{pack_id, title, product_id, model, price_cents}].",
      +    "items": {
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  "packs_note": {
      +    "type": "string"
      +  },
      +  "product": {
      +    "description": "{id, kind, ref, title, model: one_time|monthly|per_run, price_cents, price, runs_per_pack, active, checkout_url}; null when free.",
      +    "type": [
      +      "object",
      +      "null"
      +    ]
      +  }
      +}
    • addedOutput schema / required
      Added value: +[
      +  "product",
      +  "free"
      +]
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "type": "object"
      +}
  4. Changed6 schema fields changed
    • addedInput schema / properties / agent_handle / description
      Added value: +"A Forge agent's handle."
    • addedInput schema / properties / external_id / description
      Added value: +"With provider_id: the listing's id in that provider."
    • addedInput schema / properties / kind / description
      Added value: +"With ref: the kind of item."
    • addedInput schema / properties / product_id / description
      Added value: +"A product id, when you have one."
    • addedInput schema / properties / provider_id / description
      Added value: +"With external_id: the registry listing's provider, e.g. rokha."
    • addedInput schema / properties / ref / description
      Added value: +"With kind: the listing id, agent id or pack id."
  5. Changed1 schema field changed
    • changedInput schema / properties / kind / enum
      Previous value: -[
      -  "rig",
      -  "skill",
      -  "harness",
      -  "agent"
      -]New value: +[
      +  "rig",
      +  "skill",
      +  "harness",
      +  "agent",
      +  "pack"
      +]
  6. Added

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's main contribution is behavioral: it notes the tool is public, describes the 402 purchase_required behavior for paid items, and explains that buying a pack unlocks every contained item. It also summarizes the return shape, though that overlaps with the output schema. The added context is useful and not contradicted by annotations.

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?

The description is a single dense paragraph that front-loads the core question and keying options. Every sentence is functional, though it is somewhat long and the return-shape sentence could be leaner given the output schema exists. It avoids filler and follows a natural order from purpose to identification to result behavior.

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?

Given a six-parameter tool with zero required parameters, complex polymorphic keying, and a purchase-gating workflow, the description covers identification, return contract, pack semantics, and the 402 fallback with a pointer to product_checkout. An agent has enough to call it correctly and knows what to do next on failure.

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 baseline would be 3, but the description adds real meaning: it clarifies that the four keying strategies are alternatives, that kind + ref identifies a pack via pack id, and that provider_id + external_id refers to a registry listing such as a rig, skill, or harness. This goes beyond the schema's individual property descriptions, which do not spell out the combinatorial selection logic.

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 opens with a specific question in verb form ('Is this item paid, and what does it cost?') and names the exact resource family: rig, skill, harness, agent, pack. It is immediately distinguishable from siblings like product_checkout or market_search because it is a read-only price lookup, not a purchase or search operation.

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?

The description provides clear when-to-use context by listing all four mutually exclusive ways to identify an item (product_id, provider_id + external_id, agent_handle, kind + ref) and explicitly routes the agent to product_checkout for purchase, including payment rail options. It does not explicitly state when to prefer market_search or registry_get_skill, but the 'name it by' guidance covers the main ambiguity of a polymorphic lookup tool.

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.