Skip to main content
Glama

See what arrived through a link

get_upload_link
Read-onlyIdempotent

Read a link from request_upload_link: the files the user has sent through it so far, each with the reference the generate tools take, and whether it still takes more.

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": {
      "handoff_id": "<handoff_id>"
    },
    "name": "get_upload_link"
  }
}

Input Schema

NameRequiredDescriptionDefault
handoff_idYes

Output Schema

NameRequiredDescriptionDefault
openYes
messageYes
uploadsYes
expires_atYes
handoff_idYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed14 schema fields changed
    • addedOutput schema / properties / uploads / items / description
      Added value: +"A file you brought into Kuro."
    • changedOutput schema / properties / uploads / items / properties / bytes / type
      Previous value: -"number"New value: +"integer"
    • addedOutput schema / properties / uploads / items / properties / created_at
      Added value: +{
      +  "format": "date-time",
      +  "type": "string"
      +}
    • addedOutput schema / properties / uploads / items / properties / id
      Added value: +{
      +  "format": "uuid",
      +  "type": "string"
      +}
    • removedOutput schema / properties / uploads / items / properties / kind
      Removed value: -{
      -  "enum": [
      -    "image",
      -    "audio",
      -    "video"
      -  ],
      -  "type": "string"
      -}
    • addedOutput schema / properties / uploads / items / properties / object
      Added value: +{
      +  "const": "upload",
      +  "type": "string"
      +}
    • changedOutput schema / properties / uploads / items / properties / reference / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "type": {
      -        "const": "upload",
      -        "type": "string"
      -      },
      -      "upload_id": {
      -        "format": "uuid",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "upload_id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "generation_id": {
      -        "format": "uuid",
      -        "type": "string"
      -      },
      -      "type": {
      -        "const": "generation",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "generation_id"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "type": {
      +        "const": "upload",
      +        "type": "string"
      +      },
      +      "upload_id": {
      +        "$ref": "#/properties/uploads/items/properties/id"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "upload_id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "generation_id": {
      +        "$ref": "#/properties/uploads/items/properties/id"
      +      },
      +      "type": {
      +        "const": "generation",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "generation_id"
      +    ],
      +    "type": "object"
      +  }
      +]
    • addedOutput schema / properties / uploads / items / properties / reference / description
      Added value: +"Pass this where a request takes media."
    • addedOutput schema / properties / uploads / items / properties / status / description
      Added value: +"Only a `verified` upload can be used in a generation."
    • addedOutput schema / properties / uploads / items / properties / status / enum
      Added value: +[
      +  "pending",
      +  "verified",
      +  "rejected",
      +  "expired"
      +]
    • addedOutput schema / properties / uploads / items / properties / type
      Added value: +{
      +  "enum": [
      +    "image",
      +    "video",
      +    "audio"
      +  ],
      +  "type": "string"
      +}
    • removedOutput schema / properties / uploads / items / properties / upload_id
      Removed value: -{
      -  "format": "uuid",
      -  "type": "string"
      -}
    • addedOutput schema / properties / uploads / items / properties / url / description
      Added value: +"A signed link to the file, for about an hour."
    • changedOutput schema / properties / uploads / items / required
      Previous value: -[
      -  "upload_id",
      -  "filename",
      -  "kind",
      -  "mime_type",
      -  "bytes",
      -  "status",
      -  "url",
      -  "thumbnail_url",
      -  "reference"
      -]New value: +[
      +  "object",
      +  "id",
      +  "filename",
      +  "type",
      +  "mime_type",
      +  "bytes",
      +  "status",
      +  "url",
      +  "thumbnail_url",
      +  "reference",
      +  "created_at"
      +]
  2. Added

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds real behavioral context the annotations don't: the result is a live snapshot ('so far') and includes a still-open/closed signal. It stops short of saying whether polling is expected or whether results accumulate.

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?

A single dense sentence with no filler, and the core action ('Read a link') is front-loaded before the clause describing the payload. Slightly overloaded with three comma-separated payload details, but nothing is wasted.

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?

The tool is a simple one-parameter read, annotations cover the safety profile, and an output schema exists so return values need not be re-explained. The description supplies the remaining operational context: what the payload is and how its `reference` feeds the generate tools.

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 0%, so the description must carry the meaning of handoff_id. It does so indirectly by framing the tool as 'Read a link from request_upload_link', making clear the identifier is the link handed back by that sibling. It never names the parameter or its UUID form, so the mapping still requires the schema.

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 a link from request_upload_link') and enumerates what the result contains: files sent so far, their `reference`, and whether the link still accepts more. This separates it from get_upload/list_uploads by describing the link-scoped payload, though it never explicitly contrasts those siblings.

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 reference to request_upload_link implies the pairing (create a link, then read it), which is useful usage context. However, there is no explicit when-to-use statement, no guidance on calling it repeatedly to poll for new arrivals, and no rule for choosing it over get_upload.

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