AI Photo Animator

Animate photos into AI videos: viral effects, old photo restoration, text to video, AI images.

Should I use this

Quality & Safety

A
Description quality
98%
Schema completeness
83%
Naming quality
94%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,560Tokens (tool definitions)
~902 BTypical response size
Moderate attention impact (1.22% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "photo-animator": {
      "url": "https://aiphotoanimator.ai/api/mcp"
    }
  }
}

Remote endpoints

https://aiphotoanimator.ai/api/mcpstreamable-http

What it can do

Tool inventory

Tools (10)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢list_effects

List video effect templates (dance, sports, meme scenes, etc.). Use the returned `effect` id with animate_photo. `photos` is how many photos the effect needs.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢animate_photo(image_urls, effect, prompt)

Turn photo(s) into a short video. With `effect` (from list_effects) the effect decides the motion; without it the photo is animated following `prompt`. Costs credits. Returns a task_id; poll get_video for the result (usually 1–5 minutes).

Input Schema

{
  "type": "object",
  "properties": {
    "image_urls": {
      "minItems": 1,
      "maxItems": 4,
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Public https image URLs (or data:image/...;base64 URLs), in the order the effect asks for. Usually one photo."
    },
    "effect": {
      "description": "Effect id from list_effects. Omit for a free-form animation.",
      "type": "string"
    },
    "prompt": {
      "description": "Motion description for free-form animation, or extra instructions for an effect.",
      "type": "string",
      "maxLength": 1000
    }
  },
  "required": [
    "image_urls"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡create_video(prompt, aspect_ratio)

Generate a short video (5 seconds, 720p, with sound) from a text description only, no photo needed. Costs credits. Returns a task_id; poll get_video.

Input Schema

{
  "type": "object",
  "properties": {
    "prompt": {
      "type": "string",
      "minLength": 3,
      "maxLength": 1000,
      "description": "What happens in the video: subject, action, setting, camera, mood."
    },
    "aspect_ratio": {
      "description": "9:16 for TikTok / Reels / Shorts (default), 16:9 for landscape, 1:1 square.",
      "type": "string",
      "enum": [
        "9:16",
        "16:9",
        "1:1"
      ]
    }
  },
  "required": [
    "prompt"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡edit_video(video_url, prompt, image_urls)

Edit an existing video clip (MP4, up to 15 seconds, 50 MB) following instructions: put the person from a photo into the clip, change outfit, style, background or scene, while keeping the motion and timing. Costs credits (based on clip length). Returns a task_id; poll get_video.

Input Schema

{
  "type": "object",
  "properties": {
    "video_url": {
      "type": "string",
      "description": "Public https URL of the MP4 clip to edit."
    },
    "prompt": {
      "type": "string",
      "minLength": 3,
      "maxLength": 1000,
      "description": "What to change, e.g. \"Replace the dancer with the person in image 1, keep the moves\"."
    },
    "image_urls": {
      "description": "Optional reference photos, referred to as image 1, image 2… in the prompt.",
      "maxItems": 4,
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "video_url",
    "prompt"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡create_image(prompt, image_urls, aspect_ratio)

Generate a new image from text, or edit photo(s) following instructions (change background, outfit, style, lighting, combine several photos). Uses Nano Banana 2 at 1K. Costs credits. Usually returns the image directly; if status is pending, call get_image later.

Input Schema

{
  "type": "object",
  "properties": {
    "prompt": {
      "type": "string",
      "minLength": 3,
      "maxLength": 4000,
      "description": "The image to create, or the edit to make to the photo(s)."
    },
    "image_urls": {
      "description": "Photos to edit or combine. Omit to generate from text only.",
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "aspect_ratio": {
      "description": "auto (default) keeps the input photo's shape.",
      "type": "string",
      "enum": [
        "auto",
        "1:1",
        "3:4",
        "4:3",
        "2:3",
        "3:2",
        "4:5",
        "5:4",
        "9:16",
        "16:9",
        "21:9"
      ]
    }
  },
  "required": [
    "prompt"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴restore_photo(image_url, colorize)

Repair an old or damaged photo: remove scratches, dust, creases and fading, recover sharp faces, keep everyone exactly as they are. Optionally colorize a black-and-white photo. Costs credits. Returns the restored image (or pending → get_image). Tip: animate the result with animate_photo afterwards.

Input Schema

{
  "type": "object",
  "properties": {
    "image_url": {
      "type": "string",
      "description": "Public https URL of the old photo (a scan or phone photo of a print is fine)."
    },
    "colorize": {
      "description": "Also colorize a black-and-white or sepia photo. Default false.",
      "type": "boolean"
    }
  },
  "required": [
    "image_url"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_image(task_id)

Check an image task from create_image or restore_photo. status is pending, success (image_url ready) or failed (credits refunded).

Input Schema

{
  "type": "object",
  "properties": {
    "task_id": {
      "type": "string",
      "description": "task_id returned by create_image or restore_photo"
    }
  },
  "required": [
    "task_id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_video(task_id)

Check a generation task. status is pending, success (video_url ready) or failed (credits refunded).

Input Schema

{
  "type": "object",
  "properties": {
    "task_id": {
      "type": "string",
      "description": "task_id returned by animate_photo, create_video or edit_video"
    }
  },
  "required": [
    "task_id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_my_videos(limit)

The user's most recent video generations, newest first.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 30
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_credits

Remaining credits and plan of the connected account.

Input Schema

{
  "type": "object",
  "properties": {}
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded10 tools