Skip to main content
Glama

Restore photo

restore_photo

Restore an old or damaged photo with FLUX Kontext — fix scratches, repair damage, and bring faded color back to life. Creates a saved generation from an image already in the account, using account entitlements. get_generation waits for the result.

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": {
      "source": "<source>"
    },
    "name": "restore_photo"
  }
}

Input Schema

NameRequiredDescriptionDefault
sourceYes

Output Schema

NameRequiredDescriptionDefault
messageYes
generationYesOne image, clip, voice-over or piece of music.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed20 schema fields changed
    • addedOutput schema / properties / generation / description
      Added value: +"One image, clip, voice-over or piece of music."
    • addedOutput schema / properties / generation / properties / app_url / description
      Added value: +"Opens it in the app."
    • addedOutput schema / properties / generation / properties / aspect_ratio / description
      Added value: +"Null for audio."
    • addedOutput schema / properties / generation / properties / created_at / format
      Added value: +"date-time"
    • addedOutput schema / properties / generation / properties / credits
      Added value: +{
      +  "description": "Credits charged. Zero when your own provider key or the free allowance paid.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / generation / properties / credits_cost
      Removed value: -{
      -  "type": [
      -    "number",
      -    "null"
      -  ]
      -}
    • addedOutput schema / properties / generation / properties / error / description
      Added value: +"Why it failed. Null otherwise."
    • removedOutput schema / properties / generation / properties / generation_id
      Removed value: -{
      -  "format": "uuid",
      -  "type": "string"
      -}
    • addedOutput schema / properties / generation / properties / id
      Added value: +{
      +  "format": "uuid",
      +  "type": "string"
      +}
    • removedOutput schema / properties / generation / properties / kind
      Removed value: -{
      -  "enum": [
      -    "image",
      -    "video",
      -    "audio",
      -    "tool"
      -  ],
      -  "type": "string"
      -}
    • addedOutput schema / properties / generation / properties / model / description
      Added value: +"The model id it was made with (`GET /v1/models`)."
    • addedOutput schema / properties / generation / properties / object
      Added value: +{
      +  "const": "generation",
      +  "type": "string"
      +}
    • addedOutput schema / properties / generation / properties / output_url / description
      Added value: +"The finished file, once `ready`. A signed link that works for about an hour; read the generation again for a fresh one."
    • addedOutput schema / properties / generation / properties / paid_by / description
      Added value: +"Who paid: \"credits\", \"house\" (the free allowance), \"server\" (a server that charges nothing), or the vendor of your own key (\"replicate\", \"fal\", …)."
    • addedOutput schema / properties / generation / properties / ready_in_seconds / description
      Added value: +"Roughly how long an unfinished generation has left; 0 means past its usual time."
    • addedOutput schema / properties / generation / properties / recipe_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/properties/generation/properties/id"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The recipe it was made with, if any."
      +}
    • addedOutput schema / properties / generation / properties / status / description
      Added value: +"`ready` and `failed` are final."
    • addedOutput schema / properties / generation / properties / thumbnail_url
      Added value: +{
      +  "anyOf": [
      +    {
      +      "$ref": "#/properties/generation/properties/output_url/anyOf/0"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "A small still of the result, for a grid. Null for audio and while it works."
      +}
    • addedOutput schema / properties / generation / properties / type
      Added value: +{
      +  "description": "What was made. New values may be added; treat an unknown one as opaque.",
      +  "enum": [
      +    "image",
      +    "clip",
      +    "voiceover",
      +    "music",
      +    "tool"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / generation / required
      Previous value: -[
      -  "generation_id",
      -  "kind",
      -  "status",
      -  "model",
      -  "prompt",
      -  "aspect_ratio",
      -  "refined_from",
      -  "caption_style",
      -  "output_url",
      -  "credits_cost",
      -  "paid_by",
      -  "error",
      -  "vendor_phase",
      -  "stalled",
      -  "ready_in_seconds",
      -  "created_at",
      -  "app_url"
      -]New value: +[
      +  "object",
      +  "id",
      +  "type",
      +  "status",
      +  "model",
      +  "prompt",
      +  "aspect_ratio",
      +  "output_url",
      +  "thumbnail_url",
      +  "credits",
      +  "paid_by",
      +  "error",
      +  "ready_in_seconds",
      +  "recipe_id",
      +  "created_at",
      +  "app_url",
      +  "refined_from",
      +  "caption_style",
      +  "vendor_phase",
      +  "stalled"
      +]
  2. Changed2 schema fields changed
    • addedOutput schema / properties / generation / properties / paid_by
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / generation / required
      Previous value: -[
      -  "generation_id",
      -  "kind",
      -  "status",
      -  "model",
      -  "prompt",
      -  "aspect_ratio",
      -  "refined_from",
      -  "caption_style",
      -  "output_url",
      -  "credits_cost",
      -  "error",
      -  "vendor_phase",
      -  "stalled",
      -  "ready_in_seconds",
      -  "created_at",
      -  "app_url"
      -]New value: +[
      +  "generation_id",
      +  "kind",
      +  "status",
      +  "model",
      +  "prompt",
      +  "aspect_ratio",
      +  "refined_from",
      +  "caption_style",
      +  "output_url",
      +  "credits_cost",
      +  "paid_by",
      +  "error",
      +  "vendor_phase",
      +  "stalled",
      +  "ready_in_seconds",
      +  "created_at",
      +  "app_url"
      +]
  3. Changed2 schema fields changed
    • addedOutput schema / properties / generation / properties / ready_in_seconds
      Added value: +{
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / generation / required
      Previous value: -[
      -  "generation_id",
      -  "kind",
      -  "status",
      -  "model",
      -  "prompt",
      -  "aspect_ratio",
      -  "refined_from",
      -  "caption_style",
      -  "output_url",
      -  "credits_cost",
      -  "error",
      -  "vendor_phase",
      -  "stalled",
      -  "created_at",
      -  "app_url"
      -]New value: +[
      +  "generation_id",
      +  "kind",
      +  "status",
      +  "model",
      +  "prompt",
      +  "aspect_ratio",
      +  "refined_from",
      +  "caption_style",
      +  "output_url",
      +  "credits_cost",
      +  "error",
      +  "vendor_phase",
      +  "stalled",
      +  "ready_in_seconds",
      +  "created_at",
      +  "app_url"
      +]
  4. First observed

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare the safety profile (not read-only, not destructive, not idempotent, closed-world), so the bar is lower, and the description still adds real value: it discloses that a persisted generation is created, that account entitlements/credits are consumed, and that results arrive asynchronously via get_generation. It does not state what happens to the source image or whether repeated calls produce new generations, though the latter is implied by 'creates a saved generation'.

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 short sentences, front-loaded with the purpose, then the persistence/entitlement detail, then the async retrieval note. The phrase 'bring faded color back to life' is minor marketing padding but the rest 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?

With an output schema present, return values need no explanation, and the description covers the key operational facts an agent needs: source must pre-exist in the account, credit consumption, saved generation, and async polling. The main residual gap is enumerating the two source shapes and any input-format constraints for a photo-restoration model.

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?

Only one parameter exists and schema description coverage is 0%, so the description must carry the load. 'From an image already in the account' hints that the source resolves to an uploaded image or prior generation, matching the schema's anyOf branch, but it never names the upload_id vs generation_id variants or the type discriminator, leaving the agent to read 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 ('Restore an old or damaged photo') plus the concrete operations involved (fix scratches, repair damage, restore faded color) and the underlying model (FLUX Kontext). It does not explicitly contrast itself with near-neighbors such as edit_image or upscale_image, so the sibling differentiation is only implicit in the word 'restore'.

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?

Adds a useful precondition ('an image already in the account') and names the follow-up step ('get_generation waits for the result'), which implies the async usage pattern. However, it never says when to choose this over edit_image, upscale_image, or remove_image_background, nor what kinds of images are inappropriate.

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