Nhật ký Phát triển: MCP, Theo dõi Email và Cấu trúc Menu

Tôi đã dành cả ngày để xây dựng các MCP server, hệ thống theo dõi email tự động và các menu quản trị có khả năng mở rộng.

Dưới đây là những bài học cốt lõi rút ra từ công việc này.

An toàn cho MCP Server

Tôi đã phát hành một bộ công cụ MCP dùng chung và triển khai các server trên nhiều ứng dụng doanh nghiệp. Khi xây dựng các agent có khả năng tương tác với hệ thống của bạn, hãy tuân thủ các quy tắc sau:

  • Cấp quyền sử dụng các công cụ đọc (read tools) một cách thoải mái.
  • Cấp quyền sử dụng các công cụ ghi (write tools) một cách hạn chế.
  • Bắt buộc mọi hành động ghi phải thông qua một quy trình (runbook) có sự phê duyệt của con người.
  • Mã hóa băm (hash) mật khẩu trong các công cụ tạo người dùng. Tuyệt đối không lưu trữ dưới dạng văn bản thuần (plaintext).
  • Sử dụng UUID công khai cho nhật ký kiểm tra (audit logs). Đừng bao giờ làm rò rỉ ID cơ sở dữ liệu nội bộ.
  • Sử dụng cơ chế dự phòng (fallback) cho ngữ cảnh người dùng. Một agent có thể sử dụng HTTP hoặc STDIO. Hãy đảm bảo mã của bạn xử lý được cả hai.

Theo dõi Email mà không cần thao tác thủ công

Tôi đã xây dựng một hệ thống tự động theo dõi lượt mở và lượt nhấp chuột vào email. Đừng bắt các lập trình viên phải thêm pixel theo dõi vào từng email. Thay vào đó, hãy sử dụng một trình lắng nghe (listener) gửi thư.

  • Trình lắng nghe sẽ chặn tin nhắn.
  • Nó chèn pixel theo dõi vào HTML.
  • Nó bao bọc tất cả các liên kết để theo dõi lượt nhấp.
  • Nó thêm một mã băm metadata để dễ dàng đối chiếu.

Hai lưu ý quan trọng:

  • Tránh sử dụng Mail::raw(). Nó sẽ bỏ qua lộ trình ghi lại HTML. Hãy sử dụng các HTML Mailables chuẩn để đảm bảo việc theo dõi hoạt động chính xác.
  • Thiết lập theo dõi ở chế độ "on" theo mặc định. Nếu người dùng phải tự bật nó lên, họ sẽ quên mất.

Menu Quản trị có khả năng mở rộng

Khi bạn quản lý các menu trên nhiều ứng dụng, đừng sử dụng một tệp khổng lồ duy nhất. Hãy sử dụng các lớp builder nhỏ cho từng nhóm.

  • Tạo một lớp cho mỗi nhóm (ví dụ: Settings, User Management).
  • Mỗi lớp sẽ khai báo các mục riêng và các quyền cần thiết.
  • Điều này giúp việc điều hướng của bạn mang tính khai báo (declarative).
  • Cắt ngắn các nhãn dài ngay bên trong component, thay vì thực hiện trên từng mục riêng lẻ.
  • Kiểm soát các công cụ thông qua hai bước kiểm tra: quyền người dùng và phiên bản ứng dụng cụ thể.

Bức tranh toàn cảnh

Mục tiêu là làm cho mạng lưới an toàn trở nên tự động.

Nếu một công cụ chẩn đoán có ích, hãy bật nó theo mặc định. Nếu bạn phải nhớ để bật nó lên, bạn sẽ không có nó khi hệ thống gặp sự cố vào lúc 2 giờ sáng. Hãy mã hóa các bài học của bạn vào trong các công cụ để bạn không phải học lại chúng.

Nguồn: https://dev.to/nasrulhazim/dev-log-2026-06-19-mcp-servers-everywhere-email-that-tracks-itself-and-menus-that-behave-19il