実装

繋ぐ — 伝送は設定ではなく、起動するコマンドだ

著者: 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