Skip to main content

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 routes/ai.php.
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.

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

Implémentez les méthodes handle et schema dans la classe générée.

Définition des paramètres (schéma)

Dans la méthode schema, 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, utilisez Response::structured.

Réponses en streaming

Pour des traitements longs, renvoyer un Generator permet de streamer la progression.
Sur un serveur web, les réponses en streaming sont envoyées automatiquement sous forme de flux SSE (Server-Sent Events).

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.
Le client IA demande la ressource via une URI comme 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

asAssistant() fait considérer le message comme une intervention de l’assistant IA. En combinant système et message utilisateur, vous pouvez contrôler finement le comportement de l’IA.

Authentification et autorisation

Authentification par token via Sanctum

C’est la méthode la plus simple. Le client MCP fournit un en-tête Authorization: Bearer <token>.

Authentification OAuth 2.1

Pour une authentification plus robuste, utilisez Laravel Passport.
Avec l’authentification OAuth, publiez les vues d’autorisation fournies par MCP et configurez-les dans AppServiceProvider.

Authentification via un middleware personnalisé

Si vous utilisez des tokens API maison, validez l’en-tête Authorization dans un middleware personnalisé.

Autorisation à l’intérieur de l’outil

Dans la méthode handle d’un outil ou d’une ressource, utilisez $request->user() pour effectuer des contrôles d’autorisation fins.
shouldRegister ne fait que masquer l’outil de la liste. Effectuez systématiquement le contrôle d’autorisation au moment de l’appel, dans la méthode handle.

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.
Pour les outils de fichiers, assainissez systématiquement les chemins pour empêcher l’accès à des dossiers non autorisés. Il est essentiel de refuser les chemins contenant ...

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 via Server::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.
Avec Octane, l’état est partagé entre les requêtes. Prenez garde à ne pas utiliser de propriétés statiques ni d’état global à l’intérieur de vos outils.

Limitation du débit

Limitez les requêtes vers le serveur MCP avec le middleware throttle.

Cache

Tirez parti du cache pour les outils en lecture seule fréquemment invoqués.

Journalisation et supervision

Journaliser les appels aux outils MCP permet de comprendre comment le client IA les utilise.
En production, surveillez les performances et les exceptions du serveur MCP avec Laravel Telescope ou Sentry.
Dernière modification le 13 juillet 2026