Чтение ресурсов

Чему научитесь

Видео 4:38 и текст урока

К концу урока вы сможете:

Видео и текст урока.

Смотреть урок на Skilljar Accessing resources · 4:38

Ресурсы в MCP позволяют серверу отдавать данные, которые можно сразу включить в промпт, — без вызовов инструментов для получения информации. Это более эффективный способ дать контекст моделям вроде Claude.

Запросы ресурсов

Когда ресурсы на MCP-сервере описаны, клиенту нужен способ запрашивать и использовать их. Клиент — мост между приложением и MCP-сервером: он автоматически берёт на себя общение и разбор данных.

MCP-клиент отправляет ReadResourceRequest для docs://documents, MCP-сервер возвращает ReadResourceResult с именами документов.
ReadResourceRequest для docs://documents → ReadResourceResult со списком документов.

Поток простой: когда пользователь хочет сослаться на документ (например, пишет «@report.pdf»), приложение через MCP-клиент получает этот ресурс с сервера и включает его содержимое прямо в промпт, который уходит Claude.

Чтение ресурса

Основа — функция read_resource в MCP-клиенте. Она принимает URI нужного ресурса:

async def read_resource(self, uri: str) -> Any:
    result = await self.session().read_resource(AnyUrl(uri))
    resource = result.contents[0]

Ответ MCP-сервера содержит список contents. Обычно нужен только первый элемент — в нём сами данные ресурса и метаданные вроде MIME-типа.

Разные типы содержимого

Ресурсы могут возвращать разные типы содержимого, поэтому клиент должен разбирать их по-разному. MIME-тип подсказывает, как обращаться с данными:

if isinstance(resource, types.TextResourceContents):
    if resource.mimeType == "application/json":
        return json.loads(resource.text)

    return resource.text

Так ресурсы JSON разбираются в объекты Python, а текстовые возвращаются строками. MIME-тип — ваша подсказка, как правильно разбирать данные.

Нужные импорты

Чтобы всё работало, в MCP-клиенте понадобятся импорты:

import json
from pydantic import AnyUrl

Модуль json разбирает ответы JSON, а AnyUrl обеспечивает правильный тип параметра URI.

Проверка доступа к ресурсам

После реализации функциональность можно проверить в CLI-приложении. Когда вы пишете что-то вроде «What's in the @report.pdf document?», система должна:

MCP Inspector читает docs://documents/report.pdf: текст «The report details the state of a 20m condenser tower».
Чтение docs://documents/report.pdf: «The report details the state of a 20m condenser tower».

Главное преимущество: Claude получает содержимое документа прямо в промпте, без вызовов инструментов. Взаимодействие становится быстрее и эффективнее.

Интеграция с приложением

Помните, что код MCP-клиента используют другие части приложения. Функция read_resource становится строительным блоком, который другие компоненты вызывают, чтобы получить содержимое документов, список ресурсов или встроить данные ресурса в промпт.

Такое разделение ответственности держит код чистым: MCP-клиент отвечает за общение с сервером, а логика приложения — за то, как эффективно использовать данные.

Дальше

Следующий урок — третий примитив: промпты на MCP-сервере.

Оригинал урока: Accessing resources.