Тема
Подключение аккаунтов из своего сервиса
Если вы делаете на Life OS собственный сервис — бота, приложение, панель — вы можете дать пользователям подключать их аккаунты прямо у вас, не отправляя их в веб-интерфейс Life OS.
Ваш сервис при этом не реализует ни один протокол авторизации. Life OS возвращает готовые экраны — «выбери способ», «покажи QR», «спроси код», — а вы их отрисовываете. Логика входа живёт в адаптере, секреты остаются на сервере Life OS.
Ваш сервис→Life OS→Адаптер→Внешний сервис
Что вы получаете и чего не получаете
Получаете: connection_id — идентификатор подключения. Дальше вы вызываете действия с ним, и Life OS сама подставляет нужные учётные данные.
Не получаете: токены, пароли, сессии. Даже если ваш сервис скомпрометируют, чужие аккаунты не утекут — их учётных данных у вас никогда не было.
Храните у себя только connection_id.
Цикл подключения
Все вызовы — обычные MCP-инструменты Life OS, доступные вашему подключению.
1. Найти адаптер
system_list_adapters возвращает список с полем ref:
json
{
"adapters": [
{"ref": "installation:cins_a19d42...", "kind": "installation", "name": "Telegram Account"},
{"ref": "template:telegram_account", "kind": "template", "name": "Telegram Account"}
]
}installation: — адаптер уже установлен в этом пространстве, можно подключать. template: — доступен в каталоге, но не установлен; сперва system_install_adapter с этим ref.
2. Начать вход
json
system_start_connection
{"adapter_ref": "installation:cins_a19d42..."}В ответ придёт состояние. Например, выбор уровня доступа:
json
{
"state": "choose_method",
"title": "Доступ к аккаунту",
"actions": [
{"id": "read", "label": "Только чтение", "arguments": {"access": "read"}},
{"id": "full", "label": "Полный доступ", "arguments": {"access": "full"}}
]
}Покажите пользователю title и кнопки из actions. Когда он выбрал — снова system_start_connection, передав fields из arguments выбранной кнопки.
3. Отрисовать то, что пришло
Состояний немного, и они одинаковы для всех адаптеров:
state | Что показать |
|---|---|
choose_method | кнопки из actions |
form | поля из fields; type: "password" — скрытым вводом |
qr | картинку из qr_image_url |
device_code | код user_code и ссылку verification_url |
redirect | ссылку url |
waiting | «ожидаем…», продолжать опрос |
connected | «готово» |
error | текст из message |
cancelled | вход отменён |
Незнакомое состояние трактуйте как waiting — так новые адаптеры не сломают ваш сервис.
4. Опрашивать или передавать введённое
Пока пользователь сканирует QR, опрашивайте с интервалом poll_ms:
json
system_continue_connection
{"adapter_ref": "installation:cins_...", "flow_id": "flow-1", "operation": "status"}Когда он что-то ввёл — отправьте это:
json
system_continue_connection
{"adapter_ref": "installation:cins_...", "flow_id": "flow-1", "fields": {"code": "12345"}}operation по умолчанию submit. Значение cancel бросает начатый вход.
5. Забрать connection_id
При state: "connected" вход завершён. Идентификатор подключения — в system_list_connections.
Отключение
json
system_disconnect_connection
{"installation_id": "cins_...", "connection_id": "con_..."}Life OS сначала отзывает доступ у внешнего сервиса и только потом забывает подключение. Если отзыв не удался, вернётся ошибка, а подключение останется активным. Не показывайте пользователю «отключено» по факту отправки запроса — только по успешному ответу: иначе он решит, что доступ отозван, когда это не так.
Пароли, которые вам не покажут
Некоторые значения слишком опасны, чтобы проходить через чужой сервис: облачный пароль Telegram, например, открывает аккаунт целиком.
Такие шаги вы не увидите как форму. Вместо неё придёт redirect — ссылка на страницу Life OS:
json
{
"state": "redirect",
"flow_id": "flow-1",
"url": "https://mcp.archik.tech/connect/secure/hK3n...",
"message": "Откройте ссылку и введите значение на странице Life OS."
}Покажите её пользователю и продолжайте опрашивать status. Человек введёт значение на стороне Life OS, оно уйдёт адаптеру напрямую, и ваш опрос увидит connected.
Вам это ничего не стоит: redirect вы и так обязаны отрисовывать, отдельной ветки в коде не нужно. Решает адаптер, а не вы, — то есть по мере того как адаптеры будут помечать новые поля, ваш сервис автоматически перестанет их видеть.
Ссылка одноразовая, живёт несколько минут, привязана к одному шагу одного входа и терпит несколько попыток — чтобы опечатка в пароле не заставляла начинать подключение заново.
Чего это не решает
Пользователь всё равно должен смотреть на адрес страницы. Ничто не мешает недобросовестному сервису показать вместо ссылки Life OS свою похожую страницу — поэтому страница крупно называет собственный домен. Если вы делаете сервис для других людей, скажите им прямо: значение вводится только на домене Life OS.
Права
Инструменты system_start_connection, system_continue_connection, system_install_adapter и system_disconnect_connection требуют права system:manage, а system_list_adapters и system_list_connections — system:read. Включите нужные в роль вашего MCP-подключения.