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
動作確認
- Claude Codeを起動
- MCPサーバーの確認
/mcpコマンドで登録されているMCPサーバーを確認できます。

- 実際に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ご覧ください。






コメント