Bỏ qua đến nội dung chính

Implementing a client

📖 Nội dung bài học

Tóm tắt

Bây giờ chúng ta đã có MCP server hoạt động, đã đến lúc xây dựng phía client. Client là thứ cho phép ứng dụng của chúng ta giao tiếp với MCP server và truy cập chức năng của nó.

Hiểu kiến trúc Client

Trước khi đi sâu vào code, hãy làm rõ một điểm quan trọng về các dự án MCP. Thông thường, bạn sẽ triển khai client MCP hoặc server MCP - không phải cả hai. Chúng ta đang xây dựng cả hai trong dự án này chỉ để bạn thấy cách chúng hoạt động cùng nhau.

Client MCP bao gồm hai thành phần chính:

  • MCP Client - Một lớp tùy chỉnh chúng ta tạo để sử dụng session dễ dàng hơn
  • Client Session - Kết nối thực tế với server (là một phần của MCP Python SDK)

Client session yêu cầu dọn dẹp tài nguyên khi chúng ta hoàn thành, đó là lý do tại sao chúng ta bọc nó trong lớp tùy chỉnh của mình. Lớp này xử lý quản lý kết nối và dọn dẹp tự động.

Client phù hợp với ứng dụng của chúng ta như thế nào

Nhớ lại luồng ứng dụng của chúng ta? Code CLI của chúng ta cần tương tác với Claude theo hai cách chính:

Client cho phép cả hai tương tác này bằng cách cung cấp chức năng của server cho codebase của chúng ta.

Triển khai các hàm Client cốt lõi

Chúng ta cần triển khai hai hàm thiết yếu: list_toolscall_tool.

Hàm List Tools

Hàm này lấy tất cả các tool có sẵn từ server:

async def list_tools(self) -> list[types.Tool]:
    result = await self.session().list_tools()
    return result.tools

Nó rất đơn giản - chúng ta truy cập session của mình (kết nối với MCP server), gọi hàm list_tools tích hợp sẵn và trả về các tool từ kết quả.

Hàm Call Tool

Hàm này thực thi một tool cụ thể trên server:

async def call_tool(
    self, tool_name: str, tool_input: dict
) -> types.CallToolResult | None:
    return await self.session().call_tool(tool_name, tool_input)

Chúng ta truyền tên tool và các tham số đầu vào (do Claude cung cấp) cho server và trả về kết quả.

Kiểm tra Client

Để xác minh việc triển khai của chúng ta hoạt động, chúng ta có thể kiểm tra trực tiếp. Tệp client bao gồm một bộ công cụ kiểm tra kết nối với MCP server và chạy các lệnh trên đó.

Chạy uv run mcp_client.py sẽ trả về danh sách các tool có sẵn cùng với mô tả và lược đồ đầu vào của chúng. Bạn sẽ thấy các tool như read_doc_contentsedit_document mà chúng ta đã định nghĩa trong server của mình.

Kiểm tra End-to-End

Bây giờ cả client và server đều hoạt động, chúng ta có thể kiểm tra toàn bộ luồng. Chạy ứng dụng chính của chúng ta và hỏi Claude "What is the contents of the report.pdf document?" (Nội dung của tài liệu report.pdf là gì?) sẽ:

  1. Gửi danh sách các tool có sẵn cho Claude
  2. Claude quyết định sử dụng tool read_doc_contents
  3. Client của chúng ta gọi tool đó trên server
  4. Server trả về nội dung tài liệu
  5. Claude phản hồi với thông tin

Client đóng vai trò là cầu nối giữa code ứng dụng của bạn và MCP server, giúp dễ dàng truy cập chức năng của server mà không cần xử lý trực tiếp các chi tiết kết nối cấp thấp.

🔁 Bài học liên quan

📚 Nguồn & ghi nhận

Bài học có hữu ích không?

Góp ý / Báo lỗiPhát hiện sai sót hoặc có ý tưởng cải thiện?