MCP App Store
by KeenEthics
CocoPoint icon

CocoPoint

By Benjamin Azogui

Get New App Alerts

Overview

CocoPoint is an AI-powered presentation copilot that connects ChatGPT to your CocoPoint workspace. Create, view, and edit real presentations using natural language, then open and present the finished deck directly in CocoPoint. ChatGPT can create new decks, open existing presentations, edit text, add, duplicate, move or remove slides, update titles and themes, and even view rendered slide screenshots to visually review its work instead of editing blindly. All actions are performed securely within the authenticated user’s CocoPoint account. Presentations remain private unless the user chooses to share them, and users stay in control of every change. From prompt to presentation, CocoPoint turns your conversation with ChatGPT into polished, editable slides.

Tools

add_image

ChatGPT
Importe une ou plusieurs IMAGES par leur URL et les rattache au deck, pour que tu puisses ensuite les INTÉGRER avec edit_slide. Fournis url (une image) ou urls (plusieurs) : des adresses http(s) PUBLIQUES d'images (png, jpeg, gif, webp, avif ; max 4 Mo chacune) ; une data:URL image en base64 est aussi acceptée. Chaque image est TÉLÉCHARGÉE et STOCKÉE dans le compte connecté (URL DURABLE), puis attachée soit à une slide (slide, index 0-based) soit, par défaut, au POOL de la présentation (disponible pour toutes les slides). Renvoie les URL durables : réutilise-les TELLES QUELLES dans <img src="…"> via edit_slide. ⚠️ Une image que l'utilisateur JOINT dans le chat n'est PAS transmissible ici (le modèle n'en reçoit qu'une vue) : demande-lui une URL d'image, ou colle une data:URL.

add_slide

ChatGPT
Insère une slide après l'index after (-1 = en tête ; défaut = fin). Fournis html, ou template (gabarit) à défaut.

address_annotation

ChatGPT
Marque une annotation comme TRAITÉE : tu as appliqué (ou proposé) le changement demandé. ⚠️ Cela ne CLÔT PAS l'annotation — seul l'utilisateur la résout définitivement, après avoir comparé et validé ta version. Donne une note courte décrivant ce que tu as fait (elle apparaît dans le fil, signée « IA »). N'appelle cet outil qu'APRÈS avoir réellement fait la modification (edit_slide / apply_edits…), jamais avant.

apply_edits

ChatGPT
Applique PLUSIEURS opérations au deck en UNE seule écriture (une entrée dans les Versions, un seul rafraîchissement de l'éditeur) — bien plus économique que N appels. À privilégier dès que tu touches plus d'une slide, ou une slide + les styles. Passe baseHash (celui de get_presentation view='outline'/'slides') pour REFUSER l'écriture si le deck a changé depuis ta lecture (erreur deck_changed → relis l'outline et rejoue). Les opérations s'appliquent DANS L'ORDRE ; insert/move/remove décalent les index suivants — fais tes set_html/replace_text AVANT les opérations structurelles. Opérations : • set_meta { title?, subtitle? } • set_theme { theme } (fusionné) • set_deck_styles { css?, tokens? } (design system partagé) • set_html { index, html } • set_notes { index, notes } • set_hidden { index, hidden } • replace_text { index?, old, new } (motif UNIQUE) • insert { at?, html, notes? } (défaut : en fin) • duplicate { index, at? } • move { from, to } • remove { index }

check_image_upload

ChatGPT
Consulte une demande de dépôt créée par request_image_upload. Renvoie son status (pending | done), et — une fois l'utilisateur ayant déposé ses images — la liste des assets avec leurs URL DURABLES (déjà rattachées au deck / à la slide) : réutilise-les telles quelles dans <img src="…"> via edit_slide. Si status = pending, l'utilisateur n'a pas encore déposé : attends qu'il te dise que c'est fait.

create_clip

ChatGPT
Compose un NOUVEAU clip, pour un objectif donné (teaser | pitch | demo | resume | custom). Avec 'custom', décris l'intention dans brief. Choisis le format selon la destination : 16:9 (défaut), 9:16 (vertical — Reels/Stories/TikTok), 1:1 (carré — feed) ; il est FIGÉ à la création. DEUX façons de lui donner sa matière : (a) id d'une présentation — le montage puise dans ses slides ; (b) SANS id — clip AUTONOME : sa matière est alors brief + texts, et il n'est rattaché à aucune présentation. NE CRÉE PAS de présentation juste pour pouvoir faire un clip : si l'utilisateur demande seulement un clip, fais-le autonome. Le montage est écrit par le moteur puis ENREGISTRÉ ; tout texte absent de la matière est automatiquement écarté.

create_presentation

ChatGPT
Crée une présentation dans le compte connecté et renvoie notamment { presentationId, title, url, theme } (plus id, subtitle, slideCount pour compatibilité). title est OPTIONNEL : sans titre, le deck s'appelle « Nouvelle présentation ». AVANT de créer : list_presentations, et si un deck existant correspond à la demande, propose-le plutôt que d'en créer un second. THÈME : si l'utilisateur n'a pas dit quel thème utiliser, appelle list_themes et DEMANDE-LUI de choisir (son thème par défaut, un autre de la liste, ou un thème sur mesure que tu composes via theme/styles) — ne choisis pas à sa place. Passe ensuite themeId : le deck reçoit la palette, la feuille de style, les slides signatures du thème (sauf si tu fournis slides) et ses consignes (→ aiInstructions du deck, à respecter). Sans themeId ni theme, le thème PAR DÉFAUT du compte est appliqué (ou le thème de base s'il n'en a pas) — le retour theme dit lequel. Enchaîne ensuite avec add_slide / edit_slide / replace_text pour bâtir le contenu.

delete_clip

ChatGPT
Supprime définitivement un clip. La présentation source n’est pas touchée.

delete_presentation

ChatGPT
Supprime définitivement une présentation. Ne l'utilise que sur demande explicite de l'utilisateur.

duplicate_clip

ChatGPT
Crée une COPIE d'un clip (même montage, thème, format, feuille de style, bande-son) sous le nom « … (copie) ». Sers-t'en pour ESSAYER une variante sans toucher à l'original — retouche la copie, garde celle que tu préfères. Renvoie l'id de la copie.

duplicate_presentation

ChatGPT
Duplique une présentation entière (nouveau deck « (copie) »).

duplicate_slide

ChatGPT
Duplique la slide index (la copie est insérée juste après).

edit_slide

ChatGPT
Remplace le HTML et/ou les notes d’UNE slide (index 0-based). Pour une refonte de mise en page de cette slide.

get_annotation

ChatGPT
Détail d'UNE annotation + le RENDU de l'endroit visé. Pour une présentation : la slide ancrée en PNG (1280×720), avec la position du point. Pour un clip : l'ancre (plan + instant relatif) et le texte — utilise screenshot_clip pour voir le plan. Sers-t'en pour COMPRENDRE exactement ce que l'utilisateur vise avant de corriger.

get_clip

ChatGPT
Le MONTAGE d'un clip : la liste de ses PLANS (archétype, fond, durée, contenu) et le vocabulaire autorisé. À lire avant toute retouche. Pour VOIR le clip, appelle screenshot_clip.

get_current_user

ChatGPT
Compte CocoPoint actuellement connecté (identité DÉDUITE DU JETON OAuth/PAT côté serveur). Renvoie { authenticated, user: { userId, email } }. À appeler quand l'utilisateur demande quel compte est connecté, ou quand une présentation est introuvable/inaccessible (pour lui indiquer l'email connectée). N'accepte AUCUN paramètre : l'identité ne vient jamais du prompt. Si le jeton est absent, invalide ou expiré, l'appel échoue en 401 (reconnecter CocoPoint).

get_deck_styles

ChatGPT
Le DESIGN SYSTEM partagé par toutes les slides : { css, tokens }. css = feuille de style injectée AVANT le <style> de chaque slide (classes réutilisées, décors, réglages communs) ; tokens = variables CSS partagées ({ "--radius": "18px" }). Pose-le une fois avec set_deck_styles au lieu de recopier les mêmes styles dans chaque slide.

get_guide

ChatGPT
Guide d'écriture CocoPoint (design system, classes maison, contraintes, méthode). À LIRE EN PREMIER. topic restreint pour économiser des tokens : 'general' (slides, règles 1–9), 'clips' (montage vidéo), 'motion' (vocabulaire d'animation des clips). Omis = guide complet.

get_presentation

ChatGPT
État COURANT d'une présentation, À L'ÉCHELLE que tu demandes (la base fait foi — appelle-le avant de modifier). view : 'outline' (défaut recommandé) = le PLAN sans HTML — une ligne par slide { index, id, root (classe racine), title, words, images, hasStyle, hidden, hash } + title/subtitle/theme/styles + baseHash. Bon marché : relis-le avant une SÉRIE de retouches. 'slides' + slides:[i,…] = le HTML COMPLET de CES slides seulement (à lire juste avant de toucher une slide). 'full' = tout le deck (title, subtitle, theme, styles{css,tokens}, assets[{url,name,type}], slides[{id,html,notes,assets}]) — ne le prends que si tu as vraiment besoin de tout. baseHash (dans outline) se repasse à apply_edits pour refuser une écriture si le deck a changé entre-temps. styles = design system partagé (cf. set_deck_styles). assets (racine) = visuels de la PRÉSENTATION ; ceux hors d'un html attendent d'être placés.

get_slide_review

ChatGPT
Suivi d'une présentation D'ÉQUIPE : les STATUTS définis par l'équipe (ordre = avancement ; le dernier = terminé), ses MEMBRES (responsables possibles) et, pour chaque slide, son statut et son responsable (email). Sans HTML — relis get_presentation pour le contenu. mine: true = seulement les slides de l'utilisateur connecté ; status = seulement ce statut (id ou libellé). Fonctionne aussi sur un deck d'équipe créé par un collègue.

inspect_deck

ChatGPT
CONSTAT MESURÉ de TOUT le deck (JSON) en un seul lancement de Chromium : le même relevé que inspect_slide pour chaque slide, PLUS headerSpread = écart de position verticale des titres d'une slide à l'autre (un titre qui « bouge » quand on feuillette). À lire pour juger la RÉGULARITÉ d'ensemble et repérer les slides à contraste faible ou surchargées. image: true joint la planche-contact.

inspect_slide

ChatGPT
CONSTAT MESURÉ d'une slide (JSON, repère réel 1280×720) — pas une image à interpréter : boîtes des éléments, taille de police mini, contraste WCAG EFFECTIF (fond réel), texte < 16px (smallText), chevauchements texte↔image (overlaps), marges libres par bord (freeMargins), position du titre (headerTop), contenu coupé (clipped). Sers-t'en pour VÉRIFIER une mise en page (un contraste de 3:1 ou une collision de 100px ne se voient pas sur une vignette). image: true joint aussi le PNG.

list_annotations

ChatGPT
Liste les ANNOTATIONS ANCRÉES d'une présentation (ou d'un clip) : les remarques que l'utilisateur a posées en cliquant un endroit précis d'une slide/d'un plan. Par défaut, les ACTIONS qui te sont adressées et encore OUVERTES (audience='ai', status='open') — c'est TA FILE DE TRAVAIL. Appelle-la AVANT de te lancer sur un deck : l'utilisateur peut avoir laissé des demandes de changement. Chaque entrée porte son ancre (slide + point, ou plan + instant relatif), le texte de la demande et son statut (open → addressed → resolved). audience='team' = notes entre humains ; 'all' = tout. status='all' pour inclure le traité/résolu.

list_clips

ChatGPT
Les CLIPS vidéo d'une présentation. Un clip n'est pas la présentation en vidéo : c'est un montage court qui poursuit un OBJECTIF et n'en retient qu'une partie. Une même présentation peut en porter plusieurs.

list_my_slides

ChatGPT
Les slides dont l'utilisateur connecté est RESPONSABLE, sur toutes les présentations de toutes ses équipes (y compris les decks créés par des collègues), groupées par présentation. Par défaut, seulement celles qui ne sont pas encore au statut final (includeDone: true pour tout). Idéal pour « qu'est-ce que j'ai à faire ? » avant d'ouvrir un deck.

list_presentations

ChatGPT
Liste les présentations de l'utilisateur (id, titre, nombre de slides, dernière modification).

list_themes

ChatGPT
Thèmes disponibles pour une NOUVELLE présentation : thèmes de départ, thèmes perso de l'utilisateur (et de son équipe). Chaque entrée : { id, name, description, kind (depart|perso|equipe), isDefault, colors, hasGuidelines }. À appeler AVANT create_presentation quand l'utilisateur n'a pas dit quel thème utiliser : présente-lui la liste en quelques mots (nom + description, et signale son thème par défaut) et laisse-le choisir — ou proposer un thème sur mesure. Puis create_presentation { themeId }.

move_slide

ChatGPT
Déplace la slide from à la position to (0-based).

remove_slide

ChatGPT
Supprime la slide index (0-based).

render_chart

ChatGPT
Rend un GRAPHIQUE en SVG inline, thémé (var(--primary)) et à l'échelle EXACTE (le code garantit les proportions — une barre ne peut pas mentir). Donne spec = { type, data:[{label,value}], options? } ; type ∈ bar (colonnes) · barh (barres horizontales, bon pour un classement) · line · area · donut · sparkline. options : { max, suffix (ex. " %", " €"), decimals, showValues, centerLabel (donut), title }. L'outil RENVOIE le SVG : colle-le TEL QUEL dans le HTML d'une slide via edit_slide (dans un conteneur qui lui donne de la place, ex. le corps d'une slide .pad). Préfère un vrai graphique à un gros chiffre quand tu as PLUSIEURS valeurs à comparer. Les données doivent venir du deck/des sources — n'invente pas de chiffres.

render_clip_frames

ChatGPT
Rend plusieurs INSTANTS de chaque plan (par défaut 15/50/90 % de sa durée) en jouant la VRAIE timeline, et renvoie une planche annotée + un LINT de motion (texte trop bref, animation coupée avant la fin, chevauchements, sorties de cadre, budget de lecture). À utiliser quand tu composes ou retouches des plans scene : screenshot_clip ne montre que l'état FINAL posé, jamais le mouvement. shots = indices 0-based à examiner (défaut : tous, borné) ; perShot = nombre d'instants par plan (1 à 4).

replace_text

ChatGPT
Remplacement de texte SÛR dans le HTML des slides : le motif old doit apparaître EXACTEMENT UNE FOIS (dans la slide slide_index si fournie, sinon dans tout le deck), sinon rien n'est écrit. L'outil à privilégier pour les retouches de texte.

reply_annotation

ChatGPT
Répond dans le fil d'une annotation SANS la marquer traitée — pour poser une QUESTION avant d'agir quand la demande est ambiguë (« quelle couleur ? », « on garde le chiffre ou on l'enlève ? »), ou signaler un blocage. L'annotation passe « en attente de l'utilisateur » (awaitingUser) : elle sort de ta file de travail jusqu'à ce qu'il réponde, puis y revient avec sa réponse dans replies. Si tu as FAIT le changement, utilise address_annotation, pas cet outil. Réponse courte, signée « IA ».

request_image_upload

ChatGPT
Pour une image LOCALE que l'utilisateur ne peut pas te transmettre (une pièce jointe du chat n'arrive JAMAIS jusqu'à un outil). Crée une demande de dépôt liée à SON compte et à CE deck (et à une slide si fournie). DEUX chemins de dépôt sont renvoyés — prends le premier qui s'applique : (a) agentUpload — si tu peux exécuter des commandes sur la machine où sont les fichiers, téléverse-les TOI-MÊME avec la commande agentUpload.curl fournie (n'affiche jamais le secret à l'utilisateur), sans rien lui demander ; (b) url — sinon, DONNE cette url à l'utilisateur, il y dépose ses images puis te dit « c'est fait ». Dans les deux cas, appelle ensuite check_image_upload avec l'uploadRequestId pour récupérer les URL durables. Le lien EXPIRE vite ; l'utilisateur n'a JAMAIS à recopier d'URL.

retime_clip

ChatGPT
Cale les coupes du clip sur le RYTHME de sa bande-son : chaque durée de plan est ramenée sur une frontière de MESURE. Optionnel durations : une durée EN SECONDES par plan (ta CHORÉGRAPHIE — plan long sur l'accroche, coupes vives sur une énumération) ; chacune est ramenée sur la grille. Sans durations, on cale les durées actuelles. Nécessite une bande-son rythmée (voir get_clip → rythme). Ne touche jamais le TEXTE des plans.

revise_clip_shot

ChatGPT
Retouche UN plan d'un clip d'après une remarque (« trop long », « passe-le sur fond sombre », « supprime-le »). shot est l'index 0-based du plan. On parle sur un PLAN, jamais sur un timecode. Ne s'applique PAS à un plan kind:'scene' (html/chorégraphie libres) : réécris celui-là avec set_clip_shots.

save_theme

ChatGPT
Enregistre un thème RÉUTILISABLE dans « Mes thèmes » de l'utilisateur (il apparaîtra ensuite dans list_themes et à la création dans CocoPoint). À n'appeler que si l'utilisateur le DEMANDE (« garde ce style », « fais-en un thème »), et après list_themes : si un thème perso du même nom existe, propose plutôt update_theme. Deux façons : (1) presentationId = capturer le thème d'une présentation existante (palette + feuille de style styles + slides signatures — les 3 premières, ou celles que tu choisis par signatureSlides, idéalement une couverture, une slide de contenu et une intercalaire) ; (2) sans présentation, un thème SUR MESURE : theme (palette) + styles + slides (1 à 3 slides signatures en HTML, obligatoires — elles servent de repère de mise en page à toute IA qui utilisera le thème). theme/styles passés AVEC presentationId retouchent ce qui est capturé. guidelines = consignes du thème (charte, ton, usages des couleurs), copiées dans les consignes IA de chaque deck créé avec lui. Fonctionnalité de l'offre Pro. Renvoie { themeId } : utilisable aussitôt par create_presentation { themeId }.

screenshot_clip

ChatGPT
Planche-contact du clip : chaque plan rendu tel qu'il apparaît. Sers-t'en APRÈS chaque modification — on ne juge pas un montage sans l'avoir vu.

screenshot_presentation

ChatGPT
Rend TOUTES les slides du deck en UNE planche-contact numérotée (PNG). Signale les slides qui débordent ET les défauts de COHÉRENCE d'ensemble : titres non alignés (position verticale du titre qui varie d'une slide à l'autre) et rangées de cartes de hauteurs inégales. À appeler pour juger l'ENSEMBLE — rythme, répétitions, régularité — puis screenshot_slide pour examiner une slide. Bien plus rapide que N captures unitaires.

screenshot_slide

ChatGPT
Rend la slide index en PNG (1280×720) et signale tout débordement du cadre. À utiliser après chaque modification de mise en page : ne conclus jamais qu'une slide « tient » sans l'avoir regardée.

set_clip_shots

ChatGPT
Écris le montage d'un clip. DEUX modes : (a) shots = REMPLACE tout le montage par la liste que TU composes (montage complet) ; (b) replace = retouche CIBLÉE, ne renvoie QUE les plans changés [{ index, shot }] (inutile de renvoyer les autres — gros gain quand un plan scene fait plusieurs Ko). Chaque plan est un ARCHÉTYPE (get_clip → archetypes) ou un plan LIBRE kind:'scene' (get_clip → scene). ⚠️ FIDÉLITÉ : chaque texte et image doit venir de la présentation source — un plan qui invente est ÉCARTÉ. Le montage est CALÉ sur le rythme de la bande-son. Regarde ensuite avec screenshot_clip.

set_clip_track

ChatGPT
Pose (ou retire) la BANDE-SON d'un clip, et RECALE le montage sur le rythme de la nouvelle piste (les coupes retombent sur les mesures). trackId = un id de la bibliothèque (voir get_clip → bande_son.bibliotheque), ou "" pour couper le son. On ne GÉNÈRE pas de musique et on ne fournit pas de fichier : on choisit dans la bibliothèque ; si l'utilisateur veut une autre musique, c'est LUI qui l'importe.

set_deck_styles

ChatGPT
REMPLACE le design system du deck (feuille de style + jetons PARTAGÉS par toutes les slides). css suit les mêmes règles qu'un <style> de slide (pas de @media, @import, ressources externes) et est injecté AVANT chaque slide — mets-y les classes réutilisées (cartes, encarts, décors) et les réglages communs, puis n'écris dans une slide que ce qui lui est propre. tokens = variables CSS communes ({ "--radius": "18px", "--space": "24px" }), utilisables dans le css comme dans les slides. Une modification GLOBALE (rayons, espacements, style de carte) se fait ici, une seule fois. Écrase la valeur précédente : lis d'abord avec get_deck_styles si tu veux compléter.

set_slide_review

ChatGPT
Change le STATUT et/ou le RESPONSABLE de slides d'une présentation d'équipe, en UN lot (une seule écriture, tout-ou-rien : une entrée invalide → rien n'est écrit). Chaque entrée : index (0-based) OU slideId, puis status (id ou libellé d'un statut de l'équipe, null = retirer) et/ou owner (email d'un MEMBRE de l'équipe, "me" = l'utilisateur connecté, null = retirer). Un champ omis n'est pas touché. Ne touche jamais au contenu des slides. Fais-le quand l'utilisateur le demande (« passe mes slides validées en revue », « attribue les slides 3 à 5 à Julie ») ; lis d'abord get_slide_review pour les statuts et membres exacts.

set_slides

ChatGPT
Remplace TOUTES les slides d'un coup (écrase l'existant — les retouches faites entre-temps dans l'app sont perdues). Réservé aux refontes complètes explicitement demandées ; sinon préfère les outils ciblés.

update_clip

ChatGPT
Règle les propriétés d'ensemble d'un clip SANS toucher au montage : name (titre), theme (palette — { primary, bg, ink, heading, muted, font? }), styles (FEUILLE DE STYLE partagée par tous les plans — { css, tokens? } ; pose ton système visuel UNE FOIS ici, puis n'écris que le particulier dans chaque scene), format (16:9 | 9:16 | 1:1). Idempotent, non destructif — ne fournis que ce que tu changes. Utile notamment pour donner sa palette à un clip AUTONOME (sinon rendu au corail COCOPOINT), ou passer un clip en vertical. Regarde ensuite avec screenshot_clip.

update_meta

ChatGPT
Met à jour titre / sous-titre / thème (sans toucher aux slides).

update_theme

ChatGPT
Modifie un thème PERSO de l'utilisateur (id renvoyé par list_themes, kind: 'perso') : nom, description, consignes, palette (theme, retouche partielle fusionnée), feuille de style (styles, remplacée), slides signatures (slides, ou fromPresentationId pour les reprendre d'une présentation avec sa palette et sa feuille). Seul l'AUTEUR modifie : un thème de départ ou d'équipe partagé par quelqu'un d'autre n'est pas modifiable — crée plutôt une variante avec save_theme. ⚠️ Un thème partagé avec une équipe change pour tous ses membres. Les présentations DÉJÀ créées avec ce thème ne changent pas (elles en ont une copie) : pour les mettre à jour, retouche-les (update_meta / set_deck_styles). Palette, styles et slides relèvent de l'offre Pro ; nom et consignes restent modifiables sans.

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

Similar Apps