サーバー講座の六編でサーバーが立った。このトラックは反対側だ — そのサーバーに繋ぐコード。
繋ぐコードの全部
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 の引数を見てほしい。ホストもポートも無い。command と arguments だ。
クライアントがサーバーのプロセスを自分で立ち上げ、そのプロセスの stdin/stdout で話す。設定するソケットも、立ち上がるまで待つサービスも無い。
些細に見えて、後で値を持つ。伝送を替える作業が どのプログラムを起動するか に縮むからだ。
// シリアル機器へ
command: '../serial_bridge/serial_bridge',
arguments: ['/dev/cu.usbmodem1234', '115200'],
// ネットワーク機器へ
command: '../tcp_bridge/tcp_bridge',
arguments: ['mcp-esp32.local', '6270'],
クライアントのコードは一文字も変わらない。実機の編で STM32 と ESP32 に同じコードで繋げたのは、この構造のためだ。