Bỏ qua để đến nội dung

StreamableHTTP chuyên sâu

Bài viết được dịch tự động từ bài viết gốc, chưa được kiểm tra lại bởi con người. Chỉ những bài viết có dấu tick xanh cạnh tiêu đề là đã được kiểm tra.

Các tính năng MCP như sampling, notification, và logging đòi hỏi server phải chủ động gửi request tới client, nhưng kiến trúc client-tới-server của HTTP khiến việc này về cơ bản là một thách thức.

StreamableHTTP dùng Server-Sent Events (SSE) để thiết lập các kết nối lâu dài, cho phép giao tiếp từ server tới client qua HTTP.

  • Client gửi một Initialize Request.
  • Server phản hồi kèm header mcp-session-id.
  • Client gửi một Initialized Notification kèm session ID đó.
  • Session ID phải đi kèm mọi request tiếp theo.

Minh hoạ quá trình kết nối StreamableHTTP Quá trình thiết lập kết nối StreamableHTTP.

SSE tạo ra các response HTTP tồn tại lâu dài, cho phép server stream message ngược về client bất cứ lúc nào.

Sơ đồ thiết lập kết nối SSE Thiết lập một kết nối SSE lâu dài.

Hai kết nối SSE song song cho mỗi lệnh gọi tool

Phần tiêu đề “Hai kết nối SSE song song cho mỗi lệnh gọi tool”
  • Kết nối SSE chính: xử lý các request do server chủ động khởi tạo, luôn mở vô thời hạn.
  • Kết nối SSE riêng cho từng tool: được tạo cho mỗi lệnh gọi tool, đóng lại sau khi kết quả được truyền xong.
  • Progress notification định tuyến qua kết nối chính.
  • Logging và kết quả tool định tuyến qua kết nối riêng của tool đó.

Hai kết nối SSE song song trong lúc gọi tool Hai kết nối SSE song song: một kết nối chính, một kết nối riêng cho mỗi lệnh gọi tool.

Sơ đồ định tuyến message qua các kết nối khác nhau Định tuyến message: progress qua kết nối chính, log và kết quả qua kết nối riêng của tool.

Các cờ stateless_httpjson_response có thể vô hiệu hoá cách khắc phục bằng SSE này, giới hạn chức năng đầy đủ của MCP.