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

MCP

📖 Nội dung bài học

Video

MCP

Chúng ta có tools, skills, và connectors. Vậy tại sao MCP lại tồn tại? Thoạt nhìn, nó giống như một API thứ hai được xếp chồng lên trên API hiện có. Đây là một câu hỏi hợp lý — và câu trả lời nằm ở việc ai là người bảo trì code tích hợp.

Vấn đề bảo trì

Giả sử agent của bạn cần lấy các tác vụ từ Asana, kiểm tra Lịch Google và tìm kiếm Slack — tất cả trong một lần. Với custom tools, bạn phải viết ba bản tích hợp. Phần đó thì có thể làm được. Phần khó chịu là sau đó: bạn cũng phải bảo trì các bản tích hợp đó mỗi khi một trong các dịch vụ thay đổi API của họ, điều này xảy ra thường xuyên. Xin chúc mừng, giờ bạn đang bảo trì một đống trình bao bọc API của bên thứ ba.

MCP chuyển việc bảo trì đó cho nhà cung cấp dịch vụ. Asana xuất bản một MCP server. Slack xuất bản một. Google xuất bản một. Mỗi server sẽ phơi bày các tools, schema và xác thực của riêng nó — thông qua một protocol tiêu chuẩn. Khi API của họ thay đổi, họ cập nhật server của mình. Bạn không thay đổi gì cả.

Tools vs. Skills vs. MCP

Ba tính năng này thực hiện các công việc khác nhau:

  • Tools kết nối Claude với các hệ thống nội bộ của bạn — cơ sở dữ liệu, trình theo dõi dự án, API độc quyền của bạn. Bạn sở hữu code, vì vậy bạn cũng sở hữu việc bảo trì.
  • Skills dạy Claude một quy trình — mẫu báo cáo của bạn, danh sách kiểm tra đánh giá của bạn. Skills là các hướng dẫn, không nhất thiết là các bản tích hợp.
  • MCP kết nối Claude với các dịch vụ của bên thứ ba, nơi nhà cung cấp dịch vụ bảo trì bản tích hợp. Bạn không viết trình bao bọc Asana — Asana đã làm điều đó.

Phiên bản ngắn gọn: tools dành cho thứ của bạn, skills dành cho quy trình của bạn, và MCP dành cho thứ của người khác.

Thẻ so sánh cho Tools, Skills, và MCP, với thẻ MCP được làm nổi bật: kết nối Claude với các dịch vụ của bên thứ ba, được bảo trì bởi nhà cung cấp dịch vụ

Kết nối với MCP server

Cách rõ ràng nhất để cảm nhận về MCP là hướng Claude tới bất kỳ MCP server nào và để nó khám phá những gì có sẵn. Trong ví dụ này, chúng ta sẽ sử dụng Linear MCP server, với chi tiết kết nối và token xác thực được lưu trữ trong file .env.

Hai phần hoạt động cùng nhau trong yêu cầu. Khóa mcp_servers khai báo kết nối — một loại, một URL, một tên để tham chiếu, và tùy chọn một token xác thực. Sau đó, một tool có loại mcp_toolset cấu hình những tool nào Claude có thể sử dụng từ server đó. Mặc định là tất cả, nhưng nếu bạn muốn giới hạn phạm vi, đây là nơi bạn thực hiện điều đó.

import os
import anthropic

client = anthropic.Anthropic()

response = client.beta.messages.create(
    model="claude-opus-4-8",
    max_tokens=1000,
    messages=[
        {"role": "user", "content": "What tools do you have available?"}
    ],
    mcp_servers=[
        {
            "type": "url",
            "url": "https://mcp.linear.app/mcp",
            "name": "linear",
            "authorization_token": os.environ["LINEAR_MCP_TOKEN"],
        }
    ],
    tools=[
        {
            "type": "mcp_toolset",
            "mcp_server_name": "linear",
        }
    ],
    betas=["mcp-client-2025-11-20"],
)

print(response)

Lưu ý rằng chúng ta không bao giờ viết một schema tool nào. Claude tự kiểm tra server, nhận lại danh sách các tool và schema của chúng, và chọn đúng tool cho prompt. Tính đến bài học này, MCP connector đang ở giai đoạn beta — lưu ý tiêu đề beta trong yêu cầu.

Chạy nó, và nếu MCP URL của bạn trỏ đến điểm cuối MCP của Linear, Claude sẽ liệt kê các tool của Linear và sau đó gọi một trong số chúng. Điều tương tự cũng hoạt động với về cơ bản bất kỳ server tuân thủ nào. Chúng ta không định nghĩa một tool nào. Chúng ta không viết một Linear client. Linear đang bảo trì điều đó.

Kết quả đầu cuối liệt kê các tool được phát hiện của Linear MCP server, theo sau là Claude ghi chú rằng chúng là các công cụ quản lý dự án của Linear và chọn công cụ để gọi

Lọc tool Claude có thể sử dụng

MCP server thường phơi bày rất nhiều tool — và bạn không phải lúc nào cũng muốn Claude sử dụng tất cả chúng. Có thể bạn không muốn nó có quyền ghi, hoặc bạn chỉ không muốn tất cả các định nghĩa tool đó chiếm dụng context.

Giải pháp: vô hiệu hóa mọi thứ theo mặc định, sau đó chỉ kích hoạt các tool cụ thể bạn muốn. Đây là mẫu đó với Slack MCP server:

tools=[
    {
        "type": "mcp_toolset",
        "mcp_server_name": "slack",
        "default_config": {
            "enabled": False,
        },
        "configs": {
            "search_messages": {"enabled": True},
            "list_channels": {"enabled": True},
        },
    }
]

Bây giờ Claude có thể tìm kiếm Slack và liệt kê các kênh, nhưng nó không thể đăng hoặc xóa. Điều này hữu ích khi bạn tin tưởng một dịch vụ cho các thao tác đọc nhưng không muốn Claude ghi thay mặt bạn do vô tình.

Tóm tắt

  • MCP tồn tại để bạn không phải bảo trì các bản tích hợp mà người khác đã xây dựng. Nhà cung cấp dịch vụ xuất bản một MCP server và giữ cho nó được cập nhật — bạn không thay đổi gì khi API của họ thay đổi.
  • Chọn tính năng phù hợp cho công việc: tools cho dữ liệu của bạn, skills cho quy trình của bạn, MCP cho các dịch vụ của bên thứ ba.
  • Khai báo kết nối trong mcp_servers (loại, URL, tên, token xác thực tùy chọn) và cấp quyền truy cập bằng mục mcp_toolset trong tools. Claude tự kiểm tra server và khám phá các tool — không cần viết schema.
  • Thu hẹp phạm vi truy cập bằng cách đặt default_config: {"enabled": False} và kích hoạt các tool cụ thể trong configs — hữu ích để giữ cho server chỉ đọc.
  • MCP connector hiện đang ở giai đoạn beta, vì vậy hãy bao gồm tiêu đề beta trong các yêu cầu của bạn.
  • Truy cập modelcontextprotocol.io để xem danh sách các server khả dụng và tìm hiểu thêm về protocol.

🎬 Bản ghi video

Source video: hftmYd97LBw

Không có transcript — xem phần nội dung bài học bên trên.

🔁 Bài học liên quan

📚 Nguồn & ghi nhận

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