Files
healthlog/docs/tasks/items/mcp-server.md
T
av d33f37249c docs: документация переведена на канон av-dev-pm 3
- роадмап отвечает «что умеет и чего не умеет»: PLAN.md → ROADMAP.md, четыре
  канонические секции, достигнутые звенья строками в «Готово», цели
  переформулированы возможностями приложения
- задачи: род работы и «Затрагивает» набору спринта, 34 заголовка в форму
  действия, «Завершение» целей перечнями со ссылкой из каждой задачи
- вычитка проходами task-form и doc-wording, починены протухшие факты в README,
  паспорте и review.md
2026-08-04 20:48:30 +03:00

48 lines
3.6 KiB
Markdown

# Поднять MCP-сервер поверх Read API
- **Секция:** Ядро — набор ограничен 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».