LaravelでMCPサーバーを作れるライブラリができました!MCPを使うと生成AIを使った開発がさらに便利になります。
MCPサーバーの作成手順を知りたい方は、参考にしてくださいね。
▶公式マニュアルはこちら:
※ 本記事は v0.3(β版) 時点の内容です。以降の更新で差分が出る可能性があります。GitHubはこちら。
Laravel MCPサーバーの作り方
今回は数字を計算するだけの簡単なMCPサーバーを作る方法をご紹介します。まずはライブラリをインストールします。
インストール
1 2 |
composer require laravel/mcp |
タグパブリッシュ
1 2 |
php artisan vendor:publish --tag=ai-routes |
ルート定義
routes/ai.php
を編集します。
WebとLocalルートのいずれかを作成しますが、今回はLocalルートを作ります。
1 2 3 4 5 6 7 8 9 10 |
<?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サーバーを作成
コマンドを実行:
1 2 |
php artisan make:mcp-server CountNumber |
app/Mcp/Servers/CountNumber.php
を編集(後程作成するToolも登録しておきます):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
<?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 = [ // ]; } |
ツール作成
コマンドを実行:
1 2 |
php artisan make:mcp-tool MultiplyThreeNumbersTool |
app/Mcp/Tools/MultiplyThreeNumbersTool.php
を編集:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
<?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サーバーを登録します。
1 2 |
claude mcp add count-number --scope local -- php artisan mcp:start count-number |
*PHPのパスが通っていない場合は、フルパスを指定してください。
1 2 |
claude mcp add count-number --scope local -- C:/xampp/php/php.exe artisan mcp:start count-number |
動作確認
- Claude Codeを起動
- MCPサーバーの確認
12/mcp
コマンドで登録されているMCPサーバーを確認できます。 - 実際にMCPサーバーを使ってみます。MCPサーバーを指定して数字を3つ受け渡すと、作成したMCPサーバーを使った計算結果が返ってきます。
トラブルシューティング
エラー発生時には、\Log::info()
を活用してデバッグすることをおすすめします。storage/logs/laravel.log内のログファイルにて、ログの内容を確認できます。
【Log例】
1 2 3 4 5 6 |
public function handle(Request $request): Response { try{ \Log::info('MultiplyThreeNumbersTool: Starting calculation', [ 'request_params' => $request->all() ]); |
MCPインスペクターを使うと接続をテストできます。
1 |
npx @modelcontextprotocol/inspector |
表示されるURLをクリックして、ブラウザでインスペクターを開きます。(使い方は省略)
ツール、プロンプト、リソースの違い
MCPサーバーには3つの主要なコンポーネントがあります。今回はツールを作りましたが、ほか、プロンプトやリソースを作ることもできます。
それぞれ次の通り:
- ツール (Tools):AIが実行できる機能。
- プロンプト (Prompts):AIへの指示テンプレート。
- リソース (Resources):AIが読み取れるデータ(ファイルなど)を返す。
詳細は公式マニュアルご覧ください。
さいごに
今回は計算するだけのものでしたが、お好みで内容を変えてくださいね。
なお、実際にLaravel MCPで作成したMCPサーバーをGitHubパッケージとして公開しています。生成AIが、既にレコードが入ったテーブルを勝手に削除するのを防ぐためにご利用頂けます。

ご興味あればぜひ、試してみてください♪
気に入ったらスターをつけて頂けると、とても嬉しいです。
「MCPが何か、基本から知りたい!」と思ったら、こちらのYoutubeご覧ください。