Skip to main content
Glama

Call an explicitly selected capability

capability_call
Destructive

Call one capability by id at its listed price. Leave payment_path out to pay from the key's call credits, else its balance within its spending limits (spend_limits_set). The result is checked against the part's output contract; nothing is charged when it does not match. When the check passes and the money covers the price, the call is paid and the whole result comes back with check (the verdict) and delivery. When an agent key's money does not cover it, or with auto_pay false (agent keys and balance calls only), the part still runs and its result is held: state locked, result null, the check verdict and a sample (a few rows, at most a fifth of them; a result of under 5 rows shows only its field names), locked_reason_text (a hold by the spending limit names the payment, the limit and the month's spending), unlock steps (raise_limit first for a spending-limit hold), and pay_link: a page for exactly that call's price that a person pays by card with no account (send them pay_link.for_a_person); once paid the result unlocks on its own. capability_call_unlock pays for it from the key and returns all of it within 72 hours; a key holds at most 5 such results at once. A part that acts in the world (acceptance.acts_in_world: it sends or calls) runs only when the call is paid, from the key's balance: no held result, no preview, no x402. One call is paid from the call credits or from the balance, never split. A refusal carries next, the request to send instead. A failed call is never charged; what_happened says what went wrong (the part's server, not an answer from the record it reads), with supplier_http_status, supplier_message and supplier_error_code (the part's own reason and code), refund (nothing_to_refund or returned), safe_to_retry, retry_after_seconds and next (retry under a new idempotency_key when trying again may work, change_input when the same input would fail the same way, other_parts, ask_for_it); a part that does not serve this caller says so with access_refused true and safe_to_retry false. An input that does not fit the part's input_schema is refused before anything runs (invalid_input with problems: each field, what is wrong and the values it allows). With no key at all a free agent key is made and returned once as agent_key (the lk_ key; keep it); past the per-address cap, next.get_a_key is agent_register (free). A part still running after about 45 seconds answers state running with read steps (capability_call_get). Every answer about a call says charged, amount_charged_usd, payment and balance_after_usd the same way; a replay of a charged call (replayed true) says charged false and amount_charged_usd 0 with already_charged true and charged_on_first_answer_usd, so count that charge once. A result the part marks not charged (not_charged) is handed over whole and free; a held result's sample may be the part's own preview of what it read. A part with a review window (acceptance.review_window_hours in capability_get) hands over the whole result with delivery.state in_review: object with capability_call_dispute before review_ends_at, or it is accepted and its supplier is paid. Available referral credit is applied automatically first on x402. payment_path x402 needs agent_key; balance needs agent_key or api_key; upstream needs agent_key, parent_call_id, and composition_token, is charged to the parent supplier, and is one level only. A 402 challenge is returned as data. Unpaid x402 reservations expire after one hour; retry with a new idempotency_key.

Input Schema

NameRequiredDescriptionDefault
inputYes
api_keyNoOptional alternative to agent_key for balance calls.
auto_payNoDefault true. false (agent_key, balance calls only): see the check and a sample first; the result is held until capability_call_unlock. Refused with next for an API key, an x402 call or a part that acts in the world. With both keys and auto_pay false, agent_key is used.
agent_keyNoRequired for x402 and upstream.
payment_pathNoLeave it out to pay from balance.
capability_idYesExplicit capability UUID.
parent_call_idNoRequired for upstream.
idempotency_keyNoOptional. Left out, one is made and returned as idempotency_key; send that value again to retry the same call without running or paying for it twice. Required for upstream.
composition_tokenNoRequired for upstream; supplied to the parent capability endpoint for this dispatch.
idempotent_replayNoSet true only for an explicit same-call-id replay after an uncertain upstream dispatch.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedInput schema / properties / auto_pay
      Added value: +{
      +  "description": "Default true. false (agent_key, balance calls only): see the check and a sample first; the result is held until capability_call_unlock. Refused with next for an API key, an x402 call or a part that acts in the world. With both keys and auto_pay false, agent_key is used.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / idempotency_key / description
      Added value: +"Optional. Left out, one is made and returned as idempotency_key; send that value again to retry the same call without running or paying for it twice. Required for upstream."
    • addedInput schema / properties / payment_path / description
      Added value: +"Leave it out to pay from balance."
    • changedInput schema / required
      Previous value: -[
      -  "capability_id",
      -  "input",
      -  "idempotency_key",
      -  "payment_path"
      -]New value: +[
      +  "capability_id",
      +  "input"
      +]
  2. Changed7 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +false
    • changedInput schema / properties / agent_key / description
      Previous value: -"Required for x402."New value: +"Required for x402 and upstream."
    • changedInput schema / properties / api_key / description
      Previous value: -"Required for balance calls outside a browser session."New value: +"Optional alternative to agent_key for balance calls."
    • addedInput schema / properties / composition_token
      Added value: +{
      +  "description": "Required for upstream; supplied to the parent capability endpoint for this dispatch.",
      +  "maxLength": 2048,
      +  "minLength": 32,
      +  "type": "string"
      +}
    • addedInput schema / properties / idempotent_replay
      Added value: +{
      +  "description": "Set true only for an explicit same-call-id replay after an uncertain upstream dispatch.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / parent_call_id
      Added value: +{
      +  "description": "Required for upstream.",
      +  "format": "uuid",
      +  "type": "string"
      +}
    • changedInput schema / properties / payment_path / enum
      Previous value: -[
      -  "x402",
      -  "balance"
      -]New value: +[
      +  "x402",
      +  "balance",
      +  "upstream"
      +]
  3. Added

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, it discloses charging, holding, refunds, supplier failures, idempotency replay behavior, x402 reservation expiry, 45-second running states, and the special rule that parts acting in the world run only when paid. This is unusually rich behavioral context for a destructive, paid, open-world call.

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 is front-loaded, but the description is one enormous paragraph with dense run-on sentences covering many edge cases. Almost all content is relevant, yet the density and lack of structural breaks make it hard to scan.

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?

For a complex paid capability execution tool with no output schema, the description covers the key cases an agent must understand: payment paths, holds, failures, retries, idempotency, access refusal, review windows, replay semantics, and long-running calls. Nothing essential appears missing.

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?

The schema already covers 90% of parameter descriptions, so much of the parameter information is repeated. The description still adds useful meaning beyond the schema, especially for payment_path selection, auto_pay consequences, upstream charging to the parent supplier, and idempotency_key retry semantics.

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 first sentence states a specific verb and resource: call one capability by id at its listed price. It is clearly distinguishable from siblings such as capability_call_get, capability_call_unlock, and capability_get, which are named in the description for follow-up actions.

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?

The description explains when to omit payment_path, the difference between credits and balance, spend_limits_set behavior, auto_pay rules, upstream-only requirements, and when to use capability_call_unlock or capability_call_get. It also routes users to dispute tools for review-window results and to agent_register when key creation is capped.

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