📖 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.

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 đó.

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ụcmcp_toolsettrongtools. 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ể trongconfigs— 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
- Bài tiếp: Context management
- Bài trước: Skills
- 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-platform-101/486260
- © 2025 Anthropic. Chỉ dùng cho mục đích giáo dục, fair-use.
- Crawl: 2026-06-27 · Chuẩn hoá: 2026-06-27