Aller au contenu principal

Host Bridge

Aperçu

Host Bridge est le serveur HTTP intégré du plugin qui permet aux outils IA externes (Codex, Claude Code, OpenCode, etc.) d'accéder directement à votre bibliothèque Zotero. Il est le pont de communication entre les agents ACP et Zotero, et sert de transport sous-jacent pour le CLI zotero-bridge et le serveur MCP.

Architecture

Processus du plugin Zotero

├── Serveur HTTP Host Bridge (loopback: 127.0.0.1:<port>)
│ ├── Authentification Bearer Token (chaque requête)
│ ├── Porte d'approbation d'écriture (par opération)
│ └── Routeur de capacités (30+ capacités)

└── CLI zotero-bridge (binaire compagnon)
├── Commandes sémantiques (context, library, mutation, synthesis)
├── Fichiers de configuration (bridge-profile.json)
└── Mode stdin/pipe (pour l'intégration avec les agents ACP)

Version du protocole : host-bridge.v1. Tous les points d'accès sauf GET /bridge/v1/health nécessitent une authentification par Bearer Token.

Configuration

Zotero → Paramètres → Zotero Agents → Host Bridge

ParamètreTypePar défautDescription
Activer le serveur MCPbooléentrueActiver également le protocole MCP pour les agents tiers
Désactiver l'approbation d'écriturebooléenfalseDangereux : contourner toutes les approbations d'écriture. Marqué comme zone de danger rouge
Activer l'accès LANbooléenfalseLier à 0.0.0.0 pour l'accès LAN (force le port fixe)
Port fixebooléenfalseFixer le port (par défaut 26570) au lieu d'utiliser un port aléatoire
Numéro de portnombre26570Port utilisé en mode fixe (1024-65535)
IP LANchaîne""Surcharge manuelle de l'IP LAN annoncée ; laisser vide pour la détection automatique
Démarrer / Afficher le point d'accèsboutonS'assurer que le serveur fonctionne et afficher l'URL du point d'accès actuel
Renouveler le jetonboutonRenouveler le jeton de session
Créer / Renouveler le jeton maîtreboutonGénérer un jeton persistant inter-sessions
Copier le jeton maîtreboutonCopier le jeton dans le presse-papiers
Copier le profil CLI distantboutonCopier le JSON complet du profil CLI distant
Installer le CLIboutonInstallation en un clic de zotero-bridge dans le PATH système

Modèle de sécurité

Authentification par Bearer Token

  • Chaque requête doit inclure l'en-tête Authorization: Bearer <token>
  • Jeton de session : auto-généré au démarrage du plugin (24 octets en base64), dure le temps de la session du plugin
  • Jeton maître : jeton persistant facultatif, stockage chiffré AES-256-GCM, pour l'accès CLI inter-sessions
  • Les jetons ne sont jamais écrits dans les prompts, les journaux ou la sortie des agents

Approbation d'écriture

Les opérations d'écriture nécessitent l'approbation de l'interface Zotero :

NiveauDescription
Approbation requisemutation.execute, workflow submit, debug.zotero.eval, citation_graph.refresh_metrics
Approbation automatiqueToutes les opérations en lecture seule, diagnostic.get_status, mutation.preview

Double porte d'approbation automatique :

  1. Le manifeste du workflow déclare allowWriteApprovalBypass: true
  2. L'utilisateur coche explicitement l'approbation automatique dans la boîte de dialogue de soumission

Les deux conditions doivent être satisfaites pour que l'approbation automatique prenne effet.

Sécurité LAN / Distant

  • Le mode LAN lie 0.0.0.0 et doit être activé manuellement. À utiliser uniquement sur des réseaux de confiance
  • L'accès distant nécessite un jeton maître (créé manuellement), jamais distribué automatiquement
  • La détection automatique de l'IP LAN utilise la réflexion réseau du backend SkillRunner ; peut être surchargée manuellement

Le CLI zotero-bridge

zotero-bridge est un outil CLI en Rust permettant aux agents ACP et aux utilisateurs du terminal d'appeler Host Bridge.

Installation

Utilisez le bouton « Installer le CLI » dans les préférences. Les exécutions ACP utilisent le binaire intégré au plugin (injecté dans le PATH de l'espace de travail).

Priorité de résolution du point d'accès / Jeton

SourcePoint d'accèsJeton
Drapeau CLI--endpoint
EnvironnementZOTERO_BRIDGE_ENDPOINTZOTERO_BRIDGE_TOKEN
Fichier de profilChamp endpointauth.token / auth.tokenEnv

Commandes sémantiques

zotero-bridge status # Vérification de l'état (pas d'authentification)
zotero-bridge manifest # Manifeste complet des capacités
zotero-bridge call <capability> [--input] # Appel de capacité brut
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>

L'entrée accepte : JSON en ligne, chemin de fichier JSON, syntaxe @file, - (stdin).

Contrat de sortie

stdout émet toujours exactement un objet 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" } }

Codes de sortie d'erreur :

CatégorieCode de sortie
usage2
config3
connection4
auth5
permission6
validation7
capability8
workflow9
download10
protocol11
internal70

Fichiers de profil

Emplacements de profil bien connus :

SEChemin
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" }
}

Intégration des agents ACP

Lorsqu'un agent ACP exécute un skill, le plugin injecte automatiquement :

<workspaceDir>/.zotero-bridge/
bin/zotero-bridge(.cmd) # Shim CLI
profile.json # Profil de connexion (jeton via variable d'environnement)
README.md # Indices d'utilisation

Variables d'environnement injectées :

  • ZOTERO_BRIDGE_PROFILE — chemin vers profile.json
  • ZOTERO_BRIDGE_TOKEN — bearer token
  • ZOTERO_BRIDGE_SCOPE — JSON du périmètre d'approbation
  • PATH / Path — préfixé par .zotero-bridge/bin

Capacités disponibles

Toutes les 30+ capacités

Contexte

CapacitéDescription
context.get_current_viewInformations sur la vue actuelle de Zotero
context.get_selected_itemsNotices actuellement sélectionnées

Bibliothèque

CapacitéDescription
library.search_itemsRechercher des notices
library.get_item_detailObtenir les détails d'une notice
library.list_itemsListe paginée des notices
library.sync_snapshotPaginated metadata snapshot for local indexing
library.get_item_notesLister les notes
library.get_note_detailLire le contenu d'une note
library.list_note_payloadsLister les payloads de notes
library.get_note_payloadObtenir un payload spécifique
library.get_item_attachmentsLister les pièces jointes

Mutation

CapacitéDescription
mutation.previewPrévisualiser une opération d'écriture (sans exécuter)
mutation.executeExécuter une opération d'écriture (nécessite une approbation)

Synthesis

CapacitéDescription
topics.listLister tous les sujets
topics.get_contextObtenir le contexte d'un sujet
topics.get_reportObtenir le rapport d'un sujet
topics.get_review_inputAssembler le package de revue d'un sujet
schemas.getObtenir les définitions de schéma
concepts.queryInterroger la base de connaissances de concepts
citation_graph.query_clusterInterroger un cluster de citations
citation_graph.get_overviewObtenir l'aperçu du graphe
citation_graph.get_sliceExtraire une tranche de sous-graphe
citation_graph.get_metricsCalculer les métriques du graphe
citation_graph.rank_external_referencesClasser les références externes
citation_graph.rank_library_papersClasser les articles de la bibliothèque
paper_artifacts.get_manifestObtenir le manifeste des artefacts
paper_artifacts.readLire le contenu des artefacts
paper_artifacts.export_filteredExporter les artefacts filtrés
paper_artifacts.resolve_topic_digestRésoudre le digest d'un sujet
insights.get_attention_queueObtenir la file d'attention
resolvers.resolveRésoudre les résolveurs de références/sujets
reference_index.getObtenir l'index de références
library_index.getObtenir l'index de bibliothèque

Diagnostic

CapacitéDescription
diagnostic.get_statusObtenir le statut du service

Flux d'approbation d'écriture

L'agent appelle une capacité d'écriture

├── 1. La requête arrive au Host Bridge (avec le Bearer Token)
├── 2. Le jeton est validé
├── 3. Le périmètre est extrait
├── 4. Vérification de l'approbation :
│ ├── Périmètre en lecture seule → exécution immédiate
│ ├── autoApproveWrites = true ET utilisateur a pré-approuvé → exécution
│ └── Approbation nécessaire → mise en file d'attente dans l'interface Zotero
├── 5. L'invite d'approbation est affichée dans le Chat ACP / le panneau SkillRunner
│ ├── L'utilisateur approuve → exécution
│ └── L'utilisateur refuse → retour d'erreur
└── 6. Résultat retourné, journal d'audit écrit

Routage par périmètre :

PérimètreInterface d'approbation
acp-skill-runInterface des Skills ACP
acp-chatPanneau du Chat ACP
skillrunner-runPanneau SkillRunner
Pas de périmètre / globalInterface d'approbation globale de Zotero

Accès LAN / Distant

  1. Cochez Activer l'accès LAN dans les préférences
  2. Fixez un port ou notez le port actuel
  3. Créez / copiez un Jeton maître
  4. Cliquez sur Copier le profil CLI distant pour la configuration complète de la connexion
  5. Sur la machine distante, configurez le endpoint (http://<LAN_IP>:<port>/bridge/v1) et le jeton
  6. Testez : zotero-bridge status --endpoint http://<LAN_IP>:<port>/bridge/v1

Important : Le mode LAN contourne la protection par loopback. À utiliser uniquement sur des réseaux locaux de confiance.

Prochaines étapes

  • Serveur MCP — Interface de protocole standardisée pour les clients compatibles MCP (Claude Desktop, etc.)
  • Hermes Profiles — Profil installable pour gérer votre bibliothèque Zotero avec des agents IA
  • Préférences — Consulter tous les paramètres de Host Bridge
  • Backend ACP — Découvrir la configuration des agents ACP