빌드

무엇을 할 수 있나 — 목록을 적어 두면 그 서버 전용이 된다

작성: 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