実装

何ができるのか — 一覧を書き留めればそのサーバー専用になる

著者: makemind · 2026年3月27日

1 編目で繋がった。今度は問う。

二行

final tools = await client.listTools();
stdout.writeln('tools: ${tools.map((t) => t.name).join(", ")}');
for (final t in tools) {
  stdout.writeln('  ${t.name}${t.description}');
}

final resources = await client.listResources();
stdout.writeln('resources: ${resources.map((r) => r.uri).join(", ")}');
tools: desk.admit
  desk.admit — Admit a number of people from the queue
resources: ui://desk, desk://waiting

書き留めれば専用になる

こう書くこともできる。

// このサーバーは desk.admit を持っている
await client.callTool('desk.admit', {'count': 1});

動く。そして その瞬間このクライアントはそのサーバー専用になる。 道具名がひとつでもコードに埋まれば、別のサーバーの前には立てない。

問って受け取れば違う。一覧が実行時に来るので、クライアントは 自分が何に繋がったかを知らなくていい。 ボードに繋げば led.set が来て、デスクに繋げば desk.admit が来る。同じコードだ。

説明文がここで使われる

listTools() は名前だけをくれるのではない。説明文と入力スキーマが一緒に来る。

desk.admit — Admit a number of people from the queue

人が使うクライアントならこれでボタンのラベルとツールチップを作る。モデルならこれを読んで何を呼ぶかを決める。サーバー 2 編目で「説明文は注釈ではなく動くコードだ」と言ったものが、ここで消費される。

このコンテンツは開発者以上が必要です

サインインしてプランをアップグレードすると続きを読めます。

プランを見る
Twitter