# ✨ Поднять MCP-сервер поверх Read API

- **Тип:** feature
- **Категория:** Ядро — набор ограничен HTTP-слоем чтения после дробления; адаптер берётся следующим спринтом по той же цели
- **Зачем:** Агент-медик — первый заказчик проекта, а подключить его сейчас нечем
- **Теги:** goal:read-api

Агент-медик — первый заказчик проекта. Ему нужна актуальная сводка, а не срез
на дату последнего ручного экспорта.

Транспорт — **Streamable HTTP**, не stdio: сервис живёт на VPS, агент ходит по
сети. Отсюда: MCP — маршрут того же процесса и того же порта, аутентификация —
тот же токен чтения, что у Read API. Отдельного контура доступа не заводим:
MCP не даёт ничего, чего не даёт HTTP, и права обязаны совпадать.

Инструментов три: каталог разрезов, значения за период, значения с разбивкой.
Собственной логики в адаптере нет.

Правило размера ответа здесь не украшение, а необходимость: у сетевого агента
нет способа «посмотреть поближе» иначе, чем повторным вызовом.

Готово, когда агент подключается по URL и отвечает на «как я спал на прошлой
неделе» без промежуточного кода.

Двигает строку «Завершения» цели: «Агент-медик читает то же самое через MCP тем же токеном чтения».

## Критерии приёмки

- живой агент подключается по URL и отвечает на «как я спал на прошлой неделе»
  без промежуточного кода — оракул: подключение реального MCP-клиента к
  поднятому сервису
- вызов инструмента и соответствующий HTTP-запрос дают одни и те же данные —
  оракул: тест, сравнивающий выход инструмента с ответом маршрута на тех же
  параметрах
- запрос без токена чтения отклоняется обоими транспортами одинаково — оракул:
  тест на паре «MCP без токена / HTTP без токена»
- правило размера ответа действует и в MCP: слишком широкий запрос получает
  названную сетку или ошибку со списком, а не обрезанный ответ — оракул: тест на
  запросе за пределом

## Рамки

Схема не трогается, данные только читаются, сервис перезапускается. Собственной
логики адаптер не несёт — новое поведение здесь признак того, что оно должно
было появиться в маршруте чтения. Берётся последней в цели: переводить нечего,
пока обработчиков нет.

Связано: `docs/architecture.md` → «MCP».
