#!/usr/bin/env bash # Kuonen.PDFTools MCP-Server - Installer fuer Linux und macOS. # Einzeiler: curl -fsSL http://pdftools.kuonen.org/install-mcp.sh | sh set -eu base="http://pdftools.kuonen.org" echo "Kuonen.PDFTools MCP-Server wird installiert..." # 1) Plattform erkennen und auf den passenden .NET-RID abbilden. os="$(uname -s)" arch="$(uname -m)" case "$os-$arch" in Darwin-arm64) rid="osx-arm64" ;; Darwin-x86_64) rid="osx-x64" ;; Linux-x86_64|Linux-amd64) rid="linux-x64" ;; *) echo "Nicht unterstuetzte Plattform: $os $arch (unterstuetzt: macOS arm64/x64, Linux x64)"; exit 1 ;; esac echo " Plattform: $os $arch -> $rid" # 2) Zielordner. Das trainierte OCR-Modell liegt DANEBEN (mcp-ocr-model.json) und wird NICHT angetastet. dir="$HOME/.local/share/Kuonen.PDFTools/mcp" bin="$dir/Kuonen.PDFTools.Mcp" mkdir -p "$dir" # 3) Die self-contained Binaerdatei laden (kein .NET-SDK noetig). Ueberschreibt nur das PROGRAMM. echo " Lade Server von $base/download/mcp-$rid ..." if command -v curl >/dev/null 2>&1; then curl -fSL "$base/download/mcp-$rid" -o "$bin" else wget -O "$bin" "$base/download/mcp-$rid" fi chmod +x "$bin" # 3b) Auto-Update AKTIVIEREN: die mcp-update.json neben die Binaerdatei legen. Beim naechsten Start # prueft der Server best-effort DENSELBEN Server (latest.json) auf eine neuere Version. printf '{ "enabled": true, "manifestUrl": "%s/downloads/latest.json" }\n' "$base" > "$dir/mcp-update.json" # 4) Arbeitsordner (relative Pfade loesen sich dagegen auf; jederzeit per 'set_workdir' aenderbar). workdir="$HOME/Documents/PDFTools" [ -d "$HOME/Documents" ] || workdir="$HOME/PDFTools" mkdir -p "$workdir" # 5) Claude-Desktop-Konfiguration behutsam ergaenzen (Backup zuerst). Der Pfad haengt vom OS ab. if [ "$os" = "Darwin" ]; then cfg="$HOME/Library/Application Support/Claude/claude_desktop_config.json" else cfg="$HOME/.config/Claude/claude_desktop_config.json" fi if command -v python3 >/dev/null 2>&1; then python3 - "$cfg" "$bin" "$workdir" <<'PY' import json, os, sys, shutil, datetime cfg, binp, workdir = sys.argv[1], sys.argv[2], sys.argv[3] os.makedirs(os.path.dirname(cfg), exist_ok=True) data = {} if os.path.exists(cfg): shutil.copy(cfg, cfg + ".bak-" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")) try: with open(cfg) as f: data = json.load(f) except Exception: data = {} if not isinstance(data, dict): data = {} data.setdefault("mcpServers", {}) data["mcpServers"]["kuonen-pdftools"] = { "command": binp, "args": [], "env": {"KUONEN_MCP_WORKDIR": workdir} } with open(cfg, "w") as f: json.dump(data, f, indent=2) print(" Claude-Desktop-Konfiguration aktualisiert: " + cfg) PY else echo " python3 nicht gefunden - bitte den Eintrag von Hand in $cfg ergaenzen:" echo " \"kuonen-pdftools\": { \"command\": \"$bin\", \"args\": [], \"env\": { \"KUONEN_MCP_WORKDIR\": \"$workdir\" } }" fi echo "" echo "Fertig." echo " Server: $bin" echo " Arbeitsordner: $workdir" echo "" echo "Claude Desktop: neu starten, damit der Server geladen wird." echo "Claude Code: diesen Befehl ausfuehren (Alternative zu Claude Desktop):" echo " claude mcp add-json kuonen-pdftools '{\"command\":\"$bin\",\"env\":{\"KUONEN_MCP_WORKDIR\":\"$workdir\"}}'" echo "" echo "Hinweis: ocr_folder/refine brauchen Tesseract (z. B. 'brew install tesseract tesseract-lang' bzw." echo " 'sudo apt install tesseract-ocr tesseract-ocr-deu'); alles andere laeuft ohne."