Incarn
Animate old family photos into short lifelike videos with AI.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (2)
- LOWen list_examples
- LOWen get_animation_status
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"photo-animation": {
"url": "https://api.incarn.co/mcp"
}
}
}Puntos de conexión remotos
https://api.incarn.co/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (5)
🟢list_examples(beat)
Voir des exemples avant/après d'animation de photos anciennes (galerie de démonstration).
Esquema de entrada
{
"type": "object",
"properties": {
"beat": {
"type": "string",
"description": "Thème optionnel (ex: 'mariage', 'bébé', 'portrait')."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Esquema de salida
{
"type": "object",
"properties": {
"beat": {
"type": [
"string",
"null"
],
"description": "Thème appliqué, ou null."
},
"gallery_url": {
"type": "string",
"description": "URL de la galerie publique où chaque portrait s'anime (avant/après). À partager avec l'utilisateur."
},
"examples": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Titre de l'exemple."
},
"thumbnail_url": {
"type": "string",
"description": "URL de la vignette."
}
},
"required": [
"title",
"thumbnail_url"
],
"additionalProperties": false
},
"description": "Liste d'exemples avant/après."
}
},
"required": [
"beat",
"gallery_url",
"examples"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡create_upload(mime_type)
É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.
Esquema de entrada
{
"type": "object",
"properties": {
"mime_type": {
"type": "string",
"description": "Type MIME de l'image (ex: 'image/jpeg', 'image/png')."
}
},
"required": [
"mime_type"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Esquema de salida
{
"type": "object",
"properties": {
"upload_id": {
"type": "string",
"description": "À passer à confirm_upload."
},
"upload_url": {
"type": "string",
"description": "URL sur api.incarn.co : PUT les octets du fichier dessus."
},
"expires_in": {
"type": "number",
"description": "Validité de l'URL, en secondes."
},
"note": {
"type": "string",
"description": "Marche à suivre + fallback si le PUT est bloqué."
}
},
"required": [
"upload_id",
"upload_url",
"expires_in",
"note"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡confirm_upload(upload_id)
É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.
Esquema de entrada
{
"type": "object",
"properties": {
"upload_id": {
"type": "string",
"description": "Le upload_id renvoyé par create_upload."
}
},
"required": [
"upload_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Esquema de salida
{
"type": "object",
"properties": {
"photo_id": {
"type": "string",
"description": "Identifiant de la photo, à passer à animate_photo."
}
},
"required": [
"photo_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡animate_photo(photo_id, image_url, image_file, style)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"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",
"properties": {
"download_url": {
"type": "string",
"description": "URL de téléchargement de l'image, fournie par l'hôte."
},
"file_id": {
"type": "string",
"description": "Identifiant du fichier côté hôte."
},
"mime_type": {
"type": "string"
},
"file_name": {
"type": "string"
}
},
"required": [
"download_url",
"file_id"
],
"additionalProperties": false,
"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)."
},
"style": {
"type": "string",
"description": "Indication libre et subtile sur le mouvement (optionnel)."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Esquema de salida
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du job d'animation (à poller)."
},
"status": {
"type": "string",
"enum": [
"processing",
"succeeded",
"failed"
],
"description": "Statut du job : en cours, réussi ou échoué."
},
"video_url": {
"type": [
"string",
"null"
],
"description": "URL de la vidéo une fois prête, sinon null."
},
"photo_url": {
"type": [
"string",
"null"
],
"description": "URL de la photo source (avant), pour l'aperçu inline."
}
},
"required": [
"id",
"status",
"video_url",
"photo_url"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_animation_status(job_id)
Récupère le statut d'un job d'animation et l'URL de la vidéo une fois prête.
Esquema de entrada
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"description": "Identifiant du job d'animation."
}
},
"required": [
"job_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Esquema de salida
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du job."
},
"status": {
"type": "string",
"enum": [
"processing",
"succeeded",
"failed"
],
"description": "Statut du job : en cours, réussi ou échoué."
},
"video_url": {
"type": [
"string",
"null"
],
"description": "URL de la vidéo une fois prête, sinon null."
},
"error": {
"type": [
"string",
"null"
],
"description": "Message d'erreur si le job a échoué, sinon null."
},
"photo_url": {
"type": [
"string",
"null"
],
"description": "URL de la photo source (avant), pour l'aperçu inline."
}
},
"required": [
"id",
"status",
"video_url",
"error",
"photo_url"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Prompts recomendados
list_examplesget_animation_statuslist_examplesget_animation_statusget_animation_statuslist_examplesComunidad
Evidencia