5
5
"encoding/json"
6
6
"fmt"
7
7
"io"
8
+ "sync"
8
9
"time"
9
10
10
11
"github.com/google/uuid"
@@ -38,7 +39,7 @@ func (t *streamableHttpTransport) Run(
38
39
e := echo .New ()
39
40
t .e = e
40
41
41
- servers := map [uuid. UUID ]server. Server {}
42
+ servers := sync. Map {}
42
43
43
44
// ensure that negotiated version would be at least the one with streamable http transport
44
45
serverOptions = append (serverOptions , server.MinimalProtocolVersionOption {
@@ -54,11 +55,11 @@ func (t *streamableHttpTransport) Run(
54
55
if err != nil {
55
56
return echo .NewHTTPError (400 , "Wrong session id format, expected UUID" )
56
57
}
57
- _ , ok := servers [ sessionId ]
58
+ _ , ok := servers . Load ( sessionId )
58
59
if ! ok {
59
60
return echo .NewHTTPError (404 , "Requested session id not found in session store" )
60
61
}
61
- delete ( servers , sessionId )
62
+ servers . Delete ( sessionId )
62
63
t .sessionManager .DeleteSession (sessionId )
63
64
return c .NoContent (204 )
64
65
})
@@ -74,17 +75,17 @@ func (t *streamableHttpTransport) Run(
74
75
// , hence we return 404 Not Found with some details in the body
75
76
return echo .NewHTTPError (404 , "Wrong session id format, expected UUID" )
76
77
}
77
- s , ok := servers [ sessionId ]
78
+ s , ok := servers . Load ( sessionId )
78
79
if ! ok {
79
80
return echo .NewHTTPError (404 , "Requested session id not found in session store" )
80
81
}
81
82
w .Header ().Set ("Mcp-Session-Id" , sessionId .String ())
82
- serv = s
83
+ serv = s .(server. Server )
83
84
sessionIdUsed = sessionId
84
85
} else {
85
86
sessionId := uuid .New ()
86
87
s := server .NewServer (capabilities , serverInfo , serverOptions ... )
87
- servers [ sessionId ] = s
88
+ servers . Store ( sessionId , s )
88
89
w .Header ().Set ("Mcp-Session-Id" , sessionId .String ())
89
90
serv = s
90
91
sessionIdUsed = sessionId
0 commit comments