Xử lý lỗi MCP Server: Những gì tôi đã học được

Tôi cứ ngỡ mình đã hoàn thành sau khi MCP server chạy lần đầu tiên. Nó trả về một danh sách công cụ. Nó gọi một công cụ. Tôi cảm thấy mình đã thành công.

Nhưng tôi đã lầm.

Việc vận hành một MCP server trong môi trường thực tế đã dạy tôi rằng các bài hướng dẫn thường chỉ tập trung vào "happy path" (kịch bản lý tưởng). Chúng bỏ qua những gì xảy ra khi có sự cố. Đây là những gì tôi đã học được trong quá trình xây dựng một server cho kho kiến thức 1.800 giờ của mình.

  • Luôn trả về nội dung cho các kết quả trống Hầu hết các client sẽ bị treo khi nhận được một phản hồi trống. Nếu tìm kiếm của bạn không tìm thấy gì, đừng trả về rỗng. Hãy trả về một tin nhắn văn bản. Hãy cho người dùng biết tại sao không có kết quả và có bao nhiêu mục tồn tại trong cơ sở dữ liệu của bạn.

  • Quản lý việc khởi đầu kết nối chậm Tôi lưu trữ trên một gói miễn phí có chế độ ngủ (sleep). Khi nó thức dậy, phải mất 15 giây. Nhiều MCP client sẽ bị timeout trước thời gian đó. • Gửi các header sớm để giữ kết nối luôn hoạt động. • Thiết lập giới hạn cứng cho kích thước phản hồi. Cắt bớt các kết quả lớn để không chạm ngưỡng giới hạn timeout.

  • Ngừng việc xây dựng JSON thủ công Chỉ một dấu ngoặc kép không được escape trong tiêu đề đã làm hỏng toàn bộ phản hồi JSON của tôi. Client đã ngắt kết nối mà không có lỗi nào được báo. Hãy sử dụng một framework như Jackson để xử lý việc serialization. Hãy để thư viện quản lý việc escape cho bạn.

  • Dự đoán sự không nhất quán trong xác thực Các client khác nhau xử lý API key theo những cách khác nhau. Một số dùng header. Một số dùng query parameters. Một số không dùng cả hai. • Hỗ trợ nhiều cách để gửi key. • Luôn trả về một body lỗi JSON chuẩn nếu xác thực thất bại.

  • Thiết lập Content-Length rõ ràng Một số client gặp khó khăn với chunked encoding. Nếu phản hồi của bạn bị cắt bớt, hãy ngừng sử dụng nén (compression). Hãy tính toán trước kích thước phản hồi và thiết lập header Content-Length một cách rõ ràng.

Ưu điểm: • Quyền riêng tư: Chỉ những đoạn trích liên quan mới được gửi đến AI. • Khả năng tương tác: Server hoạt động trên nhiều client khác nhau. • Sự đơn giản: Server của tôi chỉ có 150 dòng code.

Nhược điểm: • Hệ sinh thái còn non trẻ: Tài liệu còn thiếu nhiều trường hợp biên (edge cases). • Lưu trữ: Bạn phải tự quản lý các endpoint và tình trạng cold start. • Sự tiến hóa: Giao thức thay đổi thường xuyên.

MCP đã biến những ghi chú không dùng đến của tôi thành một công cụ hữu ích. Nó giúp dữ liệu của tôi sẵn sàng để AI có thể thực hiện những công việc nặng nhọc.

Bạn đã từng xây dựng MCP server chưa? Bạn đã gặp phải những lỗi gì? Hãy cho tôi biết dưới phần bình luận nhé.

Nguồn: https://dev.to/kevinten10/mcp-server-error-handling-what-i-learned-building-a-production-mcp-server-for-my-1800-hour-1pha

Cộng đồng học tập tùy chọn: https://t.me/GyaanSetuAi