View a markdown version of this page

Contrat de protocole MCP - Base rocheuse de l'Amazonie AgentCore

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Contrat de protocole MCP

Comprenez les exigences relatives à la mise en œuvre du protocole MCP (Model Context Protocol) afin que les agents puissent appeler des outils et des serveurs d'agents.

Pour un exemple de code, voir Déployer des serveurs MCP dans AgentCore Runtime.

Exigences de mise en œuvre du protocole

Votre serveur MCP doit implémenter ces exigences de protocole spécifiques :

  • Transport  : Streamable-http le transport est obligatoire. Par défaut, utilisez le mode stateless (stateless_http=True) pour des raisons de compatibilité avec AWS la gestion des sessions et l'équilibrage de charge.

  • Gestion des sessions  : la plateforme ajoute automatiquement un Mcp-Session-Id en-tête pour isoler les sessions. En mode sans état, les serveurs doivent prendre en charge le fonctionnement sans état afin de ne pas rejeter l'en-tête généré par Mcp-Session-Id la plate-forme.

Astuce

Amazon Bedrock prend AgentCore également en charge les serveurs MCP dynamiques (stateless_http=False) qui activent des fonctionnalités telles que l'élicitation (interactions multi-tours entre les utilisateurs) et l'échantillonnage (contenu). LLM-generated Pour les versions du protocole MCP 2025-11-25 et les versions antérieures, le mode statique est requis pour l'élicitation et l'échantillonnage, car le serveur transmet ces demandes via une session ouverte. Pour les versions 2026-07-28 et les versions ultérieures, l'élicitation et l'échantillonnage utilisent le modèle MRTR (Multi Aller-Trip Requests), qui ne nécessite pas de mode dynamique. Pour plus d'informations sur le MRTR, consultez la section Demandes aller-retour multiples dans la documentation du Model Context Protocol.

Le mode Stateful transmet l'état au sein d'une session MCP sur plusieurs requêtes. Un serveur MCP sans état conserve l'état dans un magasin de sauvegarde géré par votre application, tel qu'une base de données. Il utilise des descripteurs d'état explicites pour référencer cet état. Le serveur renvoie un identifiant d'état dans le résultat d'un outil, et le client le renvoie lors d'appels ultérieurs à l'outil pour accéder au magasin. Pour plus d'informations sur les descripteurs d'état explicites, consultez les descripteurs d'état explicites dans la documentation du Model Context Protocol. Pour plus d'informations sur les serveurs MCP dynamiques, consultez la section Fonctionnalités des serveurs MCP dynamiques.

Gestion des sessions MCP et adhérence des microVM

Le protocole MCP (Model Context Protocol) utilise l'Mcp-Session-Iden-tête pour gérer l'état des sessions et les demandes de routage. Pour la spécification MCP, voir MCP Streamable HTTP Transport.

Stickiness de la microVM  : Amazon Bedrock AgentCore utilise l'Mcp-Session-Iden-tête pour acheminer les demandes vers la même instance de microVM. Les clients doivent saisir les informations Mcp-Session-Id renvoyées dans la réponse et les inclure dans toutes les demandes suivantes afin de garantir l'affinité de session. Sans identifiant de session cohérent, chaque demande peut être acheminée vers une nouvelle microVM, ce qui peut entraîner une latence supplémentaire en raison des démarrages à froid.

MCP apatride () stateless_http=True :

  • La plateforme génère le Mcp-Session-Id et l'inclut dans la demande adressée à votre serveur MCP.

  • Votre serveur MCP doit accepter l'identifiant de session fourni par la plateforme (ne le rejetez pas).

  • La plateforme renvoie la même chose Mcp-Session-Id au client dans la réponse.

  • Le client doit inclure cet ID de session dans toutes les demandes d'affinité microVM ultérieures.

MCP dynamique () stateless_http=False :

  • Le client envoie la demande d'initialisation sans Mcp-Session-Id en-tête.

  • La plateforme revient Mcp-Session-Id dans la réponse.

  • Le client doit l'inclure Mcp-Session-Id dans toutes les demandes suivantes concernant à la fois l'état de la session et l'affinité avec la microVM.

Pour plus de détails sur la gestion dynamique des sessions MCP, consultez la spécification de gestion des sessions MCP.

Note

Dans les deux modes, Amazon Bedrock renvoie AgentCore toujours un Mcp-Session-Id en-tête aux clients. Capturez et réutilisez toujours cet en-tête pour des performances optimales.

Exigences relatives aux conteneurs

Votre serveur MCP doit être déployé en tant qu'application conteneurisée répondant aux spécifications suivantes :

  • Hôte  : 0.0.0.0

  • Port  : 8000 - Port standard pour la communication avec le serveur MCP (différent du protocole HTTP)

  • Plateforme  : conteneur ARM64 - Requis pour des raisons de compatibilité avec l'environnement d' AWS exécution Amazon Bedrock AgentCore

Exigences relatives au chemin

/mcp - POSTE

Objectif

Reçoit les messages MCP RPC et les traite via les fonctionnalités de l'outil de votre agent, transmission complète de la charge utile de l'InvokeAgentRuntimeAPI avec les messages MCP RPC standard

Format de réponse

JSON-RPC request/response format basé, supportant à la fois les types application/json de contenu et text/event-stream en tant que réponse

Cas d’utilisation

Le /mcp point de terminaison répond à plusieurs objectifs principaux :

  • Invocation et gestion des outils

  • Découverte des capacités des agents

  • Accès aux ressources et manipulation

  • Multi-step flux de travail des agents

Gestion des erreurs

Les serveurs MCP renvoient des erreurs sous forme de réponses d'erreur standard JSON-RPC 2.0. La plupart des erreurs sont contenues dans l' JSON-RPC errorobjet avec un code d'état HTTP 200, comme l'exige la spécification MCP. Seules les erreurs d'authentification, d'autorisation et de demande au niveau du protocole utilisent des codes d'état HTTP autres que 200. Le tableau suivant associe chaque exception d'exécution à son code JSON-RPC d'erreur, à son code d'état HTTP et à son message. Certaines exceptions partagent un code JSON-RPC d'erreur mais renvoient des messages différents. Elles sont donc répertoriées sur des lignes distinctes.

JSON-RPC Code d'erreur Exception d'exécution Code d'erreur HTTP Message d’erreur

-32001

UnauthorizedException

401

Erreur d'authentification - Informations d'identification non valides

-32002

AccessDeniedException

403

Erreur d'autorisation : autorisations insuffisantes

-32003

ThrottlingException

200

Limite de débit dépassée - Trop de demandes

-32003

ServiceQuotaExceededException

200

Limite de débit dépassée - Trop de demandes

-32004

ResourceNotFoundException

200

Ressource introuvable - La ressource demandée n'existe pas

-32005

ConflictException

200

Conflit de ressources - La ressource existe déjà

-32005

RetryableConflictException

200

Fonctionnement de la session en cours, veuillez réessayer

-32006

ValidationException

200

Erreur de validation - Données de demande non valides

-32010

RuntimeClientError

200

Erreur d'exécution de l'outil - Veuillez consulter vos CloudWatch journaux pour plus d'informations

-3 2011

McpRequestUnacceptableException

406

Erreur d'acceptation de l'en-tête : le protocole MCP nécessite l'en-tête Accept : application/json, text/event -stream

-32603

Toute autre exception

200

Erreur interne - Erreur du serveur

ConflictExceptionet RetryableConflictException les deux utilisent un code JSON-RPC d'erreur -32005 (HTTP 200) mais se distinguent par leur message. Le service return RetryableConflictException (Session operation in progress, please retry) lorsqu'une deuxième opération cible une session pendant que le service provisionne ou supprime cette session. Comme MCP renvoie HTTP 200 avec l'erreur dans le JSON-RPC corps, l'appelant doit inspecter le corps de la réponse et réessayer avec un court délai exponentiel. Les clients MCP ne réessayent pas automatiquement.

Exemple de réponse d'erreur :

{ "jsonrpc": "2.0", "id": "req-001", "error": { "code": -32005, "message": "Session operation in progress, please retry" } }

Réponses d'authentification OAuth

OAuth-configured les agents suivent les normes d'authentification RFC 6749 (OAuth 2.0). Lorsque l'authentification est manquante, le service renvoie une réponse 401 Unauthorized avec un WWW-Authenticate en-tête (conformément à la RFC 7235), permettant aux clients de découvrir les points de terminaison du serveur d'autorisation via l'API. GetRuntimeProtectedResourceMetadata

401 Accès non autorisé

Renvoyé lorsque l'en-tête Authorization est manquant ou vide.

La réponse inclut un WWW-Authenticate en-tête :

WWW-Authenticate: Bearer resource_metadata="https://bedrock-agentcore.{region}.amazonaws.com/runtimes/{ESCAPED_ARN}/invocations/.well-known/oauth-protected-resource?qualifier={QUALIFIER}"
Note

SigV4-configured les agents renvoient HTTP 403 avec une ACCESS_DENIED erreur et n'incluent pas d'WWW-Authenticateen-têtes.