/
Вопросы и ответы
/
MCP
/

Чем MCP Resources отличается от Tools?

Чем MCP Resources отличается от Tools?

12 часов назад

Никита Вихров

Ответы

0

В MCP есть три сущности: Tools, Resources и Prompts. Tools знают все — это функции, которые модель вызывает сама. Resources путают с Tools, хотя это разные вещи с разным назначением.

Tools — действия

Tool вызывается моделью, когда нужно что-то сделать или получить данные динамически. Модель решает сама, когда и с какими аргументами вызвать инструмент.

server.tool(
  "search_logs",
  "Ищет ошибки в логах за последние N минут",
  { minutes: z.number(), level: z.enum(["error", "warn", "info"]) },
  async ({ minutes, level }) => {
    const logs = await fetchLogs({ minutes, level });
    return { content: [{ type: "text", text: logs }] };
  }
);

Здесь данные каждый раз разные — зависят от аргументов и момента вызова. Tool — правильный выбор.


Resources — данные

Resource — это статический или полустатический контент, который клиент (редактор) может загрузить и передать модели как контекст. Resource не вызывается моделью — он загружается редактором по URI.

server.resource(
  "readme",
  "file:///project/README.md",
  async (uri) => {
    const content = await fs.readFile("/project/README.md", "utf-8");
    return {
      contents: [{
        uri: uri.href,
        mimeType: "text/markdown",
        text: content,
      }],
    };
  }
);

Или динамический список ресурсов:

server.resource(
  "config",
  new ResourceTemplate("config://{environment}", { list: undefined }),
  async (uri, { environment }) => {
    const config = await loadConfig(environment as string);
    return {
      contents: [{
        uri: uri.href,
        mimeType: "application/json",
        text: JSON.stringify(config, null, 2),
      }],
    };
  }
);

Теперь по URI config://production редактор получит конфиг продакшена и подставит его в контекст.


Когда что использовать

Tool — когда нужно действие или данные с аргументами: поиск, запрос к API, выполнение команды.

Resource — когда это документ или файл с постоянным URI: README, схема базы данных, конфигурация, документация API.

Простой тест: если у контента есть адрес (URI) и он меняется редко — Resource. Если нужны параметры и результат зависит от момента вызова — Tool.

На практике большинство задач решается через Tools. Resources полезны, когда хочешь дать модели доступ к корпусу документации или набору конфигов — чтобы редактор мог сам решать, что подгрузить в контекст.

12 часов назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845