# Инструмент API Caller
## Описание
Инструмент `api_caller` — это универсальный gRPC-сервис на Go, который выполняет HTTP-запросы по указанному URL. Он предназначен для взаимодействия с внешними сервисами через REST API и поддерживает методы GET, POST, PUT и DELETE.
## Параметры
Инструмент принимает следующие аргументы в виде JSON-объекта:
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|-------------|----------|--------------|--------------|-----------------------------------------------------------------------------|
| `url` | `string` | **Да** | | Полный URL-адрес конечной точки API для вызова. |
| `method` | `string` | Нет | `GET` | HTTP-метод для использования (например, `GET`, `POST`, `PUT`, `DELETE`). |
| `headers` | `object` | Нет | | Необязательный JSON-объект с парами ключ-значение для отправки в заголовках запроса. |
| `json_body` | `object` | Нет | | Необязательный JSON-объект для отправки в теле запроса для `POST` или `PUT`. |
**Примечание:** Когда предоставляется `json_body`, заголовок `Content-Type` автоматически устанавливается в `application/json`.
## Ответ
Ответ инструмента зависит от содержимого ответа API:
* **JSON-ответ:** Если API возвращает валидный JSON, инструмент парсит его и возвращает как JSON-объект.
* **Текстовый ответ:** Если API возвращает не-JSON (например, обычный текст, HTML), инструмент возвращает его как единую строку.
* **Ошибка:** Если HTTP-запрос не удался (например, сетевая ошибка, статус код не 2xx) или превышен тайм-аут (15 секунд), инструмент возвращает сообщение об ошибке.
## Пример использования
Вот пример использования инструмента `api_caller` для отправки данных на гипотетическую конечную точку `/users`. В этом примере используется `curl` для взаимодействия с HTTP/REST шлюзом MCP-сервера.
**Запрос:**
```bash
curl -X POST http://localhost:8002/v1/tools:run \
-d '{
"name": "api_caller",
"arguments": {
"url": "https://api.example.com/v1/users",
"method": "POST",
"headers": {
"Authorization": "Bearer your_api_key_here"
},
"json_body": {
"name": "Иван Иванов",
"email": "ivan.ivanov@example.com"
}
}
}'
```
**Успешный ответ (JSON):**
Если вызов API успешен, инструмент может вернуть JSON-объект, подобный этому:
```json
{
"result": {
"structValue": {
"fields": {
"id": { "stringValue": "user_12345" },
"status": { "stringValue": "created" }
}
}
}
}
```
## Конфигурация
Конфигурация инструмента управляется через файл `config.json`, расположенный в директории инструмента.
**Пример `config.json`:**
```json
{
"port": 50051,
"command": ["go", "run", "."]
}
```
* `port`: Порт, на котором будет слушать gRPC-сервер инструмента.
* `command`: Команда и аргументы для запуска инструмента.
## Проверки состояния и логирование
* **Проверки состояния:** Этот инструмент реализует стандартный протокол gRPC Health Checking Protocol. Главный MCP-сервер не будет направлять ему запросы, если он неработоспособен.
* **Логирование:** Инструмент использует структурированный JSON-логгер (`slog`) для логирования всех операций в стандартный вывод для наблюдаемости.