Hiểu về MCP server
Ba thành phần cốt lõi của MCP server (Tools, Resources, Prompts) và cách nhiều server phối hợp trong một quy trình.
This content is currently available in Vietnamese only.
Bài này giải thích MCP server cung cấp những gì cho ứng dụng AI và cách các thành phần đó phối hợp với nhau.
MCP server là chương trình cung cấp các khả năng (capability) cụ thể cho ứng dụng AI thông qua các giao diện giao thức chuẩn hoá của Model Context Protocol (MCP).
Ví dụ phổ biến gồm server hệ thống file để truy cập tài liệu, server cơ sở dữ liệu để truy vấn dữ liệu, server GitHub để quản lý code, server Slack để giao tiếp trong nhóm và server lịch để sắp xếp lịch.
Các tính năng cốt lõi của server
Server cung cấp chức năng thông qua ba khối xây dựng:
| Tính năng | Giải thích | Ví dụ | Ai kiểm soát |
|---|---|---|---|
| Tools | Các hàm mà LLM của bạn có thể chủ động gọi, và LLM tự quyết định khi nào dùng dựa trên yêu cầu của người dùng. Tool có thể ghi vào cơ sở dữ liệu, gọi API bên ngoài, sửa file hoặc kích hoạt logic khác. | Tìm chuyến bay, gửi tin nhắn, tạo sự kiện lịch | Model |
| Resources | Nguồn dữ liệu thụ động, cho truy cập chỉ đọc vào thông tin để làm ngữ cảnh (context), như nội dung file, schema cơ sở dữ liệu hay tài liệu API. | Lấy tài liệu, truy cập kho tri thức, đọc lịch | Ứng dụng |
| Prompts | Các mẫu chỉ dẫn dựng sẵn, bảo model làm việc với các tool và resource cụ thể. | Lên kế hoạch kỳ nghỉ, tóm tắt các cuộc họp của tôi, soạn email | Người dùng |
Chúng ta sẽ dùng một tình huống giả định để minh hoạ vai trò của từng tính năng và cho thấy chúng phối hợp với nhau thế nào.
Tools
Tool giúp model AI thực hiện hành động. Mỗi tool định nghĩa một thao tác cụ thể, với đầu vào và đầu ra có kiểu. Model yêu cầu thực thi tool dựa trên ngữ cảnh.
Tool hoạt động thế nào
Tool là các giao diện được định nghĩa bằng schema mà LLM có thể gọi. MCP dùng JSON Schema để kiểm tra hợp lệ. Mỗi tool thực hiện một thao tác duy nhất với đầu vào và đầu ra được định nghĩa rõ. Tool có thể yêu cầu người dùng đồng ý trước khi thực thi, giúp người dùng giữ quyền kiểm soát các hành động do model thực hiện.
Các thao tác giao thức:
| Phương thức | Mục đích | Trả về |
|---|---|---|
tools/list | Khám phá các tool sẵn có | Mảng định nghĩa tool kèm schema |
tools/call | Thực thi một tool cụ thể | Kết quả thực thi tool |
Ví dụ định nghĩa tool:
{
name: "searchFlights",
description: "Search for available flights",
inputSchema: {
type: "object",
properties: {
origin: { type: "string", description: "Departure city" },
destination: { type: "string", description: "Arrival city" },
date: { type: "string", format: "date", description: "Travel date" }
},
required: ["origin", "destination", "date"]
}
}
Ví dụ: đặt chuyến du lịch
Tool giúp ứng dụng AI thực hiện hành động thay người dùng. Trong tình huống lên kế hoạch du lịch, ứng dụng AI có thể dùng nhiều tool để giúp đặt một kỳ nghỉ:
Tìm chuyến bay
searchFlights(origin: "NYC", destination: "Barcelona", date: "2024-06-15")
Truy vấn nhiều hãng bay và trả về các lựa chọn chuyến bay có cấu trúc.
Chặn lịch
createCalendarEvent(title: "Barcelona Trip", startDate: "2024-06-15", endDate: "2024-06-22")
Đánh dấu các ngày đi du lịch trên lịch của người dùng.
Thông báo qua email
sendEmail(to: "team@work.com", subject: "Out of Office", body: "...")
Gửi thư báo vắng mặt tự động cho đồng nghiệp.
Mô hình tương tác với người dùng
Tool do model kiểm soát, nghĩa là model AI có thể tự khám phá và gọi chúng. Tuy vậy, MCP nhấn mạnh sự giám sát của con người thông qua nhiều cơ chế.
Để đảm bảo tin cậy và an toàn, ứng dụng có thể cho người dùng kiểm soát bằng nhiều cơ chế, chẳng hạn:
- Hiển thị các tool sẵn có trên giao diện, để người dùng quyết định tool nào được dùng trong từng tương tác cụ thể
- Hộp thoại phê duyệt cho từng lần thực thi tool
- Thiết lập quyền để phê duyệt trước một số thao tác an toàn
- Nhật ký hoạt động hiển thị mọi lần thực thi tool cùng kết quả
Resources
Resource cho truy cập có cấu trúc vào thông tin mà ứng dụng AI có thể lấy về và đưa cho model làm ngữ cảnh.
Resource hoạt động thế nào
Resource cung cấp dữ liệu từ file, API, cơ sở dữ liệu hoặc bất kỳ nguồn nào mà AI cần để hiểu ngữ cảnh. Ứng dụng có thể truy cập trực tiếp thông tin này và quyết định cách dùng: chọn những phần liên quan, tìm kiếm bằng embedding, hay đưa toàn bộ cho model.
Mỗi resource có một URI duy nhất (ví dụ file:///path/to/document.md) và khai báo MIME type để nội dung được xử lý phù hợp.
Resource hỗ trợ hai cách khám phá:
- Direct Resources: URI cố định trỏ tới dữ liệu cụ thể. Ví dụ:
calendar://events/2024trả về lịch trống của năm 2024. - Resource Templates: URI động có tham số để truy vấn linh hoạt. Ví dụ:
travel://activities/{city}/{category}trả về các hoạt động theo thành phố và danh mụctravel://activities/barcelona/museumstrả về mọi bảo tàng ở Barcelona
Resource Template có metadata như tiêu đề, mô tả và MIME type mong đợi, nhờ đó khám phá được và tự mô tả chính nó.
Các thao tác giao thức:
| Phương thức | Mục đích | Trả về |
|---|---|---|
resources/list | Liệt kê các direct resource sẵn có | Mảng mô tả resource |
resources/templates/list | Khám phá các resource template | Mảng định nghĩa resource template |
resources/read | Lấy nội dung resource | Dữ liệu resource kèm metadata |
subscriptions/listen | Theo dõi thay đổi của resource | Luồng thông báo (notification) cập nhật |
Để theo dõi thay đổi của các resource cụ thể, client gửi yêu cầu (request) subscriptions/listen với các URI resource liệt kê trong bộ lọc resourceSubscriptions. Server gửi notifications/resources/updated trên luồng tạo ra mỗi khi một resource đang được theo dõi thay đổi.
Ví dụ: lấy ngữ cảnh để lên kế hoạch du lịch
Tiếp tục ví dụ lên kế hoạch du lịch, resource cho ứng dụng AI truy cập thông tin liên quan:
- Dữ liệu lịch (
calendar://events/2024): kiểm tra lịch trống của người dùng - Giấy tờ du lịch (
file:///Documents/Travel/passport.pdf): truy cập các tài liệu quan trọng - Lịch trình trước đây (
trips://history/barcelona-2023): tham khảo các chuyến đi và sở thích trước đây
Ứng dụng AI lấy các resource này và quyết định cách xử lý: chọn một phần dữ liệu bằng embedding hoặc tìm kiếm từ khoá, hay đưa thẳng dữ liệu thô cho model.
Trong trường hợp này, ứng dụng đưa dữ liệu lịch, thông tin thời tiết và sở thích du lịch cho model, để model kiểm tra lịch trống, tra cứu xu hướng thời tiết và tham khảo sở thích du lịch trước đây.
Ví dụ Resource Template:
{
"uriTemplate": "weather://forecast/{city}/{date}",
"name": "weather-forecast",
"title": "Weather Forecast",
"description": "Get weather forecast for any city and date",
"mimeType": "application/json"
}
{
"uriTemplate": "travel://flights/{origin}/{destination}",
"name": "flight-search",
"title": "Flight Search",
"description": "Search available flights between cities",
"mimeType": "application/json"
}
Các template này cho phép truy vấn linh hoạt. Với dữ liệu thời tiết, người dùng có thể xem dự báo cho bất kỳ cặp thành phố/ngày nào. Với chuyến bay, họ có thể tìm đường bay giữa hai sân bay bất kỳ. Khi người dùng đã nhập "NYC" làm sân bay origin và bắt đầu gõ "Bar" cho sân bay destination, hệ thống có thể gợi ý "Barcelona (BCN)" hoặc "Barbados (BGI)".
Hoàn thành tham số
Resource động hỗ trợ hoàn thành tham số (parameter completion). Ví dụ:
- Gõ "Par" làm đầu vào cho
weather://forecast/{city}có thể được gợi ý "Paris" hoặc "Park City" - Gõ "JFK" cho
flights://search/{airport}có thể được gợi ý "JFK - John F. Kennedy International"
Hệ thống giúp khám phá giá trị hợp lệ mà không cần biết chính xác định dạng.
Mô hình tương tác với người dùng
Resource do ứng dụng điều khiển, nên ứng dụng được linh hoạt trong cách lấy, xử lý và trình bày ngữ cảnh sẵn có. Các mẫu tương tác phổ biến gồm:
- Dạng cây hoặc danh sách để duyệt resource theo cấu trúc giống thư mục quen thuộc
- Giao diện tìm kiếm và lọc để tìm resource cụ thể
- Tự động đưa vào ngữ cảnh hoặc gợi ý thông minh dựa trên heuristic hoặc lựa chọn của AI
- Giao diện chọn thủ công hoặc chọn hàng loạt để đưa vào một hay nhiều resource
Ứng dụng được tự do hiện thực việc khám phá resource bằng bất kỳ mẫu giao diện nào phù hợp nhu cầu. Giao thức không bắt buộc mẫu UI cụ thể nào, nên có thể làm bộ chọn resource có xem trước, gợi ý thông minh dựa trên ngữ cảnh hội thoại hiện tại, chọn hàng loạt để đưa vào nhiều resource, hoặc tích hợp (integration) với trình duyệt file và trình khám phá dữ liệu có sẵn.
Prompts
Prompt cung cấp các mẫu tái sử dụng. Chúng cho tác giả MCP server cung cấp các prompt có tham số cho một lĩnh vực, hoặc minh hoạ cách dùng MCP server hiệu quả nhất.
Prompt hoạt động thế nào
Prompt là các mẫu có cấu trúc, định nghĩa đầu vào mong đợi và các mẫu tương tác. Prompt do người dùng kiểm soát, cần được gọi tường minh chứ không tự kích hoạt. Prompt có thể nhận biết ngữ cảnh, tham chiếu tới các resource và tool sẵn có để tạo quy trình (workflow) hoàn chỉnh. Giống resource, prompt hỗ trợ hoàn thành tham số để giúp người dùng tìm giá trị đối số hợp lệ.
Các thao tác giao thức:
| Phương thức | Mục đích | Trả về |
|---|---|---|
prompts/list | Khám phá các prompt sẵn có | Mảng mô tả prompt |
prompts/get | Lấy chi tiết prompt | Định nghĩa prompt đầy đủ kèm đối số |
Ví dụ: quy trình gọn gàng
Prompt cung cấp mẫu có cấu trúc cho các tác vụ thường gặp. Trong bối cảnh lên kế hoạch du lịch:
Prompt "Plan a vacation":
{
"name": "plan-vacation",
"title": "Plan a vacation",
"description": "Guide through vacation planning process",
"arguments": [
{ "name": "destination", "type": "string", "required": true },
{ "name": "duration", "type": "number", "description": "days" },
{ "name": "budget", "type": "number", "required": false },
{ "name": "interests", "type": "array", "items": { "type": "string" } }
]
}
Thay vì nhập ngôn ngữ tự nhiên không có cấu trúc, hệ thống prompt cho phép:
- Chọn template "Plan a vacation"
- Nhập có cấu trúc: Barcelona, 7 ngày, $3000, ["beaches", "architecture", "food"]
- Thực thi quy trình nhất quán dựa trên template
Mô hình tương tác với người dùng
Prompt do người dùng kiểm soát, cần được gọi tường minh. Giao thức cho người hiện thực tự do thiết kế giao diện sao cho tự nhiên trong ứng dụng của họ. Các nguyên tắc chính:
- Dễ khám phá các prompt sẵn có
- Mô tả rõ mỗi prompt làm gì
- Nhập đối số tự nhiên, có kiểm tra hợp lệ
- Hiển thị minh bạch template bên dưới của prompt
Ứng dụng thường cung cấp prompt qua nhiều mẫu giao diện như:
- Slash command (gõ "/" để xem các prompt sẵn có như /plan-vacation)
- Bảng lệnh (command palette) để tìm kiếm
- Nút giao diện riêng cho các prompt hay dùng
- Menu ngữ cảnh gợi ý prompt liên quan
Kết hợp nhiều server
Sức mạnh thực sự của MCP xuất hiện khi nhiều server làm việc cùng nhau, kết hợp các khả năng chuyên biệt của chúng qua một giao diện thống nhất.
Ví dụ: lên kế hoạch du lịch với nhiều server
Hãy xem một ứng dụng AI lập kế hoạch du lịch cá nhân hoá, kết nối với ba server:
- Travel Server: xử lý chuyến bay, khách sạn và lịch trình
- Weather Server: cung cấp dữ liệu khí hậu và dự báo
- Calendar/Email Server: quản lý lịch và liên lạc
Toàn bộ luồng
-
Người dùng gọi một prompt kèm tham số:
json{ "prompt": "plan-vacation", "arguments": { "destination": "Barcelona", "departure_date": "2024-06-15", "return_date": "2024-06-22", "budget": 3000, "travelers": 2 } } -
Người dùng chọn các resource cần đưa vào:
calendar://my-calendar/June-2024(từ Calendar Server)travel://preferences/europe(từ Travel Server)travel://past-trips/Spain-2023(từ Travel Server)
-
AI xử lý yêu cầu bằng các tool:
Trước tiên AI đọc mọi resource đã chọn để thu thập ngữ cảnh: xác định các ngày trống từ lịch, biết hãng bay và loại khách sạn ưa thích từ sở thích du lịch, và tìm ra những nơi từng thích từ các chuyến đi trước.
Với ngữ cảnh này, AI thực thi prompt do ứng dụng AI cung cấp. Trong ví dụ của chúng ta, ứng dụng AI cung cấp cho model các tool thời tiết từ MCP weather server đã kết nối. Vì thời tiết có thể ảnh hưởng tới kế hoạch du lịch, AI chọn gọi
checkWeather()khi diễn giải prompt.Kết quả là AI thực thi một chuỗi tool:
searchFlights(): truy vấn các hãng bay cho chuyến từ NYC tới BarcelonacheckWeather(): lấy dự báo khí hậu cho các ngày đi
Sau đó AI dùng thông tin này để đặt chỗ và làm các bước tiếp theo, xin người dùng phê duyệt khi cần:
bookHotel(): tìm khách sạn trong ngân sách đã địnhcreateCalendarEvent(): thêm chuyến đi vào lịch của người dùngsendEmail(): gửi xác nhận kèm chi tiết chuyến đi
Kết quả: thông qua nhiều MCP server, người dùng đã tìm hiểu và đặt một chuyến đi Barcelona phù hợp với lịch của mình. Prompt "Plan a Vacation" dẫn dắt AI kết hợp Resources (lịch trống và lịch sử du lịch) với Tools (tìm chuyến bay, đặt khách sạn, cập nhật lịch) trên nhiều server khác nhau, vừa thu thập ngữ cảnh vừa thực hiện việc đặt chỗ. Một việc có thể mất hàng giờ đã xong trong vài phút nhờ MCP.
Nguồn
- Dịch và biên tập từ https://raw.githubusercontent.com/modelcontextprotocol/modelcontextprotocol/main/docs/docs/2026-07-28/learn/server-concepts.mdx, giấy phép CC-BY-4.0.