flexway
FRENParler à un expert

Agents : MCP et A2A

Des agents sous la même décision que vos applications.

Les opérations que vous marquez deviennent des outils MCP, appelés avec la même identité, le même quota et le même audit que REST. Les serveurs MCP existants se branchent derrière la passerelle.

8 livrées sur les 9 présentées · depuis v0.1.0

Ce que vous attendez de ce domaine

  • Contrôler les appels d'outils des agentsLivré · depuis v0.1.0
  • Exposer des API métiers en outils MCPLivré · depuis v0.1.0
  • Limiter les outils de chaque agentLivré · depuis v0.1.0
Toutes les attentes du marché
AgentsAgents
Le tableau de bord des agents : surface MCP servie, clients admis, délégation bornée, outils servis.Capture réelle, données de démonstration · v1.6.3

Ce que ça résout

Problème 1

Un agent appelle tout ce qu'il trouve

Exposer une API à un agent ouvre plus que nécessaire.

Réponse de Flexway : Seules les opérations marquées x-flexway-tool sont offertes, filtrées par les portées du jeton.

Problème 2

Le jeton de l'utilisateur voyage jusqu'à l'amont

Un agent réutilise le jeton qu'il a reçu, partout.

Réponse de Flexway : Un jeton est émis pour la surface MCP et n'est jamais relayé ; un amont qui vérifie les jetons reçoit un jeton échangé pour lui (RFC 8693).

Problème 3

Chaque serveur MCP a sa règle

Des serveurs MCP épars, chacun avec son authentification et sans quota.

Réponse de Flexway : La fédération les place derrière la passerelle : même autorisation, même quota, même audit.

Fonctionnement

Chaque étape est une décision lisible dans la trace et dans la console.

Votre infrastructureflexwayPasserelle API, IA et agentsChaîne de décision unifiée403hors portée : absent de tools/list403 à l'appel01 Découverte02 Jeton03 Outils04 Délégation05 Quota et audit06 AmontAgents IAClients MCPServices RESTServeurs MCPVotre infrastructureflexwayPasserelle API, IA et agentsChaîne de décision unifiée40301 Découvertemétadonnées OAuth (RFC 9728)02 Jetonémis pour la surface MCP03 Outilsopérations marquées, filtrées par portée04 Délégationbornée en durée et en profondeur05 Quota et auditcomme pour REST06 Amontjeton de l'agent jamais relayé ; échangé quand l'amont vérifie les jetonsAgents IAClients MCPServices RESTServeurs MCP

Agents : MCP et A2A - Schéma du domaine : qui appelle, les étapes de décision, ce qui est appelé, et le cas de refus.

  • Agents IA
  • Clients MCP
  1. Découverte
  2. Jeton
  3. Outils
  4. Délégation
  5. Quota et audit
  6. Amont
  • Services REST
  • Serveurs MCP

hors portée : absent de tools/list, 403 à l'appel

Agents IA
Les agents IA : ils appellent des outils MCP et des modèles par Flexway, sous la même identité, le même quota et le même audit qu'une API.
Clients MCP
Les clients MCP (assistants, IDE) : ils découvrent puis appellent les outils exposés par Flexway, après un jeton OAuth 2.1.
Découverte
Le client MCP lit les métadonnées OAuth publiées par Flexway (RFC 9728) pour savoir où obtenir son jeton.
Jeton
Flexway exige un jeton OAuth 2.1 émis pour sa surface MCP, et le vérifie avant tout routage.
Outils
Les opérations marquées du contrat deviennent des outils MCP ; un agent ne voit que ceux de ses portées.
Délégation
Un agent agit au nom d'une personne pour une durée et une profondeur bornées ; le jeton est échangé (RFC 8693), révocable en cascade.
Quota et audit
Un appel d'outil compte dans le même quota et le même audit qu'un appel REST.
Amont
Le jeton de l'agent n'est jamais relayé à l'amont ; il est échangé quand l'amont vérifie les jetons.
Services REST
Vos services REST et gRPC : ils ne reçoivent que les requêtes que Flexway a laissées passer, sous délai et coupe-circuit.
Serveurs MCP
Vos serveurs MCP existants, fédérés derrière Flexway : leurs outils passent sous la même autorisation, le même quota et le même audit.
  • Ligne : un trajet
  • Correspondance : décision partagée
  • Appel de modèle ou d'outil
  • Refus
  • Votre infrastructure
  1. Découvertemétadonnées OAuth (RFC 9728)
  2. Jetonémis pour la surface MCP
  3. Outilsopérations marquées, filtrées par portée
  4. Délégationbornée en durée et en profondeur
  5. Quota et auditcomme pour REST
  6. Amontjeton de l'agent jamais relayé ; échangé quand l'amont vérifie les jetons

En détail

L'essentiel de chaque sujet, avec son statut dans la version publiée ; dépliez une carte pour le texte complet.

Les opérations du contrat, offertes en outils MCP

Livré · v0.1.0

Une opération marquée x-flexway-tool devient un outil MCP, filtré par les portées de l'appelant et appelé sous le même verdict et le même quota qu'en REST.

  • Opt-in par x-flexway-tool
  • tools/list filtré par portées
  • Même verdict et même quota qu'en REST
Voir le détailMasquer le détail - Les opérations du contrat, offertes en outils MCP

Une opération devient un outil d'agent quand le contrat la marque x-flexway-tool : l'exposition est opt-in, et une écriture n'est jamais offerte à un agent sans que quelqu'un l'ait décidé. tools/list est dérivé de l'OpenAPI - nom (operationId ou nom déclaré), description, schéma d'entrée construit depuis les paramètres et le corps déclarés - et filtré par les portées de l'appelant. Un outil qui n'est pas une opération déclarée n'existe pas.

tools/call construit la requête de l'opération et la fait passer, en mémoire, par la même décision qu'un appel REST : portées, quota de l'appelant, validation, politiques, budgets, métriques. Une opération est donc appelable en REST et via MCP avec le même verdict et le même seau de quota. Un argument non déclaré est refusé ; le résultat est rendu en texte, en structuredContent pour un objet JSON, avec isError pour un statut supérieur ou égal à 400, et borné à 1 Mio.

Le transport est Streamable HTTP sans session : une session vivrait sur une réplique et mourrait au rechargement. Le transport stdio ne traverse pas de réseau, il reste hors du périmètre d'une passerelle. Une opération à réponse en flux ne peut pas être un outil.

Tous les points

  • Opt-in par x-flexway-tool
  • tools/list filtré par portées
  • Même verdict et même quota qu'en REST
  • Streamable HTTP sans session, résultat borné à 1 Mio

Fonctionnalités et statut

  • Surface MCP : les opérations du contrat offertes en outilsLivré · v0.1.0
Lire dans la documentation : Agents et MCP

Un serveur de ressources OAuth 2.1

Livré · v0.1.0

La surface MCP est un serveur de ressources OAuth 2.1 : le client découvre où obtenir un jeton émis pour elle, et ce jeton n'est jamais relayé à l'amont.

  • Métadonnées RFC 9728, 401 avec resource_metadata
  • Audience = URL déclarée de la surface (RFC 8707)
  • Jeton de l'agent jamais relayé
Voir le détailMasquer le détail - Un serveur de ressources OAuth 2.1

La surface MCP est un serveur de ressources OAuth 2.1 à part entière. Elle publie ses métadonnées de ressource protégée (RFC 9728) sous /.well-known/oauth-protected-resource/<chemin> et répond 401 avec resource_metadata, pour que le client découvre où obtenir un jeton au lieu de le deviner. Le jeton doit être émis pour cette surface (RFC 8707) : son audience est l'URL publique déclarée dans agents.mcp.resources, jamais déduite de la requête.

Le jeton de l'agent n'est jamais relayé à l'amont, ce qui ferme la voie du « confused deputy ». Un jeton MCP est refusé sur une route REST, et la surface n'accepte que des jetons OAuth : une clé d'API n'est pas l'identité d'un agent qui agit pour quelqu'un. L'émetteur est vérifié, et ses clés ne valident que ses propres jetons.

Le client est lu dans le jeton (client_id, sinon azp) ; agents.mcp.clients ferme la surface aux clients déclarés, par URL de document de métadonnées ou par préfixe. Un agent non surveillé - un client qui agit pour lui-même - est reconnu, et x-flexway-tool: { unattended: false } lui cache et lui refuse un outil.

Tous les points

  • Métadonnées RFC 9728, 401 avec resource_metadata
  • Audience = URL déclarée de la surface (RFC 8707)
  • Jeton de l'agent jamais relayé
  • Clients déclarés, agents non surveillés encadrés

Fonctionnalités et statut

  • Serveur de ressources OAuth 2.1, métadonnées RFC 9728Livré · v0.1.0
  • Validation de l'émetteur et indicateurs de ressource (RFC 8707)Livré · v0.1.0
  • Client ID Metadata Documents ; cas des agents non surveillésLivré · v0.1.0
Lire dans la documentation : Outils MCP pour agents

Échange de jeton : sujet humain, acteur agent

Livré · v0.1.0

Un amont reçoit un jeton échangé pour lui au nom de l'appelant (RFC 8693), après toute la décision, avec des portées qui ne font que rétrécir.

  • RFC 8693 vers l'amont, sans repli
  • Échange après la décision : un refus ne coûte rien
  • Portées qui rétrécissent, jamais n'élargissent
Voir le détailMasquer le détail - Échange de jeton : sujet humain, acteur agent

Un amont qui déclare token_exchange reçoit un jeton émis pour lui, au nom de l'appelant, par le fournisseur qui a signé le jeton d'origine (RFC 8693) ; la passerelle consomme des identités, elle n'en émet pas. L'échange a lieu après toute la décision - identité, portées, quota, validation, politiques - et avant le relais : un appel refusé ne coûte aucun échange. Un appel anonyme n'a rien à échanger, et l'amont ne reçoit pas d'Authorization.

L'échange ne fait que rétrécir : il demande au plus les portées de l'appelant, et une portée accordée en plus donne 403 sans appeler l'amont. Le sujet (sub) reste l'humain, les acteurs (act imbriqués) sont les agents, lus et tracés. Un refus du fournisseur donne 403 ; un fournisseur injoignable ou un secret introuvable donne 503 avec Retry-After. Il n'y a jamais de repli sur le jeton d'origine.

Le secret client est une référence relue à chaque échange, ce qui permet une rotation sans rechargement. Un jeton échangé est réutilisé jusqu'à son expiration moins 30 s, avec un seul échange en vol par jeton d'origine et audience.

Tous les points

  • RFC 8693 vers l'amont, sans repli
  • Échange après la décision : un refus ne coûte rien
  • Portées qui rétrécissent, jamais n'élargissent
  • sub humain et act agents tracés

Fonctionnalités et statut

  • Échange de jeton RFC 8693 : sujet humain, acteur agentLivré · v0.1.0
Lire dans la documentation : Exemples : agents, clés d'API, certificats

Délégation bornée et révocation en cascade

Livré · v0.1.0

La profondeur et l'âge d'une chaîne d'agents sont plafonnés, et révoquer l'humain coupe toute la chaîne par introspection.

  • Profondeur et âge de chaîne plafonnés
  • Révocation par introspection : 401
  • Chaîne d'acteurs dans la trace et l'audit
Voir le détailMasquer le détail - Délégation bornée et révocation en cascade

Une chaîne réelle ressemble à « humain -> agent A -> agent B -> service ». agents.delegation borne sa profondeur (max_depth) et son âge (max_age, compté depuis auth_time, sinon iat) ; une opération peut resserrer ces bornes par x-flexway-delegation, jamais les élargir, et c'est le minimum des deux qui s'applique. Au-delà, la réponse est 403 ; un jeton délégué dont l'âge ne peut pas être établi est refusé.

La révocation passe par l'introspection RFC 7662 auprès de l'émetteur, avec un cache court : un jeton révoqué donne 401, un jeton invérifiable 503 avec Retry-After. Révoquer l'humain coupe ainsi toute la chaîne. Ces règles valent en REST, à la connexion à la surface MCP, et pour les outils projetés comme fédérés.

La trace porte delegation.depth et delegation.actors, la métrique flexway.delegation.refused compte les refus par raison, et la ligne d'audit des décisions porte la chaîne entière d'acteurs. Savoir quel humain, quels agents et quelles portées sont derrière une écriture vous aide à répondre aux exigences de traçabilité des actions d'agents.

Tous les points

  • Profondeur et âge de chaîne plafonnés
  • Bornes resserrées par opération, jamais élargies
  • Révocation par introspection : 401
  • Chaîne d'acteurs dans la trace et l'audit

Fonctionnalités et statut

  • Délégation bornée en durée et en profondeur, révocation en cascadeLivré · v0.1.0
  • Journal d'audit chaîné des décisions d'autorisationLivré · v0.1.0
Lire dans la documentation : Agents et MCP

Fédération : vos serveurs MCP derrière la passerelle

Livré · v0.1.0

Vos serveurs MCP existants se placent derrière Flexway sans réécriture, avec une liste d'outils déclarée, fermée par défaut, sous la même autorisation.

  • Liste d'outils déclarée, fermée par défaut
  • Même autorisation, même quota, même audit
  • Jeton échangé vers le serveur, jamais celui de l'agent
Voir le détailMasquer le détail - Fédération : vos serveurs MCP derrière la passerelle

Des serveurs MCP existants se placent derrière Flexway sans réécriture : un amont protocol: mcp et une entrée agents.mcp.servers suffisent. L'exposition se fait par une liste déclarée d'outils, fermée par défaut - un outil ajouté côté serveur n'apparaît pas sans décision - ou par "*", choisi explicitement. Les outils gardent leurs noms d'origine, renommables ; une collision sur un même hôte refuse le chargement avec une liste déclarée, et avec "*" l'outil en collision n'est pas servi, et c'est dit.

La découverte se fait en arrière-plan (initialize puis tools/list), retentée avec un délai croissant et rafraîchie à intervalle régulier ; ni le démarrage ni /readyz n'attendent un serveur. Chaque appel exige une identité, des portées (tool_scopes, sinon scopes) et consomme le seau de l'appelant ; la classe de débit est déclarée, sinon read pour un outil annoncé en lecture seule, write autrement. Le serveur reçoit un jeton échangé pour lui s'il déclare token_exchange, jamais le jeton de l'agent.

Chaque appel profite du cloisonnement, du coupe-circuit et du budget de l'amont, avec un résultat borné à 1 Mio. Une même surface sert les outils du contrat et les outils fédérés, en une seule liste triée par nom.

Tous les points

  • Liste d'outils déclarée, fermée par défaut
  • Découverte en arrière-plan, démarrage jamais bloqué
  • Même autorisation, même quota, même audit
  • Jeton échangé vers le serveur, jamais celui de l'agent

Fonctionnalités et statut

  • Fédération MCP : des serveurs MCP existants sous la même autorisation, le même quota, le même auditLivré · v0.1.0
Lire dans la documentation : Agents et MCP

Gouvernance A2A

En cours

La gouvernance du trafic entre agents (A2A) n'est pas livrée dans son ensemble : le cadre retenu la relaie sous la même décision, sans terminer le protocole.

  • Gouvernance A2A : en cours
  • Relais sous la même décision, sans terminer le protocole
  • Cartes d'agent signées : à venir
Voir le détailMasquer le détail - Gouvernance A2A

La gouvernance du trafic entre agents (A2A v1.0) n'est pas livrée dans son ensemble ; son état à cette version est indiqué ci-dessous. Le cadre retenu : relayer A2A sous la même décision que le reste - router, authentifier, autoriser, compter, observer - sans terminer le protocole, c'est-à-dire sans tenir d'état de tâche ni délivrer de notification push. Un agent se déclare par sa carte d'agent, traitée comme un contrat versionné, et l'agent amont reçoit toujours un jeton échangé, jamais celui de l'appelant.

Ce cadre prévoit un tenant tenu égal à celui de l'identité, une classe de débit par méthode, un plafond de flux et une durée de tâche bornée, des cibles de notification push restreintes à une liste d'hôtes déclarés, et un audit sans contenu. La vérification des cartes amont signées, la re-signature de la carte publiée et la délégation d'agent à agent restent à faire.

Tous les points

  • Gouvernance A2A : en cours
  • Relais sous la même décision, sans terminer le protocole
  • Cartes d'agent signées : à venir

Fonctionnalités et statut

  • Gouvernance A2A : cartes d'agent signées, trafic sous quota et auditEn cours
Lire dans la documentation : Agents A2A

Configuration

L'exemple mcp-tools, tel qu'il est livré avec Flexway v1.6.3.

examples/mcp-tools/flexway.yaml
# Agent tools from the contract: one line per host declares the MCP surface, then x-flexway-tool
# per operation. A token must be issued for that URL (RFC 8707); it is never relayed upstream.
version: 1
contracts:
  openapi: ./openapi.yaml
upstreams:
  default:
    url: http://orders.internal:8080
auth:
  tenant_header: X-Tenant
  issuers:
    - name: customers
      discovery: https://login.example.net/.well-known/openid-configuration
      audience: api                              # REST tokens; MCP tokens carry the resource below
      tenant_claim: org
agents:
  mcp:
    resources:
      api.example.com: https://api.example.com/mcp
examples/mcp-tools/openapi.yaml
openapi: 3.1.0
info: { title: Orders, version: "1.0.0" }
components:
  securitySchemes:
    customers: { type: openIdConnect, openIdConnectUrl: https://login.example.net/.well-known/openid-configuration }
paths:
  /orders/{id}:
    get:
      operationId: getOrder
      summary: Read one order
      x-flexway-tool: true                       # a tool named getOrder, described by the summary
      security: [ { customers: [orders:read] } ]
      parameters: [ { name: id, in: path, required: true, schema: { type: string } } ]
      responses: { "200": { description: One order } }
  /orders:
    post:
      operationId: createOrder
      x-flexway-tool: { name: create_order, description: Place an order for the caller }
      security: [ { customers: [orders:write] } ]
      requestBody:
        required: true
        content:
          application/json:
            schema: { type: object, required: [sku], properties: { sku: { type: string } } }
      responses: { "201": { description: Created } }
  /orders/export:
    get:
      operationId: exportOrders                  # not marked: never offered to an agent
      responses: { "200": { description: CSV } }

Fonctionnalités

Ce qui est livré dans la version publiée v1.6.3, et ce qui vient ; une fonctionnalité n'est jamais présentée comme livrée avant sa version.

FonctionnalitéStatut
Surface MCP : les opérations du contrat offertes en outilsLivré · v0.1.0
Serveur de ressources OAuth 2.1, métadonnées RFC 9728Livré · v0.1.0
Échange de jeton RFC 8693 : sujet humain, acteur agentLivré · v0.1.0
Délégation bornée en durée et en profondeur, révocation en cascadeLivré · v0.1.0
Fédération MCP : des serveurs MCP existants sous la même autorisation, le même quota, le même auditLivré · v0.1.0
Gouvernance A2A : cartes d'agent signées, trafic sous quota et auditEn cours
Tableau de bord des agents : outils appelés, coût, portéesLivré · v1.2.0
Validation de l'émetteur et indicateurs de ressource (RFC 8707)Livré · v0.1.0
Client ID Metadata Documents ; cas des agents non surveillésLivré · v0.1.0

Toutes les fonctionnalités

Les autres attentes de ce domaine

  • Tracer agent -> outil -> API -> systèmeLivré · depuis v0.1.0
  • Transformer les API existantes en outils IALivré · depuis v0.1.0
  • Autoriser selon l'identité et le contextePortées, rôles, agents non surveillés, chaîne de délégation ; manque le contrôle contextuel des arguments (montant selon l'identité)En partie · suite en 1.10
  • Contrôler les agents autonomes (consulter, pas payer)Portées par opération, unattended: false ; manquent l'approbation et les droits de tâcheEn partie · suite en 1.10
  • Identités des agents, droits limités, durée de validitéClient d'agent déclaré, jeton délégué borné en durée et en profondeur, échange qui ne fait que rétrécir ; manquent les droits limités à une tâcheEn partie · suite en 1.10
  • Autorisations dynamiques, délégation de confianceDélégation RFC 8693 bornée construite ; droits de tâche et preuve d'approbation prévus, en collaboration avec l'IAMEn partie · suite en 1.10
  • Optimisation automatique coût, qualité, latenceRecommandations en propositions relues (IA d'exploitation) ; une application autonome est exclue : la console ne mute jamaisEn partie · suite en 1.10
  • Interactions entre agentsA2A gouverné construit, cartes signées et registre prévusEn partie · suite en 1.9
  • Passerelle auto-optimiséeRecommandations en propositions relues ; application autonome exclueEn partie · suite à dater
  • Détecter ou masquer les données personnellesMasquage de champs de réponse REST construit (redact) ; dans les invites, rien : détecteurs déterministes et masquagePrévu en 1.9
  • Filtrer invites et réponsesGarde-fous d'entrée et de sortie au catalogue depuis l'origine, jamais cadrésPrévu en 1.9
  • Détecter des tentatives d'injectionMotifs déclarés et service de garde du client ; la passerelle n'est pas une garantie suffisante (l'analyse le dit aussi)Prévu en 1.9
  • Exiger une validation humaine pour une action sensibleLa passerelle exige et vérifie une preuve d'approbation émise par le fournisseur d'identité ; le workflow reste au clientPrévu en 1.10

Les autres domaines

Parlons de votre passerelle

Flexwiz est une jeune entreprise : vous parlez directement avec la personne qui la fonde. Dites-nous ce que vous voulez faire passer par Flexway. Nous parlons de votre infrastructure et de vos exigences de souveraineté numérique.

La prise de rendez-vous en ligne arrive bientôt ; d'ici là, un e-mail suffit.