Publié le 15 septembre 2026, Laravel MCP 1.0 est la première version stable du package Laravel dédié à la création de serveurs Model Context Protocol. Ces serveurs permettent à des applications d’IA d’utiliser les outils et les données d’une application Laravel.
<?php
use App\Mcp\Tools\CurrentWeatherTool;
use App\Mcp\Tools\HistoricalWeatherTool;
use App\Mcp\Tools\WeatherAlertsTool;
use Laravel\Mcp\Server;
use Laravel\Mcp\Server\Tools\ToolSearch;
class WeatherServer extends Server
{
protected array $tools = [
CurrentWeatherTool::class,
ToolSearch::class => [
HistoricalWeatherTool::class,
WeatherAlertsTool::class,
],
];
}La version adopte MCP 2026-07-28. La découverte passe par server/discover. Le protocole ajoute aussi des catalogues d’outils consultables, des indications de cache, un traitement sans état, des changements OAuth et le support de MCP Apps dans la capacité extensions. Les clients qui utilisent encore initialize restent compatibles. Le serveur répond avec la version 2025-11-25 ou 2025-06-18 selon la version demandée par le client.
ToolSearch maintient certains outils hors du catalogue chargé par défaut. L’outil search_tools reçoit une requête et une limite de résultats. Il renvoie les noms, descriptions et entrées attendues des outils correspondants. execute_tools exécute un ou plusieurs outils à partir de leur nom. Un agent peut ainsi trouver et appeler un outil sans charger tout le catalogue. Cette fonction est suivie dans la pull request #324.
L’attribut Cacheable définit les indications de cache par défaut. cacheHints() permet de les modifier pour certaines méthodes. Les exemples utilisent des valeurs ttlMs de 60_000 et 30_000, ainsi que la portée publique CacheScope::Public. Le client MCP de Laravel respecte ces indications quand la mise en cache est activée avec withCache(). Les réponses dont ttlMs est absent ou égal à zéro ne sont pas mises en cache. Les appels d’outils ne peuvent pas être mis en cache. Les pull requests concernées sont #301 et #326.
Les serveurs fonctionnent sans état avec le nouveau protocole. Chaque requête HTTP et chaque message transmis par l’entrée-sortie standard contient la version du protocole et les fonctionnalités prises en charge dans params._meta. MCP-Session-Id, Request::sessionId(), Request::setSessionId() et l’événement SessionInitialized ont été supprimés. Les applications qui doivent relier plusieurs appels doivent fournir leur propre identifiant dans les arguments de la requête ou dans _meta. La pull request #285 porte sur ce changement.
L’autorisation OAuth exige désormais PKCE. OAuthClient::redirect() lève une OAuthException si le serveur d’autorisation ne fournit pas code_challenge_methods_supported dans ses métadonnées. Le comportement précédent rejetait un serveur lorsque ce champ existait sans support de S256. Laravel MCP prend aussi en charge les Client ID Metadata Documents. Dans ce modèle, client_id est une URL HTTPS vers un document JSON décrivant le client. Mcp::oAuthRoutesFor() expose ce document à GET /mcp/oauth/{client}/client-metadata.json.
Quand aucun identifiant client n’est fourni, Laravel utilise le document de métadonnées si le serveur d’autorisation le prend en charge. Dynamic Client Registration reste le mécanisme de repli, mais MCP 2026-07-28 le déprécie. Avec un document de métadonnées, $token->clientSecret vaut null. La colonne correspondante en base de données doit donc accepter les valeurs nulles. Cette évolution empêche aussi l’enregistrement d’un nouveau client à chaque exécution de redirect(). Les pull requests #323 et #342 documentent ces changements.
Une migration depuis 0.9 impose de vérifier la connexion des clients et la construction des requêtes. ValidateMcpHeaders s’exécute désormais sur chaque route enregistrée avec Mcp::web(). Les requêtes POST du nouveau protocole doivent contenir MCP-Protocol-Version et Mcp-Method, avec des valeurs cohérentes avec le corps. tools/call, prompts/get et resources/read exigent aussi Mcp-Name. Cette valeur doit correspondre au nom de l’outil, au nom du prompt ou à l’URI de la ressource.
Les tests qui utilisent postJson() doivent envoyer ces en-têtes ainsi que les champs params._meta. Une incohérence renvoie HTTP 400 avec le code d’erreur JSON-RPC -32020. Les anciens clients initialize dépourvus de métadonnées de protocole dans _meta échappent à cette validation. Le guide de migration couvre aussi les changements de codes d’erreur, la suppression de Server::CAPABILITY_UI et le contrat des transports personnalisés. Les notes de version et le changelog complet sont également disponibles.




Commentaires
Pas encore de commentaire — écris le premier.
Lance la discussion
Pas de compte ni de mot de passe — saisis simplement ton adresse e-mail et nous t’envoyons un lien de connexion à usage unique. Première visite ? Tout se met en place automatiquement.
Ton évaluation sera appliquée automatiquement après ta connexion.
Vérifie ta boîte mail
Nous avons envoyé un lien de connexion à …. Ouvre-le sur cet appareil — cet onglet te connectera automatiquement.
Rien reçu ? Vérifiez le dossier spam — et marquez le message « Non spam » pour qu'il arrive directement la prochaine fois.