Skip to main content
Glama

Upload Avatars from Chat

upload_avatar_from_chat_file

Batch upload reusable avatars/models from person photos the user attached in chat. Each photo becomes the upper_body_front identity anchor. Keep names and optional user-given age_range, build, and height_cm in avatars[], then pass top-level image_file_1, image_file_2, etc. in the same order. Traits are never guessed. No base64, no local paths. Do not use ordinary text-to-image results as an upload fallback; use generate_avatar followed by save_generated_avatar for Uwear-created avatars. Use only when the user explicitly wants a specific or consistent person.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameNoSingle recovered avatar/model name
buildNoOptional concrete physical build. Never inferred.
avatarsNoAvatar/model metadata in the same order as image_file_1, image_file_2, etc. No base64.
age_rangeNoOptional concrete age or age range. Never inferred.
file_nameNoSingle recovered original file name
height_cmNoOptional height in centimeters. Never inferred.
image_urlNoSingle resolved download URL used by automatic opaque-file recovery.
mime_typeNoSingle recovered MIME/content type, e.g. image/png
descriptionNoSingle recovered avatar metadata
image_file_1NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_2NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_3NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_4NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_5NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_6NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_7NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_8NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_9NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_10NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • addedInput schema / $defs / AvatarChatFileUploadItem / additionalProperties
      Added value: +false
    • addedInput schema / $defs / AvatarChatFileUploadItem / properties / age_range
      Added value: +{
      +  "default": null,
      +  "description": "Optional concrete age or age range. Never inferred.",
      +  "maxLength": 20,
      +  "type": "string"
      +}
    • addedInput schema / $defs / AvatarChatFileUploadItem / properties / build
      Added value: +{
      +  "default": null,
      +  "description": "Optional concrete physical build. Never inferred.",
      +  "maxLength": 100,
      +  "type": "string"
      +}
    • addedInput schema / $defs / AvatarChatFileUploadItem / properties / height_cm
      Added value: +{
      +  "default": null,
      +  "description": "Optional height in centimeters. Never inferred.",
      +  "maximum": 220,
      +  "minimum": 40,
      +  "type": "integer"
      +}
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / age_range
      Added value: +{
      +  "default": null,
      +  "description": "Optional concrete age or age range. Never inferred.",
      +  "maxLength": 20,
      +  "type": "string"
      +}
    • addedInput schema / properties / build
      Added value: +{
      +  "default": null,
      +  "description": "Optional concrete physical build. Never inferred.",
      +  "maxLength": 100,
      +  "type": "string"
      +}
    • addedInput schema / properties / height_cm
      Added value: +{
      +  "default": null,
      +  "description": "Optional height in centimeters. Never inferred.",
      +  "maximum": 220,
      +  "minimum": 40,
      +  "type": "integer"
      +}
  2. Changed32 schema fields changed
    • removedInput schema / $defs / MCPFileReference
      Removed value: -{
      -  "additionalProperties": true,
      -  "description": "Host-provided MCP file reference for user-uploaded images.",
      -  "properties": {
      -    "content_type": {
      -      "default": null,
      -      "description": "File content type, e.g. image/png",
      -      "type": "string"
      -    },
      -    "download_url": {
      -      "default": null,
      -      "description": "Temporary host-authorized download URL for this file",
      -      "type": "string"
      -    },
      -    "file_id": {
      -      "default": null,
      -      "description": "Host file ID",
      -      "type": "string"
      -    },
      -    "file_name": {
      -      "default": null,
      -      "description": "Original uploaded file name",
      -      "type": "string"
      -    },
      -    "mime_type": {
      -      "default": null,
      -      "description": "File MIME type, e.g. image/png",
      -      "type": "string"
      -    },
      -    "name": {
      -      "default": null,
      -      "description": "Original uploaded file name when the host uses name",
      -      "type": "string"
      -    },
      -    "uri": {
      -      "default": null,
      -      "description": "Host file URI when available",
      -      "type": "string"
      -    },
      -    "url": {
      -      "default": null,
      -      "description": "Temporary/public file URL when the host exposes one",
      -      "type": "string"
      -    }
      -  },
      -  "type": "object"
      -}
    • addedInput schema / $defs / OpenAIFile
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "download_url": {
      +      "type": "string"
      +    },
      +    "file_id": {
      +      "type": "string"
      +    },
      +    "file_name": {
      +      "type": "string"
      +    },
      +    "mime_type": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "download_url",
      +    "file_id"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / image_file_1 / $ref
      Added value: +"#/$defs/OpenAIFile"
    • removedInput schema / properties / image_file_1 / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/MCPFileReference"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]
    • removedInput schema / properties / image_file_1 / default
      Removed value: -null
    • addedInput schema / properties / image_file_10 / $ref
      Added value: +"#/$defs/OpenAIFile"
    • removedInput schema / properties / image_file_10 / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/MCPFileReference"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]
    • removedInput schema / properties / image_file_10 / default
      Removed value: -null
    • addedInput schema / properties / image_file_2 / $ref
      Added value: +"#/$defs/OpenAIFile"
    • removedInput schema / properties / image_file_2 / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/MCPFileReference"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]
    • removedInput schema / properties / image_file_2 / default
      Removed value: -null
    • addedInput schema / properties / image_file_3 / $ref
      Added value: +"#/$defs/OpenAIFile"
    • removedInput schema / properties / image_file_3 / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/MCPFileReference"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]
    • removedInput schema / properties / image_file_3 / default
      Removed value: -null
    • addedInput schema / properties / image_file_4 / $ref
      Added value: +"#/$defs/OpenAIFile"
    • removedInput schema / properties / image_file_4 / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/MCPFileReference"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]
    • removedInput schema / properties / image_file_4 / default
      Removed value: -null
    • addedInput schema / properties / image_file_5 / $ref
      Added value: +"#/$defs/OpenAIFile"
    • removedInput schema / properties / image_file_5 / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/MCPFileReference"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]
    • removedInput schema / properties / image_file_5 / default
      Removed value: -null
    • addedInput schema / properties / image_file_6 / $ref
      Added value: +"#/$defs/OpenAIFile"
    • removedInput schema / properties / image_file_6 / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/MCPFileReference"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]
    • removedInput schema / properties / image_file_6 / default
      Removed value: -null
    • addedInput schema / properties / image_file_7 / $ref
      Added value: +"#/$defs/OpenAIFile"
    • removedInput schema / properties / image_file_7 / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/MCPFileReference"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]
    • removedInput schema / properties / image_file_7 / default
      Removed value: -null
    • addedInput schema / properties / image_file_8 / $ref
      Added value: +"#/$defs/OpenAIFile"
    • removedInput schema / properties / image_file_8 / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/MCPFileReference"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]
    • removedInput schema / properties / image_file_8 / default
      Removed value: -null
    • addedInput schema / properties / image_file_9 / $ref
      Added value: +"#/$defs/OpenAIFile"
    • removedInput schema / properties / image_file_9 / anyOf
      Removed value: -[
      -  {
      -    "$ref": "#/$defs/MCPFileReference"
      -  },
      -  {
      -    "type": "string"
      -  }
      -]
    • removedInput schema / properties / image_file_9 / default
      Removed value: -null
  3. First observed

TDQS

A4.3/5.0
Behavior4/5

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

The description goes beyond annotations by adding several behavioral constraints that the annotations do not convey: 'No base64, no local paths' (explicitly banning certain input formats), 'Traits are never guessed' (clarifying that optional fields like age_range and build are not inferred), and 'Keep names and optional user-given... in avatars[]' (explaining ordering behavior). The annotations provide `readOnlyHint: false`, `destructiveHint: false`, and `openWorldHint: true`, but the description adds meaningful operational context. It does not contradict any annotation, so no penalty. A minor gap: it doesn't explain what happens to existing avatars or whether uploads are idempotent, but the added context is substantial.

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?

The description is four sentences, all informative, with a clear front-loaded purpose statement ('Batch upload reusable avatars/models...') and important constraints placed early. The sentence 'No base64, no local paths' is concise but conveys a critical constraint. The final sentence 'Use only when the user explicitly wants a specific or consistent person' is a usage condition, which is relevant. It is not overly long for a complex tool with 19 parameters and 10 image file slots. It could be trimmed slightly (e.g., 'Do not use ordinary text-to-image results...' is a bit verbose), but overall it 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 tool's complexity (19 parameters, nested objects, 10 image file slots) and the rich input schema, the description covers the essential operational context: what the tool does, input format constraints, ordering semantics, and when to use it. There is no output schema, but the description doesn't explain what the tool returns; this is a minor gap because the schema is complete and the task is an upload (result visibility may be via other tools). It doesn't provide examples, but that would be excessive. The description is complete enough for correct invocation in most cases.

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 coverage is 100% (signal), and each parameter has a detailed schema description, so baseline is 3. The description adds some semantic clarification above the schema: it explains the mapping between `avatars[]` entries and `image_file_1`, `image_file_2`, etc. ('in the same order'), which is genuinely useful and not fully explicit in the schema. However, the schema already carries most parameter meaning (e.g., 'Never inferred' on fields, 'Host-provided uploaded file reference' for image_file_*). So the description adds marginal value on top of a well-documented schema, consistent with a 3.

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 a specific verb and resource: 'Batch upload reusable avatars/models from person photos the user attached in chat.' It explains the resource (chat files), the action (upload as avatars), and the mapping (each photo becomes an 'upper_body_front identity anchor'). It also distinguishes itself from siblings: it explicitly contrasts with `generate_avatar` and `save_generated_avatar` ('Do not use ordinary text-to-image results...'), showing it is not the same as generating avatars. This makes it easy to tell apart from the many avatar-related sibling tools.

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?

The description provides explicit usage guidance: 'Use only when the user explicitly wants a specific or consistent person.' It also gives a negative directive: 'Do not use ordinary text-to-image results as an upload fallback; use generate_avatar followed by save_generated_avatar for Uwear-created avatars.' This tells the agent when to use this tool and when to use an alternative, which is exactly what the dimension asks for.

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