# Инструмент Калькулятор
## Описание
Инструмент `calculator` — это gRPC-сервис на Go, который вычисляет математические выражения из строки. Он использует библиотеку `govaluate` для поддержки основных арифметических операций (`+`, `-`, `*`, `/`), скобок для определения порядка операций и многих других стандартных математических функций.
## Параметры
Инструмент принимает один аргумент в виде JSON-объекта:
| Параметр | Тип | Обязательный | Описание |
|--------------|----------|--------------|--------------------------------------------------------------|
| `expression` | `string` | **Да** | Математическое выражение для вычисления (например, `"(2 + 2) * 4"`). |
## Ответ
* **Успешное вычисление:** Если выражение корректно, инструмент возвращает итоговое число.
* **Ошибка:** Если выражение составлено неверно или возникает ошибка при вычислении, инструмент возвращает сообщение об ошибке.
## Пример использования
Вот пример использования инструмента `calculator` для вычисления сложного выражения. В этом примере используется `curl` для взаимодействия с HTTP/REST шлюзом MCP-сервера.
**Запрос:**
```bash
curl -X POST http://localhost:8002/v1/tools:run \
-d '{
"name": "calculator",
"arguments": {
"expression": "(12.5 + 7.5) * (10 / 2)"
}
}'
```
**Успешный ответ:**
```json
{
"result": {
"numberValue": 100
}
}
```
## Конфигурация
Конфигурация инструмента управляется через файл `config.json`, расположенный в директории инструмента.
**Пример `config.json`:**
```json
{
"port": 50052,
"command": ["go", "run", "."]
}
```
* `port`: Порт, на котором будет слушать gRPC-сервер инструмента.
* `command`: Команда и аргументы для запуска инструмента.
## Проверки состояния и логирование
* **Проверки состояния:** Этот инструмент реализует стандартный протокол gRPC Health Checking Protocol.
* **Логирование:** Инструмент использует структурированный JSON-логгер (`slog`) для логирования всех операций.
## Тестирование
Для тестирования инструмента `calculator` вы можете запустить предоставленные интеграционные тесты. Эти тесты покрывают различные выражения и крайние случаи. Перейдите в директорию инструмента и выполните:
```bash
go test ./...
```