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_fundamentals | PER、時価総額、配当利回り、52週レンジ |
robinhood_get_historicals | OHLCV価格履歴(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ツールを呼び出すのは以下の場合のみです:
- キャッシュが15分以上経過しており、ユーザーがリアルタイムデータを必要としている場合
- ユーザーが明示的にリフレッシュを要求した場合(「ポートフォリオを更新して」「最新の価格を取得して」)
- ユーザーがキャッシュにない特定のティッカーについて質問した場合
- ユーザーが急激に変化するデータ(ニュース、リアルタイムクォート)について質問した場合
キャッシュの更新
# 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ツールを呼び出し、結果をキャッシュファイルに書き込むことでインラインでキャッシュを更新することもできます。
ポートフォリオクエリワークフロー
ユーザーがポートフォリオについて質問した場合:
- キャッシュを読み取り、コンテキスト(ポートフォリオ評価額、ポジション、アロケーション)を取得
- データが古い場合(>15分)またはユーザーがリアルタイムデータを希望する場合、MCPツールを呼び出す
- MCP取得後にキャッシュを更新
- ユーザーの実際の保有状況に基づいて回答(一般的なアドバイスではない)
- 関連する場合は、取得原価、未実現損益、アロケーションを参照
- オプションに関する質問の場合は、既知であればユーザーの戦略と照合する
ユーザーが特定のティッカーについて質問した場合:
wiki/entities/<ticker>.mdが存在するか確認(Obsidian使用時)- 既存の投資テーゼと調査履歴を読み取る
- MCP経由でライブデータ(クォート、ファンダメンタルズ、ニュース、評価)を取得
- Wikiの知識とライブデータを統合して回答する
- エンティティページにResearch Notesエントリを追記(Obsidian使用時)
- ティッカーがポートフォリオにない場合、リサーチキューに追加する
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ドルで追加すべきか?
キーポイント: [箇条書きの要約]
決定: [ユーザーが明示した場合]
エンティティページを更新するタイミング
- ポートフォリオデータ取得のたびに — 各保有銘柄のポジションデータを更新
- 調査クエリのたびに — 日付入りのResearch Notesエントリを追記
- 新しいエンティティを作成するとき — ファンダメンタルズを取得し、ページを作成し、Wikiインデックスに追加
リサーチキュー
wiki/concepts/research-queue.mdは、評価中だがまだ購入していないティッカーを追跡します:
| ティッカー | ソース | テーゼ(1行) | ステータス | 追加日 | 備考 |
|---|---|---|---|---|---|
| ABC | YouTube動画 | EVバッテリー関連 | 調査中 | 2026-04-24 | MKBHDが言及 |
ステータス値: 調査中 → 購入準備完了 → (購入時に削除)または 見送り
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環境変数を設定します。
アドバイザリーガイドライン
- 常にユーザーの実際の保有状況に基づいて回答すること — 一般的なアドバイスはしない
- 関連する場合は、取得原価、未実現損益、アロケーションパーセンテージを参照すること
- オプションに関する質問の場合は、ユーザーの戦略を理解すること(例: 0DTEブレイクアウト)
- アクションを推奨する場合は、計算根拠を示すこと(現在のアロケーション、リスク/リワード)
- ユーザーが明示的に推奨を求めない限り、取引を提案しないこと
- 単一のポジションがポートフォリオの20%を超える場合は、集中リスクを警告すること
- ニュースとファンダメンタルズを照合すること — 見出しだけで反応しない
セキュリティとプライバシー
- スキルに認証情報は保存されません — 認証は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操作