Этот проект показывает, как создать Java-клиент, который подключается и взаимодействует с MCP (Model Context Protocol) сервером. В этом примере мы подключимся к серверу калькулятора из Главы 01 и выполним различные математические операции.
Перед запуском клиента необходимо:
-
Запустить сервер калькулятора из Главы 01:
- Перейдите в директорию сервера калькулятора:
03-GettingStarted/01-first-server/solution/java/ - Соберите и запустите сервер калькулятора:
cd ..\01-first-server\solution\java .\mvnw clean install -DskipTests java -jar target\calculator-server-0.0.1-SNAPSHOT.jar - Сервер должен работать по адресу
http://localhost:8080
- Перейдите в директорию сервера калькулятора:
-
Установить Java 21 или выше
-
Иметь Maven (включён через Maven Wrapper)
SDKClient — это Java-приложение, демонстрирующее, как:
- Подключиться к MCP серверу с помощью Server-Sent Events (SSE)
- Получить список доступных инструментов на сервере
- Вызывать различные функции калькулятора удалённо
- Обрабатывать ответы и отображать результаты
Клиент использует Spring AI MCP фреймворк для:
- Установки соединения: создаёт WebFlux SSE клиент для подключения к серверу калькулятора
- Инициализации клиента: настраивает MCP клиент и устанавливает соединение
- Обнаружения инструментов: выводит список всех доступных операций калькулятора
- Выполнения операций: вызывает различные математические функции с примерными данными
- Отображения результатов: показывает результаты каждого вычисления
src/
└── main/
└── java/
└── com/
└── microsoft/
└── mcp/
└── sample/
└── client/
└── SDKClient.java # Main client implementation
В проекте используются следующие ключевые зависимости:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>
</dependency>Эти зависимости предоставляют:
McpClient— основной интерфейс клиентаWebFluxSseClientTransport— SSE транспорт для веб-коммуникации- Схемы протокола MCP и типы запросов/ответов
Соберите проект с помощью Maven Wrapper:
.\mvnw clean installjava -jar .\target\calculator-client-0.0.1-SNAPSHOT.jarПримечание: Убедитесь, что сервер калькулятора запущен по адресу http://localhost:8080 перед выполнением этих команд.
При запуске клиент:
- Подключается к серверу калькулятора по адресу
http://localhost:8080 - Выводит список инструментов — показывает все доступные операции калькулятора
- Выполняет вычисления:
- Сложение: 5 + 3 = 8
- Вычитание: 10 - 4 = 6
- Умножение: 6 × 7 = 42
- Деление: 20 ÷ 4 = 5
- Возведение в степень: 2^8 = 256
- Квадратный корень: √16 = 4
- Модуль: |-5.5| = 5.5
- Помощь: показывает доступные операции
Available Tools = ListToolsResult[tools=[Tool[name=add, description=Add two numbers together, ...], ...]]
Add Result = CallToolResult[content=[TextContent[text="5,00 + 3,00 = 8,00"]], isError=false]
Subtract Result = CallToolResult[content=[TextContent[text="10,00 - 4,00 = 6,00"]], isError=false]
Multiply Result = CallToolResult[content=[TextContent[text="6,00 * 7,00 = 42,00"]], isError=false]
Divide Result = CallToolResult[content=[TextContent[text="20,00 / 4,00 = 5,00"]], isError=false]
Power Result = CallToolResult[content=[TextContent[text="2,00 ^ 8,00 = 256,00"]], isError=false]
Square Root Result = CallToolResult[content=[TextContent[text="√16,00 = 4,00"]], isError=false]
Absolute Result = CallToolResult[content=[TextContent[text="|-5,50| = 5,50"]], isError=false]
Help = CallToolResult[content=[TextContent[text="Basic Calculator MCP Service\n\nAvailable operations:\n1. add(a, b) - Adds two numbers\n2. subtract(a, b) - Subtracts the second number from the first\n..."]], isError=false]
Примечание: В конце могут появиться предупреждения Maven о фоновых потоках — это нормально для реактивных приложений и не является ошибкой.
var transport = new WebFluxSseClientTransport(WebClient.builder().baseUrl("http://localhost:8080"));Создаётся SSE (Server-Sent Events) транспорт для подключения к серверу калькулятора.
var client = McpClient.sync(this.transport).build();
client.initialize();Создаётся синхронный MCP клиент и инициализируется соединение.
CallToolResult resultAdd = client.callTool(new CallToolRequest("add", Map.of("a", 5.0, "b", 3.0)));Вызов инструмента "add" с параметрами a=5.0 и b=3.0.
Если возникают ошибки подключения, убедитесь, что сервер калькулятора из Главы 01 запущен:
Error: Connection refused
Решение: Сначала запустите сервер калькулятора.
Если порт 8080 занят:
Error: Address already in use
Решение: Остановите другие приложения, использующие порт 8080, или измените порт сервера.
Если возникают ошибки при сборке:
.\mvnw clean install -DskipTestsОтказ от ответственности:
Этот документ был переведен с помощью сервиса автоматического перевода Co-op Translator. Несмотря на наши усилия по обеспечению точности, просим учитывать, что автоматический перевод может содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется обращаться к профессиональному переводу, выполненному человеком. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования данного перевода.