書籍「Laravelの教科書」Laravel13対応サポートガイド公開中 → ダウンロードはこちら

Laravel MCPを使ってLaravelでMCPサーバーを作る方法【Claude Codeと連携】

AI系ツール

LaravelでMCPサーバーを作れるライブラリができました!MCPを使うと生成AIを使った開発がさらに便利になります。

MCPサーバーの作成手順を知りたい方は、参考にしてくださいね。

▶公式マニュアルはこちら:

※ 本記事は v0.3(β版) 時点の内容です。以降の更新で差分が出る可能性があります。GitHubはこちら。

Laravel MCPサーバーの作り方

今回は数字を計算するだけの簡単なMCPサーバーを作る方法をご紹介します。まずはライブラリをインストールします。

インストール

composer require laravel/mcp

タグパブリッシュ

php artisan vendor:publish --tag=ai-routes

ルート定義

routes/ai.php を編集します。

WebとLocalルートのいずれかを作成しますが、今回はLocalルートを作ります。

<?php

use Laravel\Mcp\Facades\Mcp;
use App\Mcp\Servers\CountNumber;

// Webルート例(今回は使用しません)
// Mcp::web('/mcp/demo', \App\Mcp\Servers\PublicServer::class);

// Localルート(今回はこちらを使用)
Mcp::local('count-number', CountNumber::class);

WebとLocalの違い:

  • web(): HTTP経由でアクセスできるサーバー。外部連携時に使用
  • local(): ローカル環境(コマンドライン上)で動かすサーバー

MCPサーバーを作成

コマンドを実行:

php artisan make:mcp-server CountNumber

app/Mcp/Servers/CountNumber.php を編集(後程作成するToolも登録しておきます):

<?php

namespace App\Mcp\Servers;

use Laravel\Mcp\Server;
use App\Mcp\Tools\MultiplyThreeNumbersTool;

class CountNumber extends Server
{
    /**
     * The MCP server's name.
     */
    protected string $name = 'Count Number';

    /**
     * The MCP server's version.
     */
    protected string $version = '0.0.1';

    /**
     * The MCP server's instructions for the LLM.
     */
    protected string $instructions = <<<'MARKDOWN'
        Calculate using the numbers that the user provides.
        Only respond with the final answer.
    MARKDOWN;

    /**
     * The tools registered with this MCP server.
     *
     * @var array<int, class-string<\Laravel\Mcp\Server\Tool>>
     */
    protected array $tools = [
        MultiplyThreeNumbersTool::class
    ];

    /**
     * The resources registered with this MCP server.
     *
     * @var array<int, class-string<\Laravel\Mcp\Server\Resource>>
     */
    protected array $resources = [
        //
    ];

    /**
     * The prompts registered with this MCP server.
     *
     * @var array<int, class-string<\Laravel\Mcp\Server\Prompt>>
     */
    protected array $prompts = [
        //
    ];
}

ツール作成

コマンドを実行:

php artisan make:mcp-tool MultiplyThreeNumbersTool

app/Mcp/Tools/MultiplyThreeNumbersTool.php を編集:

<?php

namespace App\Mcp\Tools;

use Illuminate\JsonSchema\JsonSchema;
use Laravel\Mcp\Request;
use Laravel\Mcp\Response;
use Laravel\Mcp\Server\Tool;

class MultiplyThreeNumbersTool extends Tool
{
    /**
     * The tool's description.
     */
    protected string $description = <<<'MARKDOWN'
        A tool to multiply three numbers.
        It accepts three numbers and returns their product.
    MARKDOWN;

    /**
     * Handle the tool request.
     */
    public function handle(Request $request): Response
    {
        try{
            $num1 = $request->get('number1');
            $num2 = $request->get('number2');
            $num3 = $request->get('number3');

            if (!is_numeric($num1) || !is_numeric($num2) || !is_numeric($num3)) {
                return Response::text("Error: All inputs must be numeric values");
            }
            
            $result = $num1 * $num2 * $num3;
            return Response::text("The product of {$num1}, {$num2}, and {$num3} is: {$result}");
        } catch (\Exception $e) {
            return Response::text("Error: " . $e->getMessage());
        }

    }

    /**
     * Get the tool's input schema.
     *
     * @return array<string, \Illuminate\JsonSchema\JsonSchema>
     */
    public function schema(JsonSchema $schema): array
    {
        return [
            'number1' => $schema->number()->description('The first number to multiply'),
            'number2' => $schema->number()->description('The second number to multiply'),
            'number3' => $schema->number()->description('The third number to multiply'),
        ];
    }
}

schema は、ツールが 生成AIから受け取る引数(入力データ) の形式を定義する部分です。そのデータを実際に処理するのが handleメソッド です。

なお、必要に応じて handle メソッド内で Laravel のバリデーション機能使って、引数の検証を行うこともできます。

Claude Codeに追加

Claude Codeに作成したMCPサーバーを登録します。

claude mcp add count-number --scope local -- php artisan mcp:start count-number

*PHPのパスが通っていない場合は、フルパスを指定してください。

claude mcp add count-number --scope local -- C:/xampp/php/php.exe artisan mcp:start count-number

動作確認

  1. Claude Codeを起動
  2. MCPサーバーの確認
    /mcp
    

    コマンドで登録されているMCPサーバーを確認できます。

  3. 実際にMCPサーバーを使ってみます。MCPサーバーを指定して数字を3つ受け渡すと、作成したMCPサーバーを使った計算結果が返ってきます。

トラブルシューティング

エラー発生時には、\Log::info() を活用してデバッグすることをおすすめします。storage/logs/laravel.log内のログファイルにて、ログの内容を確認できます。

【Log例】

    public function handle(Request $request): Response
    {
        try{
            \Log::info('MultiplyThreeNumbersTool: Starting calculation', [
                'request_params' => $request->all()
            ]);

MCPインスペクターを使うと接続をテストできます。

npx @modelcontextprotocol/inspector

表示されるURLをクリックして、ブラウザでインスペクターを開きます。(使い方は省略)

ツール、プロンプト、リソースの違い

MCPサーバーには3つの主要なコンポーネントがあります。今回はツールを作りましたが、ほか、プロンプトやリソースを作ることもできます。

それぞれ次の通り:

  • ツール (Tools):AIが実行できる機能。
  • プロンプト (Prompts):AIへの指示テンプレート。
  • リソース (Resources):AIが読み取れるデータ(ファイルなど)を返す。

詳細は公式マニュアルご覧ください。

さいごに

今回は計算するだけのものでしたが、お好みで内容を変えてくださいね。

なお、実際にLaravel MCPで作成したMCPサーバーをGitHubパッケージとして公開しています。生成AIが、既にレコードが入ったテーブルを勝手に削除するのを防ぐためにご利用頂けます。

ご興味あればぜひ、試してみてください♪

気に入ったらスターをつけて頂けると、とても嬉しいです。

「MCPが何か、基本から知りたい!」と思ったら、こちらのYoutubeご覧ください。

コメント

タイトルとURLをコピーしました