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

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

Порядок

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

Почему при входе агент называет только тему

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

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

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

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

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

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

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

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

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