Files
scalable-wealth/README.md
T

5.0 KiB

scalable-sync

Synchronisiert Scalable Capital Broker-Transaktionen nach Wealthfolio via MCP.

Voraussetzungen

  • Docker + Docker Compose
  • Wealthfolio mit MCP aktiviert (WF_MCP_ENABLED=true)
  • Scalable Capital: Agentic Investing aktiviert (Profil → Sicherheit)
  • sc-CLI auf dem Host installiert (siehe unten)

Dateien

Datei Zweck
Dockerfile Container-Image
compose.yaml Docker Compose Config
example.env Vorlage für .env
scalable_sync.py Sync-Adapter
requirements.txt Python-Abhängigkeiten

Setup

1. Scalable CLI auf dem Host installieren

Linux / WSL:

curl -fsSL -o /tmp/sc.tar.gz \
  "[https://github.com/ScalableCapital/scalable-cli/releases/download/v1.0.0/sc-v1.0.0-linux-x86_64-gnu.tar.gz](https://github.com/ScalableCapital/scalable-cli/releases/download/v1.0.0/sc-v1.0.0-linux-x86_64-gnu.tar.gz)"

curl -fsSL -o /tmp/SHA256SUMS \
  "[https://github.com/ScalableCapital/scalable-cli/releases/download/v1.0.0/sc-v1.0.0-SHA256SUMS](https://github.com/ScalableCapital/scalable-cli/releases/download/v1.0.0/sc-v1.0.0-SHA256SUMS)"

cd /tmp && grep "linux-x86_64-gnu.tar.gz" SHA256SUMS | awk '{print $1 "  sc.tar.gz"}' | sha256sum -c -

tar -xzf sc.tar.gz
sudo mv sc-v1.0.0-linux-x86_64-gnu/sc /usr/local/bin/sc
sudo chmod +x /usr/local/bin/sc
sc --version

2. Login auf dem Host (einmalig)

WSL/Linux hat keinen Keyring — daher session_backend = "file" setzen:

mkdir -p ~/.config/scalable-cli
cat > ~/.config/scalable-cli/config.toml <<'EOF'
[auth]
session_backend = "file"
signing_key_backend = "file"
EOF

sc login --local-read-only

3. .env anlegen

cp example.env .env
# WF_MCP_URL, WF_MCP_TOKEN, WF_ACCOUNT_ID, ASSET_MAP, PUID, PGID anpassen

4. Bind-Mount in compose.yaml anpassen

volumes:
  - scalable-sync-data:/app/data
  - /home/<dein-user>/.config/scalable-cli:/tmp/sc-config:ro

5. Testen und starten

docker compose build

# Session testen
docker compose run --rm scalable-sync sc whoami
docker compose run --rm scalable-sync sc broker holdings

# Dry-Run
docker compose run --rm scalable-sync python /app/scalable_sync.py --once --dry-run

# Start
docker compose up -d

.env Referenz

WF_MCP_URL=http://wealthfolio:8088/mcp
WF_MCP_TOKEN=wf_mcp_dein_token_hier
WF_ACCOUNT_ID=dein-konto-uuid

SYNC_INTERVAL_HOURS=6
SC_OVERLAP_DAYS=14
SC_SETTLED_ONLY=true

# ISIN → Wealthfolio-Symbol
ASSET_MAP={"IE00B4L5Y983":"EUNL.DE","IE00B3RBWM25":"VWCE.DE"}

PUID=1000
PGID=1000

WF_ACCOUNT_ID finden

Wealthfolio → Accounts → Konto anklicken → ID aus der URL kopieren.

ASSET_MAP

JSON-Objekt "ISIN": "Symbol". ISINs ermitteln mit:

sc broker holdings

SC_PORTFOLIO_ID

Nur bei mehreren Scalable-Portfolios. Ermitteln mit:

docker compose run --rm scalable-sync sc broker context show

Session erneuern

sc login --local-read-only
docker compose restart scalable-sync

Befehle

Befehl Beschreibung
docker compose run --rm scalable-sync python /app/scalable_sync.py --once --dry-run Testlauf ohne Schreiben
docker compose run --rm scalable-sync python /app/scalable_sync.py --once Einmaliger Sync
docker compose logs -f Logs anzeigen
docker compose down && docker compose up -d Neustart

Volumes

Volume Inhalt Zweck
scalable-sync-data state.db, audit.jsonl, dead-letter.jsonl Sync-Status und Logs

Die Session liegt auf dem Host unter ~/.config/scalable-cli/ und wird als read-only Bind-Mount eingehängt.

Troubleshooting

Problem Lösung
sc whoami schlägt fehl Session abgelaufen — sc login --local-read-only wiederholen, dann docker compose restart
Keine Transaktionen SC_SETTLED_ONLY und SC_OVERLAP_DAYS prüfen
Unmapped ISIN ISIN in ASSET_MAP ergänzen
Mehrere Portfolios SC_PORTFOLIO_ID in .env setzen
Doppelte Activities WF_ACCOUNT_ID prüfen

Wealthfolio-Vorbereitung

1. MCP aktivieren

In der Wealthfolio compose.yaml:

environment:
  WF_MCP_ENABLED: "true"
  WF_MCP_TOKEN: "wf_mcp_dein_geheimer_token"

Danach Wealthfolio neu starten.

2. Account anlegen

Wealthfolio → Accounts → Add Account:

Feld Wert
Name Scalable Capital (frei wählbar)
Type Brokerage
Currency EUR

WF_ACCOUNT_ID ermitteln: Account anklicken → ID aus der URL kopieren:

/accounts/550e8400-e29b-41d4-a716-446655440000/ → diese UUID ist deine WF_ACCOUNT_ID

3. Assets anlegen

Jedes ETF muss in Wealthfolio als Asset existieren. Wealthfolio → Assets → Asset suchen oder neu anlegen.

ISINs deiner gehaltenen ETFs ermitteln:

sc broker holdings

Das Symbol in Wealthfolio (z. B. EUNL.DE) exakt in ASSET_MAP übernehmen:

ASSET_MAP={"IE00B4L5Y983":"EUNL.DE","IE00B3RBWM25":"VWCE.DE","DE0002635307":"EXSA.DE"}

Wichtig: Symbol muss exakt übereinstimmen — am besten aus Wealthfolio kopieren, nicht raten.