Server MCP đầu tiên của bạn chạy STDIO trên laptop — đơn giản, an toàn. Nhưng khi cần phục vụ cả team qua mạng, bạn bước vào thế giới StreamableHTTP, session và một cạm bẫy kinh điển: bật chế độ stateless mà không biết mình vừa tắt đi những gì.
- Chọn đúng transport: STDIO hay StreamableHTTP
- Hiểu cái giá của stateless_http — những tính năng nào tắt theo
- Checklist an toàn trước khi mở server cho người khác dùng
- Đã xây MCP server cơ bản (khóa Introduction to MCP)
- Hiểu HTTP ở mức căn bản
Hai transport, hai thế giới
Quy tắc chọn nhanh: chạy trên máy ai thì phục vụ người đó → STDIO. Cần một địa chỉ chung nhiều người gọi → StreamableHTTP.
- STDIO: client khởi chạy server như tiến trình con, nói chuyện qua stdin/stdout. Không mạng, không cổng, không xác thực — lý tưởng cho tool cá nhân chạy local
- StreamableHTTP: server đứng độc lập sau một URL, nhiều client kết nối qua mạng — bắt buộc khi chia sẻ cho team hoặc deploy cloud
StreamableHTTP: request thường + kênh đẩy ngược
Điểm khác biệt với REST thuần: ngoài các request thường, MCP cần đường để SERVER chủ động đẩy tin cho client — báo tiến độ, log, yêu cầu sampling. StreamableHTTP giải quyết bằng kênh SSE: client mở sẵn một kết nối chờ, server đẩy tin qua đó bất cứ lúc nào.
Hiểu kênh này tồn tại là hiểu được cạm bẫy lớn nhất ở mục sau.
stateless_http — cái giá của scale
Đây là nguồn bug số một của MCP production: bật cờ để scale, ba tuần sau mới nhận ra progress bar "biến mất" từ lúc nào.
- Progress và log notification: không còn đường tới client
- Sampling (server mượn model của client): tắt
- Roots, subscription: tắt
- Tool call thường và tools/list: VẪN CHẠY — vì vậy bạn tưởng mọi thứ ổn
Chọn cấu hình theo nhu cầu thật
- Tool cá nhân, chạy local → STDIO, khỏi nghĩ thêm
- Team nhỏ, một server → StreamableHTTP có session (mặc định), giữ đủ tính năng
- Public/scale lớn, tool đơn giản → stateless_http + thiết kế tool KHÔNG cần progress/sampling ngay từ đầu
Checklist trước khi mở cho người khác
Khóa MCP: Advanced Topics đi sâu từng mục này với walkthrough end-to-end — đáng học trọn nếu bạn nghiêm túc vận hành MCP.
- Xác thực: server HTTP không auth là cửa mở cho cả internet
- Giới hạn tài nguyên: timeout mỗi tool call, trần kích thước response
- Log đủ để truy vết: ai gọi tool gì, lúc nào, tham số gì
- Thử tắt-bật stateless trên staging và chạy lại TOÀN BỘ tool — bắt tính năng chết âm thầm trước người dùng
Củng cố những gì bạn vừa học
3 câu trắc nghiệm · đạt từ 70% · câu hỏi và đáp án xáo trộn mỗi lần.