Перейти к основному содержимому

Host Bridge

Обзор

Host Bridge — это встроенный HTTP-сервер плагина, который позволяет внешним ИИ-инструментам (Codex, Claude Code, OpenCode и т.д.) напрямую обращаться к вашей библиотеке Zotero. Он является мостом связи между агентами ACP и Zotero и служит базовым транспортом как для CLI zotero-bridge, так и для MCP-сервера.

Архитектура

Процесс плагина Zotero

├── HTTP-сервер Host Bridge (loopback: 127.0.0.1:<port>)
│ ├── Аутентификация Bearer Token (каждый запрос)
│ ├── Шлюз подтверждения записи (по операции)
│ └── Маршрутизатор возможностей (30+ возможностей)

└── CLI zotero-bridge (сопутствующий бинарный файл)
├── Семантические команды (context, library, mutation, synthesis)
├── Конфигурационные файлы (bridge-profile.json)
└── Режим stdin/pipe (для интеграции с агентами ACP)

Версия протокола: host-bridge.v1. Все конечные точки, кроме GET /bridge/v1/health, требуют аутентификации Bearer Token.

Конфигурация

Zotero → Настройки → Zotero Agents → Host Bridge

НастройкаТипПо умолчаниюОписание
Включить MCP-серверbooleantrueТакже включить протокол MCP для сторонних агентов
Отключить подтверждение записиbooleanfalseОпасно: обойти все подтверждения записи. Отмечено как красная опасная зона
Включить доступ по локальной сетиbooleanfalseПривязать к 0.0.0.0 для доступа по локальной сети (принудительно фиксирует порт)
Фиксированный портbooleanfalseЗакрепить порт (по умолчанию 26570) вместо использования случайного порта
Номер портаnumber26570Порт, используемый в фиксированном режиме (1024-65535)
LAN IPstring""Ручное переопределение для объявляемого LAN IP; оставьте пустым для автоопределения
Запустить / Показать конечную точкуbuttonУбедиться, что сервер работает, и отобразить текущий URL конечной точки
Сменить токенbuttonСменить сессионный токен
Создать / Сменить мастер-токенbuttonСгенерировать постоянный токен для跨-сессионного доступа
Копировать мастер-токенbuttonКопировать токен в буфер обмена
Копировать профиль удалённого CLIbuttonКопировать полный JSON профиля удалённого CLI
Установить CLIbuttonУстановка zotero-bridge в системный PATH в один клик

Модель безопасности

Аутентификация Bearer Token

  • Каждый запрос должен включать заголовок Authorization: Bearer <token>
  • Сессионный токен: автоматически генерируется при запуске плагина (24 байта base64), живёт в течение сессии плагина
  • Мастер-токен: необязательный постоянный токен, зашифрованное хранилище AES-256-GCM, для跨-сессионного доступа CLI
  • Токены никогда не записываются в промпты, логи или вывод агента

Подтверждение записи

Операции записи требуют подтверждения через UI Zotero:

УровеньОписание
Требуется подтверждениеmutation.execute, workflow submit, debug.zotero.eval, citation_graph.refresh_metrics
Автоматически одобреноВсе операции только для чтения, diagnostic.get_status, mutation.preview

Двойное автоматическое одобрение:

  1. Манифест Workflow объявляет allowWriteApprovalBypass: true
  2. Пользователь явно отмечает авто-одобрение в диалоге отправки

Оба условия должны быть выполнены для вступления в силу автоматического одобрения.

Безопасность локальной сети / удалённого доступа

  • Режим LAN привязывает 0.0.0.0 и должен быть включён вручную. Используйте только в доверенных сетях
  • Удалённый доступ требует мастер-токена (созданного вручную), никогда не распространяется автоматически
  • Автоопределение LAN IP использует отражение сети бэкенда SkillRunner; может быть переопределено вручную

CLI zotero-bridge

zotero-bridge — это CLI-инструмент на Rust для агентов ACP и терминальных пользователей для вызова Host Bridge.

Установка

Используйте кнопку "Установить CLI" в настройках. Запуски ACP используют бинарный файл, поставляемый с плагином (внедряется в PATH рабочего пространства).

Приоритет разрешения конечной точки / токена

ИсточникКонечная точкаТокен
Флаг CLI--endpoint
ОкружениеZOTERO_BRIDGE_ENDPOINTZOTERO_BRIDGE_TOKEN
Файл профиляПоле endpointauth.token / auth.tokenEnv

Семантические команды

zotero-bridge status # Проверка работоспособности (без аутентификации)
zotero-bridge manifest # Полный манифест возможностей
zotero-bridge call <capability> [--input] # Сырой вызов возможности
zotero-bridge item search --query <text>
zotero-bridge item get --key <key>
zotero-bridge item notes --key <key>
zotero-bridge item attachments --key <key>
zotero-bridge note get --key <key>
zotero-bridge note payloads --key <key>
zotero-bridge note payload --key <key>
zotero-bridge library list --input '{"limit":50}'
zotero-bridge library snapshot --input '{"limit":200,"cursor":"0"}'
zotero-bridge topics list
zotero-bridge topics get-context --input <JSON>
zotero-bridge topics get-report --input <JSON>
zotero-bridge schemas get
zotero-bridge concepts query --input <JSON>
zotero-bridge citation-graph query-cluster --input <JSON>
zotero-bridge citation-graph get-overview
zotero-bridge library-index get
zotero-bridge resolvers resolve --input <JSON>
zotero-bridge reference-index get
zotero-bridge paper-artifacts get-manifest --input <JSON>
zotero-bridge paper-artifacts read --input <JSON>
zotero-bridge insights get-attention-queue
zotero-bridge literature ingest --input <JSON>
zotero-bridge workflow list
zotero-bridge workflow describe --workflow <id>
zotero-bridge workflow submit --workflow <id> (--input <JSON> | --none)
zotero-bridge workflow agent-run --workflow <id> (--input <JSON> | --none) --output-dir <DIR>
zotero-bridge workflow run <runId>
zotero-bridge task list [--workflow <id>] [--active-only]
zotero-bridge file download <fileId> --output <path>

Ввод принимает: встроенный JSON, путь к файлу JSON, синтаксис @file, - (stdin).

Контракт вывода

stdout всегда выдаёт ровно один JSON-объект:

{ "ok": true, "data": {...}, "meta": { "cli": "zotero-bridge", "schema": "zotero-bridge.cli.v1" } }
{ "ok": false, "error": {...}, "meta": { "cli": "zotero-bridge", "schema": "zotero-bridge.cli.v1" } }

Коды выхода ошибок:

КатегорияКод выхода
использование2
конфигурация3
подключение4
аутентификация5
разрешение6
валидация7
возможность8
workflow9
загрузка10
протокол11
внутренняя70

Файлы профилей

Известные расположения профилей:

ОСПуть
Windows%LOCALAPPDATA%\zotero-agents\bridge-profile.json
macOS~/Library/Application Support/zotero-agents/bridge-profile.json
Linux${XDG_DATA_HOME:-~/.local/share}/zotero-agents/bridge-profile.json
{
"schema": "zotero-bridge.profile.v1",
"protocol": "host-bridge.v1",
"endpoint": "http://127.0.0.1:26570/bridge/v1",
"connectionMode": "local",
"auth": { "type": "bearer", "tokenEnv": "ZOTERO_BRIDGE_TOKEN" }
}

Интеграция с агентами ACP

Когда агент ACP запускает навык, плагин автоматически внедряет:

<workspaceDir>/.zotero-bridge/
bin/zotero-bridge(.cmd) # Заглушка CLI
profile.json # Профиль подключения (токен через переменную окружения)
README.md # Подсказки по использованию

Внедряемые переменные окружения:

  • ZOTERO_BRIDGE_PROFILE — путь к profile.json
  • ZOTERO_BRIDGE_TOKEN — токен bearer
  • ZOTERO_BRIDGE_SCOPE — JSON области подтверждения
  • PATH / Path — добавляется .zotero-bridge/bin в начало

Доступные возможности

Все 30+ возможностей

Контекст

ВозможностьОписание
context.get_current_viewИнформация о текущем представлении Zotero
context.get_selected_itemsТекущие выбранные элементы

Библиотека

ВозможностьОписание
library.search_itemsПоиск элементов
library.get_item_detailПолучение деталей элемента
library.list_itemsСписок элементов с пагинацией
library.sync_snapshotPaginated metadata snapshot for local indexing
library.get_item_notesСписок заметок
library.get_note_detailЧтение содержимого заметки
library.list_note_payloadsСписок полезных нагрузок заметок
library.get_note_payloadПолучение конкретной полезной нагрузки
library.get_item_attachmentsСписок вложений

Мутация

ВозможностьОписание
mutation.previewПредпросмотр операции записи (без выполнения)
mutation.executeВыполнение операции записи (требует подтверждения)

Synthesis

ВозможностьОписание
topics.listСписок всех тем
topics.get_contextПолучение контекста темы
topics.get_reportПолучение отчёта по теме
topics.get_review_inputСборка пакета рецензирования темы
schemas.getПолучение определений схемы
concepts.queryЗапрос базы знаний концепций
citation_graph.query_clusterЗапрос кластера цитирований
citation_graph.get_overviewПолучение обзора графа
citation_graph.get_sliceИзвлечение среза подграфа
citation_graph.get_metricsВычисление метрик графа
citation_graph.rank_external_referencesРанжирование внешних ссылок
citation_graph.rank_library_papersРанжирование статей библиотеки
paper_artifacts.get_manifestПолучение манифеста артефактов
paper_artifacts.readЧтение содержимого артефактов
paper_artifacts.export_filteredЭкспорт отфильтрованных артефактов
paper_artifacts.resolve_topic_digestРазрешение дайджеста темы
insights.get_attention_queueПолучение очереди внимания
resolvers.resolveРазрешение резолверов ссылок/тем
reference_index.getПолучение индекса ссылок
library_index.getПолучение индекса библиотеки

Диагностика

ВозможностьОписание
diagnostic.get_statusПолучение статуса сервиса

Поток подтверждения записи

Агент вызывает возможность записи

├── 1. Запрос прибывает в Host Bridge (с Bearer Token)
├── 2. Токен проверен
├── 3. Область извлечена
├── 4. Проверка подтверждения:
│ ├── Область только для чтения → выполнить немедленно
│ ├── autoApproveWrites = true И пользователь предварительно одобрил → выполнить
│ └── Требуется подтверждение → в очередь в UI Zotero
├── 5. Подсказка подтверждения показана в ACP Чате / панели SkillRunner
│ ├── Пользователь одобряет → выполнить
│ └── Пользователь отклоняет → вернуть ошибку
└── 6. Результат возвращён, лог аудита записан

Маршрутизация области:

ОбластьUI подтверждения
acp-skill-runUI навыков ACP
acp-chatПанель ACP Чата
skillrunner-runПанель SkillRunner
Нет области / globalГлобальный UI подтверждения Zotero

Доступ по локальной сети / удалённый доступ

  1. Отметьте Включить доступ по локальной сети в настройках
  2. Закрепите порт или отметьте текущий порт
  3. Создайте / скопируйте Мастер-токен
  4. Нажмите Копировать профиль удалённого CLI для полной конфигурации подключения
  5. На удалённой машине настройте endpoint (http://<LAN_IP>:<port>/bridge/v1) и токен
  6. Тест: zotero-bridge status --endpoint http://<LAN_IP>:<port>/bridge/v1

Важно: Режим LAN обходит защиту loopback. Используйте только в доверенных локальных сетях.

Следующие шаги

  • MCP-сервер — Стандартизированный интерфейс протокола для клиентов, совместимых с MCP (Claude Desktop и т.д.)
  • Hermes Profiles — Устанавливаемый профиль для управления библиотекой Zotero с помощью ИИ-агентов
  • Настройки — Просмотр всех настроек Host Bridge
  • Бэкенд ACP — Узнайте о конфигурации агента ACP