Koskamo

AI Photo Animator MCP

An official MCP server provided by AI Photo Animator that enables AI agents to animate photos into videos, apply viral dance and meme effects, generate videos from text, edit existing clips, restore old photos, and manage user credits and account status directly through standard MCP tools.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

AI Photo Animator MCP logo, by AI Photo AnimatorVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by AI Photo Animator
You need:Sign in to create an API key for your account
MCP endpoint (Streamable HTTP)
https://aiphotoanimator.ai/api/mcp
Vendor documentation

What you can do with it

  • Animate a selfie with the Bottle Kick Challenge trend
  • Restore and colorize old damaged photos
  • Generate a video from a text description
  • Edit a video clip to change outfit or scene

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
ai-photo-animator 1.0.0
MCP protocol
2025-06-18
Tools
10 advertised
Resources
1 advertised
Resource templates
0 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

AI Photo Animator (https://aiphotoanimator.ai) is an online AI tool that turns still photos into short videos with natural motion, often with native sound. One photo and one sentence are enough: old family photos, selfies, pets, products, artwork and landscapes all work. What the website offers: - Photo to video: animate a photo, or use it as the exact first frame (optional end frame) - Viral effect templates: AI dance, sports moments, movie and meme scenes. The model and prompt are already set up; the user only uploads their photo(s) and becomes the star - Text to video and multi-photo scenes that keep a character, outfit or product consistent - Ten leading video models in one place (Seedance, Kling, Wan, MiniMax, Hailuo), up to 1080p, vertical 9:16 for TikTok / Reels / Shorts - Credit-based pricing, free starter credits for new accounts, failed generations refunded automatically, no watermark on downloads What this MCP server can do (with the user's own account and credits): - list_effects: browse effect templates and how many photos each needs - animate_photo: animate photo(s) with an effect, or free-form with a motion prompt - create_video: generate a video from a text description only - edit_video: edit an existing video clip with instructions (change the person, outfit, style, scene), optionally with reference photos - get_video / list_my_videos: check progress and fetch finished MP4 links - create_image: generate a new image from text, or edit photo(s) with instructions (change background, outfit, style, combine photos) - restore_photo: repair an old or damaged photo (scratches, fading, blur), optionally colorize it - get_image: fetch an image result that was still processing - get_credits: remaining credits and plan How to use it: 1. Pick the tool: a photo that should move → animate_photo (call list_effects first for trends and fun scenes); no photo → create_video; an existing clip to change → edit_video; a still image result → create_image or restore_photo. 2. Pass media as public https URLs (or data: URLs). Tell the user how many credits it cost. 3. Videos take about 1–5 minutes: call get_video every 30–60 seconds until status is success, then share video_url. Images usually come back directly; if status is pending, call get_image a bit later. 4. If credits run out, tell the user to check their account on the website. Photos of celebrities and explicit content are rejected; ask for a different one. For other models, longer or higher-resolution videos, send the user to https://aiphotoanimator.ai.

Tools

10 advertised

list_effects — List video effects
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

list_effects input schema
{
  "type": "object",
  "properties": {}
}
list_effects annotations
{
  "title": "List video effects",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
animate_photo — Animate a photo
Advertised by the server during the last successful anonymous check.
Open-world

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).

animate_photo input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "image_urls"
  ],
  "properties": {
    "effect": {
      "type": "string",
      "description": "Effect id from list_effects. Omit for a free-form animation."
    },
    "prompt": {
      "type": "string",
      "maxLength": 1000,
      "description": "Motion description for free-form animation, or extra instructions for an effect."
    },
    "image_urls": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 4,
      "minItems": 1,
      "description": "Public https image URLs (or data:image/...;base64 URLs), in the order the effect asks for. Usually one photo."
    }
  }
}
animate_photo annotations
{
  "title": "Animate a photo",
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": false
}
create_video — Create a video from text
Advertised by the server during the last successful anonymous check.
Open-world

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.

create_video input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "prompt"
  ],
  "properties": {
    "prompt": {
      "type": "string",
      "maxLength": 1000,
      "minLength": 3,
      "description": "What happens in the video: subject, action, setting, camera, mood."
    },
    "aspect_ratio": {
      "enum": [
        "9:16",
        "16:9",
        "1:1"
      ],
      "type": "string",
      "description": "9:16 for TikTok / Reels / Shorts (default), 16:9 for landscape, 1:1 square."
    }
  }
}
create_video annotations
{
  "title": "Create a video from text",
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": false
}
edit_video — Edit a video
Advertised by the server during the last successful anonymous check.
Open-world

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.

edit_video input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "video_url",
    "prompt"
  ],
  "properties": {
    "prompt": {
      "type": "string",
      "maxLength": 1000,
      "minLength": 3,
      "description": "What to change, e.g. \"Replace the dancer with the person in image 1, keep the moves\"."
    },
    "video_url": {
      "type": "string",
      "description": "Public https URL of the MP4 clip to edit."
    },
    "image_urls": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 4,
      "description": "Optional reference photos, referred to as image 1, image 2… in the prompt."
    }
  }
}
edit_video annotations
{
  "title": "Edit a video",
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": false
}
create_image — Create or edit an image
Advertised by the server during the last successful anonymous check.
Open-world

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.

create_image input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "prompt"
  ],
  "properties": {
    "prompt": {
      "type": "string",
      "maxLength": 4000,
      "minLength": 3,
      "description": "The image to create, or the edit to make to the photo(s)."
    },
    "image_urls": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 10,
      "description": "Photos to edit or combine. Omit to generate from text only."
    },
    "aspect_ratio": {
      "enum": [
        "auto",
        "1:1",
        "3:4",
        "4:3",
        "2:3",
        "3:2",
        "4:5",
        "5:4",
        "9:16",
        "16:9",
        "21:9"
      ],
      "type": "string",
      "description": "auto (default) keeps the input photo's shape."
    }
  }
}
create_image annotations
{
  "title": "Create or edit an image",
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": false
}
restore_photo — Restore an old photo
Advertised by the server during the last successful anonymous check.
Open-world

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.

restore_photo input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "image_url"
  ],
  "properties": {
    "colorize": {
      "type": "boolean",
      "description": "Also colorize a black-and-white or sepia photo. Default false."
    },
    "image_url": {
      "type": "string",
      "description": "Public https URL of the old photo (a scan or phone photo of a print is fine)."
    }
  }
}
restore_photo annotations
{
  "title": "Restore an old photo",
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": false
}
get_image — Get image status
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

get_image input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "task_id"
  ],
  "properties": {
    "task_id": {
      "type": "string",
      "description": "task_id returned by create_image or restore_photo"
    }
  }
}
get_image annotations
{
  "title": "Get image status",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
get_video — Get video status
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

get_video input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "task_id"
  ],
  "properties": {
    "task_id": {
      "type": "string",
      "description": "task_id returned by animate_photo, create_video or edit_video"
    }
  }
}
get_video annotations
{
  "title": "Get video status",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
list_my_videos — List my videos
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

list_my_videos input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 30,
      "minimum": 1
    }
  }
}
list_my_videos annotations
{
  "title": "List my videos",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
get_credits — Get credits
Advertised by the server during the last successful anonymous check.
Advertised read-only

Remaining credits and plan of the connected account.

get_credits input schema
{
  "type": "object",
  "properties": {}
}
get_credits annotations
{
  "title": "Get credits",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

media-widget

Advertised by the server during the last successful anonymous check.

media-widget URI
ui://widget/media-v1.html

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
862 ms
95th percentile latency
862 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 862 ms · metadata changed · 10 tool(s), 1 resource(s), 0 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http ai-photo-animator-mcp https://aiphotoanimator.ai/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add ai-photo-animator-mcp --url https://aiphotoanimator.ai/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable ai-photo-animator-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "ai-photo-animator-mcp": {
      "url": "https://aiphotoanimator.ai/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "ai-photo-animator-mcp": {
      "type": "streamableHttp",
      "url": "https://aiphotoanimator.ai/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start ai-photo-animator-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "ai-photo-animator-mcp": {
      "type": "http",
      "url": "https://aiphotoanimator.ai/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http ai-photo-animator-mcp https://aiphotoanimator.ai/api/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "ai-photo-animator-mcp": {
      "url": "https://aiphotoanimator.ai/api/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "ai-photo-animator-mcp": {
      "serverUrl": "https://aiphotoanimator.ai/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like AI Photo Animator MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run AI Photo Animator MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing