Koskamo

Incarn MCP

An official MCP server provided by Incarn that allows AI agents to animate old family photos and vintage portraits into short, realistic videos using the Seedance 2.0 model. It enables programmatic access to the animation service for use cases like genealogy, memorial tributes, and historical education.

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.

Incarn MCP logo, by IncarnVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-07Operated by Incarn
MCP endpoint (Streamable HTTP)
https://api.incarn.co/mcp
Vendor documentation

What its tools do

5 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

5 of 5 have a description · 5 of 5 declare behavior hints · 5 of 5 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to incarn.co ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Animate old family photos into short videos
  • Create memorial tributes from vintage portraits
  • Bring ancestors to life for genealogy projects
  • Animate historical figures for educational content

Source and maintenance

Vendor evidenceRegistry 1.1.0

Protocol and capabilities

Server
incarn 1.1.0
MCP protocol negotiated in check
2025-11-25
Tools
5 advertised
Resources
1 advertised
Resource templates
0 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Tools

5 advertised

list_examples — Exemples d'animations
Advertised by the server during the last successful anonymous check.
Advertised read-only

Voir des exemples avant/après d'animation de photos anciennes (galerie de démonstration).

list_examples input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "beat": {
      "type": "string",
      "description": "Thème optionnel (ex: 'mariage', 'bébé', 'portrait')."
    }
  },
  "additionalProperties": false
}
list_examples output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "beat",
    "gallery_url",
    "examples"
  ],
  "properties": {
    "beat": {
      "type": [
        "string",
        "null"
      ],
      "description": "Thème appliqué, ou null."
    },
    "examples": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "title",
          "thumbnail_url"
        ],
        "properties": {
          "title": {
            "type": "string",
            "description": "Titre de l'exemple."
          },
          "thumbnail_url": {
            "type": "string",
            "description": "URL de la vignette."
          }
        },
        "additionalProperties": false
      },
      "description": "Liste d'exemples avant/après."
    },
    "gallery_url": {
      "type": "string",
      "description": "URL de la galerie publique où chaque portrait s'anime (avant/après). À partager avec l'utilisateur."
    }
  },
  "additionalProperties": false
}
list_examples annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
create_upload — Préparer un upload de photo
Advertised by the server during the last successful anonymous check.

Étape 1 pour animer une photo JOINTE dans le chat quand il n'y a pas d'URL publique. Renvoie une URL d'upload : PUT les octets du fichier dessus (en-tête Content-Type), puis confirm_upload. IMPORTANT : si une URL publique de la photo existe, préfère plutôt animate_photo avec image_url (aucun upload, marche partout). Le PUT peut être refusé par l'egress d'un agent sandboxé (403 'host_not_allowed') : dans ce cas ne le retente pas, bascule sur image_url ou fais autoriser api.incarn.co. N'envoie JAMAIS l'image en base64.

create_upload input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "mime_type"
  ],
  "properties": {
    "mime_type": {
      "type": "string",
      "description": "Type MIME de l'image (ex: 'image/jpeg', 'image/png')."
    }
  },
  "additionalProperties": false
}
create_upload output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "upload_id",
    "upload_url",
    "expires_in",
    "note"
  ],
  "properties": {
    "note": {
      "type": "string",
      "description": "Marche à suivre + fallback si le PUT est bloqué."
    },
    "upload_id": {
      "type": "string",
      "description": "À passer à confirm_upload."
    },
    "expires_in": {
      "type": "number",
      "description": "Validité de l'URL, en secondes."
    },
    "upload_url": {
      "type": "string",
      "description": "URL sur api.incarn.co : PUT les octets du fichier dessus."
    }
  },
  "additionalProperties": false
}
create_upload annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
confirm_upload — Finaliser un upload de photo
Advertised by the server during the last successful anonymous check.

Étape 2 : une fois les octets envoyés (PUT) sur l'upload_url, appelle-moi avec le upload_id pour valider la photo (modération incluse). Renvoie un photo_id à passer à animate_photo.

confirm_upload input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "upload_id"
  ],
  "properties": {
    "upload_id": {
      "type": "string",
      "description": "Le upload_id renvoyé par create_upload."
    }
  },
  "additionalProperties": false
}
confirm_upload output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "photo_id"
  ],
  "properties": {
    "photo_id": {
      "type": "string",
      "description": "Identifiant de la photo, à passer à animate_photo."
    }
  },
  "additionalProperties": false
}
confirm_upload annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
animate_photo — Animer une photo
Advertised by the server during the last successful anonymous check.
Open-world

Anime une photo ancienne en une courte vidéo naturelle. Consomme 1 crédit (compte approvisionné requis, pas d'essai gratuit). Abonnement à partir de 19 €/mois HT, soit 0,76 € la photo, sur https://www.incarn.co/developers. Fournis l'image via image_url (URL publique http(s) — PRÉFÉRÉ : notre serveur va la chercher, marche partout, aucun upload côté client) OU image_file (fichier joint par l'utilisateur, rempli automatiquement par ChatGPT) OU photo_id (create_upload puis confirm_upload ; ce PUT peut être bloqué dans un agent sandboxé). Privilégie image_url dès qu'une URL est disponible. À n'utiliser que pour des photos que l'utilisateur a le droit d'animer (les siennes, sa famille, ses ancêtres) ; refuse d'animer des personnalités publiques identifiables ou des personnes tierces sans leur consentement.

animate_photo input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "style": {
      "type": "string",
      "description": "Indication libre et subtile sur le mouvement (optionnel)."
    },
    "photo_id": {
      "type": "string",
      "description": "Photo uploadée (via confirm_upload), si l'utilisateur a joint un fichier sans URL. Prioritaire si fourni."
    },
    "image_url": {
      "type": "string",
      "format": "uri",
      "description": "URL publique http(s) de la photo. Chemin PRÉFÉRÉ (aucun upload, marche partout)."
    },
    "image_file": {
      "type": "object",
      "required": [
        "download_url",
        "file_id"
      ],
      "properties": {
        "file_id": {
          "type": "string",
          "description": "Identifiant du fichier côté hôte."
        },
        "file_name": {
          "type": "string"
        },
        "mime_type": {
          "type": "string"
        },
        "download_url": {
          "type": "string",
          "description": "URL de téléchargement de l'image, fournie par l'hôte."
        }
      },
      "description": "Fichier joint par l'utilisateur — rempli AUTOMATIQUEMENT par ChatGPT (openai/fileParams) quand une photo est attachée. Notre serveur télécharge le download_url côté serveur (aucun upload côté client).",
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
animate_photo output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id",
    "status",
    "video_url",
    "photo_url"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Identifiant du job d'animation (à poller)."
    },
    "status": {
      "enum": [
        "processing",
        "succeeded",
        "failed"
      ],
      "type": "string",
      "description": "Statut du job : en cours, réussi ou échoué."
    },
    "photo_url": {
      "type": [
        "string",
        "null"
      ],
      "description": "URL de la photo source (avant), pour l'aperçu inline."
    },
    "video_url": {
      "type": [
        "string",
        "null"
      ],
      "description": "URL de la vidéo une fois prête, sinon null."
    }
  },
  "additionalProperties": false
}
animate_photo annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": false
}
get_animation_status — Statut d'une animation
Advertised by the server during the last successful anonymous check.
Advertised read-only

Récupère le statut d'un job d'animation et l'URL de la vidéo une fois prête.

get_animation_status input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "job_id"
  ],
  "properties": {
    "job_id": {
      "type": "string",
      "description": "Identifiant du job d'animation."
    }
  },
  "additionalProperties": false
}
get_animation_status output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "id",
    "status",
    "video_url",
    "error",
    "photo_url"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Identifiant du job."
    },
    "error": {
      "type": [
        "string",
        "null"
      ],
      "description": "Message d'erreur si le job a échoué, sinon null."
    },
    "status": {
      "enum": [
        "processing",
        "succeeded",
        "failed"
      ],
      "type": "string",
      "description": "Statut du job : en cours, réussi ou échoué."
    },
    "photo_url": {
      "type": [
        "string",
        "null"
      ],
      "description": "URL de la photo source (avant), pour l'aperçu inline."
    },
    "video_url": {
      "type": [
        "string",
        "null"
      ],
      "description": "URL de la vidéo une fois prête, sinon null."
    }
  },
  "additionalProperties": false
}
get_animation_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

incarn-result

Advertised by the server during the last successful anonymous check.

incarn-result URI
ui://incarn/result.html

MIME type: text/html;profile=mcp-app

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
1343 ms
95th percentile latency
1343 ms

Maintenance history

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

  • · probe · passed · 1343 ms · metadata changed · 5 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 incarn-mcp https://api.incarn.co/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 incarn-mcp --url https://api.incarn.co/mcp

Cursor

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

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start incarn-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "incarn-mcp": {
      "type": "http",
      "url": "https://api.incarn.co/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 incarn-mcp https://api.incarn.co/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://api.incarn.co/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": {
    "incarn-mcp": {
      "serverUrl": "https://api.incarn.co/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Incarn 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 Incarn 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