Этот сервис предоставляет базовые операции калькулятора через Model Context Protocol (MCP) с использованием Spring Boot и транспорта WebFlux. Он создан как простой пример для начинающих, изучающих реализацию MCP.
Для дополнительной информации смотрите справочную документацию MCP Server Boot Starter.
Сервис демонстрирует:
- Поддержку SSE (Server-Sent Events)
- Автоматическую регистрацию инструментов с помощью аннотации Spring AI
@Tool - Основные функции калькулятора:
- Сложение, вычитание, умножение, деление
- Возведение в степень и вычисление квадратного корня
- Остаток от деления и абсолютное значение
- Функция помощи с описанием операций
Этот калькулятор предлагает следующие функции:
-
Базовые арифметические операции:
- Сложение двух чисел
- Вычитание одного числа из другого
- Умножение двух чисел
- Деление одного числа на другое (с проверкой деления на ноль)
-
Расширенные операции:
- Возведение в степень (основание в степень)
- Вычисление квадратного корня (с проверкой на отрицательное число)
- Вычисление остатка от деления
- Вычисление абсолютного значения
-
Система помощи:
- Встроенная функция помощи, объясняющая все доступные операции
Сервис предоставляет следующие API-эндпоинты через протокол MCP:
add(a, b): Сложить два числаsubtract(a, b): Вычесть второе число из первогоmultiply(a, b): Умножить два числаdivide(a, b): Разделить первое число на второе (с проверкой на ноль)power(base, exponent): Вычислить степень числаsquareRoot(number): Вычислить квадратный корень (с проверкой на отрицательное число)modulus(a, b): Вычислить остаток от деленияabsolute(number): Вычислить абсолютное значениеhelp(): Получить информацию о доступных операциях
Простой тестовый клиент включён в пакет com.microsoft.mcp.sample.client. Класс SampleCalculatorClient демонстрирует доступные операции калькулятора.
В проекте есть пример клиента LangChain4j в com.microsoft.mcp.sample.client.LangChain4jClient, который показывает, как интегрировать сервис калькулятора с LangChain4j и моделями GitHub:
-
Настройка GitHub токена:
Для использования AI-моделей GitHub (например, phi-4) нужен персональный токен доступа GitHub:
a. Перейдите в настройки аккаунта GitHub: https://github.com/settings/tokens
b. Нажмите "Generate new token" → "Generate new token (classic)"
c. Дайте токену описательное имя
d. Выберите следующие области доступа:
repo(полный доступ к приватным репозиториям)read:org(чтение информации об организациях и командах, чтение проектов организации)gist(создание gists)user:email(доступ к email пользователя (только для чтения))
e. Нажмите "Generate token" и скопируйте новый токен
f. Установите его как переменную окружения:
В Windows:
set GITHUB_TOKEN=your-github-tokenВ macOS/Linux:
export GITHUB_TOKEN=your-github-tokeng. Для постоянной настройки добавьте переменную в системные переменные окружения
-
Добавьте зависимость LangChain4j GitHub в проект (уже включена в pom.xml):
<dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-github</artifactId> <version>${langchain4j.version}</version> </dependency>
-
Убедитесь, что сервер калькулятора запущен на
localhost:8080
Пример демонстрирует:
- Подключение к серверу калькулятора MCP через транспорт SSE
- Использование LangChain4j для создания чат-бота, который использует операции калькулятора
- Интеграцию с AI-моделями GitHub (сейчас используется модель phi-4)
Клиент отправляет следующие примерные запросы для демонстрации работы:
- Вычисление суммы двух чисел
- Нахождение квадратного корня числа
- Получение информации о доступных операциях калькулятора
Запустите пример и посмотрите вывод в консоли, чтобы увидеть, как AI-модель использует инструменты калькулятора для ответов.
Клиент LangChain4j настроен на использование модели phi-4 GitHub со следующими параметрами:
ChatLanguageModel model = GitHubChatModel.builder()
.apiKey(System.getenv("GITHUB_TOKEN"))
.timeout(Duration.ofSeconds(60))
.modelName("phi-4")
.logRequests(true)
.logResponses(true)
.build();Чтобы использовать другие модели GitHub, просто измените параметр modelName на другую поддерживаемую модель (например, "claude-3-haiku-20240307", "llama-3-70b-8192" и т.д.).
Проект требует следующих ключевых зависимостей:
<!-- For MCP Server -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>
</dependency>
<!-- For LangChain4j integration -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-mcp</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<!-- For GitHub models support -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-github</artifactId>
<version>${langchain4j.version}</version>
</dependency>Соберите проект с помощью Maven:
./mvnw clean install -DskipTestsjava -jar target/calculator-server-0.0.1-SNAPSHOT.jarMCP Inspector — удобный инструмент для взаимодействия с MCP-сервисами. Чтобы использовать его с этим сервисом калькулятора:
-
Установите и запустите MCP Inspector в новом окне терминала:
npx @modelcontextprotocol/inspector
-
Откройте веб-интерфейс, перейдя по URL, который покажет приложение (обычно http://localhost:6274)
-
Настройте подключение:
- Выберите тип транспорта "SSE"
- Укажите URL SSE-эндпоинта вашего сервера:
http://localhost:8080/sse - Нажмите "Connect"
-
Используйте инструменты:
- Нажмите "List Tools", чтобы увидеть доступные операции калькулятора
- Выберите инструмент и нажмите "Run Tool" для выполнения операции
В проекте есть Dockerfile для контейнеризации:
-
Соберите Docker-образ:
docker build -t calculator-mcp-service . -
Запустите Docker-контейнер:
docker run -p 8080:8080 calculator-mcp-service
Это позволит:
- Собрать многоступенчатый Docker-образ с Maven 3.9.9 и Eclipse Temurin 24 JDK
- Создать оптимизированный образ контейнера
- Открыть порт 8080 для сервиса
- Запустить MCP калькулятор внутри контейнера
После запуска контейнера сервис будет доступен по адресу http://localhost:8080.
-
Проблемы с правами токена: Если возникает ошибка 403 Forbidden, проверьте, что у токена есть все необходимые права, указанные в требованиях.
-
Токен не найден: Если появляется ошибка "No API key found", убедитесь, что переменная окружения GITHUB_TOKEN установлена правильно.
-
Ограничение по количеству запросов: GitHub API имеет лимиты. Если вы получили ошибку с кодом 429, подождите несколько минут и попробуйте снова.
-
Истечение срока действия токена: Токены GitHub могут истекать. Если после некоторого времени появляются ошибки аутентификации, создайте новый токен и обновите переменную окружения.
Если нужна дополнительная помощь, смотрите документацию LangChain4j или документацию GitHub API.
Отказ от ответственности:
Этот документ был переведен с помощью сервиса автоматического перевода Co-op Translator. Несмотря на наши усилия по обеспечению точности, просим учитывать, что автоматический перевод может содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется обращаться к профессиональному переводу, выполненному человеком. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования данного перевода.
