# Инструмент File Writer
## Описание
Инструмент `file_writer` — это gRPC-сервис на Go, который записывает указанное содержимое в файл в локальной файловой системе.
> **Внимание:** Этот инструмент **перезапишет** файл, если он уже существует. Это действие необратимо и может привести к потере данных. Используйте с осторожностью.
## Безопасность
В целях безопасности этот инструмент имеет встроенную защиту от атак типа "directory traversal". Он очищает предоставленный путь к файлу и отклоняет любой запрос, который пытается получить доступ к родительским каталогам с использованием `..`. Весь доступ к файлам ограничен рабочей директорией проекта.
## Параметры
Инструмент принимает следующие аргументы в виде JSON-объекта:
| Параметр | Тип | Обязательный | Описание |
|------------|----------|--------------|--------------------------------------------------------------------|
| `filepath` | `string` | **Да** | Путь к файлу для записи (например, `docs/new_notes.txt`). |
| `content` | `string` | **Да** | Содержимое для записи в файл. |
## Ответ
* **Успешная запись:** Если файл успешно записан, инструмент возвращает сообщение об успехе с указанием количества записанных байт и пути к файлу (например, `"Успешно записано 50 байт в docs/new_notes.txt"`).
* **Ошибка:** Если путь некорректен, возникает ошибка записи или доступ запрещен, инструмент возвращает сообщение об ошибке.
## Пример использования
Вот пример использования инструмента `file_writer` для создания нового файла и записи в него содержимого. В этом примере используется `curl` для взаимодействия с HTTP/REST шлюзом MCP-сервера.
**Запрос:**
```bash
curl -X POST http://localhost:8002/v1/tools:run \
-d '{
"name": "file_writer",
"arguments": {
"filepath": "data/new_file.txt",
"content": "Это новая строка текста, записанная инструментом."
}
}'
```
**Успешный ответ:**
```json
{
"result": {
"stringValue": "Успешно записано 56 байт в data/new_file.txt"
}
}
```
## Конфигурация
Конфигурация инструмента управляется через файл `config.json`, расположенный в директории инструмента.
**Пример `config.json`:**
```json
{
"port": 50055,
"command": ["go", "run", "."]
}
```
* `port`: Порт, на котором будет слушать gRPC-сервер инструмента.
* `command`: Команда и аргументы для запуска инструмента.
## Проверки состояния и логирование
* **Проверки состояния:** Этот инструмент реализует стандартный протокол gRPC Health Checking Protocol.
* **Логирование:** Инструмент использует структурированный JSON-логгер (`slog`) для наблюдаемости.
## Тестирование
Для тестирования инструмента вы можете запустить предоставленные интеграционные тесты. Перейдите в директорию инструмента и выполните:
```bash
go test ./...
```