@@ -161,6 +161,10 @@ func NewStreamableServerTransport(sessionID string) *StreamableServerTransport {
161161 }
162162}
163163
164+ func (t * StreamableServerTransport ) sessionID () string {
165+ return t .id
166+ }
167+
164168// A StreamableServerTransport implements the [Transport] interface for a
165169// single session.
166170type StreamableServerTransport struct {
@@ -331,7 +335,7 @@ func (t *StreamableServerTransport) servePOST(w http.ResponseWriter, req *http.R
331335 http .Error (w , fmt .Sprintf ("malformed payload: %v" , err ), http .StatusBadRequest )
332336 return
333337 }
334- var requests = make (map [JSONRPCID ]struct {})
338+ requests : = make (map [JSONRPCID ]struct {})
335339 for _ , msg := range incoming {
336340 if req , ok := msg .(* JSONRPCRequest ); ok && req .ID .IsValid () {
337341 requests [req .ID ] = struct {}{}
@@ -624,20 +628,26 @@ func (t *StreamableClientTransport) Connect(ctx context.Context) (Connection, er
624628}
625629
626630type streamableClientConn struct {
627- url string
628- sessionID string
629- client * http.Client
630- incoming chan []byte
631- done chan struct {}
631+ url string
632+ client * http.Client
633+ incoming chan []byte
634+ done chan struct {}
632635
633636 closeOnce sync.Once
634637 closeErr error
635638
636- mu sync.Mutex
639+ mu sync.Mutex
640+ _sessionID string
637641 // bodies map[*http.Response]io.Closer
638642 err error
639643}
640644
645+ func (c * streamableClientConn ) sessionID () string {
646+ c .mu .Lock ()
647+ defer c .mu .Unlock ()
648+ return c ._sessionID
649+ }
650+
641651// Read implements the [Connection] interface.
642652func (s * streamableClientConn ) Read (ctx context.Context ) (JSONRPCMessage , error ) {
643653 select {
@@ -658,7 +668,7 @@ func (s *streamableClientConn) Write(ctx context.Context, msg JSONRPCMessage) er
658668 return s .err
659669 }
660670
661- sessionID := s .sessionID
671+ sessionID := s ._sessionID
662672 if sessionID == "" {
663673 // Hold lock for the first request.
664674 defer s .mu .Unlock ()
@@ -681,7 +691,7 @@ func (s *streamableClientConn) Write(ctx context.Context, msg JSONRPCMessage) er
681691
682692 if sessionID == "" {
683693 // locked
684- s .sessionID = gotSessionID
694+ s ._sessionID = gotSessionID
685695 }
686696
687697 return nil
@@ -753,7 +763,7 @@ func (s *streamableClientConn) Close() error {
753763 if err != nil {
754764 s .closeErr = err
755765 } else {
756- req .Header .Set ("Mcp-Session-Id" , s .sessionID )
766+ req .Header .Set ("Mcp-Session-Id" , s ._sessionID )
757767 if _ , err := s .client .Do (req ); err != nil {
758768 s .closeErr = err
759769 }
0 commit comments