Skip to main content
Glama

Read a saved result

read_result
Read-only

Dig deeper into a paid run WITHOUT re-running or paying again. Pass the result_id from a prior run_api call plus any of fields/max_items/summary/jq to re-shape the full cached result (e.g. read the rest of the rows, or slice a large field with jq). Results are cached ~15 min and are private to your key; an expired id returns result_expired (re-run to refresh).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
jqNooptional: a jq expression to reshape the result; its output replaces 'output'. Example: '.data | {title, description, md: .markdown[:3500]}'. Sandboxed 250ms/2MB budget
fieldsNooptional: keep only these keys on each result item (dotted paths like 'author.name' descend into nested objects)
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, per-field byte sizes) instead of the full data
max_itemsNooptional: cap the number of result items returned; a _truncated note reports how many were withheld
result_idYesthe resultId returned by a prior run_api call (cached ~15 min)

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 requireFields ["nextCursor"] (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
sourceNothe source that served this run: pass its id back in 'source' to prefer it again, or in 'ignoreSources' to avoid it. Absent when no source identity applies
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.

  1. Changed1 schema field changed
    • addedOutput schema / properties / source
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "the source that served this run: pass its id back in 'source' to prefer it again, or in 'ignoreSources' to avoid it. Absent when no source identity applies",
      +  "properties": {
      +    "artworkKey": {
      +      "type": "string"
      +    },
      +    "id": {
      +      "type": "string"
      +    },
      +    "kind": {
      +      "type": "string"
      +    },
      +    "name": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "id",
      +    "name",
      +    "kind",
      +    "artworkKey"
      +  ],
      +  "type": [
      +    "null",
      +    "object"
      +  ]
      +}
  2. Changed1 schema field changed
    • changedOutput schema / properties / hint / description
      Previous 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"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 requireFields [\"nextCursor\"] (may cost more per request) if you need the full list"
  3. 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: -[
      -  "result_id"
      -]New value: +[
      +  "result_id",
      +  "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"
      +]
  4. 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 safety profile is known. The description adds valuable behavioral context beyond annotations: results are cached for ~15 minutes, are private to the key, and an expired id returns result_expired requiring a re-run. It also discloses the jq sandbox limits (250ms/2MB budget). This adds transparency not present in the 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 two sentences, with the key value proposition ('without re-running or paying again') front-loaded. It packs essential information—usage, parameters, caching, expiration, and sandbox limits—without waste. Every sentence earns its place.

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?

Given the complexity (6 parameters, an output schema, and specific caching/expiry behavior), the description is quite complete. It covers the main use case, the optional reshaping parameters, and the failure mode. It doesn't detail the return format, but the output schema exists to handle that. The only minor gap is that it doesn't mention rate limits or other constraints, but those are likely covered by annotations or are not critical.

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 each parameter is documented in the schema. The description adds value by framing these parameters as tools for 're-shaping' the cached result and provides a concrete jq example. It also explains that fields use dotted paths (though the schema also mentions that). This goes beyond mere parameter listing.

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 clearly states the tool's purpose: to access a cached result from a prior paid run without re-running or paying. It specifies the verb 'Dig deeper' and the resource 'a paid run', and contrasts with re-running, effectively distinguishing it from run_api. The mention of reshaping via fields/max_items/summary/jq adds specificity.

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 explains when to use the tool: after a prior run_api call, to re-shape or retrieve more data from the cached result. It explicitly says 'without re-running or paying again', implying the alternative is run_api. It also gives a condition for not using it: if the id is expired, it returns result_expired and advises re-running. It doesn't name other siblings like get_api, but the context is clear enough.

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.