Skip to content

Commit bb3f323

Browse files
committed
test
1 parent cbb235f commit bb3f323

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed

mcp-test/src/main/java/io/modelcontextprotocol/AbstractMcpClientServerIntegrationTests.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -818,6 +818,44 @@ void testToolCallSuccess(String clientType) {
818818
}
819819
}
820820

821+
@ParameterizedTest(name = "{0} : {displayName} ")
822+
@MethodSource("clientsForTesting")
823+
void testToolCallWithUnicodeArguments(String clientType) {
824+
825+
var clientBuilder = clientBuilders.get(clientType);
826+
827+
// String containing multi-byte UTF-8 characters: em dash, Chinese, emoji
828+
String unicodeInput = "Test \u2014 em dash, \u5929\u6c14\u9884\u62a5, \ud83d\ude00";
829+
830+
McpServerFeatures.SyncToolSpecification echoTool = McpServerFeatures.SyncToolSpecification.builder()
831+
.tool(Tool.builder().name("echo").description("Echoes input").inputSchema(EMPTY_JSON_SCHEMA).build())
832+
.callHandler((exchange, request) -> {
833+
String text = (String) request.arguments().get("text");
834+
return CallToolResult.builder().addContent(new TextContent(text)).build();
835+
})
836+
.build();
837+
838+
var mcpServer = prepareSyncServerBuilder().capabilities(ServerCapabilities.builder().tools(true).build())
839+
.tools(echoTool)
840+
.build();
841+
842+
try (var mcpClient = clientBuilder.build()) {
843+
InitializeResult initResult = mcpClient.initialize();
844+
assertThat(initResult).isNotNull();
845+
846+
CallToolResult response = mcpClient
847+
.callTool(new McpSchema.CallToolRequest("echo", Map.of("text", unicodeInput)));
848+
849+
assertThat(response).isNotNull();
850+
assertThat(response.content()).hasSize(1);
851+
assertThat(response.content().get(0)).isInstanceOf(TextContent.class);
852+
assertThat(((TextContent) response.content().get(0)).text()).isEqualTo(unicodeInput);
853+
}
854+
finally {
855+
mcpServer.closeGracefully();
856+
}
857+
}
858+
821859
@ParameterizedTest(name = "{0} : {displayName} ")
822860
@MethodSource("clientsForTesting")
823861
void testThrowingToolCallIsCaughtBeforeTimeout(String clientType) {

mcp-test/src/test/java/io/modelcontextprotocol/server/HttpServletStatelessIntegrationTests.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -639,6 +639,44 @@ void testThrownMcpErrorAndJsonRpcError() throws Exception {
639639
mcpServer.close();
640640
}
641641

642+
@ParameterizedTest(name = "{0} : {displayName} ")
643+
@ValueSource(strings = { "httpclient" })
644+
void testToolCallWithUnicodeArguments(String clientType) {
645+
646+
var clientBuilder = clientBuilders.get(clientType);
647+
648+
// String containing multi-byte UTF-8 characters: em dash, Chinese, emoji
649+
String unicodeInput = "Test \u2014 em dash, \u5929\u6c14\u9884\u62a5, \ud83d\ude00";
650+
651+
var echoTool = new McpStatelessServerFeatures.SyncToolSpecification(
652+
Tool.builder().name("echo").description("Echoes input").inputSchema(EMPTY_JSON_SCHEMA).build(),
653+
(transportContext, request) -> {
654+
String text = (String) request.arguments().get("text");
655+
return CallToolResult.builder().content(List.of(new TextContent(text))).build();
656+
});
657+
658+
var mcpServer = McpServer.sync(mcpStatelessServerTransport)
659+
.capabilities(ServerCapabilities.builder().tools(true).build())
660+
.tools(echoTool)
661+
.build();
662+
663+
try (var mcpClient = clientBuilder.build()) {
664+
InitializeResult initResult = mcpClient.initialize();
665+
assertThat(initResult).isNotNull();
666+
667+
CallToolResult response = mcpClient
668+
.callTool(new McpSchema.CallToolRequest("echo", Map.of("text", unicodeInput)));
669+
670+
assertThat(response).isNotNull();
671+
assertThat(response.content()).hasSize(1);
672+
assertThat(response.content().get(0)).isInstanceOf(TextContent.class);
673+
assertThat(((TextContent) response.content().get(0)).text()).isEqualTo(unicodeInput);
674+
}
675+
finally {
676+
mcpServer.close();
677+
}
678+
}
679+
642680
private double evaluateExpression(String expression) {
643681
// Simple expression evaluator for testing
644682
return switch (expression) {

0 commit comments

Comments
 (0)