Qu’est-ce qu’un serveur MCP (explication avancée)
Model Context Protocol (MCP) est une spécification qui permet à des clients IA (Claude, Cursor, GitHub Copilot, etc.) et à des applications de communiquer via un protocole standardisé. MCP repose sur trois primitives principales.
L’avantage de construire un serveur MCP avec Laravel est de pouvoir mettre à profit l’écosystème Laravel — Eloquent, cache, authentification, validation — tel quel.
Ce guide avancé plonge dans l’implémentation concrète. Pour les concepts MCP de base, consultez Niveau intermédiaire : Laravel MCP.
Installation et configuration initiale
1
Installer le package
Installez le package via Composer.
2
Publier le fichier de routes
Avec
vendor:publish, générez routes/ai.php, l’emplacement où enregistrer votre serveur MCP.3
Générer la classe serveur
Créez la classe serveur via une commande Artisan.Enregistrez les outils, ressources et prompts dans le fichier généré
app/Mcp/Servers/DatabaseServer.php.4
Enregistrer le serveur
Enregistrez le serveur en tant que route dans Le serveur web est accédé via HTTP POST. Le serveur local fonctionne comme une commande Artisan et sert à s’intégrer aux clients IA en ligne de commande.
routes/ai.php.Implémentation des outils
Un outil est une fonction que le client IA peut invoquer. Vous pouvez utiliser directement le service container, la validation et Eloquent de Laravel.Créer un outil
handle et schema dans la classe générée.
Définition des paramètres (schéma)
Dans la méthodeschema, utilisez le builder Illuminate\Contracts\JsonSchema\JsonSchema pour définir les paramètres acceptés.
Annotations d’outils
Les annotations du protocole MCP permettent au client IA de juger de la sécurité de l’outil.Réponses structurées
Pour renvoyer une réponse au format JSON facilement analysable par le client IA, utilisezResponse::structured.
Réponses en streaming
Pour des traitements longs, renvoyer un Generator permet de streamer la progression.Enregistrement conditionnel
Vous pouvez ne rendre l’outil disponible qu’aux utilisateurs remplissant certaines conditions.Implémentation des ressources
Une ressource est une donnée que le client IA charge comme contexte. Elle fournit des documents, des informations de configuration ou des données dynamiques.Ressources statiques
Ressources dynamiques (templates d’URI)
Les templates d’URI permettent de fournir des ressources dynamiques en fonction des paramètres de l’URL.app://users/42/profile, et la valeur de {userId} s’obtient avec $request->get('userId').
Annotations de ressources
Vous pouvez expliciter la priorité ou l’audience d’une ressource.Implémentation des prompts
Un prompt est un modèle réutilisable que le client IA peut invoquer. Il standardise des requêtes types ou des workflows complexes.Créer un prompt
Authentification et autorisation
Authentification par token via Sanctum
C’est la méthode la plus simple. Le client MCP fournit un en-têteAuthorization: Bearer <token>.
Authentification OAuth 2.1
Pour une authentification plus robuste, utilisez Laravel Passport.AppServiceProvider.
Authentification via un middleware personnalisé
Si vous utilisez des tokens API maison, validez l’en-têteAuthorization dans un middleware personnalisé.
Autorisation à l’intérieur de l’outil
Dans la méthodehandle d’un outil ou d’une ressource, utilisez $request->user() pour effectuer des contrôles d’autorisation fins.
Exemple pratique : outils d’accès à la base de données
Voici une implémentation complète d’outils recherchant et créant des données via Eloquent.Classe serveur
Outil de recherche (lecture seule)
Outil de création (écriture)
Exemple pratique : outil d’opérations sur le système de fichiers
Voici un outil manipulant des fichiers via la façade Storage.Tests
Serveur MCP, outils, ressources et prompts se testent unitairement avec les fonctionnalités de test standard de Laravel.Tester un outil
Appelez directement l’outil viaServer::tool().
Tester ressources et prompts
Principales méthodes d’assertion
Débogage avec MCP Inspector
Pour un débogage interactif, utilisez MCP Inspector.Points à considérer pour le déploiement
HTTP streaming et SSE
Si vous utilisez des réponses en streaming (Generator) sur un serveur web, vérifiez la configuration du serveur.Combinaison avec Laravel Octane
Pour les serveurs MCP à fort trafic, envisagez Laravel Octane (FrankenPHP ou Swoole). L’overhead par requête est fortement réduit.Limitation du débit
Limitez les requêtes vers le serveur MCP avec le middlewarethrottle.