Laravel MCP 1.0が正式リリース、MCP 2026-07-28や検索可能なツールカタログに対応のアイキャッチ画像

Laravel MCP アップデート情報

Laravel MCP 1.0が正式リリース、MCP 2026-07-28や検索可能なツールカタログに対応

※本記事は広告が含まれる場合があります。

Laravelチームは、LaravelアプリケーションでModel Context Protocol(MCP)サーバーを構築するためのパッケージ「Laravel MCP 1.0」をリリースしました。2026年9月15日付の記事で発表された初の安定版で、MCPリビジョン2026-07-28への対応をはじめ、検索可能なツールカタログやキャッシュヒント、ステートレスなリクエスト処理、OAuth関連の変更などが導入されています。

みつた

Laravel MCP 1.0が正式リリースされました。MCP 2026-07-28に対応し、必要なツールを検索・実行できるToolSearchやキャッシュヒント、ステートレス処理、PKCE必須化などが導入されています。

この記事のチェックポイント

  • Laravel MCP 1.0は、LaravelでMCPサーバーを構築するパッケージの初の安定版
  • MCP 2026-07-28に対応し、最初の交換処理がinitializeからserver/discoverへ変更
  • ToolSearchにより、必要なツールを検索して実行できる仕組みを導入
  • キャッシュヒント、ステートレスサーバー、PKCE必須化などに対応
  • 0.9からの更新では、ヘッダー検証やテストコードへの影響を確認する必要がある

Laravel MCP 1.0がリリース

Laravelチームは、LaravelアプリケーションでModel Context Protocol(MCP)サーバーを構築するための「Laravel MCP 1.0」をリリースしました。2026年9月15日付の記事で発表された、同パッケージ初の安定版です。

Laravel MCPを利用すると、AIアプリケーションからLaravelアプリケーションのツールやデータを扱えるMCPサーバーを構築できます。インストールコマンドは次のとおりです。

composer require laravel/mcp

Laravel MCPは、サーバー、ツール、プロンプト、リソースを作成するためのインターフェースを提供します。Laravelの依存性注入コンテナを利用できるほか、MCP Inspectorとユニットテスト、Server-Sent Eventsによる進捗や応答のストリーミングにも対応しています。

セキュリティ面では、Laravelのミドルウェアパターンに加え、OAuth 2.1とSanctumをサポートします。リモートMCPサーバーだけでなく、Claude Codeなどのエージェントと連携するローカルサーバーも作成できます。

MCP 2026-07-28に対応

Laravel MCP 1.0は、MCPリビジョン2026-07-28をサポートします。このプロトコルでは、最初のinitialize交換に代わってserver/discoverが使用されます。

一方、引き続きinitializeで接続するクライアントにも互換性が用意されています。サーバーは、クライアントの要求に応じてプロトコルバージョン2025-11-25または2025-06-18を返します。

MCP Appsのサポートは、extensionsケイパビリティに含まれる形になりました。

必要なツールを探せる「ToolSearch」

MCPサーバーがモデルへ送る各ツール定義は、モデルが一度に扱える情報量であるコンテキストウィンドウを使用します。Laravel MCP 1.0のToolSearchでは、頻繁に使うツールを通常の一覧へ残し、それ以外を検索対象として分けられます。

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,
        ],
    ];
}

この仕組みでは、次の2つのツールが登録されます。

  • search_tools:検索クエリと結果件数の上限を受け取り、一致するツールの名前、説明、想定される入力を返す
  • execute_tools:名前を指定して1つ以上のツールを実行する

これにより、エージェントはツールカタログ全体を読み込まず、必要なツールを検索して利用できます。

クライアントへキャッシュ方針を伝える「Cache Hints」

サーバーからクライアントへ、レスポンスをキャッシュできるか、どのくらい保持できるか、ユーザー間で共有できるかを伝えるキャッシュヒントも追加されました。

Cacheable属性でデフォルト設定を指定し、cacheHints()を使ってMCPメソッドごとに上書きできます。

use Laravel\Mcp\Enums\CacheScope;
use Laravel\Mcp\Server\Attributes\Cacheable;

#[Cacheable(ttlMs: 60_000, scope: CacheScope::Public)]
class WeatherServer extends Server
{
    protected function cacheHints(): array
    {
        return [
            'tools/list' => new Cacheable(ttlMs: 30_000),
        ];
    }
}

LaravelのMCPクライアントでは、withCache()でキャッシュを有効にすると、このヒントに従います。ttlMsが未設定またはゼロのレスポンスはキャッシュされません。また、ツール呼び出しはキャッシュ対象外です。

サーバーの処理をステートレス化

新しいプロトコルでは、サーバーが各リクエストを独立して処理します。すべてのHTTPリクエストと標準入出力(stdio)メッセージには、プロトコルバージョンとクライアントがサポートする機能がparams._metaとして含まれます。

この変更に伴い、以下は削除されました。

  • MCP-Session-Idヘッダー
  • Request::sessionId()
  • Request::setSessionId()
  • SessionInitializedイベント

関連する複数の呼び出しを追跡する場合は、リクエスト引数または_metaに独自の識別子を渡します。

OAuthではPKCEが必須に

OAuth認可では、PKCEのサポートが必須になりました。

認可サーバーのメタデータにcodechallengemethods_supportedが含まれていない場合、OAuthClient::redirect()OAuthExceptionをスローします。従来は、このフィールドが存在しながらS256をサポートしていないサーバーのみを拒否していました。

また、Client ID Metadata Documentsもサポートされます。この方式では、client_idとしてクライアント情報を記述したJSONドキュメントのHTTPS URLを使用します。Mcp::oAuthRoutesFor()は、次のURLでドキュメントを提供します。

GET /mcp/oauth/{client}/client-metadata.json

クライアントIDが指定されていない場合、Laravelは認可サーバーが対応していればこのドキュメントを使用します。対応していない場合は、MCP 2026-07-28で非推奨となったDynamic Client Registrationへフォールバックします。

メタデータドキュメントを利用した場合、$token->clientSecretnullになります。そのため、保存先のデータベースカラムはnullを受け入れられる必要があります。この変更では、redirect()の実行ごとに認可サーバーへ新しいクライアントを登録していた問題も修正されています。

0.9から更新する際の注意点

Laravel MCP 0.9からアップグレードする場合は、クライアントの接続方法とリクエスト内容を確認する必要があります。

新しいValidateMcpHeadersミドルウェアは、Mcp::web()を通じて登録されたすべてのルートで動作します。新しいプロトコルを使うPOSTリクエストでは、本文と一致する以下のヘッダーが必要です。

  • MCP-Protocol-Version
  • Mcp-Method

さらに、tools/callprompts/getresources/readではMcp-Nameも必要です。この値は、ツール名、プロンプト名、またはリソースURIと一致しなければなりません。

postJson()でこれらのリクエストを送信するテストには、対応するヘッダーとparams._metaフィールドを追加する必要があります。ヘッダーが一致しない場合は、JSON-RPCエラーコード-32020を伴うHTTP 400レスポンスが返されます。

ただし、initializeを使用し、_metaへプロトコルメタデータを送らない従来のクライアントは、ヘッダー検証の対象外です。

このほか、エラーコードの変更、Server::CAPABILITY_UI定数の削除、カスタムトランスポートのコントラクトなども1.0の変更点に含まれています。

-Laravel, MCP, アップデート情報