Skip to main content
Glama

Update upload

update_upload
Destructive

Name, describe, tag, favourite, archive or restore a verified upload. user_tags replaces the whole list. An archived upload must be restored (archived: false) before its words can change.

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": {
      "upload_id": "<upload_id>"
    },
    "name": "update_upload"
  }
}

Input Schema

NameRequiredDescriptionDefault
titleNo
archivedNo
favoriteNo
upload_idYes
user_tagsNo
descriptionNo

Output Schema

NameRequiredDescriptionDefault
uploadYesA file you brought into Kuro.
messageYes

Schema Changelog

Changes observed during successful MCP inspections.

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

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false, so the safety profile is covered. The description adds real value beyond that: `user_tags` is a full replacement, not a merge, and archived uploads block other edits until restored — both are non-obvious data-loss and ordering behaviors. It stops short of stating whether omitted fields are left untouched and whether passing null clears title/description, which matters for a destructive, non-idempotent mutation.

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?

Three tight sentences, front-loaded with the operations, followed by the two surprising rules. Little waste. The phrase 'before its words can change' is slightly vague — 'words' presumably means title/description/tags — which slightly undercuts otherwise precise wording.

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?

An output schema exists, so return values need not be described, and annotations already cover the destructive/idempotent profile. For a 6-parameter mutation tool, the description covers the resource, the mutable set, the replacement semantics, and the archive-gating precondition — enough for an agent to call it correctly.

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 0%, so the description carries the full burden. It does clarify the highest-risk parameter (`user_tags` replaces the whole list) and the `archived` gating semantics, which the schema states nowhere. However, title, description, and favorite get no semantic treatment — notably the anyOf-null shape of title/description is never explained as a clear-vs-omit distinction, leaving half the parameters ambiguous.

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 (update) plus an enumerated set of mutable attributes — name, describe, tag, favourite, archive, restore — on a concrete resource (a verified upload). Combined with the tool name, an agent can immediately tell this apart from create_upload, delete_upload, get_upload, and complete_upload without opening any schema.

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 supplies one genuine selection rule: an archived upload must first be restored with `archived: false` before other fields can change. That is useful sequencing guidance, but it is a precondition rather than when-to-use/when-not-to-use guidance, and no sibling (e.g. complete_upload vs update_upload) is named as an alternative. The 'verified upload' qualifier hints at a state requirement without saying how an agent verifies it.

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