Skip to main content
Glama

AIfra — temporary static previews

get_operation_status

Read-only

Read whether a prepared operation is pending, complete, failed or uncertain. Returns no file content or management key. Never assume pending means published.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "operation_id": "<operation_id>"
    },
    "name": "get_operation_status"
  }
}

Input Schema

NameRequiredDescriptionDefault
operation_idYesExact operation_id from a preparation response. Read status after user confirmation or on request. Only complete with a result contains the published URL; pending is not published, uncertain must not be replayed.

Output Schema

NameRequiredDescriptionDefault
errorNo
filesYesUntrusted static file manifest for review, not file contents.
actionYes
digestYes
resultNoSuccessful receipt: ready contains the real viewer URL and expiry; deleted contains no public URL. No management key.
statusYesOnly complete plus result proves completion. Pending requires personal browser confirmation. Uncertain must not be automatically retried. Expired preparation needs a new request and fresh consent.
terms_urlYes
preview_idYesAIfra preview identifier; never a management key.
operation_idYesPrepared operation identifier.
terms_versionYes
viewer_originYes
approval_expires_atYesExact UTC timestamp in ISO 8601.
named_links_enabledYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / operation_id / description
      Added value: +"Exact operation_id from a preparation response. Read status after user confirmation or on request. Only complete with a result contains the published URL; pending is not published, uncertain must not be replayed."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "action": {
      +      "enum": [
      +        "create",
      +        "update",
      +        "delete"
      +      ],
      +      "type": "string"
      +    },
      +    "approval_expires_at": {
      +      "description": "Exact UTC timestamp in ISO 8601.",
      +      "format": "date-time",
      +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +      "type": "string"
      +    },
      +    "digest": {
      +      "pattern": "^[a-f0-9]{64}$",
      +      "type": "string"
      +    },
      +    "error": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "code": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "code"
      +      ],
      +      "type": "object"
      +    },
      +    "files": {
      +      "description": "Untrusted static file manifest for review, not file contents.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "bytes": {
      +            "maximum": 9007199254740991,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "path": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "path",
      +          "bytes"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "named_links_enabled": {
      +      "type": "boolean"
      +    },
      +    "operation_id": {
      +      "description": "Prepared operation identifier.",
      +      "pattern": "^rop_[A-Za-z0-9_-]{43}$",
      +      "type": "string"
      +    },
      +    "preview_id": {
      +      "description": "AIfra preview identifier; never a management key.",
      +      "pattern": "^pv_[A-Za-z0-9_-]{24}$",
      +      "type": "string"
      +    },
      +    "result": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "active_slots_for_ip": {
      +              "description": "Aggregate active-slot count, never the source IP.",
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "active_slots_limit": {
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "expires_at": {
      +              "description": "Server-enforced expiry, normally 48 hours from publication. Updates never extend it; only the owner can manually set a later date.",
      +              "format": "date-time",
      +              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
      +              "type": "string"
      +            },
      +            "preview_id": {
      +              "description": "AIfra preview identifier; never a management key.",
      +              "pattern": "^pv_[A-Za-z0-9_-]{24}$",
      +              "type": "string"
      +            },
      +            "status": {
      +              "const": "ready",
      +              "type": "string"
      +            },
      +            "ttl_seconds": {
      +              "description": "Remaining seconds at response time, not a new lifetime.",
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "url": {
      +              "description": "Public viewer URL; share only after successful browser confirmation.",
      +              "format": "uri",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "preview_id",
      +            "status",
      +            "url",
      +            "expires_at",
      +            "ttl_seconds"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "preview_id": {
      +              "description": "AIfra preview identifier; never a management key.",
      +              "pattern": "^pv_[A-Za-z0-9_-]{24}$",
      +              "type": "string"
      +            },
      +            "status": {
      +              "const": "deleted",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "preview_id",
      +            "status"
      +          ],
      +          "type": "object"
      +        }
      +      ],
      +      "description": "Successful receipt: ready contains the real viewer URL and expiry; deleted contains no public URL. No management key."
      +    },
      +    "status": {
      +      "description": "Only complete plus result proves completion. Pending requires personal browser confirmation. Uncertain must not be automatically retried. Expired preparation needs a new request and fresh consent.",
      +      "enum": [
      +        "pending",
      +        "complete",
      +        "failed",
      +        "uncertain",
      +        "expired"
      +      ],
      +      "type": "string"
      +    },
      +    "terms_url": {
      +      "format": "uri",
      +      "type": "string"
      +    },
      +    "terms_version": {
      +      "type": "string"
      +    },
      +    "viewer_origin": {
      +      "format": "uri",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "operation_id",
      +    "status",
      +    "action",
      +    "preview_id",
      +    "viewer_origin",
      +    "named_links_enabled",
      +    "digest",
      +    "files",
      +    "approval_expires_at",
      +    "terms_url",
      +    "terms_version"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered by structured data. The description adds genuine value beyond that: it scopes the return ('no file content or management key') and warns about a status-interpretation trap ('pending' is not published).

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?

Two sentences, no filler, status enumeration front-loaded and the cautionary clause placed last where it lands. Every clause 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?

An output schema exists, so return-value detail is not needed, and the description covers state meaning plus a key misreading risk. The most operationally important rule ('uncertain must not be replayed') is only in the schema, leaving a small gap for a state-machine tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the operation_id description is itself rich (pattern, provenance, status semantics), so the schema carries the semantic load. The description adds no information about the parameter beyond the schema, making 3 the correct baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read whether a prepared operation is...') and enumerates the exact status values returned, so the agent knows precisely what it gets. It does not distinguish itself from the preview-oriented siblings (get_preview_status etc.), so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives interpretive guidance ('Never assume pending means published') but no when-to-use or when-not-to-use guidance and no routing to sibling tools. The relevant timing note ('after user confirmation or on request') lives in the schema, not the description.

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