Serveur MCP

Le serveur MCP de Raconte : outils, paramètres et exemples de payloads.

Raconte expose un serveur Model Context Protocol en Streamable HTTP. N’importe quel client compatible MCP (Claude Desktop, Claude Code, Cursor, Opencode, VS Code Copilot Chat, Windsurf) peut piloter le produit avec six outils : trois sur les interviews, trois sur les invitations.

Vous cherchez la configuration des clients ? Lisez le guide de configuration MCP. Cette page sert de référence pour les outils eux-mêmes.

Endpoint et authentification

L’endpoint MCP est https://api.raconte.ai/api/mcp. L’authentification se fait via une clé API passée en query string :

https://api.raconte.ai/api/mcp?api_key=VOTRE_CLE_API

Les clés API se créent depuis Paramètres → API dans l’app et sont rattachées à une organisation. L’endpoint et une configuration client prête à coller sont aussi disponibles depuis Paramètres → MCP. Chaque appel d’outil s’exécute sur cette organisation ; les ressources d’autres organisations ne sont jamais retournées.

create-interview

Crée une interview vocale IA. Sans invitees, une seule invitation partageable READY est créée (son url est le lien à partager manuellement). Avec invitees, une invitation est créée par invité à la place (pas d’invitation vide), et chaque invité avec un email ou un téléphone est envoyé immédiatement. Un échec d’envoi n’arrête pas les autres et est remonté par invitation (sent/error). La réponse renvoie toujours les invitations créées dans invitations.

ParamètreTypeRequisDescription
promptstringouiPrompt de l’interview décrivant les questions à poser
localeenumnonLangue de l’interview. Par défaut, la langue par défaut de l’organisation si omise
titlestringnonTitre personnalisé optionnel
introstringnonMessage d’introduction optionnel affiché au destinataire
firstMessagestringnonPremier message optionnel prononcé par l’IA au démarrage
inviteesarraynonInvités à créer et envoyer tout de suite. Chaque item supporte name, email, phone (email ou phone requis)

Exemple de réponse sans invitees : une seule invitation partageable, champs destinataire null et sent: false (rien n’a été envoyé) :

{
  "interviewId": "12345678-1234-1234-1234-1234567890ab",
  "invitations": [
    {
      "id": "11111111-2222-3333-4444-555555555555",
      "slug": "K9pQ2mWxYz",
      "status": "ready",
      "name": null,
      "recipientEmail": null,
      "recipientPhone": null,
      "url": "https://raconte.ai/invitation/K9pQ2mWxYz",
      "sent": false,
      "error": null
    }
  ]
}

Avec invitees, invitations contient une entrée par invité à la place, chacune avec ses name/recipientEmail/recipientPhone et son résultat d’envoi sent/error.

update-interview

Patch d’une interview. Seuls les champs fournis sont mis à jour. Passez archived: true pour archiver (ou false pour restaurer).

ParamètreTypeRequisDescription
interviewIduuidouiUUID de l’interview à mettre à jour
titlestringnonNouveau titre
promptstringnonNouveau prompt (10 caractères minimum)
introstringnonNouveau message d’introduction affiché à l’invité
firstMessagestringnonNouveau premier message prononcé par l’IA au démarrage
localeenumnonNouvelle langue de l’interview
maxMinutesnumbernonDurée maximum par appel, en minutes. Les silences ne sont pas comptés.
maxResponsesnumbernonNombre maximum de messages de l’invité avant l’arrêt de l’interview
disableOrgSystemPromptbooleannonSi true, ne préfixe pas le prompt système de l’organisation
archivedbooleannonArchiver (true) ou restaurer (false) l’interview

Exemple de réponse :

{
  "id": "12345678-1234-1234-1234-1234567890ab",
  "title": "Feedback bêta",
  "prompt": "Demande aux gens ce qu'ils ont aimé...",
  "intro": "Merci de prendre deux minutes !",
  "firstMessage": "Bonjour, merci de répondre à cette interview.",
  "locale": "fr",
  "maxMinutes": 15,
  "maxResponses": 100,
  "archivedAt": null,
  "createdAt": "2026-05-29T10:14:22.123Z",
  "updatedAt": "2026-05-29T11:02:05.880Z"
}

get-interview

Récupère une interview par id avec toutes ses invitations et leurs transcripts complets.

ParamètreTypeRequisDescription
interviewIduuidouiUUID de l’interview à récupérer

Exemple de réponse :

{
  "id": "12345678-1234-1234-1234-1234567890ab",
  "title": "Feedback bêta",
  "prompt": "Demande aux gens ce qu'ils ont aimé...",
  "intro": "Merci de prendre deux minutes !",
  "firstMessage": "Bonjour, merci de répondre à cette interview.",
  "locale": "fr",
  "maxMinutes": 15,
  "maxResponses": 100,
  "archivedAt": null,
  "createdAt": "2026-05-29T10:14:22.123Z",
  "updatedAt": "2026-05-29T11:02:05.880Z",
  "invitations": [
    {
      "id": "abcdef12-3456-7890-abcd-ef1234567890",
      "interviewId": "12345678-1234-1234-1234-1234567890ab",
      "slug": "K9pQ2mWxYz",
      "status": "completed",
      "name": "Jane Doe",
      "recipientEmail": "jane@example.com",
      "recipientPhone": null,
      "summary": "L'invitée a apprécié l'onboarding et bute sur l'export.",
      "archivedAt": null,
      "createdAt": "2026-05-29T10:14:22.123Z",
      "updatedAt": "2026-05-29T10:31:40.500Z",
      "url": "https://raconte.ai/invitation/K9pQ2mWxYz",
      "messages": [
        { "role": "assistant", "content": "Bonjour ! Qu'avez-vous préféré ?", "sentiment": null, "createdAt": "2026-05-29T10:20:00.000Z" },
        { "role": "user", "content": "L'onboarding était fluide.", "sentiment": "positive", "createdAt": "2026-05-29T10:20:30.000Z" }
      ]
    }
  ]
}

create-invitation

Crée une ou plusieurs invitations pour une interview existante. Chaque invité avec un email ou un téléphone est envoyé immédiatement par email ou SMS. Un échec d’envoi n’arrête pas les autres et est remonté par invitation (sent/error).

ParamètreTypeRequisDescription
interviewIduuidouiUUID de l’interview à laquelle inviter des personnes
inviteesarrayouiListe d’invités. Chaque item supporte name, email, phone. Chaque invité doit avoir email ou phone

Exemple de réponse :

{
  "invitations": [
    {
      "id": "abcdef12-...",
      "slug": "K9pQ2mWxYz",
      "status": "ready",
      "name": "Jane Doe",
      "recipientEmail": "jane@example.com",
      "recipientPhone": null,
      "url": "https://raconte.ai/invitation/K9pQ2mWxYz",
      "sent": true,
      "error": null
    }
  ]
}

update-invitation

Patch d’une invitation. Passez status: "cancelled" pour la désactiver (ou "ready" pour la réactiver) et archived: true pour la supprimer (soft-delete ; false la restaure). Donner une nouvelle valeur à recipientEmail ou recipientPhone renvoie l’invitation à cette valeur ; un échec d’envoi est remonté (sent/error) sans faire échouer la mise à jour.

ParamètreTypeRequisDescription
invitationIduuidouiUUID de l’invitation à mettre à jour
namestringnonNouveau nom d’invité (null pour effacer)
recipientEmailstringnonNouvel email d’invité (null pour effacer ; une nouvelle valeur renvoie l’invitation)
recipientPhonestringnonNouveau téléphone d’invité (null pour effacer ; une nouvelle valeur renvoie l’invitation)
statusenumnon"cancelled" désactive une READY ; "ready" réactive une CANCELLED
archivedbooleannonArchiver (true) ou restaurer (false). L’archivage est un soft-delete.

Exemple de réponse (les champs sent/error ne sont présents que si un destinataire a changé) :

{
  "id": "abcdef12-3456-7890-abcd-ef1234567890",
  "interviewId": "12345678-1234-1234-1234-1234567890ab",
  "slug": "K9pQ2mWxYz",
  "status": "ready",
  "name": "Jane Doe",
  "recipientEmail": "jane.new@example.com",
  "recipientPhone": null,
  "summary": null,
  "archivedAt": null,
  "createdAt": "2026-05-29T10:14:22.123Z",
  "updatedAt": "2026-05-29T12:00:00.000Z",
  "url": "https://raconte.ai/invitation/K9pQ2mWxYz",
  "sent": true,
  "error": null
}

get-invitation

Récupère une invitation par id avec son status et son transcript complet (messages, rôle et sentiment).

ParamètreTypeRequisDescription
invitationIduuidouiUUID de l’invitation à récupérer

Exemple de réponse :

{
  "id": "abcdef12-3456-7890-abcd-ef1234567890",
  "interviewId": "12345678-1234-1234-1234-1234567890ab",
  "slug": "K9pQ2mWxYz",
  "status": "completed",
  "name": "Jane Doe",
  "recipientEmail": "jane@example.com",
  "recipientPhone": null,
  "summary": "L'invitée a apprécié l'onboarding et bute sur l'export.",
  "archivedAt": null,
  "createdAt": "2026-05-29T10:14:22.123Z",
  "updatedAt": "2026-05-29T10:31:40.500Z",
  "url": "https://raconte.ai/invitation/K9pQ2mWxYz",
  "messages": [
    { "role": "assistant", "content": "Bonjour ! Qu'avez-vous préféré ?", "sentiment": null, "createdAt": "2026-05-29T10:20:00.000Z" },
    { "role": "user", "content": "L'onboarding était fluide.", "sentiment": "positive", "createdAt": "2026-05-29T10:20:30.000Z" }
  ]
}

Cycle de vie d’une invitation, en résumé

stateDiagram-v2
    state "Archivée (soft delete)" as ARCHIVED
    [*] --> READY: create-invitation
    READY --> IN_PROGRESS: envoi ou ouverture du lien
    IN_PROGRESS --> COMPLETED: dernier message puis raccrochage
    READY --> CANCELLED: status cancelled
    CANCELLED --> READY: status ready
    READY --> ARCHIVED: archived true
    ARCHIVED --> READY: archived false
    COMPLETED --> [*]

get-interview et get-invitation incluent le transcript des invitations COMPLETED. Le résumé arrive peu après la fin de l’appel ; si vous lisez le transcript juste à la fin, attendez-vous à summary: null pendant quelques secondes.