deleteSession method

Future<void> deleteSession({
  1. Map<String, String> headers = const <String, String>{},
})

Terminates the active server-side MCP session and clears local state.

Implementation

Future<void> deleteSession({
  Map<String, String> headers = const <String, String>{},
}) async {
  if (protocolVersion == latestProtocolVersion) {
    throw const McpStreamableProtocolException(
      'MCP 2026 HTTP does not support DELETE session requests',
    );
  }
  final requestSessionState = _sessionStateSnapshot;
  final requestAuthorizationState = _authorizationStateSnapshot;
  final activeSessionId = requestSessionState.sessionId;
  if (activeSessionId == null) {
    _clearSessionState();
    return;
  }
  return _runTrackedHttpOperation<void>((operation) async {
    final activeProtocolVersion = protocolVersion;
    final request = await _openTrackedHttpRequest(
      () => _httpClient.deleteUrl(endpoint),
      operation,
      requestAuthorizationState,
    );
    _applyHeaders(
      request,
      accept: _acceptJson,
      protocolVersion: activeProtocolVersion,
      sessionState: requestSessionState,
      authorizationState: requestAuthorizationState,
      extraHeaders: headers,
    );

    final response = await _sendTrackedHttpRequest(request, operation);
    final body = await _readTrackedHttpResponseBody(
      request,
      response,
      operation,
    );
    _throwIfHttpErrorForSession(
      response,
      body,
      expectedSessionToken: requestSessionState.token,
      expectedAuthorizationToken: requestAuthorizationState.token,
    );
    _captureSessionHeaders(
      response,
      captureSessionState: false,
      expectedSessionState: requestSessionState,
      expectedProtocolVersion: activeProtocolVersion,
    );
    if (identical(_sessionStateToken, requestSessionState.token)) {
      _clearSessionState();
    }
  });
}