---
title: "Serveur MCP"
url: "https://raconte.ai/fr/docs/mcp"
---

### Documentation

[Introduction](/fr/docs)[Démarrer](/fr/docs/getting-started)[Serveur MCP](/fr/docs/mcp)[Webhooks](/fr/docs/webhooks)[API REST](/fr/docs/api)[CLI](/fr/docs/cli)[SDK](/fr/docs/sdk)[Skill agent](/fr/docs/skill)

### Guides

[Configurer le serveur MCP](/fr/guides/mcp-setup)[Utiliser le serveur MCP](/fr/guides/mcp-usage)

[Raconte](/) ⟩ [Documentation](/fr/docs)

# Serveur MCP

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

Raconte expose un serveur [Model Context Protocol](https://modelcontextprotocol.io) 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](/fr/guides/mcp-setup). 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](/settings/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](/settings/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ètre

Type

Requis

Description

`prompt`

string

oui

Prompt de l’interview décrivant les questions à poser

`locale`

enum

non

Langue de l’interview. Par défaut, la langue par défaut de l’organisation si omise

`title`

string

non

Titre personnalisé optionnel

`intro`

string

non

Message d’introduction optionnel affiché au destinataire

`firstMessage`

string

non

Premier message optionnel prononcé par l’IA au démarrage

`invitees`

array

non

Invité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ètre

Type

Requis

Description

`interviewId`

uuid

oui

UUID de l’interview à mettre à jour

`title`

string

non

Nouveau titre

`prompt`

string

non

Nouveau prompt (10 caractères minimum)

`intro`

string

non

Nouveau message d’introduction affiché à l’invité

`firstMessage`

string

non

Nouveau premier message prononcé par l’IA au démarrage

`locale`

enum

non

Nouvelle langue de l’interview

`maxMinutes`

number

non

Durée maximum par appel, en minutes. Les silences ne sont pas comptés.

`maxResponses`

number

non

Nombre maximum de messages de l’invité avant l’arrêt de l’interview

`disableOrgSystemPrompt`

boolean

non

Si true, ne préfixe pas le prompt système de l’organisation

`archived`

boolean

non

Archiver (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ètre

Type

Requis

Description

`interviewId`

uuid

oui

UUID 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ètre

Type

Requis

Description

`interviewId`

uuid

oui

UUID de l’interview à laquelle inviter des personnes

`invitees`

array

oui

Liste 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ètre

Type

Requis

Description

`invitationId`

uuid

oui

UUID de l’invitation à mettre à jour

`name`

string

non

Nouveau nom d’invité (`null` pour effacer)

`recipientEmail`

string

non

Nouvel email d’invité (`null` pour effacer ; une nouvelle valeur renvoie l’invitation)

`recipientPhone`

string

non

Nouveau téléphone d’invité (`null` pour effacer ; une nouvelle valeur renvoie l’invitation)

`status`

enum

non

`"cancelled"` désactive une READY ; `"ready"` réactive une CANCELLED

`archived`

boolean

non

Archiver (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ètre

Type

Requis

Description

`invitationId`

uuid

oui

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

Sommaire

[1\. Endpoint et authentification](#endpoint-et-authentification)[2\. create-interview](#create-interview)[3\. update-interview](#update-interview)[4\. get-interview](#get-interview)[5\. create-invitation](#create-invitation)[6\. update-invitation](#update-invitation)[7\. get-invitation](#get-invitation)[8\. Cycle de vie d’une invitation, en résumé](#cycle-de-vie-dune-invitation-en-résumé)
