Я пытаюсь реализовать простой сервер MCP, как это: < /p>
Код: Выделить всё
McpServer.sync(new StdioServerTransportProvider())
.serverInfo("test", "1.0.0")
.requestTimeout(Duration.ofSeconds(120))
.capabilities(getServerCapabilities())
.tools(createTestToolSpecs())
.build();
Когда вы вызываете из Main метод, это работает просто хорошо, и я могу, например, использовать клиент MCP для перечисления и вызовов инструментов. Поскольку build () является неблокирующим вызовом, который приводит к немедленному возвращению Main , я думаю, этот фрагмент кода запускает один или несколько нитей, не являющихся данными, которые приводят к тому, что JVM продолжает работать до тех пор, пока эти потоки не завершится. Когда клиент MCP запрашивает завершение сервера, мой процесс MCP Server успешно завершается. Это приводит к немедленному прекращению MCP -сервера, которого я бы, очевидно, хотел бы избежать. } цикл после создания экземпляра сервера MCP, и это успешно позволяет клиентам MCP взаимодействовать с сервером MCP. Тем не менее, теперь сервер MCP больше не преодолевается должным образом, когда клиент MCP выходит или иным образом запрашивает завершение сервера. Я попытался добавить обработчик отключения, чтобы явно позвонить McPerver :: CloseGracely , но это не помогает; Процессы сервера MCP не прекращаются.>
Подробнее здесь:
https://stackoverflow.com/questions/797 ... -lifecycle