Robinhood 投資組合顧問
透過 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 檔案或 shell 設定檔中設定以下變數:
| 變數 | 必要 | 說明 |
|---|---|---|
ROBINHOOD_USERNAME | 是 | 您的 Robinhood 電子郵件 |
ROBINHOOD_PASSWORD | 是 | 您的 Robinhood 密碼 |
ROBINHOOD_TOTP_SECRET | 僅在使用驗證器應用程式時 | 來自驗證器設定的 TOTP 金鑰。如果使用簡訊驗證則不需要。 |
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 | 單一持股,以股票代碼查詢(查詢單一標的更快) |
robinhood_get_watchlist | 您觀察清單中的股票 |
robinhood_get_quote | 即時價格、買賣報價、成交量 |
robinhood_get_fundamentals | 本益比、市值、股利收益率、52週高低範圍 |
robinhood_get_historicals | OHLCV 價格歷史(5分鐘、10分鐘、小時、日、週) |
robinhood_get_news | 特定股票代碼的最新新聞文章 |
robinhood_get_earnings | 財報日期、每股盈餘預估值、實際值 |
robinhood_get_ratings | 分析師買入/持有/賣出評級 |
robinhood_get_dividends | 股利支付歷史 |
robinhood_get_options_positions | 當前選擇權部位 |
robinhood_search_symbols | 根據名稱或股票代碼搜尋股票 |
本機快取
投資組合數據會快取在本機的 ~/.hermes/data/robinhood/portfolio_cache.json(Hermes)或 ~/.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 知識和即時數據後進行回應
- 將研究筆記追加到實體頁面(如果使用 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, sector, ...]
---
# 公司名稱 (TICKER)
簡要概述...
## 重要事實
...
## 投資論點
...
## 持股歷史
> 自動更新。請勿手動編輯。
### 當前部位
| 指標 | 數值 |
|--------|-------|
| 數量 | 50 |
| 平均成本 | $40.69 |
| 當前價格 | $45.20 |
| 總報酬 | +10.8% |
### 持股更新
- **[2026-04-24]** 50股 @ $40.69 平均
## 研究筆記
> 代理程式會在每次研究查詢後附加註記日期的條目。
### [2026-04-24] 我應該在 $30 加倉 HIMS 嗎?
重點摘要: [要點列表]
決定: [如果使用者有說明]
何時更新實體頁面
- 每次拉取投資組合時 — 更新每個持股的部位數據
- 每次研究查詢後 — 附加一個註記日期的研究筆記條目
- 建立新實體時 — 取得基本面、建立頁面、加入 wiki 索引
研究佇列
wiki/concepts/research-queue.md 追蹤正在評估中但尚未買入的股票代碼:
| 股票代碼 | 來源 | 論點(一行) | 狀態 | 加入日期 | 備註 |
|---|---|---|---|---|---|
| ABC | YouTube 影片 | EV 電池題材 | 研究中 | 2026-04-24 | MKBHD 提及 |
狀態值: 研究中 → 可買入 → (買入後移除)或 已放棄
Obsidian 筆記庫整合(選用)
每次拉取投資組合可以將兩個檔案寫入您的 Obsidian 筆記庫:
| 檔案 | 行為 |
|---|---|
_ephemeral/portfolio/snapshots/YYYY-MM-DD-HHMM.md | 不可變 — 每次拉取一個,完整數據 |
_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 筆記庫 — 快照僅寫入使用者本機的筆記庫
疑難排解
| 問題 | 解決方案 |
|---|---|
| 「未登入」 | 確認 ROBINHOOD_USERNAME 和 ROBINHOOD_PASSWORD 環境變數已正確設定 |
| 「發現非 base32 數字」 | ROBINHOOD_TOTP_SECRET 包含無效字元 — 僅限 A-Z 和數字 2-7。如果使用簡訊驗證,請移除此變數 |
| 速率限制(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 筆記庫操作