Bỏ qua để đến nội dung

Định nghĩa resource

Bài viết được dịch tự động từ bài viết gốc, chưa được kiểm tra lại bởi con người. Chỉ những bài viết có dấu tick xanh cạnh tiêu đề là đã được kiểm tra.

Resource trong MCP server phơi bày dữ liệu cho client, tương tự các handler xử lý GET request trong một HTTP server - được thiết kế để lấy thông tin, chứ không phải để thực hiện hành động.

Bài học minh hoạ bằng một tính năng “mention tài liệu”: người dùng tham chiếu tới file bằng cú pháp @ten_tai_lieu, đòi hỏi vừa có danh sách tài liệu khả dụng, vừa có khả năng lấy nội dung một tài liệu cụ thể.

Slide minh hoạ tính năng mention tài liệu bằng ký hiệu @ @ hiện danh sách tài liệu khả dụng để autocomplete; nội dung tài liệu được mention sẽ tự động chèn vào prompt.

Sơ đồ nội dung tài liệu được chèn vào prompt Người dùng hỏi “Trong @report.pdf có gì?” - nội dung file được chèn vào bên trong prompt gửi cho Claude.

Client gửi một ReadResourceRequest kèm một URI định danh; server xử lý và trả về dữ liệu qua ReadResourceResult.

Sơ đồ tuần tự phần đầu: client gửi ReadResourceRequest tới server Client gửi ReadResourceRequest với URI docs://documents tới MCP server.

Sơ đồ tuần tự phần sau: server trả về ReadResourceResult MCP server trả về ReadResourceResult chứa danh sách tên tài liệu.

Resource trực tiếp: URI tĩnh, không có tham số, phù hợp cho các thao tác không cần biến số.

@mcp.resource(
"docs://documents",
mime_type="application/json"
)
def list_docs() -> list[str]:
return list(docs.keys())

Resource có template: URI chứa tham số mà Python SDK tự động phân tích và truyền vào dưới dạng keyword argument.

@mcp.resource(
"docs://documents/{doc_id}",
mime_type="text/plain"
)
def fetch_doc(doc_id: str) -> str:
if doc_id not in docs:
raise ValueError(f"Doc with id {doc_id} not found")
return docs[doc_id]

So sánh trực tiếp giữa Direct Resource và Templated Resource So sánh: Direct Resource (URI không tham số) và Templated Resource (URI có tham số).

Resource có thể trả về nhiều kiểu dữ liệu (chuỗi, JSON, dữ liệu nhị phân). Tham số mime_type cho biết định dạng dữ liệu: application/json cho dữ liệu có cấu trúc, text/plain cho văn bản, application/pdf cho file nhị phân. SDK tự động xử lý việc serialize.

Khởi động server bằng uv run mcp dev mcp_server.py, sau đó truy cập MCP Inspector qua trình duyệt. Inspector hiển thị cả resource trực tiếp lẫn resource template, cho phép bạn nhập thử tham số cho các resource dạng template.

MCP Inspector với tab Resources mở, hiển thị resource docs://documents và template fetch_doc, cùng response JSON MCP Inspector với tab Resources mở, hiển thị cả resource trực tiếp và resource template.