Serveurs MCP
L'écran Serveurs MCP vous permet d'enregistrer les serveurs Model Context Protocol que les agents peuvent appeler, de lister leurs outils, de les désactiver, les activer ou les supprimer, et d'envoyer une requête JSON-RPC 2.0 par la passerelle MCP. Chemin dans le portail : /capabilities/mcp. Les développeurs enregistrent et testent les serveurs ; les administrateurs du tenant et les responsables sécurité décident de leur statut. L'écran est dessiné par portal/src/screens/capabilities.tsx.
Ce que montre l'écran
- Tableau Serveurs MCP, lu par
GET /v1/mcp/servers(les serveurs visibles par la requête, en un appel). Colonnes : Nom, Transport, URL, Outils autorisés, Statut, Créé. Voir le détail affiche la ligne. Vide : Aucun serveur MCP, aide Enregistrez un serveur pour exposer ses outils aux agents., bouton Nouveau serveur MCP. - Nouveau serveur MCP ouvre un panneau latéral avec Nom (obligatoire, lettres minuscules, chiffres,
.,_,-), URL (obligatoire, exemplehttps://<mcp-host>/mcp), Transport (obligatoire :streamable_httpousse), Outils autorisés (séparés par des virgules ; vide, tous les outils sont autorisés,*), Propriétaire, Authentification (JSON, défaut{"type": "none"}; typesnone,bearer,api_key,query_param,connector, avec uncredential_refde la formeopenbao://...ouenv://...). - Testeur Passerelle MCP : Identifiant du serveur (obligatoire), Méthode (obligatoire :
"initialize","tools/list","tools/call","resources/list","resources/read","prompts/list"), Paramètres (JSON), le bouton Exécuter et une zone Résultat.
Les serveurs MCP sont uniquement internes. Le Control Plane accepte un serveur hébergé par le Navin Manager, une instance du MCP Runtime ou un hôte nommé dans EAI_MCP_INTERNAL_HOSTS, le vérifie à l'enregistrement et à chaque appel, et refuse une adresse publique avec mcp_online_forbidden.
Actions
| Bouton ou action | Ce qu'il fait | Appel d'API | Rôles |
|---|---|---|---|
| Actualiser (icône) | Recharge la liste. | GET /v1/mcp/servers | Tout membre du tenant |
| Nouveau serveur MCP | Enregistre le serveur dans le projet courant. | POST /v1/mcp/servers | tenant_admin, developer, application_owner |
| Menu Voir le détail | Affiche la ligne dans un panneau latéral. | Aucun | Tout membre du tenant |
| Menu Outils | Envoie "tools/list" au serveur et affiche les outils qui passent la liste d'autorisation. | GET /v1/mcp/servers/{server_id}/tools | Relation can_invoke sur le serveur |
| Menu Désactiver (serveur non désactivé) | Formulaire avec une Raison obligatoire ; désactive le serveur tout de suite et l'audite. | POST /v1/mcp/servers/{server_id}/status | tenant_admin, security_officer et relation editor |
| Menu Activer (serveur désactivé) | Demande active : ouvre une approbation de promotion ; le serveur devient actif une fois approuvé. | POST /v1/mcp/servers/{server_id}/status | tenant_admin, security_officer et relation editor |
| Menu Supprimer | Ouvre Confirmer une action destructive ; saisissez le nom du serveur, puis Confirmer. | GET /v1/lineage/graph, puis DELETE /v1/mcp/servers/{server_id} | tenant_admin et relation owner |
| Exécuter (Passerelle MCP) | Envoie la requête JSON-RPC par la passerelle et affiche la réponse. | POST /v1/mcp/gateway/{server_id} | tenant_admin, developer, agent et relation can_invoke |
| Réessayer (état d'erreur) | Relance la lecture qui a échoué. | Même appel | Mêmes rôles |
Le testeur enveloppe le formulaire dans un message JSON-RPC 2.0 ; pour un "tools/call", Paramètres contient le nom de l'outil et ses arguments :
{"jsonrpc": "2.0", "id": 1767225600000, "method": "tools/call", "params": {"name": "search", "arguments": {"query": "supplier contract"}}}
La passerelle refuse un "tools/call" sur un outil hors de Outils autorisés, exige la portée tools:invoke et applique la DLP aux arguments.
Rôles
Le portail ne masque aucun bouton. Dans services/control-plane/src/eai/domains/mcp/routes.py : la création demande WRITE_ROLES (tenant_admin, developer, application_owner) ; le changement de statut demande tenant_admin ou security_officer ; la suppression demande tenant_admin ; la passerelle demande OPS_ROLES (tenant_admin, developer, agent). Les routes contrôlent aussi la relation sur le serveur (editor, owner, can_invoke), et une requête faite dans un projet ne voit que les serveurs de ce projet. platform_admin passe tous les contrôles de rôle.
Tâches courantes
Enregistrer un serveur MCP interne
- Le créer. Les agents n'atteignent le serveur que par la passerelle. Cliquez sur Nouveau serveur MCP, remplissez Nom, URL et Transport, listez les Outils autorisés, renseignez Authentification, puis cliquez sur Créer. Résultat attendu : le message Créé et une nouvelle ligne. En cas d'échec :
mcp_online_forbidden(403) signifie que l'URL résout vers une adresse publique ; hébergez le serveur en interne. - Lister ses outils. La liste prouve que la passerelle atteint le serveur. Dans le menu de ligne, cliquez sur Outils. Résultat attendu : un panneau latéral avec les outils qui passent la liste d'autorisation. En cas d'échec :
upstream_error(502) porte l'erreur du serveur ; vérifiez l'URL et l'authentification.
Appeler un outil par la passerelle
- Remplir le testeur. Le testeur envoie un vrai appel, audité comme celui d'un agent. Dans Passerelle MCP, saisissez l'Identifiant du serveur, choisissez
"tools/call"dans Méthode et écrivez Paramètres avecnameetarguments. Résultat attendu : le formulaire est complet. En cas d'échec : JSON invalide sous Paramètres signifie que le JSON est mal formé. - L'exécuter. Cliquez sur Exécuter. Résultat attendu : la réponse JSON-RPC dans Résultat. En cas d'échec : un membre
errordans la réponse indique que l'outil n'est pas dans la liste d'autorisation, ou que la portéetools:invokemanque.
Désactiver un serveur pendant un incident
- Le désactiver. La désactivation s'applique tout de suite, sans approbation. Dans le menu de ligne, cliquez sur Désactiver, saisissez la Raison, puis cliquez sur Désactiver. Résultat attendu : le message Terminé et le statut Désactivé. En cas d'échec :
forbiddensignifie que vous n'êtes nitenant_adminnisecurity_officer. - Le réactiver plus tard. Le retour à l'état actif est une promotion. Cliquez sur Activer. Résultat attendu : le message Terminé et une demande
promotiondans la Boîte d'approbation ; le serveur devient actif quand une autre personne l'approuve. En cas d'échec : lisez l'erreur de l'approbation dans la boîte.
Dépannage
| Symptôme | Cause | Correction |
|---|---|---|
mcp_online_forbidden (403) | L'URL résout vers une adresse publique. | Hébergez le serveur sur le Navin Manager, le MCP Runtime ou un hôte interne de EAI_MCP_INTERNAL_HOSTS. |
mcp_server_not_found (404) | L'identifiant est faux ou le serveur a été supprimé. | Copiez l'identifiant depuis le tableau (Voir le détail). |
mcp_project_forbidden (403) ou mcp_server_project_mismatch | La requête est faite dans un autre projet que celui du serveur. | Passez dans le projet du serveur. |
mcp_principal_not_allowed (403) | Vous ne faites pas partie des utilisateurs et agents autorisés sur le serveur. | Demandez l'accès au propriétaire du serveur. |
upstream_error (502) sur Outils | Le serveur MCP a répondu une erreur. | Vérifiez l'URL, le transport et l'authentification. |
Réponse avec method ... is not allowed through the gateway | La méthode ne fait pas partie de celles que relaie la passerelle. | Utilisez une méthode de la liste Méthode. |
validation_error (422) sur Créer | Le nom contient des majuscules ou des espaces, ou credential_ref ne commence pas par openbao:// ou env://. | Corrigez le champ nommé dans l'erreur. |