在 Laravel 应用中集成 MCP Server

AI Agent 不仅仅需要抓取的 UI。它们还需要一种能够以适当权限调用特定工具的方式。这正是 Model Context Protocol (MCP) 所做的事情。

我最近直接在 Laravel 应用中集成了一个 MCP server。我想分享一下为了确保安全性而在构建过程中所做的架构决策。

接待员比喻

把你的应用想象成一栋办公楼。

  • Web UI 是供人类使用的门厅。
  • REST API 是供系统使用的员工通道。
  • MCP server 是供 AI Agent 使用的接待台。

Agent 出示 ID 并请求执行特定任务。接待员不会把大楼的钥匙交给它们。接待员会检查权限,执行一项任务,然后返回一个结构化的答案。

关键设计决策

1. 使用单一端点

不要为不同的工具创建许多路由。使用一个 /mcp 端点。该协议会自动处理工具发现。单一的接口更容易进行安全防护和文档编写。

2. 支持双重身份验证

不同的调用者需要不同的安全方法:

  • 第一方调用者(如 CLI 工具)使用 Sanctum personal access tokens。
  • 第三方 Agent(代表用户操作)使用 OAuth 2.1。

使用驱动模式的解析器(driver-style resolver)来处理两者。工具代码应该只关心已认证的用户,而不关心他们是如何登录的。

3. 强制执行现有的 RBAC

身份验证只能证明调用者是谁。你仍然必须检查他们能做什么。每个工具都应该映射到一个现有的能力(ability)。如果用户无法在 Web UI 中查看参与者,他们也不应该能通过 MCP 进行查看。

4. 限制数据输出

永远不要返回完整的数据库模型。将 MCP 输出视为公共 API。仅返回 Agent 需要的特定字段。这可以防止意外的数据泄露。

安全性测试

你的测试必须证明系统在出错时能正确处理。测试以下内容:

  • 未经授权的用户收到 403 Forbidden 错误。
  • 获得授权的用户仅收到允许的字段。

在使用自主 Agent 时,完善的测试套件是防止数据泄露的最佳防御。

总结

要构建一个负责任的 MCP server,请遵循以下三条规则:

  • 使用正确的方案对每个调用者进行身份验证。
  • 使用现有的权限模型对每个工具进行授权。
  • 将每个工具的输出视为受限的公共资源。

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