服务端课程六篇把服务端立了起来。这一轨是另一侧——接上去的那段代码。
连接的代码,全部
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,靠的就是这个结构。