Tích hợp MCP Server vào trong ứng dụng Laravel
Các tác nhân AI (AI agents) cần nhiều hơn là chỉ một giao diện người dùng được cào dữ liệu (scraped UI). Chúng cần một cách để gọi các công cụ cụ thể với các quyền hạn phù hợp. Đây chính là vai trò của Model Context Protocol (MCP).
Gần đây, tôi đã tích hợp trực tiếp một MCP server vào một ứng dụng Laravel. Tôi muốn chia sẻ các quyết định về mặt kiến trúc để xây dựng hệ thống này một cách bảo mật.
Phép ẩn dụ về Nhân viên lễ tân
Hãy coi ứng dụng của bạn như một tòa nhà văn phòng.
- Giao diện web (web UI) là sảnh chờ dành cho con người.
- REST API là lối đi dành cho nhân viên dành cho các hệ thống.
- MCP server là bàn lễ tân dành cho các tác nhân AI.
Tác nhân sẽ xuất trình ID và yêu cầu một tác vụ cụ thể. Nhân viên lễ tân không đưa chìa khóa tòa nhà cho họ. Họ sẽ kiểm tra quyền hạn, thực hiện một tác vụ và trả về một câu trả lời có cấu trúc.
Các quyết định thiết kế then chốt
1. Sử dụng một endpoint duy nhất
Đừng tạo quá nhiều route cho các công cụ khác nhau. Hãy sử dụng một endpoint /mcp duy nhất. Giao thức này sẽ tự động xử lý việc khám phá công cụ (tool discovery). Một bề mặt tiếp xúc duy nhất sẽ giúp việc bảo mật và viết tài liệu trở nên dễ dàng hơn.
2. Hỗ trợ xác thực kép
Các bên gọi khác nhau cần các phương thức bảo mật khác nhau:
- Các bên gọi nội bộ (như các công cụ CLI) sử dụng personal access tokens của Sanctum.
- Các tác nhân bên thứ ba (đóng vai trò thay mặt người dùng) sử dụng OAuth 2.1.
Sử dụng một bộ giải quyết (resolver) theo kiểu driver để xử lý cả hai. Mã nguồn của công cụ chỉ nên quan tâm đến người dùng đã được xác thực, chứ không phải cách họ đăng nhập.
3. Áp dụng RBAC hiện có
Xác thực (Authentication) chỉ chứng minh bên gọi là ai. Bạn vẫn phải kiểm tra xem họ có thể làm gì. Mỗi công cụ nên được ánh xạ tới một quyền (ability) hiện có. Nếu một người dùng không thể xem danh sách người tham gia trên giao diện web, họ cũng không nên thực hiện được việc đó thông qua MCP.
4. Giới hạn dữ liệu đầu ra
Đừng bao giờ trả về toàn bộ một database model. Hãy coi đầu ra của MCP như một API công khai. Chỉ trả về các trường (fields) cụ thể mà tác nhân cần. Điều này giúp ngăn chặn việc rò rỉ dữ liệu ngoài ý muốn.
Kiểm thử bảo mật
Các bài kiểm tra của bạn phải chứng minh được rằng hệ thống sẽ xử lý lỗi một cách chính xác. Hãy kiểm tra rằng:
- Một người dùng không được phép sẽ nhận được lỗi 403 Forbidden.
- Một người dùng được phép chỉ nhận được các trường được cho phép.
Một bộ kiểm thử (test suite) tốt là lá chắn tốt nhất của bạn chống lại việc rò rỉ dữ liệu khi sử dụng các tác nhân tự trị (autonomous agents).
Tóm tắt
Để xây dựng một MCP server có trách nhiệm, hãy tuân thủ ba quy tắc sau:
- Xác thực mọi bên gọi bằng phương thức phù hợp.
- Phân quyền cho mọi công cụ bằng mô hình phân quyền hiện có của bạn.
- Coi mọi đầu ra của công cụ như một tài nguyên công khai có giới hạn.
