Files
healthlog/docs/tasks/items/mcp-server.md
T
av bd832337df tasks: задачи спринта раздроблены до восьми гранулярных
- конверт и точки разложены на форму провода, точки за период и условный
  запрос; свёртка — на сетку, порог неполного ведра и предел размера ответа;
  тренировки и записи разъехались на два независимых маршрута
- openapi-swagger разложена на спеку, гейт против расхождения и Swagger UI —
  все три вне набора, вместе с mcp-server
- набор спринта 2026-08-04 — весь HTTP-слой чтения, восемь задач
2026-08-04 14:21:57 +03:00

3.5 KiB

MCP-сервер поверх Read API

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

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

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

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

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

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

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

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

Рамки

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

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