📖 Nội dung bài học
Tóm tắt
Client và server MCP giao tiếp bằng cách trao đổi các thông điệp JSON, nhưng làm thế nào các thông điệp này thực sự được truyền đi? Kênh giao tiếp được sử dụng gọi là transport, và có nhiều cách để triển khai nó - từ các yêu cầu HTTP đến WebSockets, thậm chí ghi JSON lên bưu thiếp (mặc dù cách cuối cùng không được khuyến nghị cho môi trường production).
Transport Stdio
Khi bạn mới bắt đầu phát triển server hoặc client MCP, transport được sử dụng phổ biến nhất là transport stdio. Cách tiếp cận này rất đơn giản: client khởi chạy server MCP như một tiến trình con và giao tiếp thông qua các luồng standard input và output.

Cách hoạt động như sau:
- Client gửi thông điệp đến server bằng cách sử dụng
stdincủa server. - Server phản hồi bằng cách ghi vào
stdout. - Server hoặc client có thể gửi thông điệp bất cứ lúc nào.
- Chỉ hoạt động khi client và server chạy trên cùng một máy.
Xem Stdio Hoạt động
Bạn có thể kiểm tra trực tiếp server MCP từ terminal của mình mà không cần viết client riêng. Khi bạn chạy server với uv run server.py, nó sẽ lắng nghe stdin và ghi phản hồi vào stdout. Điều này có nghĩa là bạn có thể dán các thông điệp JSON trực tiếp vào terminal của mình và xem phản hồi của server ngay lập tức.
Output của terminal hiển thị toàn bộ quá trình trao đổi thông điệp, bao gồm các ví dụ thông điệp cho việc khởi tạo và gọi tool.
Chuỗi Kết nối MCP
Mọi kết nối MCP phải bắt đầu bằng một quy trình "bắt tay" ba thông điệp cụ thể:

- Yêu cầu Khởi tạo (Initialize Request) - Client gửi đầu tiên.
- Kết quả Khởi tạo (Initialize Result) - Server phản hồi với các khả năng.
- Thông báo Đã Khởi tạo (Initialized Notification) - Client xác nhận (không cần phản hồi).
Chỉ sau quy trình "bắt tay" này, bạn mới có thể gửi các yêu cầu khác như gọi tool hoặc liệt kê prompt.
Loại Thông điệp và Luồng Dữ liệu
MCP hỗ trợ nhiều loại thông điệp khác nhau, di chuyển theo cả hai chiều:

Điểm mấu chốt là một số thông điệp yêu cầu phản hồi (yêu cầu → kết quả) trong khi những thông điệp khác thì không (thông báo). Cả client và server đều có thể bắt đầu giao tiếp bất cứ lúc nào.
Bốn Kịch bản Giao tiếp
Với bất kỳ transport nào, bạn cần xử lý bốn mẫu giao tiếp khác nhau:

- Yêu cầu Client → Server: Client ghi vào stdin.
- Phản hồi Server → Client: Server ghi vào stdout.
- Yêu cầu Server → Client: Server ghi vào stdout.
- Phản hồi Client → Server: Client ghi vào stdin.
Sự tuyệt vời của transport stdio là sự đơn giản của nó - bất kỳ bên nào cũng có thể bắt đầu giao tiếp bất cứ lúc nào bằng hai kênh này.
Tại sao Điều này Quan trọng
Hiểu về transport stdio là rất quan trọng vì nó đại diện cho trường hợp "lý tưởng" nơi giao tiếp hai chiều diễn ra liền mạch. Khi chúng ta chuyển sang các transport khác như HTTP, chúng ta sẽ gặp phải những hạn chế nơi server không phải lúc nào cũng có thể gửi yêu cầu đến client. Transport stdio đóng vai trò là cơ sở để chúng ta hiểu giao tiếp MCP đầy đủ trông như thế nào trước khi chúng ta giải quyết các ràng buộc của các phương thức transport khác.
Đối với việc phát triển và kiểm thử, transport stdio là hoàn hảo. Đối với triển khai production, nơi client và server cần chạy trên các máy khác nhau, bạn sẽ cần xem xét các tùy chọn transport khác với những đánh đổi riêng của chúng.
🔁 Bài học liên quan
- Bài tiếp: The StreamableHTTP transport
- Bài trước: JSON message types
- Cùng section: JSON message types · The StreamableHTTP transport · StreamableHTTP in depth
- 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/296291
- © 2025 Anthropic. Chỉ dùng cho mục đích giáo dục, fair-use.
- Crawl: 2026-04-23 · Chuẩn hoá: 2026-05-01