createAndConnect static method

Future<Result<Client, Exception>> createAndConnect({
  1. required McpClientConfig config,
  2. required TransportConfig transportConfig,
})

Create and connect a client using the provided configuration

Implementation

static Future<Result<Client, Exception>> createAndConnect({
  required McpClientConfig config,
  required TransportConfig transportConfig,
}) async {
  return Results.catchingAsync(() async {
    final client = createClient(config);
    await client.connectWithRetry(
      () => _createTransport(transportConfig),
      maxRetries: config.maxRetries,
      delay: config.retryDelay,
      era: config.era,
    );
    // Heartbeat: the specification's connection health check is `ping`
    // (none exists in 2026-07-28, which has no connection to keep).
    final (interval, maxMissed) = switch (transportConfig) {
      SseTransportConfig(:final heartbeatInterval, :final maxMissedHeartbeats) =>
        (heartbeatInterval, maxMissedHeartbeats),
      StreamableHttpTransportConfig(:final heartbeatInterval, :final maxMissedHeartbeats) =>
        (heartbeatInterval, maxMissedHeartbeats),
      StdioTransportConfig() => (null, 0),
    };
    if (interval != null && !client.isStateless) {
      client.startKeepAlive(interval, timeout: interval, maxMissed: maxMissed < 1 ? 1 : maxMissed);
    }

    return client;
  });
}