- цель parsing-and-storage закрыта по своему критерию; незакрываемый остаток (новые формы от источника, ручные секции задним числом) переехал в тему parsing-completeness - цель mcp поглощена целью read-api, переименованной в «Чтение данных клиентами»: адаптер — последний шаг того же направления, а не своё - read-api-points разложена на конверт с точками, свёртку по сетке и тренировки с записями; спринт 2026-08-04 набран пятью задачами
46 lines
3.3 KiB
Markdown
46 lines
3.3 KiB
Markdown
# MCP-сервер поверх Read API
|
|
|
|
- **Секция:** ядро
|
|
- **Зачем:** Агент-медик — первый заказчик проекта, а подключить его сейчас нечем
|
|
- **Теги:** goal:read-api
|
|
|
|
Агент-медик — первый заказчик проекта. Ему нужна актуальная сводка, а не срез
|
|
на дату последнего ручного экспорта.
|
|
|
|
Транспорт — **Streamable HTTP**, не stdio: сервис живёт на VPS, агент ходит по
|
|
сети. Отсюда: MCP — эндпоинт того же процесса и того же порта, аутентификация —
|
|
тот же токен чтения, что у Read API. Отдельного контура доступа не заводим:
|
|
MCP не даёт ничего, чего не даёт HTTP, и права обязаны совпадать.
|
|
|
|
Инструментов три: каталог разрезов, значения за период, значения с разбивкой.
|
|
Собственной логики в адаптере нет.
|
|
|
|
Правило размера ответа здесь не украшение, а необходимость: у сетевого агента
|
|
нет способа «посмотреть поближе» иначе, чем повторным вызовом.
|
|
|
|
Готово, когда агент подключается по URL и отвечает на «как я спал на прошлой
|
|
неделе» без промежуточного кода.
|
|
|
|
## Критерии приёмки
|
|
|
|
- живой агент подключается по URL и отвечает на «как я спал на прошлой неделе»
|
|
без промежуточного кода — оракул: подключение реального MCP-клиента к
|
|
поднятому сервису
|
|
- вызов инструмента и соответствующий HTTP-запрос дают одни и те же данные —
|
|
оракул: тест, сравнивающий выход инструмента с ответом маршрута на тех же
|
|
параметрах
|
|
- запрос без токена чтения отклоняется обоими транспортами одинаково — оракул:
|
|
тест на паре «MCP без токена / HTTP без токена»
|
|
- правило размера ответа действует и в MCP: слишком широкий запрос получает
|
|
названную сетку или ошибку со списком, а не обрезанный ответ — оракул: тест на
|
|
запросе за пределом
|
|
|
|
## Рамки
|
|
|
|
Схема не трогается, данные только читаются, сервис перезапускается. Собственной
|
|
логики адаптер не несёт — новое поведение здесь признак того, что оно должно
|
|
было появиться в маршруте чтения. Берётся последней в цели: переводить нечего,
|
|
пока обработчиков нет.
|
|
|
|
Связано: `docs/architecture.md` → «MCP».
|