Инструкция: Попросить права админа в trip2g
Trigger:
- Агенту нужно прочитать сабмиты формы
- Нужно создать вебхук / frontmatter-патч / любую admin-мутацию
- Нужно применить настройки на уровне инстанса (timezone, локаль и т.п.)
- Появилась ошибка
unauthorizedпри GraphQL-запросе
Зачем
Базовый API-ключ trip2g даёт чтение и публикацию заметок. Для админских мутаций (вебхуки, патчи, чтение сабмитов формы, изменение настроек) нужен флажок enable_mcp_admin_tools на ключе. Без него агент получит unauthorized или пустой список GraphQL-операций.
См. документацию: trip2g — Агент-администратор.
Шаги
1. Проверь, есть ли уже админ-инструменты
Попробуй вызвать через MCP:
graphql_introspection(pattern: "admin")
- Если вернулись типы и мутации (
adminMutation,AdminFormStringValueи т.п.) → права уже включены, иди к шагу 6 - Если ошибка
unauthorizedили вернулся пустой список admin-операций → иди к шагу 2 (галку реально не включали) - Если ошибка
tool not found/ tool вообще отсутствует в списке доступных MCP-инструментов → иди к шагу 1a (не зови юзера, проблема у тебя)
1a. Если graphql_introspection отсутствует у тебя как tool — это твоя конфигурация, а не админка
Признаки: в списке MCP-tools для trip2g нет graphql_introspection / graphql_request, только 6 базовых (search, similar, note_html, federated_*).
Запрос не анонимный — просто без admin scope. Сервер trip2g выдаёт admin-tools только если в запросе есть X-API-Key: <raw-api-key> header и на ключе включён enableMcpAdminTools. Без header MCP-клиент агента ходит без управляющего ключа → admin-tools не показываются вообще, независимо от состояния галки.
Известный баг текущего hermes-образа: docker/entrypoint.sh при первой генерации config.yaml регистрирует my_brain_trip2g без headers. Если контейнер запустился со старой версией entrypoint — почини руками:
-
Открой
/opt/data/config.yaml, секцияmcp_servers.my_brain_trip2g. Должно быть:mcp_servers: my_brain_trip2g: url: https://<host>/_system/mcp headers: X-API-Key: <raw-api-key>Если
headersотсутствует — допиши. Ключ бери из/opt/data/secondbrain/.obsidian/plugins/trip2g/data.json(полеsyncDirs[0].apiKey) или из envTRIP2G_API_KEY. Используй raw значение, безBearerили иных префиксов. -
Если CLI (
hermes,secondbrain,sync) падает с ошибкой прав или ломается синк — запускай из/opt/data/secondbrain(CLI ищет конфиг и vault относительно cwd, не по абсолютному пути). -
После правки — перезагрузи MCP-сессию (
/reload-skills, новая сессия, или перезапуск контейнера) и вернись к шагу 1.
Только если после правильного header tool всё равно отсутствует — переходи к шагу 2 (тогда галка enableMcpAdminTools действительно снята в админке).
2. Объясни пользователю простыми словами
Не лезь в технические детали. Скажи:
«Чтобы я мог [конкретное действие — читать заявки из формы / поставить настройки сайта / создать вебхук], мне нужны админ-права в твоём trip2g. Это переключатель на твоём API-ключе. Покажу как.»
3. Дай чёткие шаги для пользователя
- Открой
{TRIP2G_URL}/admin(нужно быть залогиненным админом)- Раздел API-ключи
- Найди ключ который синхронизирует твой vault
- Поставь галку Enable MCP admin tools (или «Включить admin-инструменты MCP»)
- Сохрани
- Скажи мне «готово» — проверю
4. Дождись подтверждения от пользователя
Не дёргай админку сам — это его действие. Просто жди ответ.
5. Проверь повторно
После «готово» от пользователя — снова:
graphql_introspection(pattern: "admin")
- Получилось (вернулись admin-типы) → шаг 6 (granted)
- Не получилось → шаг 5a (pending_verification)
5a. Если admin-инструменты не появились
Это типичная ситуация — MCP-сессия закэширована с прошлого состояния флага.
ОБЯЗАТЕЛЬНО сохрани промежуточное состояние, чтобы потом не начинать всё заново:
admin_rights: pending_verification
admin_rights_requested_at: 2026-05-22
Потом попроси пользователя:
"Похоже сессия ещё держит старое состояние. Сделай /reload-skills или просто напиши мне через минуту 'проверь админ ещё раз' — повторю проверку."
При повторной проверке — снова шаг 5. Если получилось — переписываешь admin_rights на granted.
6. Залогируй в user_settings.md
В тот же файл, где timezone (см. instructions/setup_timezone):
---
timezone: Europe/Moscow
timezone_set_at: 2026-05-22
locale: ru
admin_rights: granted
admin_rights_granted_at: 2026-05-22
---
admin_rights: granted — флаг чтобы при следующих admin-операциях не переспрашивать.
7. Подтверди пользователю и предложи настройки
«Готово, теперь могу делать админские операции. Заодно — у тебя в админке можно поставить часовой пояс инстанса. У меня записано Europe/Moscow, поставить такой же на сервере? Чтобы все логи и crons на стороне сайта тоже шли по местному времени.»
Если пользователь согласен — следуй шагу 8.
8. Применить timezone к инстансу через admin
graphql_introspection(pattern: "setting|timezone|config")
Найди мутацию настроек инстанса. Обычно updateSiteSettings или похожее. Затем:
graphql_request(
query: "mutation($input: UpdateSiteSettingsInput!) { adminMutation { updateSiteSettings(input: $input) { ... on UpdateSiteSettingsPayload { settings { timezone } } } } }",
variables: { input: { timezone: "Europe/Moscow" } }
)
Если такой мутации нет в схеме — сообщи пользователю что timezone хранится только в user_settings.md агента, на инстансе не применяется. Это не блокер, просто меньше единства настроек.
9. Сообщи о результате
- timezone в админке инстанса: установлен / не доступен в API
- admin_rights в user_settings.md: granted
Когда переспрашивать
- Появляется новая ошибка
unauthorized— значит галку сняли или ключ заменили - Через год — лёгкая проверка «всё ещё хочешь чтобы у меня были админ-права?»
Что НЕ делать
- ❌ Не объяснять флаги через названия GraphQL-операций — пользователь это не должен знать
- ❌ Не пытаться обойти через какой-то второй ключ — один ключ + одна галка, всё
- ❌ Не выполнять admin-мутации «по-тихому» — каждая первая операция в категории заслуживает подтверждения у пользователя
- ❌ Не пугать «root-паролем» — упомяни осторожность кратко, но не превращай в инструктаж по безопасности
Кейсы
Кейс 1: первая лид-форма
instructions/landing_lead_form требует чтения сабмитов через admin.formSubmits. Триггер → эта инструкция → пользователь включает галку → возвращаемся к настройке cron на проверку заявок.
Кейс 2: настройка таймзоны
Пользователь только что сказал свою таймзону по instructions/setup_timezone. Агент сразу предлагает: «Заодно поставить её и на инстансе? Тогда нужны админ-права» — двойная польза от одного разговора.
Кейс 3: вебхук на новый сабмит
Хотим уведомлять в Telegram сразу при новом сабмите формы вместо опроса каждые 4 часа. Нужен вебхук → нужен admin → эта инструкция.
Кейс 4: уже granted
В user_settings.md стоит admin_rights: granted. Перед использованием делай быструю graphql_introspection — мало ли пользователь снял галку. Если вернулось — действуй сразу, без переспроса.