Skip to content

Commit b636b16

Browse files
authored
mcp: fix flaky ExampleLoggingTransport (#483)
Reads are technically racy with writes. Sort for stability.
1 parent 208bfe2 commit b636b16

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

docs/troubleshooting.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,15 @@ func ExampleLoggingTransport() {
3939
if _, err := client.Connect(ctx, logTransport, nil); err != nil {
4040
log.Fatal(err)
4141
}
42-
fmt.Println(b.String())
42+
// Sort for stability: reads are concurrent to writes.
43+
for _, line := range slices.Sorted(strings.SplitSeq(b.String(), "\n")) {
44+
fmt.Println(line)
45+
}
46+
4347
// Output:
44-
// write: {"jsonrpc":"2.0","id":1,"method":"initialize","params":{"capabilities":{"roots":{"listChanged":true}},"clientInfo":{"name":"client","version":"v0.0.1"},"protocolVersion":"2025-06-18"}}
4548
// read: {"jsonrpc":"2.0","id":1,"result":{"capabilities":{"logging":{}},"protocolVersion":"2025-06-18","serverInfo":{"name":"server","version":"v0.0.1"}}}
49+
// write: {"jsonrpc":"2.0","id":1,"method":"initialize","params":{"capabilities":{"roots":{"listChanged":true}},"clientInfo":{"name":"client","version":"v0.0.1"},"protocolVersion":"2025-06-18"}}
4650
// write: {"jsonrpc":"2.0","method":"notifications/initialized","params":{}}
47-
4851
}
4952
```
5053

mcp/transport_example_test.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,18 @@
22
// Use of this source code is governed by an MIT-style
33
// license that can be found in the LICENSE file.
44

5+
// Uses strings.SplitSeq.
6+
//go:build go1.24
7+
58
package mcp_test
69

710
import (
811
"bytes"
912
"context"
1013
"fmt"
1114
"log"
15+
"slices"
16+
"strings"
1217

1318
"github.com/modelcontextprotocol/go-sdk/mcp"
1419
)
@@ -29,12 +34,15 @@ func ExampleLoggingTransport() {
2934
if _, err := client.Connect(ctx, logTransport, nil); err != nil {
3035
log.Fatal(err)
3136
}
32-
fmt.Println(b.String())
37+
// Sort for stability: reads are concurrent to writes.
38+
for _, line := range slices.Sorted(strings.SplitSeq(b.String(), "\n")) {
39+
fmt.Println(line)
40+
}
41+
3342
// Output:
34-
// write: {"jsonrpc":"2.0","id":1,"method":"initialize","params":{"capabilities":{"roots":{"listChanged":true}},"clientInfo":{"name":"client","version":"v0.0.1"},"protocolVersion":"2025-06-18"}}
3543
// read: {"jsonrpc":"2.0","id":1,"result":{"capabilities":{"logging":{}},"protocolVersion":"2025-06-18","serverInfo":{"name":"server","version":"v0.0.1"}}}
44+
// write: {"jsonrpc":"2.0","id":1,"method":"initialize","params":{"capabilities":{"roots":{"listChanged":true}},"clientInfo":{"name":"client","version":"v0.0.1"},"protocolVersion":"2025-06-18"}}
3645
// write: {"jsonrpc":"2.0","method":"notifications/initialized","params":{}}
37-
3846
}
3947

4048
// !-loggingtransport

0 commit comments

Comments
 (0)