Kiến trúc MCP: Phân tích kỹ thuật toàn diện kèm sơ đồ

Phân tích kỹ thuật về kiến trúc MCP, bao gồm host, client và máy chủ, lớp dữ liệu JSON-RPC, các tùy chọn truyền tải, thiết lập đa người thuê, rủi ro bảo mật và hướng dẫn từng bước về một yêu cầu gồm tám bước, kèm sơ đồ.

Diagram of MCP architecture: an AI application exchanges requests with an MCP server, which provides tools, resources, and prompts.

Kiến trúc MCP là tập hợp nền tảng gồm các thành phần và quy tắc giao tiếp giúp MCP (Model Context Protocol) có thể hoạt động. MCP là một tiêu chuẩn mã nguồn mở, và kiến trúc MCP là cơ sở hạ tầng nền tảng mà tiêu chuẩn này vận hành trên đó.

Mọi kiến trúc MCP đều chứa và được xây dựng xung quanh ba thành phần cốt lõi: host, client và máy chủ. Khung giao tiếp của MCP thường được mô tả là gồm một lớp dữ liệu và một lớp truyền tải. Lớp dữ liệu là tập hợp các quy tắc về cách định dạng thông điệp (các yêu cầu MCP được gửi bằng JSON-RPC 2.0). Lớp truyền tải mang các thông điệp đó, sử dụng Streaming HTTP cho các kết nối bên ngoài.

Kiến trúc MCP là gì?

Kiến trúc MCP là một khung máy chủ triển khai Model Context Protocol, một tiêu chuẩn mở để kết nối các mô hình AI với công cụ, tài nguyên như cơ sở dữ liệu và các prompt giúp mở rộng ngữ cảnh đầu vào. Chúng được gọi chung là “thành phần nguyên thủy” (primitive). Suy cho cùng, kiến trúc MCP cho phép các LLM khám phá những công cụ hiện có và thực thi quy trình làm việc, tất cả mà không cần cập nhật thường xuyên ở phía client.

Kể từ khi được Anthropic giới thiệu, kiến trúc MCP đã được sử dụng rộng rãi trong các quy trình làm việc AI. Điều này phần lớn là do nó thay thế các hệ thống đòi hỏi nhiều công bảo trì hơn, chẳng hạn như các hệ thống được xây dựng dựa trên nhiều kết nối API, mà không làm giảm hiệu suất. Vì toàn bộ chức năng hiện có đều nằm sau máy chủ MCP nên chỉ cần một kết nối duy nhất, đồng thời các bản cập nhật và bổ sung sẽ có sẵn ngay lập tức cho ứng dụng client.

Các thành phần của kiến trúc MCP: Host, client và máy chủ

MCP cung cấp cho các LLM phương tiện để khám phá và gọi các công cụ, prompt và tài nguyên có sẵn cho chúng, trên hệ thống cục bộ của ứng dụng host hoặc từ một nhà cung cấp bên ngoài.

Đối với công cụ, vốn cung cấp quyền truy cập vào chức năng bên ngoài, quá trình khám phá bao gồm việc host thực hiện lệnh gọi tools/list tới máy chủ MCP để tìm xem những công cụ nào hiện có. Sau đó, LLM (hoặc trong một số trường hợp là host) có thể đọc mô tả của các công cụ hiện có và yêu cầu chúng khi cần. Prompt và tài nguyên cũng sử dụng quy trình tương tự.

Điều này trái ngược với kiến trúc dựa trên API được thiết kế riêng, vốn là chuẩn mực trong phát triển phần mềm, trong đó chức năng nằm ngoài ứng dụng phải được gọi bằng các kết nối chuyên dụng với những yêu cầu được định dạng chính xác.

Host

Ứng dụng host là nền tảng điều phối trung tâm và kết nối với LLM. Các công cụ nổi tiếng như Perplexity và Claude Desktop có thể đóng vai trò host trong một hệ thống MCP.

Trong một quy trình làm việc đơn giản, người dùng đặt câu hỏi qua giao diện trò chuyện. Sau đó, thành phần điều phối của host bổ sung ngữ cảnh cho câu hỏi, cho LLM biết những thành phần nguyên thủy MCP nào hiện có cùng với mô tả về khả năng của chúng.

Client

Client là một thành phần phần mềm trong ứng dụng AI. MCP cung cấp một giao diện tiêu chuẩn để client giao tiếp với các máy chủ MCP nội bộ và bên ngoài dựa trên chỉ dẫn của host hoặc LLM. Nhiệm vụ của client là thiết lập kết nối, định dạng thông điệp JSON-RPC, gửi yêu cầu và nhận phản hồi.

Các thuật ngữ “MCP host” và “MCP client” đôi khi được dùng thay thế cho nhau. Tuy nhiên, đây là một sự phân biệt hữu ích vì một host, chẳng hạn như Perplexity, có thể điều phối nhiều MCP client cùng lúc. Một quy trình làm việc AI phức tạp có thể cần truy cập hàng chục, thậm chí hàng trăm máy chủ MCP riêng biệt, và mỗi máy chủ sẽ sử dụng một kết nối riêng.

Máy chủ

Máy chủ cung cấp tất cả các công cụ mà công cụ dựa trên AI có thể sử dụng. Xét từ góc độ kiến trúc, máy chủ MCP diễn giải yêu cầu đến và, khi cần, kết nối với các thành phần nguyên thủy được yêu cầu.

Máy chủ MCP có thể cung cấp quyền truy cập vào ba loại thành phần nguyên thủy:

  • Công cụ: Về cơ bản, đây là các chức năng phần mềm bên ngoài. Nếu xét theo cách tiếp cận truyền thống dựa trên API, một ứng dụng phân tích web có thể truy xuất dữ liệu bằng một yêu cầu được định dạng gửi tới máy chủ bên ngoài. Trong kiến trúc MCP, toàn bộ chức năng bên thứ ba từ một nhà cung cấp đều có sẵn qua một kết nối duy nhất, và các yêu cầu được tạo theo quy tắc định dạng tiêu chuẩn.
  • Tài nguyên: Tài nguyên là các nguồn dữ liệu cung cấp ngữ cảnh chỉ đọc. Lược đồ cơ sở dữ liệu là một ví dụ điển hình. Máy chủ MCP cung cấp các nguồn thông tin khác nhau có sẵn cho host. Nếu host truy vấn cơ sở dữ liệu, chẳng hạn như bằng một tìm kiếm SQL do LLM tạo ra, thì đây được coi là một yêu cầu công cụ.
  • Prompt: Đây là các mẫu prompt có thể tái sử dụng, giúp LLM thực hiện những tác vụ cụ thể. Người dùng hoặc host sẽ gọi một prompt thay vì một công cụ vì cần có chỉ dẫn soạn sẵn để hoàn thành tác vụ. Thông thường, các tác vụ được thiết lập sẵn trong ứng dụng host, chẳng hạn như tùy chọn “xem xét mã” hoặc “phân tích dữ liệu”, được lưu dưới dạng prompt mà người dùng có thể chọn.

Cũng cần lưu ý rằng MCP và API không phải là những công nghệ loại trừ lẫn nhau. Máy chủ MCP có thể cung cấp các lệnh gọi API có sẵn để phản hồi một yêu cầu khám phá. Điểm mấu chốt là việc duy trì các lệnh gọi này thuộc trách nhiệm của nhà cung cấp MCP, chứ không phải client.

Lớp dữ liệu trong kiến trúc MCP là gì?

Lớp dữ liệu trong kiến trúc MCP là tập hợp các quy tắc xác định cách định dạng yêu cầu, phản hồi và thông báo. Ngôn ngữ tiêu chuẩn cho các thông điệp là JSON-RPC.

Mọi kiến trúc MCP đều tuân theo một quy trình cơ bản gồm (1) khởi tạo và khám phá bởi host, (2) phản hồi bởi máy chủ MCP và (3) lệnh gọi bởi host (đôi khi do LLM quyết định), trong đó mỗi giai đoạn tương ứng với một thông điệp JSON riêng biệt.

Hãy cùng xem cách khám phá công cụ hoạt động qua hai ví dụ (các ví dụ này cũng có thể áp dụng cho tài nguyên hoặc prompt):

  • Khám phá công cụ trước khi LLM tạo nội dung: Host khởi tạo MCP client, client này gửi yêu cầu tools/list (danh sách các công cụ hiện có của máy chủ MCP). LLM xem xét danh sách này trong quá trình tạo nội dung và xác định xem có cần một công cụ, tài nguyên hoặc prompt cụ thể nào không.
  • Cung cấp cho LLM tùy chọn thực hiện tìm kiếm: Trong một hệ thống tác nhân, host thêm một tùy chọn khám phá, chẳng hạn như search-tools, vào đầu vào ngữ cảnh, và LLM có thể yêu cầu tìm kiếm nếu cần.

Công cụ, phần lớn là các chức năng của ứng dụng bên ngoài, thường được LLM hoặc host lựa chọn. Tài nguyên và prompt thường được yêu cầu theo ý muốn của người dùng hoặc bởi host.

Dưới đây là một yêu cầu tools/list gửi tới máy chủ MCP từ một ứng dụng ghi chú giả định:

json
{ "jsonrpc": "2.0", "id": 101, "method": "tools/list", "params": { "_meta": { "io.modelcontextprotocol/protocolVersion": "2026-07-28", "io.modelcontextprotocol/clientInfo": { "name": "notes-app-client", "version": "0.1.0" }, "io.modelcontextprotocol/clientCapabilities": {} } } }

Trong ví dụ này, “id”:101 định danh yêu cầu bằng một ID để client có thể đối chiếu các phản hồi, và trường “params” chứa thông tin bổ sung về client, chẳng hạn như tên client (notes-app-client) và các khả năng.

Để phản hồi, máy chủ MCP sẽ trả về các định nghĩa công cụ, bao gồm tên của các công cụ hiện có và thông tin chi tiết liên quan. Ví dụ: danh sách có thể bao gồm công cụ add-task cho phép ứng dụng ghi chú tạo tác vụ trong một ứng dụng quản lý tác vụ hoặc ứng dụng lịch được kết nối, đồng thời gán cho mỗi tác vụ một tiêu đề và mức ưu tiên.

Một yêu cầu có thể trông như sau:

json
{ "jsonrpc": "2.0", "id": 202, "method": "tools/call", "params": { "name": "add-task", "arguments": { "title": "Review the draft", "priority": "medium" }, "_meta": { "io.modelcontextprotocol/protocolVersion": "2026-07-28", "io.modelcontextprotocol/clientInfo": { "name": "notes-app-client", "version": "0.1.0" }, "io.modelcontextprotocol/clientCapabilities": {} } } }

Trường “method” cho máy chủ MCP biết đây là một lệnh gọi công cụ, “name” chỉ định công cụ cần gọi và “arguments” cung cấp các đầu vào bắt buộc.

Lớp truyền tải trong kiến trúc MCP là gì?

Nếu lớp dữ liệu là cái gì của kết nối giữa client và máy chủ MCP, thì lớp truyền tải là như thế nào. Lớp này xác định cách thức các thông điệp di chuyển: kênh cụ thể và các quy tắc chi phối cách phân phối yêu cầu và phản hồi.

MCP có hai phương thức truyền tải:

  • Đầu vào/đầu ra chuẩn: Phương thức này được sử dụng khi máy chủ MCP chạy trong cùng môi trường cục bộ với ứng dụng host. Client ghi yêu cầu JSON vào đầu vào chuẩn của máy chủ. Máy chủ đọc yêu cầu, thực hiện thao tác được yêu cầu và ghi phản hồi ra đầu ra chuẩn.
  • Streamable HTTP: Khi máy chủ MCP chạy bên ngoài ứng dụng host, MCP client gửi yêu cầu tới máy chủ bằng HTTP POST. Máy chủ phản hồi bằng một thông điệp JSON duy nhất hoặc bằng luồng Server-Sent Events (SSE), một kênh “lắng nghe” liên tục, cho phép máy chủ trả về nhiều thông điệp theo thời gian.

Kiến trúc MCP đa người thuê là gì?

Kiến trúc MCP đa người thuê là một kiểu triển khai có thể phục vụ nhiều người dùng (người thuê) cùng lúc.

Ở đây, người thuê có thể là một cá nhân, một nhóm cá nhân hoặc một tổ chức. Việc triển khai có thể bao gồm chạy một máy chủ MCP riêng cho mỗi người thuê, cung cấp quyền truy cập vào một máy chủ dùng chung duy nhất hoặc đặt một nhóm máy chủ phía sau một cổng (gateway) trung tâm. Khi sử dụng cổng, cổng sẽ định tuyến các yêu cầu tới đúng điểm cuối dựa trên danh tính của người dùng hoặc bản chất của yêu cầu.

Kiến trúc này hoạt động dựa trên cùng nguyên tắc cơ bản như kiến trúc MCP tiêu chuẩn, nhưng yêu cầu của từng người dùng hoạt động trong không gian làm việc riêng (ngay cả khi điều đó có nghĩa là dùng chung tài nguyên) và được xác thực riêng biệt. Kiến trúc này phổ biến trong các kịch bản doanh nghiệp, và việc dùng chung tài nguyên thường được ưu tiên vì chạy nhiều máy chủ MCP sẽ tốn kém một cách không cần thiết.

Sơ đồ kiến trúc MCP: Hướng dẫn từng bước

Trên thực tế, một yêu cầu MCP từ đầu đến cuối trông như thế nào? Có tám giai đoạn cốt lõi, mỗi giai đoạn liên quan đến một thành phần kiến trúc riêng biệt.

Dưới đây là cách một lệnh gọi công cụ MCP diễn ra trên thực tế, sử dụng ví dụ trước đó về một ứng dụng ghi chú được kết nối với dịch vụ quản lý tác vụ:

  1. Khám phá công cụ: Ứng dụng ghi chú (host) sử dụng MCP client của nó để yêu cầu các công cụ hiện có của máy chủ thông qua yêu cầu tools/list. Máy chủ trả về tên, mô tả và đầu vào dự kiến của các công cụ, bao gồm cả công cụ add-task. Việc này có thể diễn ra trước khi bạn gửi prompt.
  2. Đầu vào của người dùng: Bạn gửi yêu cầu tới ứng dụng ghi chú dựa trên LLM qua chatbot trong ứng dụng, chẳng hạn như: “Tạo một tác vụ trong lịch của tôi để xem lại bản nháp mới với mức ưu tiên trung bình.”
  3. Xử lý của mô hình: Host gửi yêu cầu của bạn và các định nghĩa công cụ liên quan tới LLM.
  4. Lựa chọn công cụ: LLM tạo một yêu cầu công cụ có cấu trúc, chỉ định công cụ và các đầu vào của nó: add-task với title: Xem lại bản nháp và priority: Medium. Host kiểm tra xem hành động có được phép hay không và chuyển yêu cầu tới MCP client, client này sẽ gửi một thông điệp JSON-RPC.
  5. Yêu cầu: MCP client gửi yêu cầu tools/call tới máy chủ MCP của nó.
  6. Thực thi công cụ: Máy chủ MCP gọi API của ứng dụng quản lý tác vụ để tạo một tác vụ mới với tiêu đề và mức ưu tiên đã chỉ định.
  7. Trả về kết quả: Máy chủ gửi kết quả trở lại MCP client, client này chuyển kết quả cho host. Host bổ sung kết quả vào thông tin cung cấp cho LLM.
  8. Tạo câu trả lời: LLM sử dụng kết quả để tạo câu trả lời cho người dùng, chẳng hạn như “Tôi đã tạo một tác vụ để xem lại bản nháp với mức ưu tiên trung bình.”

Kiến trúc MCP khác với kiến trúc API truyền thống như thế nào?

MCP và kiến trúc API truyền thống thường bị nhầm lẫn, nhưng chúng là những công nghệ bổ trợ cho nhau. MCP được thiết kế dành riêng cho các ứng dụng dựa trên AI. Giao thức này khắc phục gánh nặng bảo trì lớn khi triển khai và quản lý nhiều kết nối API được mã hóa cứng.

Bằng cách cung cấp cho ứng dụng host một kết nối duy nhất cho mỗi nhà cung cấp chức năng hoặc tài nguyên nội bộ, MCP giúp khắc phục vấn đề đầu vào ngữ cảnh bị phình to (liệt kê tất cả API) hoặc các script ứng dụng dựa trên API bị hạn chế.

Thay vào đó, các MCP có thể cung cấp API (hay đúng hơn là chức năng gọi API) như một phần trong danh sách công cụ của chúng. Mỗi khi nhà cung cấp cập nhật ứng dụng và có API mới, hoặc nếu tài liệu thay đổi, họ chỉ cần cập nhật máy chủ MCP. Không cần thay đổi mã ở phía ứng dụng host.

Kiến trúc MCP có an toàn không?

Bảo mật MCP là chủ đề gây nhiều tranh luận kể từ khi giao thức này ra mắt. Mặc dù nhìn chung được coi là một công nghệ an toàn, MCP vẫn có một số rủi ro bảo mật, nhiều rủi ro trong số đó nổi bật hơn trong các triển khai kiến trúc phức tạp.

Kiến trúc MCP có những điểm yếu tiềm ẩn sau:

  • Chèn prompt (prompt injection): Người dùng chèn một prompt độc hại vào dữ liệu bên ngoài mà mô hình AI hiểu sai thành chỉ dẫn.
  • Quyền truy cập vượt mức: Máy chủ MCP có thể cung cấp một số lượng lớn công cụ cho mô hình AI, điều này có thể làm tăng khả năng xảy ra sự cố bảo mật (phạm vi ảnh hưởng).
  • Rò rỉ dữ liệu ngoài ý muốn: Các triển khai được cấu hình kém có thể khiến thông tin nhạy cảm, như khóa API hoặc thông tin xác thực cơ sở dữ liệu, bị chuyển cho LLM.
  • Thao túng hệ thống cục bộ: Máy chủ MCP cục bộ cũng dễ bị ảnh hưởng bởi các sự cố hệ thống cục bộ, như script độc hại, giống như bất kỳ ứng dụng nào khác, với vấn đề bổ sung là chúng có thể gây ra tác động có hại ở hạ nguồn đối với các hệ thống AI tác nhân.

Không có vấn đề nào trong số này là không thể vượt qua. Thông thường, các biện pháp đã được thiết lập là tất cả những gì cần thiết để đảm bảo an toàn cho hệ thống. Các biện pháp như có con người tham gia vào vòng lặp, thực thi kiểm soát nghiêm ngặt đối với dữ liệu nhạy cảm và phòng chống các cuộc tấn công máy chủ đều là những phương pháp phổ biến.

Tương lai của kiến trúc MCP sẽ ra sao?

MCP đã chứng tỏ là một tiêu chuẩn mở hữu ích và phổ biến đối với các nhà phát triển. Giao thức này khắc phục nhiều vấn đề của API mã hóa cứng trong các ứng dụng dựa trên LLM và giảm đáng kể gánh nặng lập trình cho nhà phát triển.

Trong thời gian tới, kiến trúc host và máy chủ nền tảng của MCP gần như chắc chắn sẽ giữ nguyên. Những đổi mới trong tương lai sẽ tập trung vào các khả năng tác nhân nâng cao trên các quy trình làm việc nhiều bước.

Ngoài ra, khi các chức năng tác nhân đó được triển khai, sẽ cần có các biện pháp bảo vệ an ninh mạnh mẽ hơn, cũng như kiến trúc có khả năng mở rộng, đặc biệt là ở lớp truyền tải, khi các hệ thống AI ngày càng trở nên rộng lớn và phức tạp hơn.