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}パスの 1 セグメント。/、?、# を含まないusers://{id} は users://42 にマッチ
{+name}/ を含むあらゆる文字列files://{+path} は files://src/index.ts にマッチ

値は URL デコードされてから read に渡されます。静的なリソースは resources/list に、テンプレートは resources/templates/list に表示されます。

戻り値#

read の戻り値送られる内容
stringテキスト。mimeType または text/plain
Uint8Arraybase64 の blob。mimeType または application/octet-stream
{ uri, text } または { uri, blob } の配列それらの内容をそのまま
その他の値その JSON。application/json

read の第 2 引数にはコンテキストが渡され、要求された uri も含まれます:

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

オプション#

オプション説明
nameユーザーに表示される識別子。デフォルトは URI。
title表示名。
descriptionリソースの内容。
mimeTyperead が返す内容の種類。
annotationsaudience、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" });