Skip to main content
Glama

Run an API

run_api
Destructive

Execute an API by SKU with a normalized input payload. Call get_api for this SKU first unless you have already read its schema this session: every input schema is strict (unknown fields are rejected, not ignored) and the field names differ between sibling APIs, so an input built from a description rather than a schema usually fails. Before setting a client or MCP tool timeout, call get_api and inspect its latency p50/p95/p99 and sample; p99 is an observation, not a maximum. Requires a valid AnyAPI key as a Bearer token. Charges the USD wallet only on success. Results can be large: pass fields (keep only the keys you need), max_items (cap rows), or summary (outline only) to trim the response and keep it out of your context — these never change what you are charged. Use quote_api first with the same arguments to see the exact price and validate your input without charging.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
jqNooptional: a jq expression to reshape the result; its output replaces 'output' (multiple outputs collect into an array). Example: '.data | {title, description, md: .markdown[:3500]}'. Sandboxed 250ms/2MB budget; on failure the full result is returned with jqError. Does not change cost
inputYesnormalized input payload matching the API input schema
fieldsNooptional: keep only these keys on each result item (dotted paths like 'author.name' descend into nested objects). Shrinks the response without changing cost
sku_idYesthe API SKU slug to execute
contextYesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): "Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization."
summaryNooptional: return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost
max_itemsNooptional: cap the number of result items returned; a _truncated note reports how many were withheld. Does not change cost

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
hintNooptional nudge. 'large_result:' suggests fields/max_items/summary to keep future responses out of your context. 'paging_unavailable:' means this result came from a source that cannot return a nextCursor, so it may be INCOMPLETE and you cannot page further - re-run with requireCursor true (may cost more per request) if you need the full list
errorNosafe AnyAPI failure code when durable work failed
itemsYesnumber of result rows returned. For per-result SKUs the per-item cost is charged against this; for input-priced SKUs (perItemUnit != result) the charge is per submitted input, independent of this count
outputYesnormalized output payload
statusNodurable request status: queued, running, succeeded, failed, or expired
costUsdYesamount charged to the wallet in USD
jqErrorNopresent only when a jq expression failed; output then holds the full unshaped result and this explains why the reshape did not apply
providerYesthe provider serving the request (AnyAPI)
replayedYestrue when this response replays an identical earlier call (same API, same input) from the last few minutes instead of running again: nothing new was executed and costUsd restates the original charge, it was NOT charged a second time
resultIdNoopaque handle to the full result, cached ~15 min; pass it to read_result to dig deeper for free (no re-run, no charge). Absent when the result was too large to cache
requestIdNodurable request identifier; pass it to get_request to resume without repeating the paid POST
nextActionNomachine-actionable resume instruction present while durable work is pending
serviceOutcomeNoend-to-end AnyAPI service outcome when known
settlementStateNopayment settlement state when known; independent of durable request status

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed12 schema fields changed
    • removedInput schema / additionalProperties
      Removed value: -false
    • addedInput schema / properties / context
      Added value: +{
      +  "description": "Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): \"Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization.\"",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "sku_id",
      -  "input"
      -]New value: +[
      +  "sku_id",
      +  "input",
      +  "context"
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "safe AnyAPI failure code when durable work failed",
      +  "properties": {
      +    "code": {
      +      "description": "safe AnyAPI error code",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code"
      +  ],
      +  "type": [
      +    "null",
      +    "object"
      +  ]
      +}
    • changedOutput schema / properties / hint / description
      Previous value: -"optional nudge, present only on large untrimmed results, suggesting fields/max_items/summary to keep future responses out of your context"New value: +"optional nudge. 'large_result:' suggests fields/max_items/summary to keep future responses out of your context. 'paging_unavailable:' means this result came from a source that cannot return a nextCursor, so it may be INCOMPLETE and you cannot page further - re-run with requireCursor true (may cost more per request) if you need the full list"
    • addedOutput schema / properties / nextAction
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "machine-actionable resume instruction present while durable work is pending",
      +  "properties": {
      +    "requestId": {
      +      "description": "request_id argument for the next tool call",
      +      "type": "string"
      +    },
      +    "retryAfterSeconds": {
      +      "description": "minimum delay before polling again",
      +      "type": "integer"
      +    },
      +    "tool": {
      +      "description": "MCP tool to call next",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "tool",
      +    "requestId",
      +    "retryAfterSeconds"
      +  ],
      +  "type": [
      +    "null",
      +    "object"
      +  ]
      +}
    • addedOutput schema / properties / replayed
      Added value: +{
      +  "description": "true when this response replays an identical earlier call (same API, same input) from the last few minutes instead of running again: nothing new was executed and costUsd restates the original charge, it was NOT charged a second time",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / requestId
      Added value: +{
      +  "description": "durable request identifier; pass it to get_request to resume without repeating the paid POST",
      +  "type": "string"
      +}
    • addedOutput schema / properties / serviceOutcome
      Added value: +{
      +  "description": "end-to-end AnyAPI service outcome when known",
      +  "type": "string"
      +}
    • addedOutput schema / properties / settlementState
      Added value: +{
      +  "description": "payment settlement state when known; independent of durable request status",
      +  "type": "string"
      +}
    • addedOutput schema / properties / status
      Added value: +{
      +  "description": "durable request status: queued, running, succeeded, failed, or expired",
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "output",
      -  "provider",
      -  "costUsd",
      -  "items"
      -]New value: +[
      +  "output",
      +  "provider",
      +  "costUsd",
      +  "items",
      +  "replayed"
      +]
  2. Changed4 schema fields changed
    • addedInput schema / properties / jq
      Added value: +{
      +  "description": "optional: a jq expression to reshape the result; its output replaces 'output' (multiple outputs collect into an array). Example: '.data | {title, description, md: .markdown[:3500]}'. Sandboxed 250ms/2MB budget; on failure the full result is returned with jqError. Does not change cost",
      +  "type": "string"
      +}
    • changedInput schema / properties / summary / description
      Previous value: -"optional: return only a structural outline (top-level keys and item counts) instead of the full data. Does not change cost"New value: +"optional: return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost"
    • addedOutput schema / properties / jqError
      Added value: +{
      +  "description": "present only when a jq expression failed; output then holds the full unshaped result and this explains why the reshape did not apply",
      +  "type": "string"
      +}
    • addedOutput schema / properties / resultId
      Added value: +{
      +  "description": "opaque handle to the full result, cached ~15 min; pass it to read_result to dig deeper for free (no re-run, no charge). Absent when the result was too large to cache",
      +  "type": "string"
      +}
  3. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Adds rich behavioral context beyond the annotations: strict schema rejection, Bearer token requirement, 'Charges the USD wallet only on success,' the p99-is-not-a-maximum caveat, and large-result risk. These details help the agent anticipate failures and side effects, and they do not contradict the destructiveHint/readOnlyHint annotations.

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

Conciseness5/5

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

The description is dense but well-organized: core action first, then prerequisites, latency warning, authentication/billing, response-size guidance, and quoting. Every sentence earns its place, and there is no repetition of schema details.

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 the complex 7-parameter tool, the description covers the critical operational concerns: fetching the correct schema, validating via quote_api, billing behavior, latency interpretation, authentication, and output trimming. The output schema handles return-structure documentation, so nothing essential is 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?

Schema coverage is 100%, so the baseline is 3, but the description adds operational meaning: 'input' is normalized, fields/max_items/summary trim responses, and these options 'never change what you are charged.' This supplements the schema's structural definitions with cost and context-management 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?

States a specific verb and resource: 'Execute an API by SKU with a normalized input payload.' This clearly differentiates it from siblings like get_api (schema inspection) and quote_api (pricing), and the reference to a normalized payload signals exactly what kind of operation it performs.

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?

Explicitly instructs when to call this tool versus alternatives: 'Call get_api for this SKU first' and 'Use quote_api first with the same arguments to see the exact price and validate your input without charging.' It also provides practical guidance about inspecting latency before setting timeouts.

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.

TDQS

A4.5/5.0
Disambiguation5/5

Each tool has a clearly distinct role: discovery (list_apis, search_apis, get_api), pricing (quote_api), execution (run_api), request/result inspection (get_request, read_result), account status (get_balance), and feedback (report_bug, send_feedback). Even the two feedback tools are cleanly separated by defect vs. non-defect.

Naming Consistency5/5

Names consistently follow a snake_case verb_noun pattern: get_api, get_balance, get_request, list_apis, quote_api, read_result, report_bug, run_api, search_apis, send_feedback. There is no mixing of conventions or vague single-word verbs.

Tool Count5/5

Ten tools is well-scoped for an API gateway/aggregator. Each tool covers a necessary phase of the workflow—discovery, schema/pricing inspection, execution, result retrieval, account balance, and user feedback—without redundancy or bloat.

Completeness4/5

The lifecycle from discovering APIs through quoting, executing, checking request status, and reading cached results is well covered. Minor gaps such as no explicit way to cancel a queued/running request or list past requests are workable but not fully closed.

Resources