3. Описание MCP-сервера › 3.2 Сессия › Концепция

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

Порядок

  1. session_init — осмотреться: в какой магазин войдёт сессия и запущена ли программа. Ничего не меняет, вызывать можно сколько угодно.
  2. session_connect — открыть сессию. Ответ сообщает всё о ней и приносит общие правила агента.
  3. Работа. Если у инструмента есть свои правила, первый его вызов отказывает с ними. Агент принимает правила инструментом session_rules_accept и повторяет вызов.

Почему у входа нет параметров

Агент не выбирает ни магазин, ни логин. Магазин — тот, что последним открыт в программе или за которым закреплён сервер. Логин — человека, который сидит за программой, или сохранённый в её настройках. Поэтому агент не войдёт туда, куда не входил человек, а пароль не попадёт в переписку. Переключить магазин может только человек, в программе. Как именно сервер находит магазин и пару логин-пароль — «Вход, права, лицензия».

Что сессия запоминает

При входе сервер запоминает и держит до конца сессии:

Что Зачем
магазин и логин все запросы идут в этот магазин под этим логином
выданные права на вызов невыданного инструмента сервер отказывает сразу, не обращаясь к магазину
критические заметки памяти: сколько их и какие прочитаны пока не прочитаны все, остальные инструменты отказывают
принятые правила инструментов и случайное число для их кодов принятые правила не спрашиваются повторно, а код из другой сессии не подходит

Лицензию сессия не запоминает: файл лицензии сервер ищет заново при каждом запросе.

Когда сессия кончается

Сессия живёт в процессе сервера. Она кончается, когда:

Когда входить заново

Что случилось Почему
пришёл отказ STORE_SWITCHED в программе открыт другой магазин, а незакреплённый сервер работает только с магазином программы
владелец выдал или снял право права запоминаются при входе
пришёл отказ Not connected сессии нет