Kiến trúc AI MCP là mô hình client-server kết nối ứng dụng AI với dữ liệu và công cụ bên ngoài qua một giao thức chuẩn duy nhất. Thay vì xây một tích hợp riêng cho từng cặp ứng dụng AI và nguồn dữ liệu (bài toán N × M), đội ngũ chỉ cần xây một MCP server cho mỗi nguồn dữ liệu, và mọi ứng dụng hỗ trợ MCP đều dùng được.
Kiến trúc gồm ba thành phần: host (ứng dụng AI người dùng làm việc trên đó), client (lớp kết nối nằm trong host) và server (chương trình cung cấp một nguồn dữ liệu hoặc công cụ). Server cung cấp ba primitive (thành phần cơ bản): tool, resource và prompt. Tách ứng dụng AI khỏi lớp truy cập dữ liệu giúp tích hợp dùng lại được cho nhiều ứng dụng, đồng thời doanh nghiệp vẫn tự kiểm soát quyền truy cập trên hệ thống của mình.
Để có cái nhìn tổng quan, xem bài AI MCP là gì? Model Context Protocol – "cổng USB-C" của AI.
3 thành phần cốt lõi của kiến trúc AI MCP
MCP chia công việc cho ba thành phần. Hiểu rõ trách nhiệm của từng thành phần dừng ở đâu là bước đầu tiên để tích hợp gọn gàng.
MCP Host
Host là ứng dụng AI mà người dùng tương tác, như Claude Desktop, một IDE như Cursor hay VS Code, hoặc một agent do doanh nghiệp tự xây. Host kết nối với mô hình ngôn ngữ, quản lý ngữ cảnh hội thoại và giao diện, đồng thời dựa vào kết quả của mô hình để quyết định chạy lệnh gọi tool nào và lệnh nào cần người dùng duyệt. Host tạo và quản lý một MCP client cho mỗi server mà nó kết nối.
MCP Client
Client là thành phần kết nối nằm trong host. Mỗi client giữ kết nối một-một với đúng một MCP server. Sự tách biệt này là có chủ đích: xác thực, lỗi và cấu hình truyền tải của nguồn dữ liệu này không ảnh hưởng sang nguồn khác. Client xử lý thông điệp JSON-RPC 2.0 và gửi kèm phiên bản giao thức cùng các khả năng của mình trong mỗi yêu cầu.
MCP Server
Server là chương trình cung cấp một nguồn dữ liệu hoặc công cụ cụ thể cho ứng dụng AI. Server chuyển yêu cầu MCP thành lệnh gọi riêng của hệ thống phía sau, như REST, SQL hay GraphQL. Ví dụ, một PostgreSQL MCP server chuyển yêu cầu tools/call thành một truy vấn SQL. Server cục bộ (stdio) chạy với quyền của người khởi chạy nó; server từ xa (Streamable HTTP) thường dùng OAuth để cấp quyền cho client. Kiến trúc MCP có hai lớp: lớp dữ liệu, định nghĩa thông điệp JSON-RPC 2.0, vòng đời và các primitive; và lớp truyền tải, phụ trách giao tiếp giữa client và server. Lớp truyền tải dùng stdio cho server cục bộ và Streamable HTTP cho server từ xa.
Các primitive của MCP: Tool, Resource và Prompt
MCP server cung cấp ba primitive. Đặc tả MCP phân biệt chúng theo bên kiểm soát: tool do mô hình kiểm soát, resource do ứng dụng kiểm soát, và prompt do người dùng kiểm soát.
| Primitive | Bên kiểm soát | Mục đích | Ví dụ |
|---|---|---|---|
| Tool | Mô hình | Lấy dữ liệu hoặc thực hiện hành động khi cần | Tạo ticket Jira, chạy truy vấn SQL |
| Resource | Ứng dụng host | Cung cấp ngữ cảnh chỉ đọc | File log, bản ghi trong cơ sở dữ liệu |
| Prompt | Người dùng | Khởi động một quy trình dựng sẵn | Mẫu "review pull request này" |
Resource: lớp ngữ cảnh
Resource là dữ liệu chỉ đọc mà host có thể đính kèm làm ngữ cảnh, để mô hình làm việc dựa trên dữ liệu thật thay vì phỏng đoán.
- Định danh bằng URI: mỗi resource có một URI, như file:///var/log/syslog hay postgres://db/users/123, để host yêu cầu dữ liệu theo cùng một cách trên mọi server.
- Kiểu MIME: resource có thể là văn bản hoặc nhị phân. Server khai báo kiểu MIME (ví dụ text/plain, application/json hay image/png) để host xử lý nội dung cho đúng.
- Đăng ký theo dõi (tùy chọn): nếu server hỗ trợ, client có thể đăng ký theo dõi một resource và nhận thông báo notifications/resources/updated khi resource thay đổi, thay vì phải hỏi lại liên tục.
Tool: lớp hành động
Tool cho phép mô hình chạy code, gọi API bên ngoài hoặc thay đổi dữ liệu. Đây là lúc AI chuyển từ đọc sang hành động, nên thiết kế tool cần giới hạn rõ ràng.
- Tên, mô tả và input schema: mỗi tool khai báo một JSON Schema cho các tham số. Mô hình dựa vào tên, mô tả và schema của tool để quyết định khi nào và gọi nó như thế nào.
- An toàn khi thực thi: server là bên chạy tool. Server chạy production nên áp dụng timeout, kiểm tra quyền và, khi cần, sandbox. Host nên yêu cầu người dùng duyệt các lệnh gọi làm thay đổi dữ liệu.
- Kết quả và lỗi: server trả kết quả dưới dạng các mục nội dung (văn bản, hình ảnh hoặc dữ liệu có cấu trúc). Nếu bản thân tool gặp lỗi, kết quả được đánh dấu isError: true kèm giải thích, để mô hình điều chỉnh và thử lại. Lỗi JSON-RPC chỉ dùng cho vấn đề ở cấp giao thức, như gọi một tool không tồn tại.
Prompt: lớp tương tác
Prompt là các mẫu dùng lại được, do server cung cấp và người dùng chọn, thường hiển thị dưới dạng lệnh gạch chéo (slash command) hoặc mục menu. Prompt giúp người dùng bắt đầu các tác vụ phức tạp mà không cần biết phải kết hợp tool và resource nào.
- Tham số: prompt nhận các tham số đã định nghĩa, như tên repository hay khoảng thời gian.
- Tạo thông điệp: khi được gọi, prompt trả về một hoặc nhiều thông điệp cho cuộc hội thoại và có thể nhúng resource làm ngữ cảnh.
- Khám phá: client liệt kê các prompt hiện có bằng prompts/list, mang đến cho người dùng một menu các quy trình dựng sẵn.

Sơ đồ kiến trúc AI MCP
Sơ đồ kiến trúc AI MCP thể hiện đường đi của một yêu cầu từ người dùng tới hệ thống bên ngoài và quay ngược lại. Điểm mấu chốt: một host chạy một client riêng cho mỗi server.

Tóm lại: host đưa cho mô hình danh sách tool hiện có, mô hình chọn một tool, host chuyển lệnh gọi qua client tương ứng, và server thực thi trên hệ thống bên ngoài rồi trả về kết quả có cấu trúc. Vòng đời kết nối bên dưới giải thích từng giai đoạn.
Vòng đời kết nối MCP: các thành phần kết nối với nhau thế nào
MCP dùng mô hình yêu cầu không trạng thái (stateless): mỗi yêu cầu mang theo phiên bản giao thức và các khả năng của client cần để xử lý nó. Client có thể tìm hiểu các phiên bản và khả năng mà server hỗ trợ trước khi gửi yêu cầu. Khác với các phiên bản trước, giao thức hiện tại không yêu cầu bước bắt tay khởi tạo ở cấp kết nối và không duy trì phiên ở cấp giao thức.
1. Khám phá
Trước khi gửi yêu cầu, client có thể gọi server/discover để biết server hỗ trợ những phiên bản giao thức nào, thông tin định danh của server và các khả năng nó cung cấp. Nhờ đó client chọn được phiên bản giao thức tương thích. Sau đó client tìm hiểu các chức năng hiện có qua tools/list, resources/list và prompts/list. Server trả về danh sách các mục, gồm tên, mô tả và, với tool, cả input schema.
2. Vận hành
Client gửi yêu cầu kèm phiên bản giao thức đã chọn và các khả năng của mình trong _meta, qua io.modelcontextprotocol/protocolVersion và io.modelcontextprotocol/clientCapabilities. Client cũng nên tự định danh qua io.modelcontextprotocol/clientInfo.
Mô hình có thể chọn một tool, và host chuyển yêu cầu qua MCP client tương ứng bằng tools/call. Host cũng có thể lấy dữ liệu bằng resources/read. Server xử lý từng yêu cầu và trả về kết quả, kèm thông tin định danh của mình trong metadata của kết quả.
Để nhận thông báo thay đổi liên tục, client có thể chủ động đăng ký qua subscriptions/listen. Luồng này hỗ trợ thông báo khi danh sách tool, prompt và resource thay đổi, cũng như đăng ký theo dõi resource, và thay thế cho các phương thức resources/subscribe và resources/unsubscribe trước đây. Lỗi khi thực thi tool, chẳng hạn cơ sở dữ liệu bị timeout, được trả về dưới dạng kết quả có isError: true để mô hình xử lý hoặc thử lại. Lỗi JSON-RPC dành cho vấn đề ở cấp giao thức hoặc cấp yêu cầu.
3. Kết thúc
MCP không có thông điệp kết thúc riêng, cũng không có phiên cấp giao thức nào cần đóng. Khi giao tiếp xong, client và server đóng lớp truyền tải bên dưới. Với stdio, client đóng luồng đầu vào của server để tiến trình server kết thúc. Với Streamable HTTP, client đóng kết nối HTTP hoặc luồng phản hồi tương ứng. Server nên giải phóng các tài nguyên tạm thời, như kết nối cơ sở dữ liệu hay khóa file, khi phù hợp.
Tương thích ngược: các MCP server và client cũ vẫn có thể dùng bước bắt tay initialize / notifications/initialized được định nghĩa trong các phiên bản giao thức trước.

Những điểm cần cân nhắc khi lựa chọn kiến trúc
Việc tách host-client-server phát huy hiệu quả khi nhiều ứng dụng AI cần dùng chung các hệ thống, nhưng cũng có cái giá của nó.
- Nhiều thành phần hơn: mỗi server là thêm một tiến trình hoặc dịch vụ cần triển khai, giám sát và cập nhật. Với một ứng dụng gọi một API ổn định, tích hợp trực tiếp thường đơn giản hơn.
- Chi phí ngữ cảnh: tên, mô tả và schema của mọi tool đều được gửi tới mô hình. Kết nối nhiều server với nhiều tool sẽ tốn không gian ngữ cảnh và có thể khiến mô hình chọn tool kém chính xác hơn, vì vậy chỉ nên mở những tool mà từng trường hợp sử dụng cần.
- Ranh giới tin cậy: kết quả tool của server đi thẳng vào ngữ cảnh của mô hình. Hãy kiểm duyệt server bên thứ ba, cố định phiên bản và cấp cho mỗi server một tài khoản quyền tối thiểu.
Ví dụ về kiến trúc MCP: Một Host tích hợp nhiều hệ thống nghiệp vụ
Haposoft đã xây MCP server cho các sản phẩm của mình, gồm Hapo ERP (hệ thống ERP cho doanh nghiệp sản xuất bu lông, ốc vít), Hapo SMS và Hapo OKR. Mỗi hệ thống có server riêng, và một host duy nhất là Claude kết nối tới tất cả thông qua các client riêng biệt. Người dùng có thể kiểm tra lệnh sản xuất và tồn kho, xem pipeline bán hàng và tình trạng thanh toán, hoặc gửi check-in OKR từ một nơi. Các server chạy từ xa, mỗi người dùng đăng nhập bằng OAuth nên quyền truy cập theo đúng quyền của người đó. Server không mở tool xóa hay duyệt bản ghi, và mọi thay đổi dữ liệu đều cần xác nhận.
Câu hỏi thường gặp về kiến trúc AI MCP
MCP host và MCP client khác nhau thế nào?
Host là ứng dụng AI người dùng làm việc trên đó, như một IDE hay ứng dụng chat. Client là thành phần nằm trong host, phụ trách kết nối tới một MCP server. Host quản lý giao diện, mô hình và việc duyệt lệnh; mỗi client lo việc giao tiếp với server của nó.
Một MCP host có kết nối được nhiều server không?
Có. Host tạo một client cho mỗi server, nên một ứng dụng có thể kết nối cùng lúc nhiều nguồn dữ liệu, ví dụ một server cho hệ thống file trên máy và một server cho PostgreSQL từ xa.
Đọc sơ đồ kiến trúc AI MCP như thế nào?
Hãy theo dõi các yêu cầu: host, thông qua các client, gửi yêu cầu như tools/call hay resources/read, và server trả về kết quả có cấu trúc. Sơ đồ tách riêng ứng dụng AI (host và mô hình) khỏi lớp truy cập dữ liệu (server và các hệ thống phía sau).
Nên dùng primitive nào: tool, resource hay prompt?
Dùng tool khi mô hình cần tự quyết định thực hiện hành động hoặc lấy dữ liệu khi cần, dùng resource khi ứng dụng cần đính kèm một ngữ cảnh đã biết, và dùng prompt khi người dùng cần một quy trình dựng sẵn, lặp lại được.
Kết luận
Kiến trúc AI MCP mang đến một cách chuẩn để kết nối ứng dụng AI với dữ liệu và công cụ bên ngoài: host quản lý người dùng và mô hình, mỗi client lo một kết nối, còn server cung cấp tool, resource và prompt. Sự tách biệt này giúp tích hợp dùng lại được cho nhiều ứng dụng AI và giữ quyền kiểm soát truy cập trên chính hệ thống của bạn. Để xem đặc tả đầy đủ, hãy đọc tài liệu chính thức của Model Context Protocol.
Bạn đang lên kế hoạch xây MCP server cho hệ thống doanh nghiệp? Trao đổi với đội AI MCP của Haposoft về các giải pháp tích hợp MCP an toàn cho hệ thống nội bộ, trên cloud hay on-premise.
