Skip to content
Lesson 6/11 · Khoá học MCP (Hugging Face)

Tìm hiểu các capability của MCP

Bốn loại capability của MCP (Tools, Resources, Prompts, Sampling), ai điều khiển chúng và cách chúng phối hợp với nhau.

This content is currently available in Vietnamese only.

Beginner@shine19048 min read

MCP server cung cấp cho client nhiều khả năng (capability) khác nhau thông qua giao thức truyền thông. Các capability này chia thành bốn nhóm chính, mỗi nhóm có đặc điểm và trường hợp sử dụng riêng. Hãy cùng tìm hiểu những thành phần cơ bản (primitive) tạo nên nền tảng chức năng của MCP.

Tools

Tools là các hàm hoặc hành động có thể thực thi mà model AI gọi được thông qua giao thức MCP.

  • Điều khiển: Tool thường do model điều khiển, nghĩa là model AI (LLM) quyết định khi nào gọi tool dựa trên yêu cầu và ngữ cảnh của người dùng.
  • An toàn: Vì tool có thể thực hiện hành động có tác dụng phụ (side effect), việc thực thi tool có thể nguy hiểm. Do đó tool thường cần người dùng phê duyệt rõ ràng.
  • Trường hợp dùng: Gửi tin nhắn, tạo ticket, truy vấn API, thực hiện tính toán.

Ví dụ: Một tool thời tiết lấy dữ liệu thời tiết hiện tại cho một địa điểm:

python
def get_weather(location: str) -> dict:
    """Get the current weather for a specified location."""
    # Connect to weather API and fetch data
    return {
        "temperature": 72,
        "conditions": "Sunny",
        "humidity": 45
    }

Resources

Resource cung cấp quyền truy cập chỉ đọc tới các nguồn dữ liệu, cho phép model AI lấy ngữ cảnh mà không phải chạy logic phức tạp.

  • Điều khiển: Resource do ứng dụng điều khiển, nghĩa là ứng dụng host thường quyết định khi nào truy cập chúng.
  • Bản chất: Resource được thiết kế để lấy dữ liệu với rất ít tính toán, tương tự các endpoint GET trong REST API.
  • An toàn: Vì chỉ đọc, resource thường ít rủi ro bảo mật hơn tool.
  • Trường hợp dùng: Đọc nội dung file, lấy bản ghi trong cơ sở dữ liệu, đọc thông tin cấu hình.

Ví dụ: Một resource cho phép đọc nội dung file:

python
def read_file(file_path: str) -> str:
    """Read the contents of a file at the specified path."""
    with open(file_path, 'r') as f:
        return f.read()

Prompts

Prompt là các mẫu (template) hoặc quy trình (workflow) định sẵn, dẫn dắt tương tác giữa người dùng, model AI và các capability của server.

  • Điều khiển: Prompt do người dùng điều khiển, thường hiển thị như các lựa chọn trong giao diện của ứng dụng host.
  • Mục đích: Prompt tổ chức tương tác để tận dụng tốt nhất các tool và resource sẵn có.
  • Lựa chọn: Người dùng thường chọn prompt trước khi model AI bắt đầu xử lý, qua đó thiết lập ngữ cảnh cho tương tác.
  • Trường hợp dùng: Các quy trình phổ biến, mẫu cho tác vụ chuyên biệt, tương tác có hướng dẫn.

Ví dụ: Một mẫu prompt để tạo bài review code:

python
def code_review(code: str, language: str) -> list:
    """Generate a code review for the provided code snippet."""
    return [
        {
            "role": "system",
            "content": f"You are a code reviewer examining {language} code. Provide a detailed review highlighting best practices, potential issues, and suggestions for improvement."
        },
        {
            "role": "user",
            "content": f"Please review this {language} code:\n\n```{language}\n{code}\n```"
        }
    ]

Sampling

Sampling cho phép server yêu cầu client (cụ thể là ứng dụng host) thực hiện các tương tác với LLM.

  • Điều khiển: Sampling do server khởi xướng nhưng cần client/host hỗ trợ thực hiện.
  • Mục đích: Cho phép các hành vi kiểu agent do server dẫn dắt, có thể là tương tác đệ quy hoặc nhiều bước.
  • An toàn: Giống tool, thao tác sampling thường cần người dùng phê duyệt.
  • Trường hợp dùng: Tác vụ phức tạp nhiều bước, quy trình agent tự động, quy trình tương tác.

Ví dụ: Server có thể yêu cầu client phân tích dữ liệu mà server đã xử lý:

python
def request_sampling(messages, system_prompt=None, include_context="none"):
    """Request LLM sampling from the client."""
    # In a real implementation, this would send a request to the client
    return {
        "role": "assistant",
        "content": "Analysis of the provided data..."
    }

Luồng sampling gồm các bước:

  1. Server gửi request sampling/createMessage tới client
  2. Client xem xét request và có thể chỉnh sửa nó
  3. Client lấy kết quả (sample) từ một LLM
  4. Client xem xét kết quả sinh ra
  5. Client trả kết quả về cho server

Các capability phối hợp với nhau như thế nào

Hãy xem các capability này phối hợp ra sao để tạo nên những tương tác phức tạp. Bảng dưới đây tóm tắt từng capability, ai điều khiển, chiều điều khiển và một số chi tiết khác.

CapabilityAi điều khiểnChiềuTác dụng phụCần phê duyệtTrường hợp dùng điển hình
ToolsModel (LLM)Client → ServerCó (có thể)CóHành động, gọi API, xử lý dữ liệu
ResourcesỨng dụngClient → ServerKhông (chỉ đọc)Thường khôngLấy dữ liệu, thu thập ngữ cảnh
PromptsNgười dùngServer → ClientKhôngKhông (người dùng tự chọn)Quy trình có hướng dẫn, mẫu chuyên biệt
SamplingServerServer → Client → ServerGián tiếpCóTác vụ nhiều bước, hành vi kiểu agent

Các capability này được thiết kế để bổ trợ cho nhau:

  1. Người dùng có thể chọn một Prompt để bắt đầu một quy trình chuyên biệt
  2. Prompt đó có thể kèm ngữ cảnh lấy từ Resources
  3. Trong lúc xử lý, model AI có thể gọi Tools để thực hiện hành động cụ thể
  4. Với thao tác phức tạp, server có thể dùng Sampling để yêu cầu LLM xử lý thêm

Sự phân biệt rõ giữa các primitive này tạo ra cấu trúc mạch lạc cho tương tác MCP: model AI có thể truy cập thông tin, thực hiện hành động và tham gia các quy trình phức tạp mà vẫn giữ ranh giới kiểm soát phù hợp.

Quá trình khám phá

Một tính năng then chốt của MCP là khám phá capability một cách động. Khi client kết nối tới server, nó có thể hỏi các tool, resource và prompt hiện có thông qua các phương thức liệt kê:

  • tools/list: Khám phá các tool hiện có
  • resources/list: Khám phá các resource hiện có
  • prompts/list: Khám phá các prompt hiện có

Cơ chế khám phá động này cho phép client thích ứng với các capability cụ thể của từng server mà không cần biết trước (hardcode) chức năng của server.

Kết luận

Hiểu các primitive cốt lõi này là điều cần thiết để làm việc hiệu quả với MCP. Bằng cách cung cấp các loại capability riêng biệt với ranh giới kiểm soát rõ ràng, MCP cho phép model AI tương tác mạnh mẽ với các hệ thống bên ngoài mà vẫn duy trì cơ chế an toàn và kiểm soát phù hợp.

Ở phần tiếp theo, chúng ta sẽ tìm hiểu cách Gradio tích hợp với MCP để tạo giao diện dễ dùng cho các capability này (xem bài Tích hợp Gradio với MCP).

Nguồn