Communitygithub.com

uzairansaruzi/robinhood-agent-skill

Robinhood-Portfolioberater – schreibgeschützter Zugriff auf Positionen, Kurse, Fundamentaldaten, Nachrichten, Gewinne, Analystenbewertungen, Dividenden und Optionen über MCP. Inklusive Cache-First-Strategie, Arbeitsabläufen für Entitätsseiten und optionaler Obsidian-Vault-Integration.

Was ist robinhood-agent-skill?

Diese Fertigkeit (Skill) ermöglicht einem KI-Agenten (z. B. Claude Code, Cursor, Codex, Hermes Agent) den schreibgeschützten Zugriff auf dein Robinhood-Portfolio über das MCP-Protokoll (Model Context Protocol). Sie stellt Echtzeitdaten zu Positionen, Kursen, Fundamentaldaten, Nachrichten, Gewinnterminen, Analystenbewertungen, Dividenden und Optionen bereit. Die Fertigkeit setzt auf eine Cache-First-Strategie, um unnötige API-Aufrufe zu vermeiden: Der Agent liest zuerst einen lokalen Cache und ruft nur dann Live-Daten ab, wenn der Cache veraltet ist (älter als 15 Minuten) oder der Nutzer explizit eine Aktualisierung wünscht. Dadurch werden Kosten reduziert und Antwortzeiten verbessert. Optional kann sie in einen Obsidian-Vault integriert werden, um für jede gehaltene oder recherchierte Aktie eine persistente Entitätsseite zu erstellen und zu pflegen – inklusive Research-Notizen, Positionshistorie und automatischen Schnappschüssen. Die Fertigkeit unterstützt verschiedene Agentenplattformen wie Hermes, Claude Desktop, Claude Code, Codex, OpenCode, Cline und Windsurf und erfordert die Einrichtung einiger Umgebungsvariablen (Benutzername, Passwort und ggf. TOTP-Secret).

Funktioniert mit✓Claude Code✓Codex CLI~Cursor✓OpenCode✓Windsurf
npx skills add uzairansaruzi/robinhood-agent-skill

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Robinhood-Portfolioberater

Schreibgeschützter Zugriff auf dein Robinhood-Portfolio über den robinhood-mcp-Server. Liefert Live-Daten zu Positionen, Kursen, Fundamentaldaten, Nachrichten, Gewinnen, Analystenbewertungen, Dividenden und Optionen.

Voraussetzungen

1. Robinhood-Konto

Du benötigst ein Robinhood-Konto (kostenlos unter robinhood.com).

2. MCP-Server-Installation

Das robinhood-mcp-Paket stellt den MCP-Server bereit. Installiere es mit einem der folgenden Befehle:

# Empfohlen – läuft über uvx (keine globale Installation nötig, wird automatisch verwaltet)
# Füge es einfach zu deiner Agentenkonfiguration hinzu, und es funktioniert. uvx installiert es beim ersten Start.

# Alternative – globale pip-Installation
pip install robinhood-mcp

Hinweis: uvx wird vom uv-Python-Paketmanager bereitgestellt. Installiere es zuerst: curl -LsSf https://astral.sh/uv/install.sh | sh

3. Umgebungsvariablen

Setze diese in der .env-Datei deines Agenten oder in deinem Shell-Profil:

VariableErforderlichBeschreibung
ROBINHOOD_USERNAMEJaDeine Robinhood-E-Mail-Adresse
ROBINHOOD_PASSWORDJaDein Robinhood-Passwort
ROBINHOOD_TOTP_SECRETNur bei Verwendung einer Authentifikator-AppDas TOTP-Secret aus deiner Authentifikator-Einrichtung. Nicht erforderlich bei Verwendung von SMS-Verifizierung.

4. Agentenkonfiguration

Siehe das templates/-Verzeichnis für Konfigurationsschnipsel zum Kopieren und Einfügen für deinen Agenten. Kurzübersicht:

Hermes Agent (~/.hermes/config.yaml):

mcp_servers:
  robinhood:
    command: uvx
    args:
      - robinhood-mcp
    env:
      ROBINHOOD_USERNAME: "${ROBINHOOD_USERNAME}"
      ROBINHOOD_PASSWORD: "${ROBINHOOD_PASSWORD}"
      # ROBINHOOD_TOTP_SECRET: "${ROBINHOOD_TOTP_SECRET}"  # Auskommentieren für Authentifikator-App
    timeout: 60
    connect_timeout: 30

Andere Agenten – siehe templates/-Verzeichnis für Claude Desktop, Claude Code, Codex, OpenCode, Cline und Windsurf.

Nach dem Hinzufügen der Konfiguration starte deinen Agenten neu. Überprüfe mit: hermes mcp test robinhood (Hermes) oder überprüfe den MCP-Status deines Agenten.

Verfügbare MCP-Tools

Diese Tools werden in Hermes Agent als mcp_robinhood_* registriert (Präfix variiert je nach Agent):

ToolBeschreibung
robinhood_get_portfolioPortfoliowert, Eigenkapital, Kaufkraft, Tagesänderung
robinhood_get_positionsAlle Bestände mit Kostenbasis, aktuellem Wert, Gewinn/Verlust
robinhood_get_positionEinzelner Bestand nach Ticker (schneller für ein Symbol)
robinhood_get_watchlistAktien in deinen Beobachtungslisten
robinhood_get_quoteEchtzeit-Kurs, Geld-/Briefkurs, Volumen
robinhood_get_fundamentalsKGV, Marktkapitalisierung, Dividendenrendite, 52-Wochen-Spanne
robinhood_get_historicalsOHLCV-Kurshistorie (5 Min, 10 Min, Stunde, Tag, Woche)
robinhood_get_newsAktuelle Nachrichtenartikel zu einem Symbol
robinhood_get_earningsGewinndaten, EPS-Schätzungen, Ist-Werte
robinhood_get_ratingsAnalystenbewertungen (Kaufen/Halten/Verkaufen)
robinhood_get_dividendsDividendenzahlungshistorie
robinhood_get_options_positionsAktuelle Optionspositionen
robinhood_search_symbolsAktien nach Name oder Ticker suchen

Lokaler Cache

Portfoliodaten werden lokal unter ~/.hermes/data/robinhood/portfolio_cache.json (Hermes) oder ~/.robinhood-mcp/cache.json (andere Agenten) zwischengespeichert.

Cache-First-Strategie

Überprüfe immer zuerst den Cache. Rufe MCP-Tools nur auf, wenn:

  1. Der Cache älter als 15 Minuten ist UND der Benutzer Live-Daten benötigt
  2. Der Benutzer explizit eine Aktualisierung wünscht („Aktualisiere mein Portfolio“, „Hole die neuesten Kurse“)
  3. Der Benutzer nach einem bestimmten, nicht im Cache befindlichen Ticker fragt
  4. Der Benutzer nach sich schnell ändernden Daten fragt (Nachrichten, Echtzeit-Kurse)

Aktualisieren des Caches

# Hermes Agent Benutzer
python3 scripts/refresh_cache.py

# Mit benutzerdefinierten Pfaden
python3 scripts/refresh_cache.py --cache-dir ~/my-data --vault-path ~/my-vault

# Nur JSON-Ausgabe (kein Obsidian)
python3 scripts/refresh_cache.py --json-only

# Erzwungene Aktualisierung, auch wenn der Cache aktuell ist
python3 scripts/refresh_cache.py --force

Der Agent kann den Cache auch während einer Portfolioabfrage inline aktualisieren, indem er MCP-Tools aufruft und die Ergebnisse in die Cache-Datei schreibt.

Arbeitsablauf für Portfolioabfragen

Wenn der Benutzer nach seinem Portfolio fragt:

  1. Cache lesen für Kontext (Portfoliowert, Positionen, Allokationen)
  2. Wenn die Daten veraltet sind (>15 Min.) oder der Benutzer Live-Daten wünscht, MCP-Tools aufrufen
  3. Cache aktualisieren nach jedem MCP-Abruf
  4. Im Kontext der tatsächlichen Bestände antworten – nicht mit allgemeinen Ratschlägen
  5. Auf Kostenbasis, unrealisierten Gewinn/Verlust und Allokation verweisen, wenn relevant
  6. Bei Optionsfragen mit der Strategie des Benutzers abgleichen, falls bekannt

Wenn der Benutzer nach einem bestimmten Ticker fragt:

  1. Prüfen, ob wiki/entities/<ticker>.md existiert (bei Verwendung von Obsidian)
  2. Es lesen für bestehende Thesen und Recherchehistorie
  3. Live-Daten (Kurs, Fundamentaldaten, Nachrichten, Bewertungen) über MCP abrufen
  4. Mit einer Synthese aus Wiki-Wissen und Live-Daten antworten
  5. Einen Research-Notiz-Eintrag an die Entitätsseite anhängen (bei Verwendung von Obsidian)
  6. Wenn der Ticker nicht im Portfolio ist, ihn in einer Recherche-Warteschlange verfolgen

Wann MCP vs. Cache verwenden

SzenarioVerwenden
„Was ist mein Portfolio wert?“Cache (wenn aktuell genug)
„Wie läuft es mit meiner NVDA?“Cache zuerst, MCP bei veralteten oder fehlenden Ticker
„Gib mir ein vollständiges Portfolio-Update“MCP (immer Live-Daten abrufen)
„Gibt es Neuigkeiten zu TSLA?“MCP (Nachrichten ändern sich ständig)
„Wie sind die Analystenbewertungen für AAPL?“MCP (Forschungsdaten sind immer live)
„Zeig mir meine Optionspositionen“Cache zuerst, MCP bei veralteten Daten
„Welche Dividenden habe ich erhalten?“Cache zuerst
„Aktualisiere meine Daten“MCP, dann Cache aktualisieren

Arbeitsablauf Research-zu-Entität (Optional – Erfordert Obsidian)

Problem: Recherchefragen zu Aktien gehen in Chat-Sitzungen verloren. Lösung: Jeder Bestand oder recherchierte Ticker erhält eine dauerhafte Entitätsseite. Recherchen werden angehängt, nicht vergessen.

Struktur der Entitätsseite

Jeder Ticker erhält eine Seite unter wiki/entities/<ticker>.md:

---
title: Firmenname
created: YYYY-MM-DD
updated: YYYY-MM-DD
type: entity
tags: [ticker, branche, ...]
---

# Firmenname (TICKER)

Kurzer Überblick...

## Wichtige Fakten
...

## Investment-These
...

## Positionshistorie
> Wird automatisch aktualisiert. Nicht manuell bearbeiten.

### Aktuelle Position
| Metrik | Wert |
|--------|------|
| Anzahl | 50 |
| Durchschnittskosten | 40,69 € |
| Aktueller Kurs | 45,20 € |
| Gesamtrendite | +10,8 % |

### Positionsaktualisierungen
- **[2026-04-24]** 50 Aktien zu 40,69 € Durchschnittskosten

## Research-Notizen
> Der Agent hängt nach jeder Rechercheanfrage einen datierten Eintrag an.

### [2026-04-24] Soll ich bei HIMS zu 30 € nachkaufen?
Wichtige Punkte: [Stichpunktzusammenfassung]
Entscheidung: [falls vom Benutzer genannt]

Wann Entitätsseiten aktualisiert werden

  1. Bei jedem Portfolioabruf – Positionsdaten für jeden Bestand aktualisieren
  2. Nach jeder Rechercheanfrage – Einen datierten Research-Notiz-Eintrag anhängen
  3. Beim Erstellen einer neuen Entität – Fundamentaldaten abrufen, Seite erstellen, zum Wiki-Index hinzufügen

Recherche-Warteschlange

wiki/concepts/research-queue.md verfolgt Ticker, die bewertet, aber noch nicht gekauft werden:

TickerQuelleThese (1-zeilig)StatusHinzugefügtNotizen
ABCYouTube-VideoEV-Batterie-Playresearching2026-04-24Erwähnt von MKBHD

Statuswerte: researching → ready to buy → (entfernt bei Kauf) oder passed

Obsidian-Vault-Integration (Optional)

Jeder Portfolioabruf kann zwei Dateien in deinen Obsidian-Vault schreiben:

DateiVerhalten
_ephemeral/portfolio/snapshots/YYYY-MM-DD-HHMM.mdUnveränderlich – eine pro Abruf, vollständige Daten
_ephemeral/portfolio/latest.mdÜberschrieben – aktueller Zustand + Änderungen zum vorherigen

Frontmatter für Dataview

Beide Dateien enthalten YAML-Frontmatter:

---
snapshot_time: 2026-04-24T18:58:02Z
date: 2026-04-24
time: 14:58
total_equity: 42700.94
day_change: -834.73
day_change_pct: -1.92
positions_count: 16
options_count: 1
dividends_ytd: 1.68
type: portfolio-snapshot
---

Dies ermöglicht Dataview-Abfragen wie:

TABLE date, total_equity, day_change_pct
FROM "_ephemeral/portfolio/snapshots"
SORT snapshot_time DESC

Delta-Berechnung

Die latest.md vergleicht mit dem letzten Schnappschuss und hebt hervor:

  • 🆕 Neue Positionen (gekauft seit dem letzten Abruf)
  • ❌ Geschlossene Positionen (verkauft seit dem letzten Abruf)
  • 📊 Wesentliche Bewegungen (>5 % Kursänderung ODER >1 % Allokationsverschiebung)
  • Eigenkapitalveränderung seit dem letzten Schnappschuss

Um die Obsidian-Integration zu aktivieren, setze das Argument --vault-path beim Ausführen von refresh_cache.py oder setze die Umgebungsvariable ROBINHOOD_VAULT_PATH.

Beratungsrichtlinien

  1. Antworte immer im Kontext der tatsächlichen Bestände des Benutzers – nicht mit allgemeinen Ratschlägen
  2. Verweise auf Kostenbasis, unrealisierten Gewinn/Verlust und Allokationsprozentsätze, wenn relevant
  3. Verstehe bei Optionsfragen die Strategie des Benutzers (z. B. 0DTE-Ausbruch)
  4. Zeige bei Handlungsempfehlungen die Berechnung (aktuelle Allokation, Risiko/Ertrag)
  5. Schlage niemals Trades vor, es sei denn, der Benutzer bittet ausdrücklich um Empfehlungen
  6. Markiere Konzentrationsrisiken, wenn eine einzelne Position 20 % des Portfolios überschreitet
  7. Gleiche Nachrichten mit Fundamentaldaten ab – reagiere nicht allein auf Überschriften

Sicherheit & Datenschutz

  • Keine Anmeldedaten in der Fertigkeit gespeichert – Authentifizierung erfolgt über Umgebungsvariablen in der MCP-Konfiguration
  • Schreibgeschützter Zugriff – Der MCP-Server kann keine Trades ausführen oder Kontoeinstellungen ändern
  • Lokale Verarbeitung – Anmeldedaten werden lokal zur Authentifizierung verwendet; Sitzungstoken werden unter ~/.tokens/robinhood.pickle zwischengespeichert
  • Cache ist nur lokal – ~/.hermes/data/robinhood/ wird niemals übertragen
  • Obsidian-Vault – Schnappschüsse werden nur in den lokalen Vault des Benutzers geschrieben

Fehlerbehebung

ProblemLösung
„Nicht angemeldet“Überprüfe, ob die Umgebungsvariablen ROBINHOOD_USERNAME und ROBINHOOD_PASSWORD korrekt gesetzt sind
„Nicht-Base32-Ziffer gefunden“ROBINHOOD_TOTP_SECRET enthält ungültige Zeichen – nur A-Z und Ziffern 2-7. Entferne diese Variable bei Verwendung von SMS-Verifizierung
Ratenbegrenzung (429-Fehler)robin_stocks hat keine eingebaute Ratenbegrenzung. Pausiere die Aktivität für einige Minuten und versuche es erneut
MCP-Server startet nichtStelle sicher, dass uvx installiert ist (pip install uv oder `curl -LsSf https://astral.sh/uv/install.sh
Cache-Skript schlägt fehlStelle sicher, dass robin_stocks und pyotp installiert sind: pip install robin_stocks pyotp
Veraltete KurseRobinhood-Kurse sind punktuelle, keine Live-Streaming-Daten. Aktualisiere über MCP für die neuesten Daten

Verwandte Themen

  • robinhood-mcp – Der zugrundeliegende MCP-Server
  • robin_stocks – Inoffizieller Robinhood-API-Wrapper
  • portfolio-obsidian-bridge – Generischer Obsidian-Sync für beliebige Broker
  • llm-wiki – Wiki-Architektur für dauerhafte Recherchen
  • obsidian – Obsidian-Vault-Operationen

Verwandte Skills