Skip to content

Commit 22b9009

Browse files
committed
refactor(transport): make fields final and specify charset in stream readers
Make scheduler fields final in client and server transports for better immutability. Explicitly specify UTF-8 charset when creating InputStreamReader instances to ensure consistent character encoding.
1 parent 082444e commit 22b9009

File tree

2 files changed

+11
-17
lines changed

2 files changed

+11
-17
lines changed

mcp-core/src/main/java/io/modelcontextprotocol/client/transport/StdioClientTransport.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,16 @@ public class StdioClientTransport implements McpClientTransport {
4848
/** The server process being communicated with */
4949
private Process process;
5050

51-
private McpJsonMapper jsonMapper;
51+
private final McpJsonMapper jsonMapper;
5252

5353
/** Scheduler for handling inbound messages from the server process */
54-
private Scheduler inboundScheduler;
54+
private final Scheduler inboundScheduler;
5555

5656
/** Scheduler for handling outbound messages to the server process */
57-
private Scheduler outboundScheduler;
57+
private final Scheduler outboundScheduler;
5858

5959
/** Scheduler for handling error messages from the server process */
60-
private Scheduler errorScheduler;
60+
private final Scheduler errorScheduler;
6161

6262
/** Parameters for configuring and starting the server process */
6363
private final ServerParameters params;
@@ -180,7 +180,7 @@ public void awaitForExit() {
180180
private void startErrorProcessing() {
181181
this.errorScheduler.schedule(() -> {
182182
try (BufferedReader processErrorReader = new BufferedReader(
183-
new InputStreamReader(process.getErrorStream()))) {
183+
new InputStreamReader(process.getErrorStream(), StandardCharsets.UTF_8))) {
184184
String line;
185185
while (!isClosing && (line = processErrorReader.readLine()) != null) {
186186
try {
@@ -246,7 +246,8 @@ public Mono<Void> sendMessage(JSONRPCMessage message) {
246246
*/
247247
private void startInboundProcessing() {
248248
this.inboundScheduler.schedule(() -> {
249-
try (BufferedReader processReader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
249+
try (BufferedReader processReader = new BufferedReader(
250+
new InputStreamReader(process.getInputStream(), StandardCharsets.UTF_8))) {
250251
String line;
251252
while (!isClosing && (line = processReader.readLine()) != null) {
252253
try {

mcp-core/src/main/java/io/modelcontextprotocol/server/transport/StdioServerTransportProvider.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import java.io.InputStreamReader;
1111
import java.io.OutputStream;
1212
import java.nio.charset.StandardCharsets;
13-
import java.util.List;
1413
import java.util.concurrent.Executors;
1514
import java.util.concurrent.atomic.AtomicBoolean;
1615
import java.util.function.Function;
@@ -22,7 +21,6 @@
2221
import io.modelcontextprotocol.spec.McpServerSession;
2322
import io.modelcontextprotocol.spec.McpServerTransport;
2423
import io.modelcontextprotocol.spec.McpServerTransportProvider;
25-
import io.modelcontextprotocol.spec.ProtocolVersions;
2624
import io.modelcontextprotocol.util.Assert;
2725
import io.modelcontextprotocol.json.McpJsonMapper;
2826
import org.slf4j.Logger;
@@ -82,11 +80,6 @@ public StdioServerTransportProvider(McpJsonMapper jsonMapper, InputStream inputS
8280
this.outputStream = outputStream;
8381
}
8482

85-
@Override
86-
public List<String> protocolVersions() {
87-
return List.of(ProtocolVersions.MCP_2024_11_05);
88-
}
89-
9083
@Override
9184
public void setSessionFactory(McpServerSession.Factory sessionFactory) {
9285
// Create a single session for the stdio connection
@@ -124,10 +117,10 @@ private class StdioMcpSessionTransport implements McpServerTransport {
124117
private final AtomicBoolean isStarted = new AtomicBoolean(false);
125118

126119
/** Scheduler for handling inbound messages */
127-
private Scheduler inboundScheduler;
120+
private final Scheduler inboundScheduler;
128121

129122
/** Scheduler for handling outbound messages */
130-
private Scheduler outboundScheduler;
123+
private final Scheduler outboundScheduler;
131124

132125
private final Sinks.One<Void> outboundReady = Sinks.one();
133126

@@ -198,9 +191,9 @@ private void startInboundProcessing() {
198191
if (isStarted.compareAndSet(false, true)) {
199192
this.inboundScheduler.schedule(() -> {
200193
inboundReady.tryEmitValue(null);
201-
BufferedReader reader = null;
194+
BufferedReader reader;
202195
try {
203-
reader = new BufferedReader(new InputStreamReader(inputStream));
196+
reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
204197
while (!isClosing.get()) {
205198
try {
206199
String line = reader.readLine();

0 commit comments

Comments
 (0)