📖 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_tools và call_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_contents và edit_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ẽ:
- Gửi danh sách các tool có sẵn cho Claude
- Claude quyết định sử dụng tool
read_doc_contents - Client của chúng ta gọi tool đó trên server
- Server trả về nội dung tài liệu
- 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
- Bài tiếp: Defining resources
- Bài trước: The server inspector
- Cùng section: Making a request · Multi-turn conversations · Chat exercise
- Thuộc lộ trình: Path C
- Docs tham khảo: Glossary · Skills atlas · By use-case
📚 Nguồn & ghi nhận
- Bài học gốc Anthropic Academy: https://anthropic.skilljar.com/claude-with-google-vertex/289206
- © 2025 Anthropic. Chỉ dùng cho mục đích giáo dục, fair-use.
- Crawl: — · Chuẩn hoá: 2026-05-01