MCP Transport là gì? Tìm hiểu cơ chế truyền tải của Model Context Protocol

MCP Transport là lớp giao tiếp trong Model Context Protocol dùng để truyền thông điệp JSON-RPC giữa Client và Server trên nhiều kiểu hạ tầng khác nhau. Bài viết này giới thiệu khái niệm MCP Transport, mô tả hai loại Transport phổ biến là STDIO và Streamable HTTP hoặc SSE, đồng thời gợi ý cách lựa chọn Transport phù hợp nhất.
Những điểm chính
- Khái niệm cơ bản: Hiểu rõ MCP Transport là lớp trung gian truyền tải dữ liệu giữa ứng dụng AI (Client) và các nguồn dữ liệu bên ngoài (Server), giúp đảm bảo quá trình giao tiếp diễn ra ổn định và bảo mật.
- STDIO Transport: Khám phá cơ chế hoạt động cục bộ thông qua các luồng stdin/stdout, mang lại ưu điểm vượt trội về độ trễ cực thấp, tính bảo mật cao và không yêu cầu cấu hình mạng phức tạp.
- Streamable HTTP/SSE: Nắm bắt giải pháp giao tiếp từ xa dành cho hệ thống phân tán, nơi Server xử lý nhiều kết nối Client qua HTTP POST/GET và truyền phát dữ liệu liên tục qua SSE.
- Lựa chọn tối ưu: Biết cách ứng dụng STDIO cho giai đoạn phát triển/kiểm thử trên máy cá nhân và chuyển sang HTTP/SSE khi cần triển khai Server dùng chung trên hạ tầng đám mây.
- Câu hỏi thường gặp: Được giải đáp các thắc mắc về sự cần thiết của việc xác thực Origin trong SSE, lý do bắt buộc sử dụng định dạng JSON-RPC và mức độ tiện lợi khi thay đổi cấu hình Transport trong mã nguồn.
MCP Transport là gì?
MCP Transport (Model Context Protocol Transport) là lớp giao tiếp trong kiến trúc Model Context Protocol, chịu trách nhiệm truyền tải dữ liệu giữa Client (ứng dụng AI hoặc môi trường thực thi) và Server (hệ thống, công cụ hoặc nguồn dữ liệu bên ngoài). Thành phần này sử dụng chuẩn JSON-RPC 2.0 để định dạng và trao đổi thông điệp, giúp hai phía giao tiếp một cách nhất quán và không phụ thuộc vào chi tiết kỹ thuật của hạ tầng mạng.
Nói cách khác, MCP Transport đóng vai trò là tầng truyền thông trung gian, bảo đảm việc gửi và nhận dữ liệu được thực hiện ổn định, đúng định dạng và an toàn trong toàn bộ quy trình tương tác giữa mô hình AI và các nguồn dữ liệu bên ngoài.

MCP Transport là lớp giao tiếp chịu trách nhiệm truyền tải dữ liệu giữa Client và Server
Các loại MCP Transport phổ biến
STDIO Transport: Giải pháp cho phát triển cục bộ
STDIO (Standard Input Output) cho phép Client tương tác với Server dưới dạng một tiến trình con trên cùng máy. Client khởi chạy tiến trình Server và trao đổi thông điệp JSON-RPC thông qua các luồng stdin và stdout.
Cơ chế hoạt động:
- Khởi chạy Server: Client khởi chạy tệp thực thi của Server dưới dạng tiến trình con trên cùng máy.
- Gửi thông điệp: Client ghi thông điệp JSON-RPC hợp lệ vào stdin của Server.
- Đọc và xử lý: Server đọc thông điệp JSON-RPC từ stdin và thực hiện xử lý tương ứng.
- Trả kết quả: Server ghi thông điệp JSON-RPC hợp lệ chứa kết quả xử lý vào stdout.
- Nhận kết quả: Client đọc dữ liệu từ stdout và giải mã thông điệp JSON-RPC để lấy kết quả.
- Ghi log: Server ghi log dạng văn bản UTF-8 vào stderr, Client có thể thu thập hoặc bỏ qua phần log này.
- Ràng buộc dữ liệu: Dữ liệu ghi lên stdin và stdout chỉ là thông điệp MCP hợp lệ, không lẫn nội dung khác.
Tại sao nên dùng:
- Hiệu năng: Độ trễ cực thấp do không cần qua tầng mạng.
- Bảo mật: Giới hạn trong môi trường cục bộ, không tiếp xúc internet.
- Tiện lợi: Không cần cấu hình port hay chứng chỉ bảo mật phức tạp.
Ví dụ cấu hình trong mcp-config.json:
{
"mcpServers": {
"my-local-server": {
"command": "node",
"args": ["/path/to/server.js"]
}
}
}

Quy trình Client khởi chạy Server qua stdin/stdout
Streamable HTTP/SSE: Giải pháp cho hệ thống từ xa
Streamable HTTP là phương thức Transport trong đó Server hoạt động như một tiến trình độc lập và xử lý nhiều kết nối Client qua HTTP POST và HTTP GET. Cơ chế này có thể sử dụng Server-Sent Events (SSE) để truyền phát nhiều thông điệp từ Server đến Client trên một luồng.
Luồng gửi yêu cầu từ Client đến Server:
- Định nghĩa MCP endpoint: Server cung cấp một URL HTTP duy nhất hỗ trợ cả phương thức POST và GET cho giao tiếp MCP.
- Gửi JSON-RPC qua POST: Client gửi thông điệp JSON-RPC (request, notification hoặc response) trong thân một yêu cầu HTTP POST đến MCP endpoint.
- Xử lý notification/response: Với notification hoặc response, nếu chấp nhận, Server trả về HTTP 202 Accepted, nếu không Server trả về mã lỗi HTTP thích hợp.
- Xử lý request đồng bộ: Với request JSON-RPC, Server có thể trả về phản hồi một lần với nội dung JSON và header Content-Type là application/json.
- Khởi tạo luồng SSE qua POST: Server có thể thay thế phản hồi JSON một lần bằng luồng SSE với Content-Type là text/event-stream để truyền nhiều sự kiện liên quan đến cùng một request.
- Mở luồng SSE qua GET: Client gửi yêu cầu HTTP GET đến MCP endpoint với header Accept text/event-stream để mở luồng SSE cho việc nhận thông điệp từ Server.
- Gửi sự kiện trên SSE: Server gửi các sự kiện SSE chứa request và notification JSON-RPC, và trong trường hợp gắn với một request cụ thể sẽ gửi thêm response JSON-RPC tương ứng trước khi đóng luồng.
- Quản lý ngắt kết nối: Khi luồng SSE bị gián đoạn, Client không mặc định coi là hủy yêu cầu và nếu cần hủy thì gửi CancelledNotification đến Server.
- Gắn ID sự kiện: Server gắn id duy nhất cho từng sự kiện SSE trong phạm vi phiên hoặc trong phạm vi Client để hỗ trợ khả năng tiếp tục.
- Tiếp tục sau ngắt kết nối: Sau khi mất kết nối, Client mở lại luồng SSE bằng HTTP GET và gửi header Last-Event-ID chứa id sự kiện cuối cùng đã nhận để Server có thể phát lại các sự kiện còn thiếu.
Các lưu ý chuyên gia:
- Bảo mật (Cảnh báo): Bạn phải xác thực Origin header để ngăn chặn tấn công DNS Rebinding (chiếm quyền điều khiển kết nối).
- Khả năng mở rộng: Phù hợp cho kiến trúc phân tán, nơi Server chạy trên hạ tầng đám mây.
- Xác thực: Cần triển khai cơ chế Auth (như Bearer Token) để đảm bảo chỉ Client được cấp quyền mới có thể kết nối.

Bảng so sánh nhanh STDIO với HTTP/SSE:
| Tiêu chí | STDIO | HTTP/SSE |
|---|---|---|
| Môi trường | Cục bộ (Local) | Từ xa (Remote) |
| Độ trễ | Rất thấp | Trung bình |
| Cài đặt | Đơn giản | Cần HTTP Server |
| Khả năng mở rộng | Thấp (1-1) | Cao (1-n) |
| Bảo mật | Tự nhiên (Local) | Cần cấu hình chặt chẽ |
Cách chọn MCP Transport phù hợp
Để lựa chọn MCP Transport phù hợp với bối cảnh sử dụng, bạn có thể cân nhắc theo các tiêu chí sau:
- Dùng STDIO khi: Môi trường chạy cục bộ trên một máy, Client có thể trực tiếp khởi chạy process Server, ưu tiên độ trễ thấp và không cần mở dịch vụ ra mạng.
- Dùng HTTP Streamable hoặc SSE khi: Cần triển khai Server từ xa, phục vụ nhiều Client qua mạng, tích hợp với hạ tầng đám mây hoặc kiến trúc phân tán và microservices.
- Lộ trình khuyến nghị: Bạn nên bắt đầu với STDIO để phát triển và kiểm thử trên máy cục bộ, sau đó chuyển sang HTTP Streamable hoặc SSE khi cần triển khai Server dùng chung trong môi trường staging hoặc production.

Hướng dẫn chọn MCP Transport phù hợp
Giải đáp thắc mắc thường gặp
Tại sao cần xác thực Origin trong SSE?
Cần xác thực Origin trong SSE để ngăn trang web độc hại từ xa gửi yêu cầu tới MCP Server đang chạy trên máy cục bộ thông qua kỹ thuật DNS Rebinding.
Có thể thay thế JSON-RPC bằng định dạng khác không?
Không thể thay thế JSON-RPC bằng định dạng khác vì MCP hiện sử dụng JSON-RPC 2.0 làm định dạng thông điệp bắt buộc để đảm bảo tính tương thích, chuẩn hóa cấu trúc request response và hỗ trợ tooling chung giữa các Client và Server.
Có cần cấu hình lại code khi đổi Transport?
Khi đổi loại Transport trong MCP SDK, thông thường chỉ cần thay đổi cấu hình khởi tạo hoặc tham số transport, còn logic xử lý tool và luồng JSON-RPC có thể giữ nguyên do đã được trừu tượng hóa bởi SDK.
Xem thêm:
- 7 Coding Agent Use Cases thực tế giúp tối ưu quy trình
- Khi nào nên dùng AI Agent? 7 dấu hiệu cần tự động hóa
- AI Agent hoạt động như thế nào: Cơ chế tự chủ và vận hành
MCP Transport cung cấp cơ chế truyền thông thống nhất dựa trên JSON-RPC cho cả kịch bản cục bộ lẫn hệ thống phân tán, giúp Client và Server giao tiếp mà không phụ thuộc chi tiết hạ tầng mạng. Khi nắm rõ đặc điểm của STDIO và Streamable HTTP hoặc SSE, bạn có thể chọn Transport phù hợp với giai đoạn phát triển và mô hình triển khai để tối ưu hiệu năng, bảo mật và khả năng mở rộng của ứng dụng MCP.