빌드

붙는다 — 전송은 설정이 아니라 실행할 명령이다

작성: makemind · 2026년 3월 20일

서버 강좌 여섯 편으로 서버가 섰다. 이번 트랙은 반대쪽이다 — 그 서버에 붙는 코드.

붙는 코드 전부

Future<Client> connect(String step) async {
  final r = await McpClient.createAndConnect(
    config: McpClient.simpleConfig(
        name: 'Course Client', version: '1.0.0', enableDebugLogging: false),
    transportConfig: TransportConfig.stdio(
      command: 'dart',
      arguments: ['run', 'bin/$step.dart'],
      workingDirectory: '../course-server',
    ),
  );
  return r.get();
}

config 는 우리가 누구인지, transportConfig 는 어떻게 가 닿는지다.

전송이 명령이다

TransportConfig.stdio 의 인자를 봐 달라. 호스트도 포트도 없다. commandarguments 다.

클라이언트가 서버 프로세스를 직접 띄우고, 그 프로세스의 stdin/stdout 으로 말한다. 설정할 소켓이 없고, 뜰 때까지 기다릴 서비스가 없다.

이게 사소해 보이는데, 나중에 값을 한다. 전송을 바꾸는 일이 어느 프로그램을 띄우느냐 로 줄어들기 때문이다.

// 시리얼 장치로
command: '../serial_bridge/serial_bridge',
arguments: ['/dev/cu.usbmodem1234', '115200'],

// 네트워크 장치로
command: '../tcp_bridge/tcp_bridge',
arguments: ['mcp-esp32.local', '6270'],

클라이언트 코드는 한 글자도 안 바뀐다. 실보드 편에서 STM32 와 ESP32 에 같은 코드로 붙을 수 있었던 게 이 구조 때문이다.

이 콘텐츠는 개발자 이상이 필요합니다

로그인 후 플랜을 업그레이드하면 계속 읽을 수 있습니다.

플랜 보기
Twitter