picomcpv0.1.2
Меню · Ресурсы
Руководства

Ресурсы

Файлы, записи и живые данные, которые может читать клиент, с типизированными шаблонами URI.

Открыть .md Редактировать на GitHub

Это перевод. Эталоном считается английская версия.

Ресурсы — это данные, которые клиент может прочитать и прикрепить к диалогу: файлы, строки базы данных, ответы API. Инструменты вызывает модель, а ресурсы обычно выбирает пользователь или приложение.

ts
server.resource("config://app", {
  description: "The app configuration",
  read: () => loadConfig(),
});

Шаблоны URI#

Добавьте в URI {variables}, чтобы обслуживать целое семейство ресурсов. Типы переменных выводятся из самой строки:

ts
server.resource("github://{owner}/{repo}/readme", {
  mimeType: "text/markdown",
  read: async ({ owner, repo }) => {
    //           ^? { owner: string; repo: string }
    const res = await fetch(`https://raw.githubusercontent.com/${owner}/${repo}/HEAD/README.md`);
    return res.text();
  },
});
СинтаксисСовпадает сПример
{name}Один сегмент пути, без /, ? и #users://{id} совпадает с users://42
{+name}Чем угодно, включая /files://{+path} совпадает с files://src/index.ts

Значения декодируются из URL до передачи в read. Статические ресурсы появляются в resources/list, шаблоны — в resources/templates/list.

Возвращаемые значения#

read возвращаетОтправляемое содержимое
stringТекст, с mimeType или text/plain
Uint8ArrayBlob в base64, с mimeType или application/octet-stream
массив { uri, text } или { uri, blob }Это содержимое как есть
любое другое значениеЕго JSON, как application/json

read получает контекст вторым аргументом, дополненный запрошенным uri:

ts
read: (params, { uri, signal }) => fetch(toHttp(uri), { signal }).then((r) => r.text());

Параметры#

ПараметрОписание
nameИдентификатор, который видят пользователи. По умолчанию — URI.
titleОтображаемое имя.
descriptionЧто содержит ресурс.
mimeTypeТип содержимого, которое возвращает read.
annotationsПодсказки audience, priority и lastModified.

Ресурс не найден#

Если ни один ресурс не совпадает с URI, picomcp отвечает ошибкой протокола -32002 Resource not found. Чтобы отклонить URI, который совпадает с шаблоном, но ни на что не указывает, выбросьте McpError с тем же кодом:

ts
import { McpError } from "picomcp";

read: async ({ id }) => {
  const user = await db.users.find(id);
  if (!user) throw new McpError(-32002, `Resource not found: users://${id}`);
  return user;
};

Ссылки из инструментов#

Инструмент может указать модели на ресурс, а не встраивать его. Так большие данные не попадают в контекст, пока они не нужны:

ts
import { link } from "picomcp";

run: async () => link("reports://2026-q3", "Q3 report", { mimeType: "application/pdf" });