# Installationsanleitung: Zoteus und cli-anything-zotero unter Windows

Diese Anleitung beschreibt die Einrichtung der beiden Zotero-Tools auf dem Windows-Rechner, auf dem auch Zotero Desktop läuft. Kimi Code greift aus der Linux-VM über SSH auf diese Tools zu.

## Voraussetzungen

- Zotero Desktop 7, 8 oder 9 ist installiert und läuft.
- Die lokale Zotero-API ist aktiviert:
  1. In Zotero: **Bearbeiten → Einstellungen → Erweitert**
  2. Haken setzen bei: **„Anderen Anwendungen auf diesem Computer erlauben, mit Zotero zu kommunizieren“**
- SSH-Zugriff von der Linux-VM auf den Windows-Rechner funktioniert (Schlüssel `~/.ssh/<SSH-SCHLUESSEL>`).

## 1. Zoteus installieren

Zoteus benötigt **Node.js**. Hier wird eine portable Version verwendet, die keine Administratorrechte erfordert.

### 1.1 Node.js portable herunterladen und entpacken

1. Im Windows-Explorer einen neuen Ordner erstellen:
   ```
   C:\Users\<BENUTZER>\nodejs-portable
   ```

2. Die passende Node.js-Version als ZIP herunterladen, z. B. von:  
   https://nodejs.org/dist/v22.14.0/node-v22.14.0-win-x64.zip

3. Die ZIP-Datei in `C:\Users\<BENUTZER>\nodejs-portable` entpacken. Danach liegt Node.js unter:
   ```
   C:\Users\<BENUTZER>\nodejs-portable\node-v22.14.0-win-x64
   ```

### 1.2 Start-Skript für Zoteus anlegen

1. Mit einem Texteditor (z. B. Notepad) eine neue Datei anlegen:
   ```
   C:\Users\<BENUTZER>\start-zoteus.ps1
   ```

2. Folgenden Inhalt einfügen und speichern:
   ```powershell
   $env:PATH += ';C:\Users\<BENUTZER>\nodejs-portable\node-v22.14.0-win-x64'
   $env:ZOTERO_API_KEY = '<ZOTERO-API-KEY>'
   $env:ZOTEUS_LOCAL = 'on'
   $env:ZOTERO_LIBRARY_ID = '<ZOTERO-USER-ID>'
   $env:ZOTERO_LIBRARY_TYPE = 'user'
   npx -y @oscardvs/zoteus
   ```

   Hinweis: Wer ganz ohne zotero.org arbeiten möchte, lässt `ZOTERO_API_KEY` weg. Dann funktionieren aber keine Schreibzugriffe über Zoteus.

3. Den eigenen Zotero-API-Key unter https://www.zotero.org/settings/keys erzeugen oder den vorhandenen eintragen.

### 1.3 Zoteus in Kimi Code eintragen

Auf der Linux-VM muss die Datei `~/.kimi-code/mcp.json` um den Server `zoteus` ergänzt werden. Ein Backup der Datei sollte vorher angelegt werden.

```json
{
  "mcpServers": {
    "zotero": {
      "type": "stdio",
      "command": "ssh",
      "args": [
        "-i",
        "/home/ml/.ssh/<SSH-SCHLUESSEL>",
        "<SSH-BENUTZER>@<ZOTERO-HOST-IP>",
        "powershell.exe -Command \"$env:ZOTERO_LOCAL='true'; $env:ZOTERO_API_KEY='...'; $env:ZOTERO_LIBRARY_ID='<ZOTERO-USER-ID>'; $env:ZOTERO_LIBRARY_TYPE='user'; zotero-mcp-server\""
      ]
    },
    "zoteus": {
      "type": "stdio",
      "command": "ssh",
      "args": [
        "-i",
        "/home/ml/.ssh/<SSH-SCHLUESSEL>",
        "<SSH-BENUTZER>@<ZOTERO-HOST-IP>",
        "powershell.exe -ExecutionPolicy Bypass -File <WINDOWS-BENUTZERPFAD>\\start-zoteus.ps1"
      ]
    },
    "memory": {
      "type": "stdio",
      "command": "/home/ml/.kimi-memory/mcp-server/run.sh"
    }
  }
}
```

### 1.4 Test

Nach einem Neustart von Kimi Code sollte `zotero_whoami` verfügbar sein und Folgendes melden:

> Signed in as <ZOTERO-BENUTZERNAME> (userID <ZOTERO-USER-ID>). Local API: available.

## 2. cli-anything-zotero installieren

cli-anything-zotero benötigt **Python 3.10 oder höher** und ein **Zotero-Plugin**.

> **⚠️ Nicht mehr empfohlen (Stand 1.9.2026):** Dieses Kapitel bleibt nur noch als Referenz. Das nötige Plugin „CLI Bridge for Zotero" gibt es als fertige XPI nicht (nur Quellcode zum Selbstbau) und lädt unter Zotero 10 mit `appDisabled` — der HTTP-Endpunkt ist auch nach einem Manifest-Patch nicht verifiziert. Für die KI-Anbindung reicht **Zoteus (Kapitel 1)** vollständig, ohne Plugin.

### 2.1 Python-Paket installieren

1. PowerShell öffnen.
2. Folgenden Befehl ausführen:
   ```powershell
   pip install cli-anything-zotero
   ```

3. Hinweis: Falls `pip` nicht im PATH liegt, muss der volle Pfad zur Python-Installation verwendet werden. Nach der Installation liegt `zotero-cli.exe` typischerweise unter:
   ```
   C:\Users\<BENUTZER>\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\Scripts\zotero-cli.exe
   ```

### 2.2 JS Bridge Plugin installieren

1. In PowerShell ausführen:
   ```powershell
   zotero-cli app install-plugin
   ```

   Dieser Befehl erzeugt eine `.xpi`-Datei und zeigt deren Pfad an.

2. In Zotero: **Tools → Plugins**
3. Auf das **Zahnrad-Symbol** oben rechts klicken
4. **Install Plugin From File…** auswählen
5. Die im ersten Schritt erzeugte `.xpi`-Datei auswählen
6. Zotero neu starten

### 2.3 Installation prüfen

1. In PowerShell ausführen:
   ```powershell
   zotero-cli app ping
   zotero-cli app plugin-status
   ```

   Bei Erfolg meldet `plugin-status`:
   ```json
   {
     "endpoint_active": true,
     "ready": true,
     "next_step": "CLI Bridge is ready."
   }
   ```

### 2.4 Nutzung in Kimi Code

Da cli-anything-zotero kein MCP-Server ist, ruft Kimi Code die Befehle über SSH auf. Beispiel:

```bash
ssh -i /home/ml/.ssh/<SSH-SCHLUESSEL> <SSH-BENUTZER>@<ZOTERO-HOST-IP> \
  "C:\Users\<BENUTZER>\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\Scripts\zotero-cli.exe --json item get <BEISPIEL-ITEM-KEY>"
```

Für wiederkehrende Befehle empfiehlt es sich, Alias-Skripte in der Linux-VM anzulegen.

## 3. Zusammenfassung der Startbefehle

| Tool | Start auf Windows | Nutzung in Kimi Code |
|---|---|---|
| Zoteus | `powershell.exe -ExecutionPolicy Bypass -File C:\Users\<BENUTZER>\start-zoteus.ps1` | Direkt als MCP-Tool |
| cli-anything-zotero | `zotero-cli …` | Über SSH als Shell-Befehl |

## 4. Bekannte Stolpersteine

- **PowerShell Execution Policy**: Das Zoteus-Startskript wird mit `-ExecutionPolicy Bypass` aufgerufen, damit es trotz eingeschränkter Richtlinie läuft.
- **PATH für portable Node.js**: `npx` findet `node` nur, wenn der Pfad zum Node.js-Verzeichnis vor dem Aufruf ergänzt wird (geschieht im Startskript).
- **zotero.org für Zoteus-Writes**: Auch wenn `ZOTEUS_LOCAL=on` gesetzt ist, nutzt Zoteus für Schreibzugriffe die Zotero-Web-API. Wer das vermeiden möchte, sollte Schreiboperationen über cli-anything-zotero erledigen.
- **Zotero-Volltextindex**: Zoteus `zotero_get_fulltext` liefert nur Inhalte, die Zotero selbst indexiert hat. Nicht indexierte PDFs müssen in Zotero einmal geöffnet oder nachindexiert werden.
