Размещение MCP-сервера внутри приложения Laravel

ИИ-агентам нужно нечто большее, чем просто спарсенный UI. Им нужен способ вызова конкретных инструментов с соответствующими правами доступа. Именно это и делает Model Context Protocol (MCP).

Недавно я интегрировал MCP-сервер напрямую в приложение Laravel. Я хочу поделиться архитектурными решениями для его безопасной реализации.

Метафора с администратором

Представьте ваше приложение как офисное здание.

  • Веб-интерфейс — это вестибюль для людей.
  • REST API — это служебный вход для систем.
  • MCP-сервер — это стойка регистрации для ИИ-агентов.

Агент предъявляет удостоверение личности и запрашивает выполнение конкретной задачи. Администратор не выдает ему ключи от всего здания. Он проверяет права доступа, выполняет одну задачу и возвращает структурированный ответ.

Ключевые архитектурные решения

1. Используйте единую конечную точку

Не создавайте множество маршрутов для разных инструментов. Используйте один эндпоинт /mcp. Протокол автоматически обрабатывает обнаружение инструментов. Единую точку входа проще защитить и документировать.

2. Поддерживайте двойную аутентификацию

Разным вызывающим сторонам требуются разные методы безопасности:

  • Собственные (first-party) клиенты (например, CLI-инструменты) используют персональные токены доступа Sanctum.
  • Сторонние (third-party) агенты (действующие от имени пользователей) используют OAuth 2.1.

Используйте резолвер в стиле драйверов для обработки обоих случаев. Код инструмента должен заботиться только об аутентифицированном пользователе, а не о том, как именно он вошел в систему.

3. Соблюдайте существующую модель RBAC

Аутентификация лишь подтверждает, кто вызывает систему. Вы все равно должны проверять, что пользователю разрешено делать. Каждый инструмент должен сопоставляться с существующей возможностью (ability). Если пользователь не может просматривать участников в веб-интерфейсе, он не должен иметь возможности сделать это через MCP.

4. Ограничивайте вывод данных

Никогда не возвращайте полную модель базы данных. Относитесь к выводу MCP как к публичному API. Возвращайте только те конкретные поля, которые необходимы агенту. Это предотвращает случайные утечки данных.

Тестирование безопасности

Ваши тесты должны доказывать, что система корректно обрабатывает ошибки. Проверьте, что:

  • Неавторизованный пользователь получает ошибку 403 Forbidden.
  • Авторизованный пользователь получает только разрешенные поля.

Хороший набор тестов — ваша лучшая защита от утечек данных при использовании автономных агентов.

Итоги

Чтобы создать ответственный MCP-сервер, следуйте этим трем правилам:

  • Аутентифицируйте каждого вызывающего участника, используя подходящую схему.
  • Авторизуйте каждый инструмент, используя вашу существующую модель разрешений.
  • Относитесь к выводу каждого инструмента как к ограниченному публичному ресурсу.

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