Bỏ qua đến nội dung chính

JSON message types

📖 Nội dung bài học

Đường viền ký tự

Không có

Màu đường viền

Tóm tắt

MCP (Model Context Protocol) dùng các thông điệp JSON để xử lý giao tiếp giữa client và server. Hiểu rõ các loại thông điệp này rất quan trọng khi làm việc với MCP, đặc biệt khi dùng các phương thức truyền tải khác nhau như streamable HTTP transport.

Định dạng thông điệp

Mọi giao tiếp MCP đều thông qua các thông điệp JSON. Mỗi loại thông điệp có một mục đích cụ thể - cho dù là gọi một tool, liệt kê các resource có sẵn, hay gửi thông báo về các sự kiện hệ thống.

Đây là một ví dụ điển hình: khi Claude cần gọi một tool do một server MCP cung cấp, client sẽ gửi một thông điệp "Call Tool Request". Server xử lý yêu cầu này, chạy tool, và phản hồi bằng một thông điệp "Call Tool Result" chứa kết quả.

Đặc tả MCP

Danh sách đầy đủ các loại thông điệp được định nghĩa trong kho lưu trữ đặc tả MCP chính thức trên GitHub. Đặc tả này tách biệt với các kho lưu trữ SDK khác nhau (như SDK Python hoặc TypeScript) và là nguồn thông tin chính xác về cách MCP nên hoạt động.

Các loại thông điệp được viết bằng TypeScript để thuận tiện - không phải vì chúng được thực thi dưới dạng mã TypeScript, mà vì TypeScript cung cấp một cách rõ ràng để mô tả cấu trúc và kiểu dữ liệu.

Các loại thông điệp

Các thông điệp MCP được chia thành hai loại chính:

Thông điệp Request-Result

Các thông điệp này luôn đi theo cặp. Bạn gửi một yêu cầu và mong đợi nhận lại một kết quả:

  • Call Tool RequestCall Tool Result
  • List Prompts Request → List Prompts Result
  • Read Resource Request → Read Resource Result
  • Initialize Request → Initialize Result

Thông điệp Notification

Đây là các thông điệp một chiều, thông báo về các sự kiện nhưng không yêu cầu phản hồi:

  • Progress Notification - Cập nhật về các hoạt động đang chạy dài
  • Logging Message Notification - Thông điệp log hệ thống
  • Tool List Changed Notification - Khi các tool có sẵn thay đổi
  • Resource Updated Notification - Khi các resource được sửa đổi

Thông điệp Client vs Server

Đặc tả MCP tổ chức các thông điệp theo người gửi:

Thông điệp Client bao gồm các yêu cầu mà client gửi đến server (ví dụ: gọi tool) và các thông báo mà client có thể gửi.

Thông điệp Server bao gồm các yêu cầu mà server gửi đến client và các thông báo mà server phát ra.

Tại sao điều này quan trọng

Việc hiểu rằng server có thể gửi thông điệp đến client đặc biệt quan trọng khi làm việc với các phương thức truyền tải khác nhau. Một số phương thức truyền tải, như streamable HTTP transport, có những hạn chế về loại thông điệp nào có thể truyền theo hướng nào.

Điểm mấu chốt là MCP được thiết kế như một giao thức hai chiều - cả client và server đều có thể bắt đầu giao tiếp. Điều này trở nên quan trọng khi bạn cần chọn phương thức truyền tải phù hợp cho trường hợp sử dụng cụ thể của bạn.

🔁 Bài học liên quan

📚 Nguồn & ghi nhận

Bài học có hữu ích không?

Góp ý / Báo lỗiPhát hiện sai sót hoặc có ý tưởng cải thiện?