Bỏ qua đến nội dung chính

Transport HTTP có thể stream

📖 Nội dung bài học

Tóm tắt

Transport HTTP có thể stream cho phép client MCP kết nối với server được host từ xa qua kết nối HTTP. Khác với transport I/O tiêu chuẩn yêu cầu cả client và server cùng trên một máy, transport này mở ra khả năng cho các server MCP công khai mà bất kỳ ai cũng có thể truy cập.

Tuy nhiên, có một lưu ý quan trọng: một số cài đặt cấu hình có thể hạn chế đáng kể chức năng của server MCP của bạn. Nếu ứng dụng của bạn hoạt động hoàn hảo với transport I/O cục bộ nhưng bị lỗi khi triển khai với transport HTTP, đây có thể là nguyên nhân.

Cài đặt cấu hình quan trọng

Hai cài đặt chính kiểm soát cách transport HTTP có thể stream hoạt động:

  • stateless_http - Kiểm soát quản lý trạng thái kết nối
  • json_response - Kiểm soát xử lý định dạng phản hồi

Mặc định, cả hai cài đặt đều là false, nhưng một số kịch bản triển khai có thể buộc bạn phải đặt chúng thành true. Khi được bật, các cài đặt này có thể làm hỏng các chức năng cốt lõi như thông báo tiến trình, ghi log và các yêu cầu do server khởi tạo.

Thách thức giao tiếp HTTP

Để hiểu tại sao những hạn chế này tồn tại, chúng ta cần xem lại cách giao tiếp HTTP hoạt động. Trong HTTP tiêu chuẩn:

  • Client có thể dễ dàng khởi tạo yêu cầu đến server (server có một URL đã biết)
  • Server có thể dễ dàng phản hồi các yêu cầu này
  • Server không thể dễ dàng khởi tạo yêu cầu đến client (client không có URL đã biết)
  • Các mẫu phản hồi từ client về server trở nên có vấn đề

Các loại tin nhắn MCP bị ảnh hưởng

Hạn chế HTTP này ảnh hưởng đến các mẫu giao tiếp MCP cụ thể. Các loại tin nhắn sau đây trở nên khó triển khai với HTTP thuần túy:

  • Yêu cầu do server khởi tạo: Yêu cầu tạo tin nhắn, Yêu cầu liệt kê gốc
  • Thông báo: Thông báo tiến trình, Thông báo ghi log, Thông báo đã khởi tạo, Thông báo đã hủy

Đây chính xác là những tính năng bị lỗi khi bạn bật các cài đặt HTTP hạn chế. Thanh tiến trình biến mất, ghi log ngừng hoạt động và các yêu cầu lấy mẫu do server khởi tạo thất bại.

Giải pháp HTTP có thể stream

Transport HTTP có thể stream cung cấp một giải pháp thông minh để khắc phục những hạn chế của HTTP, nhưng nó đi kèm với những đánh đổi. Khi bạn buộc phải sử dụng stateless_http=True hoặc json_response=True, bạn thực chất đang yêu cầu transport hoạt động trong giới hạn của HTTP thay vì tìm cách vượt qua chúng.

Hiểu rõ những hạn chế này giúp bạn đưa ra quyết định sáng suốt về:

  • Nên sử dụng transport nào cho các kịch bản triển khai khác nhau
  • Cách thiết kế server MCP của bạn để xử lý các ràng buộc HTTP một cách mượt mà
  • Khi nào chấp nhận chức năng bị giảm để đổi lấy lợi ích của việc host từ xa

Điều quan trọng là phải biết rằng những hạn chế này tồn tại và lên kế hoạch kiến trúc server MCP của bạn cho phù hợp. Nếu ứng dụng của bạn phụ thuộc nhiều vào các yêu cầu do server khởi tạo hoặc thông báo thời gian thực, bạn có thể cần xem xét lại lựa chọn transport hoặc triển khai các mẫu giao tiếp thay thế.

🔁 Bài học liên quan

📚 Nguồn & ghi nhận

Bài học có hữu ích không?

Góp ý / Báo lỗiPhát hiện sai sót hoặc có ý tưởng cải thiện?