MENU

blog
スタッフブログ

dot
Laravel BoostとMCPサーバーで、Claudeに「自社の出社管理」を喋らせてみた
技術

Laravel BoostとMCPサーバーで、Claudeに「自社の出社管理」を喋らせてみた

こんにちは!
ソリューションSECの波多野です。

はじめに

ここ最近、生成AI関連のニュースを目にしない日はなくなりました。

開発周辺の話題でも 「MCP(Model Context Protocol)」 という単語をよく見かけるようになり、
気にはなっていたのですが、ドキュメントを眺めるだけではどうにも実態がつかめずにいました。

ちょうどLaravelから公式のMCPサーバーである Laravel Boost がリリースされたタイミングだったので、
これを足がかりに少し触ってみよう、と思い立ったのが今回の発端です。

実用というよりは「どんなものかを自分の目で確かめる」ことが目的なので、
結論や効果の話はあまり出てきません。

“新しい技術に触ってみた”ちょっとした実験ノートとして読んでいただければと思います。

MCPって何?

MCP(Model Context Protocol)は、ざっくり言うと
「AIアシスタントに、外部のツールやデータへアクセスする手段を渡すための共通規格」 です。

イメージとしては、AIにとってのUSBポートのようなものでしょうか。
これまではAIに何かを頼むとき、人間がコピー&ペーストで情報を渡すのが基本でした。
MCPを使うと、AI自身が「必要なときに」「必要な情報を」取りに行けるようになります。

たとえば、

  • データベースにクエリを投げて結果を返す
  • 自社のドキュメントを検索する
  • 業務システムのレコードを更新する

といった操作を、AIから直接実行できるようになるわけです。

Laravel Boost:Laravel公式のMCPサーバー

Laravel Boost は、2025年にLaravelチームから公式リリースされたMCPサーバーです。
AIアシスタントに対して、Laravelプロジェクトの構造(ルート、モデル、マイグレーション等)
を理解させるための 15以上の専用ツール を提供してくれます。

導入は、Composerでインストールしてインストールコマンドを実行するだけでした。

composer require laravel/boost --dev
php artisan boost:install

これだけで、Claude Codeなどの対応エディタに対する設定が自動で行われます。
Claude Code側の手動登録が必要な場合は、以下のコマンドで追加できるようです。

claude mcp add -s local -t stdio laravel-boost php artisan boost:mcp

導入後、Claudeに「このアプリのルート一覧を教えて」と聞いてみると、
Boostが内部的にroute:list相当の情報を返してくれて、Claude側はそれを踏まえた回答を返してきます。

DBスキーマの参照やEloquentモデルの解析、ログ参照といった操作も窓口として用意されており、
「AIが自分から取りに行ける情報」がどれくらい広がるのか、雰囲気はつかめました。

せっかくなので自分でもMCPサーバーを作ってみた

Laravel Boostを触るうちに、その土台にある laravel/mcp パッケージを使えば
自分でもMCPサーバーが書けると分かりました。

ちょうど社内で出社管理システムを開発していたので、
これをMCPサーバー化して 「Claudeから自然言語で出社状況を登録できる」 状態を目指してみました。

MCPサーバーの定義

サーバー本体は、登録するツール群をまとめたクラスとして定義します。

#[Name('Attendance Server')]
#[Version('0.0.1')]
#[Instructions('出社管理システムのMCPサーバー。勤怠登録・照会ができます。')]
class AttendanceServer extends Server
{
    protected array $tools = [
        RegisterAttendance::class,
        GetMonthlyAttendance::class,
        GetAttendanceRate::class,
        GetTodayStatus::class,
    ];
}

ツールの実装

各ツールは、入力スキーマと処理本体を書く形になっています。
Laravelに見慣れている人には、ほぼいつもの作法という印象でした。

// app/Mcp/Tools/RegisterAttendance.php
#[Description('指定日のステータスを登録・更新する')]
class RegisterAttendance extends Tool
{
    public function schema(JsonSchema $schema): array
    {
        return [
            'date' => $schema->string()->description('対象日 (Y-m-d)')->required(),
            'status' => $schema->string()->description('出社/テレワーク/有休 等')->required(),
        ];
    }

    public function handle(Request $request): Response
    {
        $attendance = Attendance::updateOrCreate(
            ['user_id' => $request->user()->id, 'date' => $request->string('date')],
            ['status' => $request->string('status')]
        );
        return Response::json($attendance);
    }
}

Claude Codeへの接続

最後に、.mcp.jsonに接続情報を書けば完了です。

{
  "mcpServers": {
    "attendance": {
      "command": "docker",
      "args": ["exec", "-i", "attendance_management-laravel.test-1",
               "php", "artisan", "mcp:start", "attendance"]
    }
  }
}

動かしてみた感想

実際にClaudeとチャットして、こんなやり取りができるようになりました。

私:「来週月〜水をテレワーク、木金を出社で登録して」
Claude:「登録しました(月:テレワーク/火:テレワーク/…)」

私:「今月の出社率は?」
Claude:「34.2%です」

「自然言語で書いた依頼が、自分の作ったツール経由でDBまで届いて返ってくる」のが
目で見て確かめられたのは、なかなか面白い体験でした。

特に 「来週まるごと登録」「条件付きの一括登録」 のような操作は、
UIで作るよりもAIに頼んだ方が圧倒的に速いと感じます。
一方で、AIの応答内容が常に意図通りになるとは限らず、
ツールの設計や説明文(Description)の書き方によって動きがかなり変わります。

「AIに何を渡し、どこまで任せるか」を考えること自体が、
別種の設計作業なのだなという感想を持ちました。

現状の課題と、これから

楽しい半面、本格的に何かに使おうとすると当然ながら課題も見えてきます。
最初に目に付いたのが 認証・権限制御 です。


今回の検証ではログインユーザーに紐づく形で素朴に動かしましたが、
実際の業務システムでは「自分の予定は登録できるが、他のメンバーの予定は管理職のみ操作可能」
といったロール別のルールが当たり前にあります。
MCPツール経由でも同じルールを通すには、各ツールの handle() 内で $request->user() を見て
Policyを通すといった追加の作り込みが必要そうです。

このあたりは今回の検証範囲では深く踏み込んでいません。

そもそもAIに業務システムの操作を任せること自体、ログ・監査・誤動作リスクなど考えるべきことが多く、軽々に「便利だから本番投入しましょう」と言える話ではないとも感じました。
ここから先は、機会があれば改めてじっくり検討してみたいテーマです。

まとめ

今回はLaravel Boostをきっかけに、
自分で書いたMCPサーバーをClaudeから操作するところまで体験してみました。

  • MCP は、AIに外部ツールへの「手」を渡すための共通規格
  • Laravel Boost はLaravel公式のMCPサーバーで、導入は思った以上に手軽
  • laravel/mcp を使えば、Laravelに慣れている人なら自前のMCPサーバーも書ける

新しい技術は、ドキュメントを読むよりも一度触ってみると印象がガラリと変わることがあります。

MCPもまさにそういう類の題材で、「AIから自作ツールが呼ばれて返事が返ってくる」
という素朴な体験ひとつで、しばらくは色々と考えるネタが尽きないだろうな、という気分になりました。

ご興味のある方は、ぜひLaravel Boostから入口を覗いてみてください。

dot
dot
PAGETOP