📖 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 Resultbao gồm headermcp-session-idđặc biệt - Client gửi
Initialized Notificationvớ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_httpjson_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
- Bài tiếp: State and the StreamableHTTP transport
- Bài trước: The StreamableHTTP transport
- Cùng section: JSON message types · The STDIO transport · The StreamableHTTP transport
- Thuộc lộ trình: Path D
- Docs tham khảo: Glossary · Skills atlas · By use-case
📚 Nguồn & ghi nhận
- Bài học gốc Anthropic Academy: https://anthropic.skilljar.com/model-context-protocol-advanced-topics/296286
- © 2025 Anthropic. Chỉ dùng cho mục đích giáo dục, fair-use.
- Crawl: — · Chuẩn hoá: 2026-05-01