🚀 個性化MCP(PersonalizationMCP)
這是一個基於MCP(模型上下文協議)構建的統一個人數據中心。它使AI助手能夠從多個平臺訪問你的數字生活,從而實現真正個性化且貼合情境的交互體驗。

📖 中文文檔: README_zh.md
🚀 快速開始
-
克隆倉庫
git clone https://github.com/YangLiangwei/PersonalizationMCP.git
cd PersonalizationMCP
-
安裝依賴
📖 查看詳細安裝說明:安裝與設置
-
配置API密鑰
cp config.example config
-
添加到Cursor設置
📖 查看詳細的MCP配置:Cursor配置
✨ 主要特性
🎮 Steam集成
- 獲取你的遊戲庫,包含詳細統計信息和遊戲時長
- 查看近期遊戲活動和正在玩的遊戲
- 獲取詳細的遊戲信息和成就
- 與朋友比較遊戲並獲取推薦
- 分析遊戲習慣和偏好
🎥 YouTube集成
- 搜索YouTube視頻並獲取詳細的視頻信息
- 獲取頻道信息和熱門視頻
- 通過OAuth2訪問個人數據(訂閱、播放列表、喜歡的視頻)
- 根據你的觀看歷史獲取個性化推薦
- 🔄 智能令牌管理 - 自動檢測並刷新過期的OAuth2令牌
- 🛡️ 免維護配置 - 優先使用令牌文件,無需手動更新MCP配置
📺 Bilibili集成
- 獲取用戶個人資料信息和統計數據
- 搜索視頻並獲取詳細的視頻信息
- 訪問個人數據(觀看歷史、收藏、喜歡的視頻、投幣歷史)
- 獲取關注列表和用戶上傳的視頻
- 瀏覽“稍後觀看”列表和個人收藏
🎵 Spotify集成
- 通過自動令牌管理完成OAuth2認證
- 獲取用戶個人資料和音樂庫數據
- 訪問熱門藝術家、曲目和最近播放的音樂
- 社交功能:關注/取消關注藝術家和播放列表
- 庫管理:保存的曲目、專輯、節目、劇集、有聲讀物
- 播放列表操作:查看和管理個人播放列表
💬 Reddit集成
- 通過自動令牌管理完成OAuth2認證
- 訪問用戶賬戶信息、 Karma 細分和偏好設置
- 獲取提交的帖子、評論和用戶活動概述
- 查看保存的內容、隱藏的帖子和投票歷史
- 探索訂閱的社區和版主權限
- 訪問消息系統(收件箱、未讀消息、已發送消息)
📦 安裝指南
1. 安裝依賴
由於bilibili-api依賴項的複雜性(特別是lxml編譯問題),安裝需要特定的步驟。請選擇以下方法之一:
選項A:使用conda(推薦)
conda create -n personalhub python=3.12
conda activate personalhub
conda install lxml
pip install bilibili-api --no-deps
pip install -r requirements.txt
選項B:使用uv
uv venv
uv sync
source .venv/bin/activate
uv pip install lxml
uv pip install bilibili-api --no-deps
uv pip install aiohttp beautifulsoup4 colorama PyYAML brotli urllib3
選項C:使用pip(手動多步驟安裝)
python -m venv venv
source venv/bin/activate
pip install lxml
pip install bilibili-api --no-deps
pip install -r requirements.txt
⚠️ 重要提示:bilibili-api包具有複雜的依賴要求,可能會在某些系統上導致編譯失敗。多步驟安裝方法通過先安裝lxml,然後不安裝衝突依賴項的情況下安裝bilibili-api,最後安裝所有其他所需包,確保了兼容性。
2. 配置設置
複製示例配置文件並填寫你的憑證:
cp config.example config
然後使用實際的API密鑰和令牌編輯config文件。
🔧 平臺配置
🎮 Steam API設置
📖 詳細設置指南:platforms/steam/README.md | 中文指南
快速總結:獲取Steam API密鑰和用戶ID,然後進行配置:
STEAM_API_KEY=your_steam_api_key_here
STEAM_USER_ID=your_steam_user_id_here
🎥 YouTube API設置
📖 詳細設置指南:platforms/youtube/README.md | 中文指南
快速總結:
- 從Google Cloud Console獲取YouTube API密鑰
- 要訪問個人數據,請使用“電視和有限輸入設備”類型設置OAuth2
- 使用MCP工具進行輕鬆認證
配置:
YOUTUBE_API_KEY=your_youtube_api_key_here
📺 Bilibili設置
📖 詳細設置指南:platforms/bilibili/README.md | 中文指南
快速總結:登錄Bilibili後從瀏覽器中提取Cookie
配置:
BILIBILI_SESSDATA=your_bilibili_sessdata_cookie
BILIBILI_BILI_JCT=your_bilibili_bili_jct_cookie
BILIBILI_BUVID3=your_bilibili_buvid3_cookie
🎵 Spotify API設置
📖 詳細設置指南:platforms/spotify/README.md | 中文指南
快速總結:
- 在Spotify開發者控制檯中創建一個Spotify應用
- 在應用設置中配置重定向URI
- 使用MCP工具進行OAuth2認證,並實現自動令牌管理
配置:
SPOTIFY_CLIENT_ID=your_spotify_client_id_here
SPOTIFY_CLIENT_SECRET=your_spotify_client_secret_here
SPOTIFY_REDIRECT_URI=https://example.com/callback
💬 Reddit API設置
📖 詳細設置指南:platforms/reddit/README.md | 中文指南
快速總結:
- 在Reddit應用中創建一個Reddit應用
- 將其配置為“網頁應用”並設置重定向URI
- 使用MCP工具進行OAuth2認證,並實現自動令牌管理
配置:
REDDIT_CLIENT_ID=your_reddit_client_id_here
REDDIT_CLIENT_SECRET=your_reddit_client_secret_here
REDDIT_REDIRECT_URI=http://localhost:8888/callback
🖥️ Cursor配置
將MCP服務器添加到你的Cursor設置中:
如果使用conda:
{
"mcpServers": {
"personalhub": {
"command": "/path/to/your/conda/envs/personalhub/bin/python",
"args": ["/absolute/path/to/your/project/server.py"],
"env": {
"STEAM_API_KEY": "your_steam_api_key",
"STEAM_USER_ID": "your_steam_user_id",
"YOUTUBE_API_KEY": "your_youtube_api_key",
"BILIBILI_SESSDATA": "your_bilibili_sessdata",
"BILIBILI_BILI_JCT": "your_bilibili_bili_jct",
"BILIBILI_BUVID3": "your_bilibili_buvid3",
"REDDIT_CLIENT_ID": "your_reddit_client_id",
"REDDIT_CLIENT_SECRET": "your_reddit_client_secret"
}
}
}
}
如果使用uv:
{
"mcpServers": {
"personalhub": {
"command": "uv",
"args": ["run", "python", "/absolute/path/to/your/project/server.py"],
"env": {
"STEAM_API_KEY": "your_steam_api_key",
"STEAM_USER_ID": "your_steam_user_id",
"YOUTUBE_API_KEY": "your_youtube_api_key",
"BILIBILI_SESSDATA": "your_bilibili_sessdata",
"BILIBILI_BILI_JCT": "your_bilibili_bili_jct",
"BILIBILI_BUVID3": "your_bilibili_buvid3",
"REDDIT_CLIENT_ID": "your_reddit_client_id",
"REDDIT_CLIENT_SECRET": "your_reddit_client_secret"
}
}
}
}
如果使用帶有虛擬環境的pip:
{
"mcpServers": {
"personalhub": {
"command": "/absolute/path/to/your/project/venv/bin/python",
"args": ["/absolute/path/to/your/project/server.py"],
"env": {
"STEAM_API_KEY": "your_steam_api_key",
"STEAM_USER_ID": "your_steam_user_id",
"YOUTUBE_API_KEY": "your_youtube_api_key",
"BILIBILI_SESSDATA": "your_bilibili_sessdata",
"BILIBILI_BILI_JCT": "your_bilibili_bili_jct",
"BILIBILI_BUVID3": "your_bilibili_buvid3",
"REDDIT_CLIENT_ID": "your_reddit_client_id",
"REDDIT_CLIENT_SECRET": "your_reddit_client_secret"
}
}
}
}
注意:對於YouTube OAuth2令牌,建議使用自動令牌管理。無需在上述配置中添加YOUTUBE_ACCESS_TOKEN。系統將自動從youtube_tokens.json文件中讀取和刷新令牌。
🔄 YouTube智能令牌管理
該系統實現了智能的YouTube OAuth2令牌管理,具有以下特點:
✨ 核心特性
- 自動過期檢測:系統自動檢測5分鐘內過期的令牌
- 自動刷新:無需手動干預,系統自動刷新過期的令牌
- 智能優先級:優先使用令牌文件,環境變量作為備份
- 免維護配置:無需手動更新MCP配置文件中的令牌
🔧 令牌優先級
- 顯式傳遞的access_token參數(最高優先級)
- 從令牌文件自動刷新的令牌(推薦方法)
- 環境變量中的令牌(備份方法)
系統自動處理所有令牌管理 - 無需手動維護!
🛠️ 可用工具
🎮 Steam工具
get_steam_library() - 獲取你的遊戲庫及統計信息
get_steam_recent_activity() - 獲取近期遊戲活動
get_steam_friends() - 獲取你的Steam好友列表
get_steam_profile() - 獲取Steam個人資料信息
get_player_achievements(app_id) - 獲取特定遊戲的成就
get_user_game_stats(app_id) - 獲取詳細的遊戲統計數據
get_friends_current_games() - 查看你的朋友正在玩的遊戲
compare_games_with_friend(friend_steamid) - 比較遊戲庫
get_friend_game_recommendations(friend_steamid) - 獲取遊戲推薦
🎥 YouTube工具
search_youtube_videos(query) - 搜索視頻
get_video_details(video_id) - 獲取詳細的視頻信息
get_channel_info(channel_id) - 獲取頻道信息
get_trending_videos() - 獲取熱門視頻
get_youtube_subscriptions() - 獲取你的訂閱(需要OAuth2)
get_youtube_playlists() - 獲取你的播放列表(需要OAuth2)
get_youtube_liked_videos() - 獲取你喜歡的視頻(需要OAuth2)
refresh_youtube_token() - 手動刷新OAuth2令牌
get_youtube_token_status() - 檢查OAuth2令牌狀態
📺 Bilibili工具
get_bilibili_user_info(uid) - 獲取用戶個人資料信息
get_my_bilibili_profile() - 獲取你自己的個人資料
search_bilibili_videos(keyword) - 搜索視頻
get_bilibili_video_info(bvid) - 獲取詳細的視頻信息
get_bilibili_user_videos(uid) - 獲取用戶上傳的視頻
get_bilibili_following_list() - 獲取你的關注列表
get_bilibili_watch_history() - 獲取你的觀看歷史
get_bilibili_favorites() - 獲取你的收藏視頻
get_bilibili_liked_videos() - 獲取你喜歡的視頻
get_bilibili_coin_videos() - 獲取你投幣的視頻
get_bilibili_toview_list() - 獲取你的“稍後觀看”列表
🎵 Spotify工具(共17個)
認證與配置(7個工具):
test_spotify_credentials() - 測試API憑證
setup_spotify_oauth() - 初始化OAuth流程
complete_spotify_oauth() - 完成OAuth認證
get_spotify_token_status() - 獲取令牌狀態
refresh_spotify_token() - 手動刷新令牌
音樂發現與社交(9個工具):
get_current_user_profile() - 獲取你的Spotify個人資料
get_user_top_items() - 獲取熱門藝術家/曲目
get_user_recently_played() - 獲取最近播放的音樂
get_followed_artists() - 獲取關注的藝術家
follow_artists_or_users() / unfollow_artists_or_users() - 社交功能
庫與播放列表(6個工具):
get_user_saved_tracks() / get_user_saved_albums() - 庫管理
get_user_saved_shows() / get_user_saved_episodes() - 播客內容
get_current_user_playlists() / get_playlist_items() - 播放列表操作
💬 Reddit工具(共25個)
認證與配置(6個工具):
test_reddit_credentials() - 測試API憑證
setup_reddit_oauth() - 初始化OAuth流程
complete_reddit_oauth() - 完成OAuth認證
get_reddit_token_status() - 獲取令牌狀態
refresh_reddit_token() - 手動刷新令牌
auto_refresh_reddit_token_if_needed() - 自動令牌管理
賬戶信息(6個工具):
get_user_subreddits() - 獲取訂閱的社區
get_user_trophies() - 獲取Reddit獎盃和成就
get_user_preferences() - 獲取賬戶設置
get_user_karma_breakdown() - 獲取Karma分佈
get_moderated_subreddits() - 獲取管理的社區
get_contributor_subreddits() - 獲取貢獻者權限
內容與活動(10個工具):
get_user_submitted_posts() - 獲取提交的帖子
get_user_comments() - 獲取評論歷史
get_user_overview() - 獲取綜合活動時間線
get_saved_content() - 獲取保存的帖子/評論
get_hidden_posts() - 獲取隱藏的內容
get_upvoted_content() - 獲取點讚的內容
get_downvoted_content() - 獲取點踩的內容
消息傳遞(3個工具):
get_inbox_messages() - 獲取收件箱消息
get_unread_messages() - 獲取未讀消息
get_sent_messages() - 獲取已發送消息
🔧 系統工具
test_connection() - 測試MCP服務器是否正常工作
get_personalization_status() - 獲取整體平臺狀態
test_steam_credentials() - 測試Steam API配置
test_youtube_credentials() - 測試YouTube API配置
test_bilibili_credentials() - 測試Bilibili配置
test_spotify_credentials() - 測試Spotify API配置
test_reddit_credentials() - 測試Reddit API配置
💻 使用示例
遊戲分析
- "我最近在玩哪些遊戲?"
- "給我展示我玩得最多的Steam遊戲"
- "我的朋友推薦哪些遊戲?"
- "將我的遊戲庫與朋友的進行比較"
視頻內容發現
- "查找關於機器學習的YouTube視頻"
- "今天YouTube上的熱門視頻有哪些?"
- "給我展示我喜歡的YouTube視頻"
- "查找關於編程的熱門Bilibili視頻"
個人數據分析
- "分析我的遊戲習慣和偏好"
- "我最常觀看哪種類型的YouTube內容?"
- "給我展示我的Bilibili收藏和喜歡的視頻"
音樂與音頻分析
- "我最近在Spotify上最常聽哪些藝術家的音樂?"
- "給我展示我最近播放的音樂並找出規律"
- "我過去一個月的熱門曲目有哪些?"
- "根據我的Spotify數據查找新的音樂推薦"
Reddit活動分析
- "我在Reddit上最活躍的社區有哪些?"
- "給我展示我最近的Reddit帖子和評論"
- "我在不同子版塊的Karma分佈情況如何?"
- "查找我保存的Reddit內容並分析我的興趣"
🚀 開發
運行服務器
如果使用conda:
conda activate personalhub
python server.py
如果使用uv:
uv run python server.py
如果使用帶有虛擬環境的pip:
source venv/bin/activate
python server.py
測試配置
使用以下工具測試你的設置:
test_steam_credentials()
test_youtube_credentials()
test_bilibili_credentials()
test_reddit_credentials()
get_personalization_status()
添加新平臺
- 創建一個新的
platform_mcp.py文件
- 使用
@mcp.tool()裝飾器實現特定平臺的工具
- 在
server.py中添加設置函數
- 更新配置文件和文檔
🔒 隱私與安全
- 本地存儲:所有API密鑰和令牌都存儲在你的本地機器上
- 無數據傳輸:你的個人數據永遠不會傳輸給第三方
- 直接API調用:所有API調用都直接從你的機器發送到相應的平臺
- 安全配置:使用環境變量或本地配置文件
- 定期更新:定期輪換API密鑰和令牌以確保安全
安全最佳實踐
- 不要提交敏感文件:確保
config、.env、myinfo.json和youtube_tokens.json在.gitignore中
- 定期更新Cookie:Bilibili的Cookie會過期,需要定期更新
- 使用環境變量:在生產環境中,使用系統環境變量
- 文件權限:確保配置文件只能由你讀取
- YouTube令牌安全:系統自動在本地文件中安全管理OAuth2令牌
- 逐步配置:可以逐步配置平臺 - 缺少憑證不會導致錯誤
🆘 故障排除
常見問題
問:Bilibili的Cookie不起作用怎麼辦?
答:Cookie會定期過期。從瀏覽器中重新提取它們並更新你的配置。
問:Steam API達到速率限制怎麼辦?
答:Steam API有速率限制。避免頻繁調用並實現合理的延遲。
問:YouTube API配額超出怎麼辦?
答:YouTube API有每日配額。你可以申請增加配額或優化使用方式。
問:YouTube OAuth2令牌過期怎麼辦?
答:系統會自動刷新過期的令牌。如果需要手動刷新,請使用refresh_youtube_token()。
問:我可以只使用部分平臺嗎?
答:可以!你可以只配置你想使用的平臺。缺少憑證不會導致錯誤。
問:如何驗證我的配置?
答:使用測試工具或調用get_personalization_status()檢查所有平臺。
獲取幫助
- 檢查配置文件格式
- 驗證API密鑰和Cookie是否有效
- 查看MCP服務器日誌
- 使用測試工具驗證每個平臺的配置
🤝 貢獻
歡迎貢獻代碼!你可以通過以下方式提供幫助:
- 分叉倉庫
- 創建功能分支:
git checkout -b feature/amazing-feature
- 進行更改,並在適用的情況下添加測試
- 提交更改:
git commit -m 'Add amazing feature'
- 推送到分支:
git push origin feature/amazing-feature
- 打開拉取請求
添加新平臺
想為新平臺添加支持?請遵循以下步驟:
- 創建一個新的
platform_mcp.py文件(例如,spotify_mcp.py)
- 使用
@mcp.tool()裝飾器實現特定平臺的工具
- 添加設置函數並將其集成到
server.py中
- 更新配置文件和文檔
- 添加測試和示例
📄 許可證
本項目採用MIT許可證 - 詳情請參閱LICENSE文件。
🙏 致謝
⭐ 星標歷史
如果你覺得這個項目有用,請在GitHub上給它加個星!
用心打造,讓你的數字生活與AI緊密相連