MCP Server là gì? Hướng dẫn xây dựng bằng Python

F9d369ae-da67-4c90-b01f-e81f64e365e0

Khi xây dựng ứng dụng AI, bạn có thể muốn mô hình ngôn ngữ không chỉ trả lời câu hỏi mà còn thực hiện những tác vụ như tra cứu dữ liệu, đọc tài liệu hoặc gọi một công cụ bên ngoài. Để làm được điều đó, ứng dụng AI cần một cách giao tiếp có cấu trúc với các hệ thống khác.

MCP Server là một thành phần quan trọng trong Model Context Protocol (MCP), giao thức mở giúp ứng dụng AI kết nối với các công cụ và nguồn dữ liệu theo một chuẩn chung. Trong bài viết này, chúng ta sẽ tìm hiểu MCP Server là gì và xây dựng một ví dụ bằng Python từ đầu.

1. MCP Server là gì?

MCP Server là thành phần cung cấp các khả năng cho ứng dụng AI thông qua Model Context Protocol. Những khả năng đó có thể bao gồm công cụ để thực hiện tác vụ (tools), dữ liệu để cung cấp ngữ cảnh (resources) và mẫu hướng dẫn có thể tái sử dụng (prompts).

Ví dụ, một MCP Server có thể cung cấp công cụ tra cứu khóa học, đọc tài liệu nội bộ hoặc truy vấn dữ liệu kinh doanh. Ứng dụng AI tương thích MCP có thể khám phá các công cụ được cung cấp và yêu cầu gọi công cụ khi cần thiết.

MCP Server không nhất thiết là mô hình AI, cũng không tự suy luận thay cho mô hình. Nó cung cấp giao diện để ứng dụng AI tương tác với chức năng và dữ liệu bên ngoài.

2. MCP Host, MCP Client và MCP Server khác nhau thế nào?

Thành phần Vai trò Ví dụ
MCP Host Ứng dụng AI mà người dùng tương tác, quản lý quá trình sử dụng mô hình và các kết nối. Một ứng dụng trợ lý AI có hỗ trợ MCP.
MCP Client Thành phần bên trong host giao tiếp với một MCP Server theo giao thức MCP. Client gửi yêu cầu liệt kê tools hoặc gọi tool.
MCP Server Công bố tools, resources hoặc prompts cho client sử dụng. Server cung cấp tool tra cứu khóa học.

Có thể hình dung luồng tổng quát như sau:

Người dùng
    |
    v
Ứng dụng AI (MCP Host)
    |
    v
MCP Client
    |
    v
MCP Server
    |
    v
Hàm Python / API / Nguồn dữ liệu

Đây là sơ đồ khái quát. Cách triển khai cụ thể phụ thuộc vào host, client, phương thức truyền tải và hệ thống mà MCP Server cần truy cập.

3. MCP Server cung cấp những gì?

3.1. Tools

Tools là các thao tác mà mô hình có thể đề xuất gọi thông qua ứng dụng AI. Ví dụ: tìm khóa học theo từ khóa, tính tổng doanh thu hoặc truy vấn trạng thái đơn hàng. Ứng dụng vẫn cần kiểm soát quyền và việc thực thi các thao tác phù hợp.

3.2. Resources

Resources cung cấp dữ liệu hoặc nội dung để ứng dụng đưa vào ngữ cảnh. Ví dụ: một tài liệu hướng dẫn hoặc thông tin cấu hình được công bố dưới một URI.

3.3. Prompts

Prompts là các mẫu hướng dẫn có thể tái sử dụng, giúp chuẩn hóa một số cách tương tác. Ứng dụng hoặc người dùng có thể lựa chọn prompt phù hợp tùy cách host hỗ trợ.

Một MCP Server có thể cung cấp một hoặc nhiều nhóm khả năng trên. Bài thực hành dưới đây tập trung vào tools để giữ cho ví dụ dễ hiểu.

4. Chuẩn bị môi trường Python

Theo tài liệu của MCP Python SDK v2, môi trường cần Python 3.11 trở lên. Bạn có thể kiểm tra phiên bản Python bằng lệnh:

python --version

Nếu sử dụng uv, hãy tạo một thư mục dự án và khởi tạo môi trường:

uv init mcp-course-server
cd mcp-course-server
uv add "mcp[cli]"

Nếu sử dụng pip, có thể cài SDK trong môi trường ảo đã kích hoạt:

pip install "mcp[cli]"

Nên dùng môi trường ảo riêng để tránh xung đột thư viện với các dự án Python khác.

5. Xây dựng MCP Server đầu tiên

Trong ví dụ này, chúng ta xây dựng một server cung cấp tool tìm kiếm thông tin khóa học từ một danh sách dữ liệu mẫu. Đây là dữ liệu minh họa được khai báo trong code, chưa kết nối tới cơ sở dữ liệu hay website thật.

Tạo file server.py và thêm nội dung sau:

from mcp.server import MCPServer

mcp = MCPServer("MCNA Course Server")

courses = [
    {
        "name": "Python",
        "description": "Nền tảng Python cho lập trình và phân tích dữ liệu."
    },
    {
        "name": "AI và Power BI",
        "description": "Tìm hiểu ứng dụng AI và trực quan hóa dữ liệu."
    },
    {
        "name": "Data Analysis",
        "description": "Phân tích dữ liệu và rút ra thông tin hữu ích."
    }
]


@mcp.tool()
def search_courses(keyword: str) -> str:
    """Search the sample course catalog by keyword."""
    keyword = keyword.strip().lower()

    if not keyword:
        return "Vui lòng nhập từ khóa tìm kiếm."

    results = [
        course for course in courses
        if keyword in course["name"].lower()
        or keyword in course["description"].lower()
    ]

    if not results:
        return "Không tìm thấy khóa học phù hợp."

    return "\n".join(
        f"{course['name']}: {course['description']}"
        for course in results
    )

6. Giải thích đoạn code

6.1. Khởi tạo server

from mcp.server import MCPServer

mcp = MCPServer("MCNA Course Server")

MCPServer là lớp dùng để tạo server trong SDK v2. Tên server giúp nhận diện thành phần khi kết nối và kiểm thử.

6.2. Đăng ký một tool

@mcp.tool()
def search_courses(keyword: str) -> str:

Decorator @mcp.tool() đăng ký hàm Python thành một tool được công bố qua MCP. Tên hàm, docstring và type hint cung cấp thông tin để SDK xây dựng mô tả và schema đầu vào cho tool.

Tham số keyword: str cho biết tool nhận một chuỗi. Docstring mô tả mục đích của công cụ để client và mô hình có thể hiểu khi nào nên sử dụng.

6.3. Xử lý dữ liệu

Hàm chuẩn hóa từ khóa về chữ thường, tìm các khóa học có tên hoặc mô tả chứa từ khóa đó, sau đó trả kết quả dạng văn bản. Trong dự án thực tế, phần danh sách dữ liệu mẫu có thể được thay bằng truy vấn cơ sở dữ liệu hoặc gọi API có xác thực.

Việc đăng ký tool không đồng nghĩa với việc mô hình tự động gọi hàm ngay khi server khởi động. Ứng dụng AI và client sẽ khám phá các tool, sau đó điều phối việc gọi công cụ theo yêu cầu.

7. Chạy và kiểm thử MCP Server bằng MCP Inspector

Trong terminal tại thư mục dự án, chạy:

uv run mcp dev server.py

Lệnh phát triển này khởi chạy server và mở MCP Inspector để kiểm tra các khả năng được công bố. MCP Inspector cung cấp giao diện tương tác giúp bạn xem danh sách tools và thử gọi công cụ.

  1. Mở mục Tools trong Inspector.
  2. Tìm tool search_courses.
  3. Nhập từ khóa, chẳng hạn Python.
  4. Gọi tool và kiểm tra kết quả trả về.
  5. Thử từ khóa không tồn tại để kiểm tra trường hợp không có kết quả.

MCP Inspector là công cụ kiểm thử, không phải bản thân MCP Server. Nếu lệnh phát triển không chạy được, hãy kiểm tra phiên bản Python, việc cài đặt SDK, lệnh mcp và yêu cầu môi trường của Inspector; Inspector có thể cần Node.js và npx.

8. MCP Server khác API Server thông thường ở đâu?

Tiêu chí API Server MCP Server
Giao diện Thường cung cấp endpoint hoặc giao diện API theo thiết kế của dịch vụ. Công bố các khả năng theo giao thức MCP.
Khả năng khám phá Phụ thuộc tài liệu và cơ chế discovery của API. Client có thể yêu cầu liệt kê tools, resources và prompts được hỗ trợ.
Đối tượng sử dụng Website, backend, ứng dụng di động và các hệ thống khác. Đặc biệt hữu ích cho ứng dụng AI hỗ trợ MCP.
Quan hệ Có thể xử lý nghiệp vụ và dữ liệu ở phía sau. Có thể gọi API hiện có để thực thi nghiệp vụ.

MCP không loại bỏ nhu cầu sử dụng API. Một kiến trúc phổ biến là MCP Server cung cấp tool cho ứng dụng AI, còn phần thực thi tool gọi API hoặc truy vấn dữ liệu phía sau.

9. Những lưu ý quan trọng khi triển khai

  • Không cấp quyền quá mức: chỉ cung cấp những công cụ và dữ liệu cần thiết.
  • Xác thực đầu vào: kiểm tra kiểu dữ liệu, phạm vi và nội dung tham số trước khi thực thi.
  • Bảo vệ thông tin bí mật: không viết API key hoặc mật khẩu trực tiếp vào mã nguồn công khai.
  • Thận trọng với thao tác có tác động: các công cụ sửa, xóa dữ liệu hoặc thực hiện giao dịch cần phân quyền và xác nhận phù hợp.
  • Giám sát và ghi log: theo dõi lời gọi công cụ, lỗi và thời gian phản hồi mà không ghi lộ dữ liệu nhạy cảm.
  • Chọn phương thức truyền tải phù hợp: stdio thường thuận tiện cho server chạy cục bộ cùng host; Streamable HTTP có thể phù hợp với triển khai qua mạng. Cấu hình bảo mật phải phù hợp với môi trường thực tế.

10. Kết luận

MCP Server là một thành phần giúp ứng dụng AI truy cập công cụ và nguồn dữ liệu theo giao thức chuẩn hóa. Với Python MCP SDK, bạn có thể đăng ký các hàm Python thành tools mà không cần tự viết toàn bộ phần xử lý giao thức.

Trong ví dụ trên, chúng ta đã tạo một tool tìm kiếm khóa học, hiểu cách đăng ký tool và biết cách kiểm thử bằng MCP Inspector. Đây là nền tảng để phát triển những server có khả năng truy vấn dữ liệu, kết nối API nghiệp vụ hoặc cung cấp tài nguyên cho các ứng dụng AI.

Tài liệu tham khảo

Tìm hiểu thêm về Data và AI tại MCNA

Nếu bạn muốn xây dựng nền tảng Python, phân tích dữ liệu và tìm hiểu cách ứng dụng AI vào các bài toán thực tế, hãy tham khảo các chương trình học tại MCNA Technology School:

→ Chỉ mục