Skip to content

Commit a34570a

Browse files
committed
Specify UTF-8 charset explicitly in STDIO transport InputStreamReader
The MCP specification requires UTF-8 encoding for STDIO transport messages, but some InputStreamReader instances were created without an explicit charset, falling back to the JRE default encoding which may not be UTF-8 on all platforms. This change adds StandardCharsets.UTF_8 to all InputStreamReader constructors in StdioClientTransport (stdin and stderr readers) and StdioServerTransportProvider (stdin reader) for consistency with the output streams that already specify UTF-8. Resolves #295
1 parent 29dc250 commit a34570a

File tree

2 files changed

+4
-3
lines changed

2 files changed

+4
-3
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ private void startInboundProcessing() {
200200
inboundReady.tryEmitValue(null);
201201
BufferedReader reader = null;
202202
try {
203-
reader = new BufferedReader(new InputStreamReader(inputStream));
203+
reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
204204
while (!isClosing.get()) {
205205
try {
206206
String line = reader.readLine();

0 commit comments

Comments
 (0)