Skip to content
Track 04 · Guide

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.

Beginner@shine190413 min read

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ăngGiải thíchVí dụAi kiểm soát
ToolsCá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ịchModel
ResourcesNguồ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
PromptsCá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 emailNgườ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ứcMục đíchTrả về
tools/listKhám phá các tool sẵn cóMảng định nghĩa tool kèm schema
tools/callThực thi một tool cụ thểKết quả thực thi tool

Ví dụ định nghĩa tool:

typescript
{
  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

code
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

code
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

code
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/2024 trả 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ục
    • travel://activities/barcelona/museums trả 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ứcMục đíchTrả về
resources/listLiệt kê các direct resource sẵn cóMảng mô tả resource
resources/templates/listKhám phá các resource templateMảng định nghĩa resource template
resources/readLấy nội dung resourceDữ liệu resource kèm metadata
subscriptions/listenTheo dõi thay đổi của resourceLuồ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:

json
{
  "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ứcMục đíchTrả về
prompts/listKhám phá các prompt sẵn cóMảng mô tả prompt
prompts/getLấ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":

json
{
  "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:

  1. Chọn template "Plan a vacation"
  2. Nhập có cấu trúc: Barcelona, 7 ngày, $3000, ["beaches", "architecture", "food"]
  3. 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

  1. 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
      }
    }
    
  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)
  3. 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 Barcelona
    • checkWeather(): 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 đã định
    • createCalendarEvent(): thêm chuyến đi vào lịch của người dùng
    • sendEmail(): 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

Write another guide for this track