For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navigation principale
Theme

Création de serveurs MCP pour les plugins et les intégrations API

Créez un serveur MCP pour vos plugins, la recherche approfondie ou vos intégrations API.

Le Model Context Protocol (MCP) est un protocole ouvert qui s’impose comme la norme du secteur pour doter les modèles d’IA de nouveaux outils et connaissances. Les serveurs MCP distants permettent de connecter les modèles, via Internet, à de nouvelles sources de données et fonctionnalités.

Dans ce guide, vous allez créer un serveur MCP distant qui lit les données d’une source privée (une base vectorielle). Il les rend accessibles depuis un plugin dans ChatGPT et Codex, depuis les fonctionnalités de recherche approfondie et de connaissances de l’entreprise dans ChatGPT, ainsi que via l’API.

Remarque : pour créer un plugin avec un serveur MCP, commencez par consulter la documentation sur les plugins : Démarrage rapide, Création de votre serveur MCP, Connexion et test de votre plugin et Authentification. Si votre serveur MCP n’a pas besoin d’interface utilisateur, vous pouvez exposer ses outils sans fournir de ressources d’interface.

Configuration d’une source de données

Vous pouvez alimenter un serveur MCP distant avec des données de n’importe quelle source. Pour simplifier cet exemple, nous utiliserons les bases vectorielles de l’API OpenAI. Commencez par importer un document PDF dans une nouvelle base vectorielle. Vous pouvez utiliser ce livre du XIXᵉ siècle sur les chats, aujourd’hui dans le domaine public.

Vous pouvez importer des fichiers et créer une base vectorielle depuis le tableau de bord ou effectuer ces opérations via l’API. Suivez le guide des bases vectorielles pour configurer une base et y importer un fichier.

Notez l’identifiant unique de la base vectorielle. Vous en aurez besoin dans l’exemple qui suit.

Configuration de la base vectorielle

Création d’un serveur MCP

Créez maintenant un serveur MCP distant capable d’effectuer des recherches dans la base vectorielle et de renvoyer le contenu d’un document à partir de son identifiant.

Dans cet exemple, nous utiliserons Python et FastMCP pour créer le serveur MCP. Vous trouverez à la fin de cette section l’implémentation complète du serveur et les instructions pour l’exécuter dans un environnement de développement accessible depuis un navigateur.

D’autres frameworks permettent de créer des serveurs MCP dans différents langages de programmation. Quel que soit le framework choisi, les définitions des outils de votre serveur doivent respecter la structure décrite ici.

Pour fonctionner avec la recherche approfondie et les connaissances de l’entreprise dans ChatGPT, votre serveur MCP doit implémenter deux outils en lecture seule, search et fetch, en suivant le schéma décrit dans la section Compatibilité avec les connaissances de l’entreprise. Cette interface convient également aux workflows de recherche via l’API.

Déclarez un schéma de sortie pour chaque outil afin que les clients puissent valider la structure du résultat. Avec FastMCP, les modèles de retour typés peuvent générer ce schéma automatiquement. L’exemple ci-dessous utilise ces mêmes modèles pour fournir explicitement output_schema.

L’outil search reçoit la requête d’un utilisateur et renvoie la liste des résultats pertinents trouvés dans la source de données de votre serveur MCP.

Arguments :

Une seule chaîne de caractères contenant la requête.

Valeur de retour :

Un objet contenant une seule clé, results, dont la valeur est un tableau d’objets. Chaque objet du tableau représente un résultat et doit contenir les champs suivants :

  • id – identifiant unique du document ou de l’élément trouvé.
  • title – titre lisible par l’utilisateur.
  • url – URL canonique à utiliser pour citer le résultat.

Pour assurer la compatibilité avec les clients MCP, renvoyez cet objet dans structuredContent et incluez la même valeur sous forme de chaîne encodée en JSON dans le tableau de contenu.

La réponse finale de l’outil doit prendre la forme suivante :

{
  "structuredContent": {
    "results": [{ "id": "doc-1", "title": "...", "url": "..." }]
  },
  "content": [
    {
      "type": "text",
      "text": "{\"results\":[{\"id\":\"doc-1\",\"title\":\"...\",\"url\":\"...\"}]}"
    }
  ]
}

Outil fetch

L’outil fetch récupère le contenu intégral d’un document ou d’un élément trouvé lors d’une recherche.

Arguments :

Une chaîne de caractères contenant l’identifiant unique du document trouvé.

Valeur de retour :

Un seul objet doté des propriétés suivantes :

  • id – identifiant unique du document ou de l’élément trouvé.
  • title – chaîne de caractères contenant le titre de l’élément trouvé.
  • text – texte intégral du document ou de l’élément.
  • url – URL du document ou de l’élément trouvé. Elle permet de citer des ressources précises lors d’une recherche.
  • metadata – données facultatives sur le résultat, sous forme de paires clé-valeur.

Pour assurer la compatibilité avec les clients MCP, renvoyez cet objet dans structuredContent et incluez la même valeur sous forme de chaîne encodée en JSON dans le tableau de contenu.

La réponse finale de l’outil doit prendre la forme suivante :

{
  "structuredContent": {
    "id": "doc-1",
    "title": "...",
    "text": "full text...",
    "url": "https://example.com/doc",
    "metadata": { "source": "vector_store" }
  },
  "content": [
    {
      "type": "text",
      "text": "{\"id\":\"doc-1\",\"title\":\"...\",\"text\":\"full text...\",\"url\":\"https://example.com/doc\",\"metadata\":{\"source\":\"vector_store\"}}"
    }
  ]
}

Gestion des citations

Pour les résultats de search comme pour les réponses de fetch, ChatGPT crée des métadonnées de citation uniquement si url est une chaîne de caractères non vide. Si un résultat contient un title mais aucune url exploitable, ChatGPT le conserve comme résultat ordinaire de l’outil sans créer de citation vide. Pour permettre la citation d’un résultat, renvoyez son url canonique.

Par exemple, ChatGPT peut appeler search avec la requête suivante :

{ "query": "What is the quarterly plan?" }

Le serveur MCP peut renvoyer un résultat accompagné d’une URL :

{
  "structuredContent": {
    "results": [
      {
        "id": "quarterly-plan",
        "title": "Quarterly plan",
        "url": "https://example.com/quarterly-plan"
      }
    ]
  },
  "content": [
    {
      "type": "text",
      "text": "{\"results\":[{\"id\":\"quarterly-plan\",\"title\":\"Quarterly plan\",\"url\":\"https://example.com/quarterly-plan\"}]}"
    }
  ]
}

Dans cette réponse, le champ url contient une URL, ce qui permet à ChatGPT de créer des métadonnées de citation pour le résultat. La requête à elle seule ne déclenche pas ce traitement. Si le champ url est absent, vide ou contient autre chose qu’une chaîne de caractères, ChatGPT conserve le résultat comme sortie ordinaire de l’outil.

Exemple de serveur

Vous pouvez essayer cet exemple de serveur MCP dans un environnement de développement accessible depuis un navigateur. Configurez-le avec vos propres identifiants d’API et les informations de votre base vectorielle.

Exemple de serveur MCP sur Replit

Créez votre copie de l’exemple de serveur sur Replit pour le tester en ligne.

Vous trouverez également ci-dessous l’implémentation complète des outils search et fetch avec FastMCP.

Test et connexion de votre serveur MCP

Vous pouvez tester votre serveur MCP avec gpt-6.1-sol dans le tableau de bord des prompts. Créez un prompt ou modifiez un prompt existant, puis ajoutez un outil MCP à sa configuration. Cet exemple de compatibilité expose uniquement les outils en lecture seule search et fetch. La requête API de l’exemple ne demande donc pas d’approbation pour ces outils. Gardez l’approbation activée pour les outils susceptibles de modifier des données ou d’effectuer d’autres actions aux conséquences importantes.

Si vous testez ce serveur dans le cadre d’un plugin, suivez le guide Connexion et test de votre plugin.

Configuration d’un prompt

Une fois votre serveur MCP configuré, vous pouvez discuter avec un modèle qui l’utilise depuis l’interface des prompts.

Discussion dans l’interface des prompts

Vous pouvez aussi tester le serveur MCP directement avec l’API Responses en envoyant une requête comme celle-ci :

curl https://api.openai.com/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
  "model": "gpt-6.1-sol",
  "input": [
    {
      "role": "developer",
      "content": [
        {
          "type": "input_text",
          "text": "You are a research assistant that searches MCP servers to find answers to your questions."
        }
      ]
    },
    {
      "role": "user",
      "content": [
        {
          "type": "input_text",
          "text": "Are cats attached to their homes? Give a succinct one page overview."
        }
      ]
    }
  ],
  "reasoning": {
    "summary": "auto"
  },
  "tools": [
    {
      "type": "mcp",
      "server_label": "cats",
      "server_url": "https://777ff573-9947-4b9c-8982-658fa40c7d09-00-3le96u7wsymx.janeway.replit.dev/sse/",
      "allowed_tools": [
        "search",
        "fetch"
      ],
      "require_approval": "never"
    }
  ]
}'

Gestion de l’authentification

Lorsque vous créez un serveur MCP distant personnalisé, l’autorisation et l’authentification vous aident à protéger vos données. Pour enregistrer les clients, nous recommandons d’utiliser OAuth avec les documents de métadonnées d’identifiant client (CIMD) si votre serveur d’autorisation prend en charge cette méthode et que le créateur du plugin la choisit. ChatGPT prend en charge CIMD avec échange de jetons pour un client public (none) ou avec échange de jetons au moyen d’une assertion client signée (private_key_jwt). L’enregistrement dynamique des clients reste pris en charge lorsqu’il est configuré. Pour connaître les exigences d’authentification des plugins, consultez la section Authentification. Pour plus de détails sur le protocole, consultez le guide d’utilisation de MCP ou la spécification d’autorisation.

Si vous connectez votre serveur MCP distant personnalisé via un plugin, les utilisateurs de votre espace de travail accéderont à votre service en suivant un parcours OAuth.

Connexion dans ChatGPT

  1. Ouvrez la page des plugins de ChatGPT, sélectionnez le bouton plus, puis Ajouter un serveur MCP personnalisé.
  2. Saisissez l’URL du serveur et les informations d’authentification. Lisez l’avertissement sur les risques et sélectionnez Je comprends et souhaite continuer, puis Créer en tant que plugin.
  3. Installez votre plugin et testez-le en envoyant des prompts dans une discussion et en recherche approfondie.

Pour obtenir les instructions de configuration détaillées, consultez le guide Connexion et test de votre plugin.

Risques et sécurité

Les serveurs MCP personnalisés permettent de connecter votre espace de travail ChatGPT à des applications externes. ChatGPT peut ainsi accéder aux données de ces applications, en envoyer et en recevoir. Ces serveurs MCP sont des services tiers soumis à leurs propres conditions d’utilisation. OpenAI ne les développe pas et ne les vérifie pas.

Si vous découvrez un serveur MCP malveillant, signalez-le à security@openai.com.

Risques liés aux attaques par injection de prompt

Lors d’une attaque par injection de prompt, un attaquant insère des instructions malveillantes dans un contenu que l’un de nos modèles est susceptible de consulter, par exemple une page web. Son but est de détourner ChatGPT de son comportement prévu. Si le modèle suit ces instructions, il risque d’effectuer des actions que ni l’utilisateur ni le développeur n’avaient prévues, comme envoyer des données privées à un destinataire externe.

Par exemple, vous pourriez demander à ChatGPT de consulter votre agenda et vos e-mails récents pour trouver un restaurant où dîner en groupe. Au cours de ses recherches, ChatGPT pourrait rencontrer un commentaire malveillant conçu pour tromper l’agent et lui faire exécuter une action imprévue. Ce commentaire pourrait lui demander de récupérer un code de réinitialisation de mot de passe dans Gmail et de l’envoyer à un site malveillant.

Le tableau suivant présente plusieurs scénarios à prendre en compte. Nous vous recommandons de les examiner attentivement avant de décider d’utiliser des serveurs MCP personnalisés.

Scénario et risque Suis-je en sécurité si je fais confiance au développeur du serveur MCP ? Comment réduire le risque ?
Un attaquant peut introduire des instructions malveillantes dans les données accessibles via le serveur MCP pour mener une attaque par injection de prompt.

Exemples :
• Si votre serveur MCP sert à l’assistance client, un attaquant pourrait vous envoyer une demande d’assistance contenant de telles instructions.
Faire confiance au développeur du serveur MCP ne suffit pas à écarter ce risque.

Pour que l’utilisation soit sûre, vous devez pouvoir vous fier à tout le contenu accessible via le serveur MCP.
• N’utilisez pas de serveur MCP s’il peut contenir des données malveillantes ou peu fiables provenant d’utilisateurs, même si vous faites confiance au développeur.
• Configurez les droits d’accès pour limiter autant que possible le nombre de personnes ayant accès au serveur MCP.
Un serveur MCP malveillant peut demander des paramètres excessifs pour une opération de lecture ou d’écriture.

Exemple :
• Un serveur MCP de réservation de vols pour les employés pourrait proposer une opération de lecture des horaires de vol, mais demander des paramètres tels que summaryOfConversation, userAnnualIncome et userHomeAddress.
Faire confiance au développeur du serveur MCP ne garantit pas que l’opération est sûre.

Le développeur peut juger raisonnable de demander certaines données que vous estimez inacceptable de partager.
• Lorsque vous installez des serveurs MCP manuellement, examinez les paramètres demandés pour chaque opération et vérifiez qu’ils respectent votre vie privée.
Un attaquant peut utiliser une attaque par injection de prompt pour amener ChatGPT à récupérer des données sensibles sur un serveur MCP personnalisé, puis à les transmettre à l’attaquant.

Exemple :
• Un attaquant pourrait cibler un utilisateur de l’entreprise via un autre serveur MCP (par exemple, celui de la messagerie). L’attaque vise à amener ChatGPT à lire des données sensibles dans un outil interne et à les transmettre à l’attaquant.
Faire confiance au développeur du serveur MCP ne suffit pas à écarter ce risque.

Même si tout le contenu du nouveau serveur MCP est sûr et fiable, une attaque provenant d’une autre source malveillante pourrait entraîner le vol de ces données.
• ChatGPT est conçu pour protéger les utilisateurs, mais des attaquants peuvent tenter de voler vos données. Tenez compte de ce risque et déterminez si vous jugez acceptable de le prendre.
• Limitez autant que possible le nombre de personnes ayant accès aux serveurs MCP qui contiennent des données particulièrement sensibles.
Un attaquant peut utiliser une attaque par injection de prompt pour divulguer des informations sensibles au moyen d’une opération d’écriture sur un serveur MCP personnalisé.

Exemple :
• Un attaquant passe par un autre serveur MCP pour mener une attaque par injection de prompt. Il amène ChatGPT à récupérer des données sensibles, puis à les lui envoyer via le serveur MCP d’un système d’assistance client.
Faire confiance au développeur du serveur MCP ne suffit pas à écarter ce risque.

Même si vous faites entièrement confiance au serveur MCP, un attaquant pourrait tenter d’exploiter les effets d’une opération d’écriture dès lors qu’il peut les observer.
• Lorsqu’une opération d’écriture se présente, les utilisateurs doivent l’examiner attentivement pour vérifier qu’elle correspond à leur intention et ne contient aucune donnée qui ne devrait pas être partagée.
Un attaquant peut utiliser une attaque par injection de prompt pour divulguer des informations sensibles au moyen d’une opération de lecture sur un serveur MCP personnalisé malveillant, car ce serveur peut consigner les opérations de lecture dans ses journaux. Cette attaque ne fonctionne que si le serveur MCP est malveillant ou s’il indique à tort que des opérations d’écriture sont des opérations de lecture.

Si vous faites confiance au développeur pour réserver la mention lecture aux véritables opérations de lecture et si vous estimez qu’il ne tentera pas de voler vos données, le risque est probablement minime.
• Utilisez uniquement les serveurs MCP de développeurs de confiance, tout en gardant à l’esprit que cela ne suffit pas à garantir votre sécurité.
Un attaquant peut utiliser une attaque par injection de prompt pour amener ChatGPT à effectuer, via un serveur MCP personnalisé, une opération d’écriture nuisible ou destructrice que les utilisateurs n’avaient pas prévue. Faire confiance au développeur du serveur MCP ne suffit pas à écarter ce risque.

Même si tout le contenu du nouveau serveur MCP est sûr et fiable, le risque subsiste puisque l’attaque provient d’une autre source malveillante.
• Les utilisateurs doivent examiner attentivement les opérations d’écriture pour vérifier qu’elles sont correctes et correspondent à leur intention.
• ChatGPT est conçu pour protéger les utilisateurs, mais des attaquants peuvent tenter de lui faire effectuer des opérations d’écriture imprévues.
• Limitez autant que possible le nombre de personnes ayant accès aux serveurs MCP qui contiennent des données particulièrement sensibles.

Risques sans lien avec les attaques par injection de prompt

Les serveurs MCP personnalisés présentent d’autres risques, indépendants des attaques par injection de prompt :

  • Les opérations d’écriture peuvent rendre les serveurs MCP plus utiles et accroître les risques associés, car le serveur peut alors effectuer des opérations potentiellement destructrices en plus de fournir des informations à ChatGPT. Actuellement, dans toute conversation, ChatGPT exige une confirmation manuelle avant d’effectuer une opération d’écriture. La demande de confirmation signale les données potentiellement sensibles. N’utilisez ces opérations que si vous avez soigneusement évalué et accepté le risque que ChatGPT commette une erreur en les exécutant. Une opération d’écriture peut avoir lieu même si le serveur MCP l’a marquée comme étant en lecture seule. Il est donc d’autant plus important de vous assurer que vous pouvez faire confiance au serveur MCP personnalisé avant de le déployer dans ChatGPT.
  • Tout serveur MCP peut recevoir des données sensibles dans les requêtes qui lui sont adressées. Même un serveur sans intention malveillante a accès à toutes les données que ChatGPT lui fournit lors de l’interaction, y compris, potentiellement, à des données sensibles que l’utilisateur a communiquées à ChatGPT auparavant. Ces données peuvent par exemple figurer dans les requêtes que ChatGPT envoie au serveur MCP lors d’une recherche approfondie ou lorsqu’il utilise les outils d’une application dans une discussion.

Connexion à des serveurs de confiance

Nous vous recommandons de vous connecter à un serveur MCP personnalisé uniquement si vous connaissez l’application sous-jacente et lui faites confiance.

Choisissez par exemple des serveurs officiels hébergés par les fournisseurs de services eux-mêmes. Pour Stripe, connectez-vous au serveur hébergé par Stripe à l’adresse mcp.stripe.com plutôt qu’à un serveur MCP Stripe non officiel hébergé par un tiers. Comme il existe encore peu de serveurs MCP officiels, vous pouvez envisager d’utiliser un serveur hébergé par une organisation qui relaie les requêtes vers un autre service via une API. Avant de vous connecter, examinez la manière dont cette organisation utilise vos données et vérifiez que vous pouvez faire confiance au serveur. Si vous créez votre propre serveur MCP, vérifiez au moment de la connexion qu’il s’agit bien du bon serveur. Lorsqu’OpenAI appelle votre serveur MCP, prêtez attention aux données que vous fournissez en réponse aux requêtes et à la façon dont vous traitez celles que vous recevez.

Votre serveur MCP distant permet à d’autres personnes de connecter OpenAI à vos services. OpenAI peut alors accéder aux données de ces services, en envoyer et en recevoir, ainsi qu’y effectuer des actions. Évitez d’inclure des informations sensibles dans le JSON de vos outils et de stocker des informations sensibles provenant des utilisateurs de ChatGPT qui accèdent à votre serveur MCP distant.

Lorsque vous créez un serveur MCP, veillez à ce que les définitions de vos outils ne contiennent aucun élément malveillant.