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.