-
Notifications
You must be signed in to change notification settings - Fork 578
Open
Description
Bug description
For the same MCP SSE service endpoint, both the mcp-inspector and Python SDK work properly, but the Java SDK fails.
Environment
JDK17
Java SDK: 0.10.0
Python SDK: mcp[cli]>=1.9.0
MCP Inspector: v0.15.0
Steps to reproduce
MCP Inspector
Python Code
import asyncio
from mcp.client.sse import sse_client
from mcp import ClientSession
from objprint import op
async def main():
async with sse_client(
"https://xxxxxxxxx.com/mcp/proxy/testchairstream/init"
) as (
stdio,
write,
):
async with ClientSession(stdio, write) as session:
# init ClientSession
await session.initialize()
# list all tools
response = await session.list_tools()
print(response.tools)
if __name__ == "__main__":
asyncio.run(main())
However, when I use the Java SDK to run this demo, it fails to work.
A timeout exception occurs during client initialization, specifically when executing client.initialize()
@Override
public List<? extends MCPTool> generateTools() {
UrlParser.SseEndpointInfo info;
try {
//https://xxxxxxxxx.com/mcp/proxy/testchairstream/init
//info = parseUrl("http://localhost:8000/sse");
info = new UrlParser.SseEndpointInfo("https://xxxxxxxxx.com", "/mcp/proxy/testchairstream/init");
} catch (Exception e) {
throw new BizException(ErrorCode.SERVICE_ONLINE_FAIL, e.getMessage());
}
var transport = HttpClientSseClientTransport.builder(info.baseUri())
.sseEndpoint(info.sseEndpoint())
.objectMapper(new ObjectMapper())
.requestBuilder(HttpRequest.newBuilder())
.clientBuilder(HttpClient.newBuilder().followRedirects(HttpClient.Redirect.ALWAYS))
.build();
McpSyncClient client = McpClient.sync(transport)
.clientInfo(new McpSchema.Implementation("gov-ai-service-platform-proxy", "1.0.0"))
.build();
try {
client.initialize(); //Will throw an error on this line
List<McpSchema.Tool> tools1 = client.listTools().tools();
return tools1.stream().map(x -> new MCPBridgeTool(x, client)).toList();
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return null;
}
Below is the stack trace:
2025-07-01 15:57:15.437 [main][] [] ERROR c.a.g.d.mcp.metadata.MCPMetaData - java.util.concurrent.TimeoutException: Did not observe any item or terminal signal within 20000ms in 'Mono.deferContextual ⇢ at io.modelcontextprotocol.spec.McpClientSession.sendRequest(McpClientSession.java:233)' (and no fallback has been configured)
reactor.core.Exceptions$ReactiveException: java.util.concurrent.TimeoutException: Did not observe any item or terminal signal within 20000ms in 'Mono.deferContextual ⇢ at io.modelcontextprotocol.spec.McpClientSession.sendRequest(McpClientSession.java:233)' (and no fallback has been configured)
at reactor.core.Exceptions.propagate(Exceptions.java:410)
at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:102)
at reactor.core.publisher.Mono.block(Mono.java:1779)
at io.modelcontextprotocol.client.McpSyncClient.initialize(McpSyncClient.java:171)
at com.alipay.govaiserviceplatform.domain.mcp.metadata.MCPMetaData.generateTools(MCPMetaData.java:75)
at com.alipay.govaiserviceplatform.core.mcp.server.BuiltInMCPServer.getTools(BuiltInMCPServer.java:47)
at com.alipay.govaiserviceplatform.core.mcp.server.BaseMCPServer.start(BaseMCPServer.java:49)
at com.alipay.govaiserviceplatform.core.config.BuiltInMCPServerRegistry.createServerRegistration(BuiltInMCPServerRegistry.java:85)
at com.alipay.govaiserviceplatform.core.config.BuiltInMCPServerRegistry.lambda$postProcessBeanFactory$1(BuiltInMCPServerRegistry.java:70)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1297)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:1033)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1257)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1200)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:569)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:373)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:207)
at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:230)
at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:221)
at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:106)
at org.springframework.boot.web.servlet.ServletContextInitializerBeans.<init>(ServletContextInitializerBeans.java:95)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:271)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:245)
at org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:52)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4464)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:772)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193)
at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:203)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:412)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:870)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
at org.apache.catalina.startup.Tomcat.start(Tomcat.java:438)
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:128)
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.<init>(TomcatWebServer.java:107)
at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:517)
at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:219)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:193)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:167)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:621)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:318)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1362)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1351)
at com.alipay.govaiserviceplatform.GovAIServicePlatformApplication.main(GovAIServicePlatformApplication.java:25)
Suppressed: java.lang.Exception: #block terminated with an error
at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:104)
... 63 common frames omitted
Caused by: java.util.concurrent.TimeoutException: Did not observe any item or terminal signal within 20000ms in 'Mono.deferContextual ⇢ at io.modelcontextprotocol.spec.McpClientSession.sendRequest(McpClientSession.java:233)' (and no fallback has been configured)
at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.handleTimeout(FluxTimeout.java:296)
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Assembly trace from producer [reactor.core.publisher.MonoTimeout] :
reactor.core.publisher.Mono.timeout(Mono.java:5007)
io.modelcontextprotocol.spec.McpClientSession.sendRequest(McpClientSession.java:245)
Error has been observed at the following site(s):
*__Mono.timeout ⇢ at io.modelcontextprotocol.spec.McpClientSession.sendRequest(McpClientSession.java:245)
|_ Mono.handle ⇢ at io.modelcontextprotocol.spec.McpClientSession.sendRequest(McpClientSession.java:245)
|_ Mono.flatMap ⇢ at io.modelcontextprotocol.client.McpAsyncClient.initialize(McpAsyncClient.java:343)
Metadata
Metadata
Assignees
Labels
No labels