@@ -846,48 +846,35 @@ func (us *UnifiedServer) ensureSessionDirectory(sessionID string) error {
846846}
847847
848848// requireSession checks that a session has been initialized for this request
849- // When DIFC is disabled (default), automatically creates a session if one doesn't exist
849+ // Sessions are automatically created if one doesn't exist (for standard MCP client compatibility)
850850func (us * UnifiedServer ) requireSession (ctx context.Context ) error {
851851 sessionID := us .getSessionID (ctx )
852852 log .Printf ("Checking session for ID: %s" , sessionID )
853853
854- // If DIFC is disabled (default), use double-checked locking to auto-create session
855- if ! us .enableDIFC {
856- us .sessionMu .RLock ()
857- session := us .sessions [sessionID ]
858- us .sessionMu .RUnlock ()
859-
860- if session == nil {
861- // Need to create session - acquire write lock
862- us .sessionMu .Lock ()
863- // Double-check after acquiring write lock to avoid race condition
864- if us .sessions [sessionID ] == nil {
865- log .Printf ("DIFC disabled: auto-creating session for ID: %s" , sessionID )
866- us .sessions [sessionID ] = NewSession (sessionID , "" )
867- log .Printf ("Session auto-created for ID: %s" , sessionID )
868-
869- // Ensure session directory exists in payload mount point
870- // This is done after releasing the lock to avoid holding it during I/O
871- us .sessionMu .Unlock ()
872- if err := us .ensureSessionDirectory (sessionID ); err != nil {
873- logger .LogWarn ("client" , "Failed to create session directory for session=%s: %v" , sessionID , err )
874- // Don't fail - payloads will attempt to create the directory when needed
875- }
876- return nil
877- }
878- us .sessionMu .Unlock ()
879- }
880- return nil
881- }
882-
883- // DIFC is enabled - require explicit session initialization
854+ // Use double-checked locking to auto-create session if needed
884855 us .sessionMu .RLock ()
885856 session := us .sessions [sessionID ]
886857 us .sessionMu .RUnlock ()
887858
888859 if session == nil {
889- log .Printf ("Session not found for ID: %s. Available sessions: %v" , sessionID , us .getSessionKeys ())
890- return fmt .Errorf ("sys___init must be called before any other tool calls" )
860+ // Need to create session - acquire write lock
861+ us .sessionMu .Lock ()
862+ // Double-check after acquiring write lock to avoid race condition
863+ if us .sessions [sessionID ] == nil {
864+ log .Printf ("Auto-creating session for ID: %s" , sessionID )
865+ us .sessions [sessionID ] = NewSession (sessionID , "" )
866+ log .Printf ("Session auto-created for ID: %s" , sessionID )
867+
868+ // Ensure session directory exists in payload mount point
869+ // This is done after releasing the lock to avoid holding it during I/O
870+ us .sessionMu .Unlock ()
871+ if err := us .ensureSessionDirectory (sessionID ); err != nil {
872+ logger .LogWarn ("client" , "Failed to create session directory for session=%s: %v" , sessionID , err )
873+ // Don't fail - payloads will attempt to create the directory when needed
874+ }
875+ return nil
876+ }
877+ us .sessionMu .Unlock ()
891878 }
892879
893880 log .Printf ("Session validated for ID: %s" , sessionID )
0 commit comments