Communitygithub.com

uzairansaruzi/robinhood-agent-skill

Robinhoodポートフォリオアドバイザー — MCP経由でポジション、クォート、ファンダメンタルズ、ニュース、収益、アナリスト評価、配当、オプションへの読み取り専用アクセス。キャッシュファースト戦略、エンティティページワークフロー、オプションのObsidian Vault統合を含む。

robinhood-agent-skill とは?

このスキルは、`robinhood-mcp` MCPサーバーを介して、Robinhoodポートフォリオへの読み取り専用アクセスをAIエージェントに提供します。主な目的は、ユーザーが保有するポジションの現在価値、クォート、ファンダメンタルズ、ニュース、収益、アナリスト評価、配当、オプションなどのデータをエージェントが取得し、常にユーザーの実際の保有状況に基づいた文脈に沿ったアドバイスを提供できるようにすることです。キャッシュファースト戦略を採用しており、まずローカルキャッシュを参照して応答速度を高め、キャッシュが古い場合やユーザーが明示的に最新データを要求した場合にのみMCPツールを呼び出します。また、オプションでObsidian Vaultと統合し、調査したティッカーごとにエンティティページを作成・更新して知識を永続化するワークフローを提供します。このスキルは、Hermes Agent、Claude Desktop、Claude Code、Codex、OpenCode、Cline、Windsurfなどの複数のエージェントプラットフォームに対応しており、環境変数(ROBINHOOD_USERNAME、ROBINHOOD_PASSWORD、オプションでROBINHOOD_TOTP_SECRET)を設定し、エージェントの設定にMCPサーバー定義を追加するだけで利用を開始できます。

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

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Robinhood Portfolio Advisor

robinhood-mcpサーバーを介して、Robinhoodポートフォリオへの読み取り専用アクセスを提供します。ポジション、クォート、ファンダメンタルズ、ニュース、収益、アナリスト評価、配当、オプションに関するリアルタイムデータを取得できます。

前提条件

1. Robinhoodアカウント

Robinhoodアカウント(robinhood.comで無料登録)が必要です。

2. MCPサーバーのインストール

robinhood-mcpパッケージがMCPサーバーを提供します。以下のいずれかの方法でインストールします。

# 推奨 — uvx経由で実行(グローバルインストール不要、自動管理)
# エージェントの設定に追加するだけで動作します。初回実行時にuvxが自動インストールします。

# 代替 — グローバルpipインストール
pip install robinhood-mcp

注記: uvxはuv Pythonパッケージマネージャーにより提供されます。先にインストールしてください: curl -LsSf https://astral.sh/uv/install.sh | sh

3. 環境変数

エージェントの.envファイルまたはシェルプロファイルに以下の変数を設定します。

変数必須説明
ROBINHOOD_USERNAMEはいRobinhoodのメールアドレス
ROBINHOOD_PASSWORDはいRobinhoodのパスワード
ROBINHOOD_TOTP_SECRET認証アプリ使用時のみ認証アプリ設定時のTOTPシークレット。SMS認証を使用する場合は不要です。

4. エージェントの設定

エージェント用の設定スニペットはtemplates/ディレクトリを参照してください。クイックリファレンス:

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}"  # 認証アプリ使用時はコメント解除
    timeout: 60
    connect_timeout: 30

その他のエージェント — templates/ディレクトリで、Claude Desktop、Claude Code、Codex、OpenCode、Cline、Windsurfの設定例を参照してください。

設定を追加したらエージェントを再起動します。確認方法: hermes mcp test robinhood (Hermes)、または各エージェントのMCPステータスを確認してください。

利用可能なMCPツール

これらのツールは、Hermes Agentではmcp_robinhood_*として登録されます(エージェントによってプレフィックスが異なります)。

ツール説明
robinhood_get_portfolioポートフォリオ評価額、純資産、購買力、日次変動
robinhood_get_positions全保有ポジション(取得原価、現在価値、損益)
robinhood_get_position単一ティッカーの保有ポジション(1銘柄の場合、より高速)
robinhood_get_watchlistウォッチリスト内の銘柄
robinhood_get_quoteリアルタイム価格、売気配/買気配、出来高
robinhood_get_fundamentalsPER、時価総額、配当利回り、52週レンジ
robinhood_get_historicalsOHLCV価格履歴(5分、10分、1時間、日、週)
robinhood_get_news特定銘柄に関する最近のニュース記事
robinhood_get_earnings決算日、EPS予想、実績
robinhood_get_ratingsアナリストの買い/ホールド/売り評価
robinhood_get_dividends配当金支払い履歴
robinhood_get_options_positions現在のオプションポジション
robinhood_search_symbols銘柄名またはティッカーで銘柄を検索

ローカルキャッシュ

ポートフォリオデータは、Hermes Agentでは~/.hermes/data/robinhood/portfolio_cache.jsonに、その他のエージェントでは~/.robinhood-mcp/cache.jsonにローカルキャッシュされます。

キャッシュファースト戦略

常に最初にキャッシュを確認します。 MCPツールを呼び出すのは以下の場合のみです:

  1. キャッシュが15分以上経過しており、ユーザーがリアルタイムデータを必要としている場合
  2. ユーザーが明示的にリフレッシュを要求した場合(「ポートフォリオを更新して」「最新の価格を取得して」)
  3. ユーザーがキャッシュにない特定のティッカーについて質問した場合
  4. ユーザーが急激に変化するデータ(ニュース、リアルタイムクォート)について質問した場合

キャッシュの更新

# Hermes Agentユーザー
python3 scripts/refresh_cache.py

# カスタムパスを使用
python3 scripts/refresh_cache.py --cache-dir ~/my-data --vault-path ~/my-vault

# JSON出力のみ(Obsidianなし)
python3 scripts/refresh_cache.py --json-only

# キャッシュが新しい場合でも強制的に更新
python3 scripts/refresh_cache.py --force

エージェントはポートフォリオクエリ中に、MCPツールを呼び出し、結果をキャッシュファイルに書き込むことでインラインでキャッシュを更新することもできます。

ポートフォリオクエリワークフロー

ユーザーがポートフォリオについて質問した場合:

  1. キャッシュを読み取り、コンテキスト(ポートフォリオ評価額、ポジション、アロケーション)を取得
  2. データが古い場合(>15分)またはユーザーがリアルタイムデータを希望する場合、MCPツールを呼び出す
  3. MCP取得後にキャッシュを更新
  4. ユーザーの実際の保有状況に基づいて回答(一般的なアドバイスではない)
  5. 関連する場合は、取得原価、未実現損益、アロケーションを参照
  6. オプションに関する質問の場合は、既知であればユーザーの戦略と照合する

ユーザーが特定のティッカーについて質問した場合:

  1. wiki/entities/<ticker>.mdが存在するか確認(Obsidian使用時)
  2. 既存の投資テーゼと調査履歴を読み取る
  3. MCP経由でライブデータ(クォート、ファンダメンタルズ、ニュース、評価)を取得
  4. Wikiの知識とライブデータを統合して回答する
  5. エンティティページにResearch Notesエントリを追記(Obsidian使用時)
  6. ティッカーがポートフォリオにない場合、リサーチキューに追加する

MCPを使用すべき場合とキャッシュを使用すべき場合

シナリオ使用
「ポートフォリオの価値は?」キャッシュ(十分に新しい場合)
「NVDAの調子はどう?」キャッシュ優先、古い場合またはティッカーがない場合はMCP
「ポートフォリオの完全な最新情報を教えて」MCP(常にライブデータを取得)
「TSLAのニュースはある?」MCP(ニュースは常に変化する)
「AAPLのアナリスト評価は?」MCP(調査データは常にライブ)
「オプションポジションを見せて」キャッシュ優先、古い場合はMCP
「これまでに受け取った配当は?」キャッシュ優先
「データを更新して」MCP、その後キャッシュを更新

調査からエンティティへのワークフロー(オプション — Obsidianが必要)

問題点: 銘柄に関する調査クエリがチャットセッション内で失われてしまう。 解決策: すべての保有銘柄および調査済みティッカーに対して永続的なエンティティページを作成します。調査結果は追記され、忘れられることはありません。

エンティティページの構造

各ティッカーはwiki/entities/<ticker>.mdにページを持ちます:

---
title: 会社名
created: YYYY-MM-DD
updated: YYYY-MM-DD
type: entity
tags: [ticker, セクター, ...]
---

# 会社名 (TICKER)

簡単な概要...

## 主要ファクト
...

## 投資テーゼ
...

## ポジション履歴
> 自動更新されます。手動で編集しないでください。

### 現在のポジション
| 指標 | 値 |
|--------|-------|
| 数量 | 50 |
| 平均コスト | 40.69ドル |
| 現在価格 | 45.20ドル |
| トータルリターン | +10.8% |

### ポジション更新
- **[2026-04-24]** 50株 @ 40.69ドル 平均

## 研究ノート
> エージェントは調査クエリのたびに日付入りのエントリを追記します。

### [2026-04-24] HIMSを30ドルで追加すべきか?
キーポイント: [箇条書きの要約]
決定: [ユーザーが明示した場合]

エンティティページを更新するタイミング

  1. ポートフォリオデータ取得のたびに — 各保有銘柄のポジションデータを更新
  2. 調査クエリのたびに — 日付入りのResearch Notesエントリを追記
  3. 新しいエンティティを作成するとき — ファンダメンタルズを取得し、ページを作成し、Wikiインデックスに追加

リサーチキュー

wiki/concepts/research-queue.mdは、評価中だがまだ購入していないティッカーを追跡します:

ティッカーソーステーゼ(1行)ステータス追加日備考
ABCYouTube動画EVバッテリー関連調査中2026-04-24MKBHDが言及

ステータス値: 調査中 → 購入準備完了 → (購入時に削除)または 見送り

Obsidian Vault統合(オプション)

ポートフォリオデータを取得するたびに、Obsidian Vaultに2つのファイルを書き込むことができます:

ファイル動作
_ephemeral/portfolio/snapshots/YYYY-MM-DD-HHMM.md不変 — 取得ごとに1つ、全データを含む
_ephemeral/portfolio/latest.md上書き — 現在の状態 + 前回との差分

Dataview用のフロントマター

両方のファイルにYAMLフロントマターが含まれます:

---
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
---

これにより、以下のようなDataviewクエリが可能になります:

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

差分計算

latest.mdは最新のスナップショットと比較し、以下をハイライトします:

  • 🆕 新しいポジション(前回の取得以降に購入)
  • ❌ クローズされたポジション(前回の取得以降に売却)
  • 📊 大きな変動(5%以上の価格変動 または 1%以上のアロケーションシフト)
  • 前回のスナップショットからの純資産変化

Obsidian統合を有効にするには、refresh_cache.pyを実行する際に--vault-path引数を設定するか、ROBINHOOD_VAULT_PATH環境変数を設定します。

アドバイザリーガイドライン

  1. 常にユーザーの実際の保有状況に基づいて回答すること — 一般的なアドバイスはしない
  2. 関連する場合は、取得原価、未実現損益、アロケーションパーセンテージを参照すること
  3. オプションに関する質問の場合は、ユーザーの戦略を理解すること(例: 0DTEブレイクアウト)
  4. アクションを推奨する場合は、計算根拠を示すこと(現在のアロケーション、リスク/リワード)
  5. ユーザーが明示的に推奨を求めない限り、取引を提案しないこと
  6. 単一のポジションがポートフォリオの20%を超える場合は、集中リスクを警告すること
  7. ニュースとファンダメンタルズを照合すること — 見出しだけで反応しない

セキュリティとプライバシー

  • スキルに認証情報は保存されません — 認証はMCP設定の環境変数を介して行われます
  • 読み取り専用アクセス — MCPサーバーは取引を実行したり、アカウント設定を変更したりすることはできません
  • ローカル処理 — 認証情報はローカルで認証に使用されます。セッショントークンは~/.tokens/robinhood.pickleにキャッシュされます
  • キャッシュはローカルのみ — ~/.hermes/data/robinhood/が送信されることはありません
  • Obsidian Vault — スナップショットはユーザーのローカルVaultにのみ書き込まれます

トラブルシューティング

問題解決策
「ログインしていません」ROBINHOOD_USERNAMEとROBINHOOD_PASSWORDの環境変数が正しく設定されているか確認
「Non-base32 digit found」ROBINHOOD_TOTP_SECRETに無効な文字が含まれています — A-Zと数字2-7のみが有効です。SMS認証を使用する場合はこの変数を削除してください
レート制限(429エラー)robin_stocksにはレート制限が組み込まれていません。数分間アクティビティを停止してから再試行してください
MCPサーバーが起動しないuvxがインストールされていることを確認(pip install uvまたは`curl -LsSf https://astral.sh/uv/install.sh
キャッシュスクリプトが失敗するrobin_stocksとpyotpがインストールされていることを確認: pip install robin_stocks pyotp
クォートが古いRobinhoodのクォートは時点データであり、ライブストリーミングではありません。最新データはMCP経由でリフレッシュ

関連リンク

  • robinhood-mcp — 基盤となるMCPサーバー
  • robin_stocks — 非公式Robinhood APIラッパー
  • portfolio-obsidian-bridge — あらゆるブローカー向けの汎用Obsidian同期
  • llm-wiki — 永続的な調査のためのWikiアーキテクチャ
  • obsidian — Obsidian Vault操作

関連スキル