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

StreamableHTTP in depth

📖 Nội dung bài học

Tóm tắt

StreamableHTTP là giải pháp của MCP cho một vấn đề cơ bản: một số chức năng của MCP yêu cầu server gửi request đến client, nhưng HTTP lại gây khó khăn cho việc này. Hãy cùng tìm hiểu cách StreamableHTTP giải quyết giới hạn này và khi nào bạn cần phá vỡ giải pháp này.

Vấn đề cốt lõi

Một số tính năng của MCP như sampling, notifications, và logging dựa vào việc server khởi tạo request đến client. Tuy nhiên, HTTP được thiết kế để client gửi request đến server, chứ không phải ngược lại. StreamableHTTP giải quyết vấn đề này bằng một giải pháp thông minh sử dụng Server-Sent Events (SSE).

Cách StreamableHTTP hoạt động

Điều kỳ diệu xảy ra thông qua một quy trình nhiều bước, thiết lập các kết nối liên tục giữa client và server.

Thiết lập kết nối ban đầu

Quy trình bắt đầu giống như bất kỳ kết nối MCP nào:

  • Client gửi Initialize Request đến server
  • Server phản hồi bằng Initialize Result bao gồm header mcp-session-id đặc biệt
  • Client gửi Initialized Notification với session ID

Session ID này rất quan trọng - nó xác định duy nhất client và phải được bao gồm trong tất cả các request sau này.

Giải pháp SSE

Sau khi khởi tạo, client có thể gửi GET request để thiết lập kết nối Server-Sent Events. Điều này tạo ra một phản hồi HTTP kéo dài, mà server có thể dùng để stream messages trở lại client bất cứ lúc nào.

Kết nối SSE này là chìa khóa để cho phép giao tiếp server-to-client. Server giờ đây có thể gửi request, notifications, và các messages khác thông qua kênh liên tục này.

Tool Calls và kết nối SSE kép

Khi client thực hiện tool call, mọi thứ trở nên phức tạp hơn. Hệ thống tạo ra hai kết nối SSE riêng biệt:

  • Kết nối SSE chính: Dùng cho các request do server khởi tạo và luôn mở
  • Kết nối SSE dành riêng cho tool: Được tạo cho mỗi tool call và tự động đóng khi tool result được gửi

Định tuyến message

Các loại message khác nhau được định tuyến qua các kết nối khác nhau:

  • Progress notifications: Gửi qua kết nối SSE chính
  • Logging messages và tool results: Gửi qua kết nối SSE dành riêng cho tool

Các cờ cấu hình phá vỡ giải pháp

StreamableHTTP bao gồm hai tùy chọn cấu hình quan trọng:

  • stateless_http
  • json_response

Thiết lập các tùy chọn này thành True có thể phá vỡ cơ chế giải pháp SSE. Bạn có thể muốn bật các cờ này trong một số trường hợp nhất định, nhưng việc này sẽ giới hạn các chức năng đầy đủ của MCP phụ thuộc vào giao tiếp server-to-client.

Những điểm chính cần ghi nhớ

StreamableHTTP phức tạp hơn các phương thức truyền tải MCP khác vì nó phải giải quyết các giới hạn của HTTP. Giải pháp dựa trên SSE cho phép các chức năng đầy đủ của MCP qua HTTP, nhưng việc hiểu mô hình kết nối kép là rất quan trọng để gỡ lỗi và tối ưu hóa.

Khi xây dựng các ứng dụng MCP với StreamableHTTP, hãy nhớ rằng session ID là bắt buộc cho tất cả các request sau khi khởi tạo và hệ thống tự động quản lý nhiều kết nối SSE để xử lý các loại giao tiếp server-to-client khác nhau.

🔁 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?