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

Serveurs MCP

Connectez les modèles à des serveurs MCP distants et à des serveurs locaux via le Tunnel MCP sécurisé.

En plus des outils que vous mettez à la disposition du modèle avec l’appel de fonction, vous pouvez lui donner de nouvelles capacités grâce aux serveurs MCP distants ou au Tunnel MCP sécurisé. Ces outils permettent au modèle de se connecter à des services externes et de les contrôler lorsque cela est nécessaire pour répondre au prompt d’un utilisateur. Vous pouvez autoriser automatiquement ces appels d’outils ou les soumettre à votre approbation explicite en tant que développeur.

  • Les serveurs MCP distants peuvent être n’importe quels serveurs accessibles sur l’Internet public qui implémentent un serveur distant conforme au Model Context Protocol (MCP).

  • Le Tunnel MCP sécurisé permet de connecter un serveur MCP local ou privé sans l’exposer à l’Internet public.

Ce guide explique comment utiliser les outils MCP avec l’API Responses. Les connecteurs intégrés restent pris en charge pour les modèles existants ; consultez la section Anciens connecteurs pour connaître la politique de dépréciation et voir des exemples de compatibilité. Pour les sessions de l’API Agents, consultez la section Connexions MCP, qui traite des connexions depuis le service géré ou depuis votre bac à sable.

Tunnel MCP sécurisé

Si votre serveur MCP est privé, hébergé sur site ou derrière un pare-feu, utilisez le tunnel MCP sécurisé pour le connecter aux produits OpenAI compatibles sans l’exposer à l’Internet public. Téléchargez la dernière version publique depuis openai/tunnel-client.

Démarrage rapide

Utilisez le type d’outil mcp dans l’API Responses. Définissez server_url pour un serveur MCP distant, ou utilisez tunnel_id pour un serveur MCP local via le Tunnel MCP sécurisé. Selon le serveur, vous devrez peut-être aussi fournir un token d’accès OAuth dans le paramètre authorization.

Utilisation d’un serveur MCP distant dans l’API Responses
curl https://api.openai.com/v1/responses \ 
-H "Content-Type: application/json" \ 
-H "Authorization: Bearer $OPENAI_API_KEY" \ 
-d '{
  "model": "gpt-6-astra",
    "tools": [
      {
        "type": "mcp",
        "server_label": "dmcp",
        "server_description": "A Dungeons and Dragons MCP server to assist with dice rolling.",
        "server_url": "https://dmcp-server.deno.dev/mcp",
        "require_approval": "never"
      }
    ],
    "input": "Roll 2d4+1"
  }'

Il est essentiel que les développeurs n’utilisent avec l’API Responses que des serveurs MCP distants auxquels ils font confiance. Un serveur malveillant peut exfiltrer des données sensibles à partir de tout ce qui entre dans le contexte du modèle. Lisez attentivement la section Risques et sécurité ci-dessous avant d’utiliser cet outil.

L’API renvoie de nouveaux éléments dans le tableau output de la réponse du modèle. Si le modèle décide d’utiliser un serveur MCP, il envoie d’abord une requête pour obtenir la liste des outils disponibles sur ce serveur, ce qui crée un élément de sortie mcp_list_tools. Dans l’exemple de serveur MCP distant ci-dessus, cet élément ne contient qu’une seule définition d’outil :

{
  "id": "mcpl_68a6102a4968819c8177b05584dd627b0679e572a900e618",
  "type": "mcp_list_tools",
  "server_label": "dmcp",
  "tools": [
    {
      "annotations": null,
      "description": "Given a string of text describing a dice roll...",
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "diceRollExpression": {
            "type": "string"
          }
        },
        "required": ["diceRollExpression"],
        "additionalProperties": false
      },
      "name": "roll"
    }
  ]
}

Si le modèle décide d’appeler l’un des outils disponibles sur le serveur MCP, vous trouverez également un élément de sortie mcp_call indiquant ce que le modèle a envoyé à l’outil MCP et ce que celui-ci a renvoyé en sortie.

{
  "id": "mcp_68a6102d8948819c9b1490d36d5ffa4a0679e572a900e618",
  "type": "mcp_call",
  "approval_request_id": null,
  "arguments": "{\"diceRollExpression\":\"2d4 + 1\"}",
  "error": null,
  "name": "roll",
  "output": "4",
  "server_label": "dmcp"
}

Poursuivez la lecture de ce guide pour en savoir plus sur le fonctionnement de l’outil MCP, le filtrage des outils disponibles et la gestion des demandes d’approbation des appels d’outils.

Fonctionnement

L’outil MCP est disponible dans l’API Responses pour la plupart des modèles récents. Vérifiez ici la compatibilité de votre modèle avec l’outil MCP. Lorsque vous utilisez cet outil, vous ne payez que les tokens utilisés lors de l’importation des définitions d’outils ou des appels d’outils. Aucun frais supplémentaire ne s’applique par appel d’outil.

Nous allons détailler ci-dessous les étapes suivies par l’API lors de l’appel d’un outil MCP.

Étape 1 : Récupération de la liste des outils disponibles

Lorsque vous spécifiez un serveur MCP distant dans le paramètre tools, l’API tente de récupérer la liste des outils du serveur. L’API Responses fonctionne avec les serveurs MCP distants qui prennent en charge le protocole de transport Streamable HTTP ou HTTP/SSE.

Si la liste des outils est récupérée avec succès, un nouvel élément de sortie mcp_list_tools apparaît dans la réponse du modèle. La propriété tools de cet objet indique les outils importés avec succès.

{
  "id": "mcpl_68a6102a4968819c8177b05584dd627b0679e572a900e618",
  "type": "mcp_list_tools",
  "server_label": "dmcp",
  "tools": [
    {
      "annotations": null,
      "description": "Given a string of text describing a dice roll...",
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "diceRollExpression": {
            "type": "string"
          }
        },
        "required": ["diceRollExpression"],
        "additionalProperties": false
      },
      "name": "roll"
    }
  ]
}

Tant que l’élément mcp_list_tools est présent dans le contexte d’une requête API, l’API ne récupère pas à nouveau la liste des outils du serveur MCP à chaque tour d’une conversation. Nous vous recommandons de conserver cet élément dans le contexte du modèle lors de chaque conversation ou exécution de workflow afin de réduire la latence.

Filtrage des outils

Certains serveurs MCP peuvent proposer des dizaines d’outils. En exposer un grand nombre au modèle peut entraîner des coûts et une latence élevés. Si seuls certains des outils exposés par un serveur MCP vous intéressent, vous pouvez utiliser le paramètre allowed_tools pour n’importer que ceux-ci.

Limitez les outils autorisés
curl https://api.openai.com/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
    "model": "gpt-6-astra",
    "tools": [
      {
        "type": "mcp",
        "server_label": "dmcp",
        "server_description": "A Dungeons and Dragons MCP server to assist with dice rolling.",
        "server_url": "https://dmcp-server.deno.dev/mcp",
        "require_approval": "never",
        "allowed_tools": ["roll"]
      }
    ],
    "input": "Roll 2d4+1"
  }'

Étape 2 : Appel des outils

Une fois que le modèle a accès à ces définitions d’outils, il peut choisir de les appeler en fonction de son contexte. Lorsque le modèle décide d’appeler un outil MCP, l’API envoie une requête au serveur MCP distant pour appeler l’outil et intégrer sa sortie au contexte du modèle. Cela crée un élément mcp_call qui se présente ainsi :

{
  "id": "mcp_68a6102d8948819c9b1490d36d5ffa4a0679e572a900e618",
  "type": "mcp_call",
  "approval_request_id": null,
  "arguments": "{\"diceRollExpression\":\"2d4 + 1\"}",
  "error": null,
  "name": "roll",
  "output": "4",
  "server_label": "dmcp"
}

Cet élément contient à la fois les arguments que le modèle a choisi d’utiliser pour cet appel d’outil et la valeur output renvoyée par le serveur MCP distant. Tous les modèles peuvent choisir d’effectuer plusieurs appels d’outils MCP. Plusieurs de ces éléments peuvent donc être générés au cours d’une seule requête API.

En cas d’échec d’un appel d’outil, le champ error de cet élément contient des erreurs de protocole MCP, des erreurs d’exécution d’outils MCP ou des erreurs générales de connectivité. Les erreurs MCP sont documentées ici dans la spécification MCP.

Approbations

Par défaut, OpenAI demande votre approbation avant de partager des données avec un connecteur ou un serveur MCP distant. Les approbations vous permettent de garder le contrôle et la visibilité sur les données envoyées à un serveur MCP. Nous vous recommandons vivement d’examiner attentivement toutes les données partagées avec un serveur MCP distant et, si vous le souhaitez, de les consigner dans des journaux. Une demande d’approbation pour un appel d’outil MCP crée dans la sortie de l’objet Response un élément mcp_approval_request qui se présente ainsi :

{
  "id": "mcpr_68a619e1d82c8190b50c1ccba7ad18ef0d2d23a86136d339",
  "type": "mcp_approval_request",
  "arguments": "{\"diceRollExpression\":\"2d4 + 1\"}",
  "name": "roll",
  "server_label": "dmcp"
}

Vous pouvez ensuite répondre à cette demande en créant un nouvel objet Response et en y ajoutant un élément mcp_approval_response.

Approbation de l’utilisation d’outils dans une requête API
curl https://api.openai.com/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
    "model": "gpt-6-astra",
    "tools": [
      {
        "type": "mcp",
        "server_label": "dmcp",
        "server_description": "A Dungeons and Dragons MCP server to assist with dice rolling.",
        "server_url": "https://dmcp-server.deno.dev/mcp",
        "require_approval": "always",
      }
    ],
    "previous_response_id": "resp_682d498bdefc81918b4a6aa477bfafd904ad1e533afccbfa",
    "input": [{
      "type": "mcp_approval_response",
      "approve": true,
      "approval_request_id": "mcpr_682d498e3bd4819196a0ce1664f8e77b04ad1e533afccbfa"
    }]
  }'

Ici, nous utilisons le paramètre previous_response_id pour relier cette nouvelle réponse à la réponse précédente, qui a généré la demande d’approbation. Vous pouvez aussi transmettre les sorties d’une réponse comme entrées d’une autre afin de contrôler au mieux ce qui entre dans le contexte du modèle.

Si vous estimez pouvoir faire confiance à un serveur MCP distant, vous pouvez choisir de vous passer des approbations afin de réduire la latence. Pour cela, définissez le paramètre require_approval de l’outil MCP sur un objet qui répertorie uniquement les outils pour lesquels vous souhaitez supprimer les approbations, comme dans l’exemple ci-dessous. Vous pouvez également lui attribuer la valeur 'never' pour supprimer les approbations pour tous les outils de ce serveur MCP distant.

N’exigez jamais d’approbation pour certains outils
curl https://api.openai.com/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
    "model": "gpt-6-astra",
    "tools": [
      {
        "type": "mcp",
        "server_label": "deepwiki",
        "server_url": "https://mcp.deepwiki.com/mcp",
        "require_approval": {
          "never": {
            "tool_names": ["ask_question", "read_wiki_structure"]
          }
        }
      }
    ],
    "input": "What transport protocols does the 2025-03-26 version of the MCP spec (modelcontextprotocol/modelcontextprotocol) support?"
  }'

Authentification

Contrairement au serveur MCP utilisé dans l’exemple ci-dessus, la plupart des autres serveurs MCP nécessitent une authentification. La méthode la plus courante repose sur un token d’accès OAuth. Fournissez ce token dans le champ authorization de l’outil MCP :

Utilisez l’outil MCP de Stripe
curl https://api.openai.com/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
    "model": "gpt-6-astra",
    "input": "Create a payment link for $20",
    "tools": [
      {
        "type": "mcp",
        "server_label": "stripe",
        "server_url": "https://mcp.stripe.com",
        "authorization": "$STRIPE_OAUTH_ACCESS_TOKEN"
      }
    ]
  }'

Pour éviter toute fuite de tokens sensibles, l’API Responses ne stocke pas la valeur que vous fournissez dans le champ authorization. Cette valeur n’est pas non plus visible dans l’objet Response créé. Vous devez donc envoyer la valeur authorization dans chaque requête de création que vous adressez à l’API Responses.

Anciens connecteurs

Le paramètre connector_id est déprécié pour les modèles publiés après le 1er septembre 2026. Utilisez server_url pour vous connecter à un serveur MCP distant, ou tunnel_id pour vous connecter à un serveur MCP local via le Tunnel MCP sécurisé. Les modèles existants continuent de prendre en charge les connecteurs. Les exemples de cette section utilisent gpt-5.2, qui a été publié avant cette date limite.

L’API Responses prend en charge de manière native un ensemble limité de connecteurs à des services tiers. Ces connecteurs vous permettent de récupérer du contexte depuis des applications populaires, comme Dropbox et Gmail, afin que le modèle puisse interagir avec des services populaires.

Les connecteurs s’utilisent de la même manière que les serveurs MCP distants. Tous deux permettent à un modèle OpenAI d’accéder à des outils tiers supplémentaires dans une requête API. Toutefois, au lieu de transmettre un paramètre server_url comme pour appeler un serveur MCP distant, vous transmettez un paramètre connector_id qui identifie de façon unique un connecteur disponible dans l’API.

Les connecteurs nécessitent un token d’accès OAuth fourni par votre application dans le paramètre authorization.

Utilisez un ancien connecteur avec GPT-5.2
curl https://api.openai.com/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
    "model": "gpt-5.2",
    "tools": [
      {
        "type": "mcp",
        "server_label": "Dropbox",
        "connector_id": "connector_dropbox",
        "authorization": "<oauth access token>",
        "require_approval": "never"
      }
    ],
    "input": "Summarize the Q2 earnings report."
  }'

Connecteurs disponibles

  • Dropbox : connector_dropbox
  • Gmail : connector_gmail
  • Google Calendar : connector_googlecalendar
  • Google Drive : connector_googledrive
  • Microsoft Teams : connector_microsoftteams
  • Outlook Calendar : connector_outlookcalendar
  • Outlook Email : connector_outlookemail
  • SharePoint : connector_sharepoint

Nous avons privilégié les services qui ne disposent pas de serveurs MCP distants officiels. GitHub, par exemple, dispose d’un serveur MCP officiel auquel vous pouvez vous connecter en passant https://api.githubcopilot.com/mcp/ dans le champ server_url de l’outil MCP.

Autorisation d’un connecteur

Dans le champ authorization, passez un jeton d’accès OAuth. Votre application doit gérer séparément l’enregistrement du client OAuth et l’autorisation.

Pour vos tests, vous pouvez utiliser OAuth 2.0 Playground de Google afin de générer des jetons d’accès temporaires utilisables dans une requête API.

Pour tester les fonctionnalités des connecteurs dans l’API à l’aide du Playground, commencez par saisir :

https://www.googleapis.com/auth/calendar.events

Cette portée d’autorisation permettra à l’API de lire les événements de Google Calendar. Saisissez-la dans l’interface, sous « Étape 1 : Sélectionnez et autorisez les API ».

Après avoir autorisé l’application à accéder à votre compte Google, vous arriverez à l’ Étape 2 : Échangez le code d’autorisation contre des tokens. Cette étape générera un token d’accès que vous pourrez utiliser dans une requête API avec le connecteur Google Calendar :

Utilisez le connecteur Google Calendar
curl https://api.openai.com/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-5.2",
    "tools": [
      {
        "type": "mcp",
        "server_label": "google_calendar",
        "connector_id": "connector_googlecalendar",
        "authorization": "ya29.A0AS3H6...",
        "require_approval": "never"
      }
    ],
    "input": "What is on my Google Calendar for today?"
  }'

Un appel d’outil MCP provenant d’un connecteur se présente comme un appel d’outil MCP provenant d’un serveur MCP distant : il utilise le type d’élément de sortie mcp_call. Dans ce cas, les arguments transmis au connecteur et sa réponse sont des chaînes JSON :

{
  "id": "mcp_68a62ae1c93c81a2b98c29340aa3ed8800e9b63986850588",
  "type": "mcp_call",
  "approval_request_id": null,
  "arguments": "{\"time_min\":\"2025-08-20T00:00:00\",\"time_max\":\"2025-08-21T00:00:00\",\"timezone_str\":null,\"max_results\":50,\"query\":null,\"calendar_id\":null,\"next_page_token\":null}",
  "error": null,
  "name": "search_events",
  "output": "{\"events\": [{\"id\": \"2n8ni54ani58pc3ii6soelupcs_20250820\", \"summary\": \"Home\", \"location\": null, \"start\": \"2025-08-20T00:00:00\", \"end\": \"2025-08-21T00:00:00\", \"url\": \"https://www.google.com/calendar/event?eid=Mm44bmk1NGFuaTU4cGMzaWk2c29lbHVwY3NfMjAyNTA4MjAga3doaW5uZXJ5QG9wZW5haS5jb20&ctz=America/Los_Angeles\", \"description\": \"\\n\\n\", \"transparency\": \"transparent\", \"display_url\": \"https://www.google.com/calendar/event?eid=Mm44bmk1NGFuaTU4cGMzaWk2c29lbHVwY3NfMjAyNTA4MjAga3doaW5uZXJ5QG9wZW5haS5jb20&ctz=America/Los_Angeles\", \"display_title\": \"Home\"}], \"next_page_token\": null}",
  "server_label": "Google_Calendar"
}

Outils disponibles dans chaque connecteur

Les outils disponibles dépendent des portées accordées à votre jeton OAuth. Développez les tableaux ci-dessous pour découvrir les outils que vous pouvez utiliser lorsque vous vous connectez à chaque application.

Différez le chargement des outils d’un serveur MCP

Si vous utilisez la recherche d’outils, vous pouvez différer le chargement des fonctions exposées par un serveur MCP jusqu’à ce que le modèle décide qu’il en a besoin. Pour cela, définissez defer_loading: true dans la définition de l’outil du serveur MCP.

Lorsque vous différez le chargement d’un serveur MCP, le modèle peut toujours utiliser le libellé et la description du serveur pour décider quand y effectuer une recherche, mais les définitions des différentes fonctions ne sont chargées qu’en cas de besoin. Cela peut contribuer à réduire la consommation globale de tokens et s’avère particulièrement utile pour les serveurs MCP qui exposent un grand nombre de fonctions.

{
    "type": "mcp",
    "server_label": "dmcp",
    "server_description": "A Dungeons and Dragons MCP server to assist with dice rolling.",
    "server_url": "https://dmcp-server.deno.dev/mcp",
    "defer_loading": true,
    "require_approval": "never"
}

Risques et sécurité

L’outil MCP vous permet de connecter les modèles OpenAI à des services externes. Cette fonctionnalité puissante comporte certains risques.

Avec les connecteurs, vous risquez d’envoyer des données sensibles à OpenAI ou d’accorder aux modèles un accès en lecture à des données potentiellement sensibles dans ces services.

Les serveurs MCP distants présentent les mêmes risques et n’ont pas été vérifiés par OpenAI. Ils peuvent permettre aux modèles d’accéder à des données, d’en envoyer et d’en recevoir, ainsi que d’effectuer des actions dans ces services. Tous les serveurs MCP sont des services tiers soumis à leurs propres conditions générales.

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

Voici quelques bonnes pratiques à prendre en compte lors de l’intégration de connecteurs et de serveurs MCP distants.

Attaque par injection de prompt

L’attaque par injection de prompt est un risque de sécurité important à prendre en compte dans toute application utilisant un LLM, en particulier lorsque vous donnez au modèle accès à des serveurs MCP et à des connecteurs capables d’accéder à des données sensibles ou d’effectuer des actions. Si le prompt destiné au modèle contient du contenu fourni par l’utilisateur, utilisez ces outils avec la prudence et les mesures de protection nécessaires.

Exigez toujours une approbation pour les actions sensibles

Utilisez les configurations disponibles pour les paramètres require_approval et allowed_tools afin de garantir que toute action sensible passe par un processus d’approbation.

URL dans les appels d’outils MCP et leurs résultats

Il peut être dangereux d’envoyer des requêtes aux URL ou d’intégrer les URL d’images fournies dans les résultats d’appels d’outils, qu’ils proviennent de connecteurs ou de serveurs MCP distants. Assurez-vous de faire confiance aux domaines et aux services qui fournissent ces URL avant de les intégrer ou de les utiliser d’une autre manière dans le code de votre application.

Connexion à des serveurs de confiance

Choisissez des serveurs officiels hébergés par les fournisseurs de services eux-mêmes. Par exemple, nous recommandons de vous connecter au serveur Stripe hébergé par Stripe à l’adresse mcp.stripe.com, plutôt qu’à un serveur MCP Stripe hébergé par un tiers. Comme les serveurs MCP distants officiels sont encore peu nombreux, vous pourriez être tenté d’utiliser un serveur MCP hébergé par une organisation qui n’exploite pas ce serveur et qui relaie les requêtes vers ce service via votre API. Si vous devez le faire, vérifiez avec une vigilance accrue la fiabilité de ces « agrégateurs » et examinez attentivement la manière dont ils utilisent vos données.

Journalisez et examinez les données partagées avec les serveurs MCP tiers.

Les serveurs MCP définissent eux-mêmes leurs outils et peuvent donc demander des données que vous ne souhaitez pas nécessairement partager avec leur hébergeur. C’est pourquoi l’outil MCP de l’API Responses exige par défaut une approbation pour chaque appel d’outil MCP. Lors du développement de votre application, examinez attentivement et rigoureusement les types de données partagées avec ces serveurs MCP. Une fois que vous estimez pouvoir faire confiance au serveur MCP, vous pouvez vous passer de ces approbations pour réduire la latence d’exécution.

Nous recommandons également de journaliser toutes les données envoyées aux serveurs MCP. Si vous utilisez l’API Responses avec store=true, ces données sont déjà journalisées via l’API pendant 30 jours, sauf si la politique de non-conservation des données est activée pour votre organisation. Vous pouvez aussi journaliser ces données dans vos propres systèmes et les examiner régulièrement pour vérifier que leur partage correspond à vos attentes.

Les serveurs MCP malveillants peuvent inclure des instructions cachées (attaques par injection de prompt) conçues pour provoquer des comportements inattendus chez les modèles OpenAI. Bien qu’OpenAI ait intégré des protections pour aider à détecter et à bloquer ces menaces, il est essentiel d’examiner attentivement les entrées et les sorties, et de veiller à établir des connexions uniquement avec des serveurs de confiance.

Les serveurs MCP peuvent modifier le comportement des outils de manière inattendue, ce qui peut entraîner des comportements indésirables ou malveillants.

Conséquences pour la politique de non-conservation des données et la résidence des données

L’outil MCP est compatible avec la politique de non-conservation des données et la résidence des données. Toutefois, les serveurs MCP sont des services tiers : les données qui leur sont envoyées sont soumises à leurs propres politiques de conservation et de résidence des données.

Autrement dit, si votre organisation bénéficie de la résidence des données en Europe, OpenAI limite l’inférence et le stockage du Contenu client à l’Europe, jusqu’au moment où des communications ou des données sont envoyées au serveur MCP. Il vous incombe de vérifier que le serveur MCP respecte également vos éventuelles exigences en matière de non-conservation ou de résidence des données. Pour en savoir plus sur la politique de non-conservation des données et la résidence des données, consultez cette page.

Notes d’utilisation

Disponibilité dans les API Limites de débit Notes

Niveau 1
200 RPM

Niveaux 2 et 3
1000 RPM

Niveaux 4 et 5
2000 RPM

Tarifs
ZDR et résidence des données