Putting an MCP Server Inside a Laravel App

AI エージェントには、単にスクレイピングされた UI だけでは不十分です。適切な権限を持って特定のツールを呼び出す方法が必要です。これこそが Model Context Protocol (MCP) が提供するものです。

最近、私は MCP サーバーを Laravel アプリケーションに直接統合しました。これを安全に構築するためのアーキテクチャ上の決定事項を共有したいと思います。

The Receptionist Metaphor アプリをオフィスビルだと考えてみてください。

  • Web UI は人間用のロビーです。
  • REST API はシステム用のスタッフ専用入口です。
  • MCP サーバーは AI エージェント用の受付デスクです。

エージェントは ID を提示し、特定のタスクを依頼します。受付係は建物の鍵を渡すわけではありません。権限を確認し、一つのタスクを実行して、構造化された回答を返します。

Key Design Decisions

  1. Use a single endpoint ツールごとに多くのルートを作成しないでください。/mcp エンドポイントを一つだけ使用します。プロトコルがツールの検出を自動的に行います。接点を一つに絞ることで、セキュリティ対策とドキュメント化が容易になります。

  2. Support dual authentication 呼び出し元によって異なるセキュリティ手法が必要です。

  • ファーストパーティの呼び出し元(CLI ツールなど)は、Sanctum のパーソナルアクセストークンを使用します。
  • サードパーティのエージェント(ユーザーに代わって動作するもの)は、OAuth 2.1 を使用します。

両方を処理するために、ドライバー形式のリゾルバーを使用します。ツールのコードは、どのようにログインしたかではなく、認証されたユーザーのみを考慮するようにすべきです。

  1. Enforce existing RBAC 認証は呼び出し元が誰であるかを証明するだけです。そのユーザーが何を実行できるかを依然としてチェックする必要があります。すべてのツールは、既存の権限 (ability) にマッピングされるべきです。もしユーザーが Web UI で参加者を表示できないのであれば、MCP 経由でも表示できてはなりません。

  2. Limit data output データベースモデルを丸ごと返してはいけません。MCP の出力をパブリック API のように扱ってください。エージェントが必要とする特定のフィールドのみを返します。これにより、意図しないデータ漏洩を防ぐことができます。

Testing for Security テストでは、システムが正しく失敗すること(拒否されること)を証明しなければなりません。以下の点を確認してください。

  • 権限のないユーザーが 403 Forbidden エラーを受け取ること。
  • 権限のあるユーザーが、許可されたフィールドのみを受け取ること。

自律型エージェントを使用する場合、優れたテストスイートはデータ漏洩に対する最大の防御策となります。

Summary 責任ある MCP サーバーを構築するには、次の 3 つのルールに従ってください。

  • 適切なスキームを使用して、すべての呼び出し元を認証する。
  • 既存の権限モデルを使用して、すべてのツールを認可する。
  • すべてのツールの出力を、制限されたパブリックリソースとして扱う。

Source: https://dev.to/nasrulhazim/putting-an-mcp-server-inside-a-laravel-app-dual-auth-and-rbac-for-ai-tools-5376