一个基于 MCP(模型上下文协议)构建的统一个人数据中心,让 AI 助手能够访问你在多个平台的数字生活,提供真正个性化和有上下文的交互体验。
-
克隆并安装
git clone https://github.com/YangLiangwei/PersonalizationMCP.git cd PersonalizationMCP # 二选一 uv venv && uv sync # 或 python3 -m venv venv && source venv/bin/activate && pip install -r requirements.txt
-
运行引导配置(交互式)
personalhub onboarding --all
-
或使用脚本化配置(非交互)
personalhub onboarding --platform steam --set STEAM_API_KEY=xxx --set STEAM_USER_ID=7656119xxx personalhub onboarding --platform youtube --set YOUTUBE_API_KEY=xxx
-
验证并启动
personalhub status personalhub serve --profile safe
- 统一配置入口:
personalhub onboarding - 统一运维入口:
personalhub-managerskill - 平台独立流程:Steam / YouTube / Bilibili / Spotify / Reddit 各自独立 skill
- 不做嵌套执行:单次任务由一个 skill 主导
- 获取你的游戏库和详细统计信息及游戏时长
- 查看最近的游戏活动和当前正在玩的游戏
- 获取详细的游戏信息和成就
- 与朋友比较游戏库并获得推荐
- 分析游戏习惯和偏好
- 搜索 YouTube 视频并获取详细视频信息
- 获取频道信息和热门视频
- 通过 OAuth2 访问个人数据(订阅、观看历史、播放列表、喜欢的视频)
- 基于你的观看历史获得个性化推荐
- 🔄 智能令牌管理 - 自动检测并刷新过期的 OAuth2 令牌
- 🛡️ 免维护配置 - 优先使用令牌文件,无需手动更新 MCP 配置
- 获取用户资料信息和统计数据
- 搜索视频并获取详细视频信息
- 访问个人数据(观看历史、收藏、点赞视频、投币历史)
- 获取关注列表和用户上传的视频
- 浏览"稍后再看"列表和个人收藏
- 完整的 OAuth2 认证和自动令牌管理
- 获取用户档案和音乐库数据
- 访问热门艺术家、曲目和最近播放的音乐
- 社交功能:关注/取消关注艺术家和播放列表
- 音乐库管理:保存的曲目、专辑、节目、单集、有声读物
- 播放列表操作:查看和管理个人播放列表
- 完整的 OAuth2 认证和自动令牌管理
- 访问用户账户信息、karma分解和偏好设置
- 获取发布的帖子、评论和用户活动概览
- 查看保存的内容、隐藏的帖子和投票历史
- 探索订阅的社区和版主权限
- 消息系统访问(收件箱、未读、已发送消息)
方式 A:使用 conda(推荐)
conda create -n personalhub python=3.12
conda activate personalhub
pip install "mcp[cli]" httpx python-dotenv方式 B:使用 uv
uv venv
uv add "mcp[cli]" httpx python-dotenv方式 C:使用 pip 和虚拟环境
python -m venv venv
source venv/bin/activate # Windows 系统:venv\Scripts\activate
pip install "mcp[cli]" httpx python-dotenv复制示例配置文件并填入你的凭据:
cp config.example config然后编辑 config 文件,填入你的实际 API 密钥和令牌。
- 访问 Steam Web API Key 页面
- 登录你的 Steam 账户
- 输入域名(开发时可以使用
localhost) - 复制生成的 API 密钥
- 前往你的 Steam 个人资料页面
- 查看 URL,例如:
https://steamcommunity.com/profiles/76561198123456789/ - 数字
76561198123456789就是你的 Steam ID
STEAM_API_KEY=your_steam_api_key_here
STEAM_USER_ID=your_steam_user_id_here- 访问 Google Cloud Console
- 创建新项目或选择现有项目
- 启用 YouTube Data API v3:
- 前往"API 和服务" > "库"
- 搜索"YouTube Data API v3"
- 点击"启用"
- 创建凭据:
- 前往"API 和服务" > "凭据"
- 点击"创建凭据" > "API 密钥"
- 复制生成的 API 密钥
YOUTUBE_API_KEY=your_youtube_api_key_here要访问个人 YouTube 数据(订阅、观看历史等),你需要 OAuth2:
-
在 Google Cloud Console 中创建 OAuth2 凭据
-
下载客户端密钥文件
-
使用 OAuth2 流程获取访问令牌(参见
platforms/youtube/youtube_oauth_helper.py) -
推荐方式:使用自动令牌管理
- 令牌会自动保存到
youtube_tokens.json文件 - 系统会自动检测过期并刷新令牌
- 无需在 MCP 配置中设置
YOUTUBE_ACCESS_TOKEN
- 令牌会自动保存到
-
备用方式:手动设置环境变量
YOUTUBE_ACCESS_TOKEN=your_oauth2_access_token # 可选,作为备用要访问 Bilibili 数据,你需要从浏览器中提取 cookies:
- 登录 Bilibili:访问 bilibili.com 并登录
- 打开开发者工具:按
F12或右键选择"检查" - 查找 Cookies:
- 点击
Application标签(Chrome)或Storage标签(Firefox) - 导航到
Cookies>https://www.bilibili.com - 找到这三个 cookie 值:
- 点击
| Cookie 名称 | 描述 | 是否必需 |
|---|---|---|
SESSDATA |
会话数据,最重要的认证信息 | ✅ 必需 |
bili_jct |
CSRF 令牌用于保护 | ✅ 必需 |
buvid3 |
浏览器唯一标识符 | 🔶 推荐 |
BILIBILI_SESSDATA=your_bilibili_sessdata_cookie
BILIBILI_BILI_JCT=your_bilibili_bili_jct_cookie
BILIBILI_BUVID3=your_bilibili_buvid3_cookie- Bilibili cookies 会定期过期,需要更新
- 请保护好这些 cookies,因为它们提供对你个人 Bilibili 数据的访问权限
- 不要公开分享这些 cookies
📖 详细设置指南: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
# OAuth2 令牌在认证后自动管理📖 详细设置指南:platforms/reddit/README.md | 中文指南
快速总结:
- 在 Reddit Apps 创建 Reddit 应用
- 配置为"web app"并设置重定向 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
# OAuth2 令牌在认证后自动管理将 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 OAuth2 令牌管理,具有以下特性:
- 自动过期检测:系统会自动检测在 5 分钟内过期的令牌
- 自动刷新:无需手动干预,系统自动刷新过期令牌
- 智能优先级:优先使用令牌文件,环境变量作为备用
- 免维护配置:无需手动更新 MCP 配置文件中的令牌
- 显式传入的 access_token 参数(最高优先级)
- 令牌文件中的自动刷新令牌(推荐方式)
- 环境变量中的令牌(备用方式)
youtube_tokens.json- 自动生成和维护的令牌文件youtube_oauth_helper.py- OAuth2 认证助手脚本auto_refresh_youtube_token.py- 手动令牌刷新工具
# 初次 OAuth2 令牌设置
cd platforms/youtube
python3 youtube_oauth_helper.py
# 手动令牌刷新(可选)
python3 auto_refresh_youtube_token.py系统会自动处理所有令牌管理 - 无需手动维护!
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)- 获取游戏推荐
search_youtube_videos(query)- 搜索视频get_video_details(video_id)- 获取详细视频信息get_channel_info(channel_id)- 获取频道信息get_trending_videos()- 获取热门视频get_youtube_subscriptions()- 获取你的订阅(需要 OAuth2)get_youtube_watch_history()- 获取你的观看历史(需要 OAuth2)get_youtube_playlists()- 获取你的播放列表(需要 OAuth2)get_youtube_liked_videos()- 获取你喜欢的视频(需要 OAuth2)refresh_youtube_token()- 手动刷新 OAuth2 令牌get_youtube_token_status()- 检查 OAuth2 令牌状态
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()- 获取你的"稍后再看"列表
认证和配置工具(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()- 播放列表操作
认证和配置工具(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 帖子和评论"
- "我在不同 subreddit 的 karma 分布是怎样的?"
- "找到我保存的 Reddit 内容并分析我的兴趣"
仓库已新增 skills/ 目录,将 personalhub CLI 能力拆分为独立 skills:
personalhub-onboarding(统一凭据引导入口)personalhub-manager(聚合管理 skill)personalhub-statuspersonalhub-steampersonalhub-youtubepersonalhub-bilibilipersonalhub-spotifypersonalhub-reddit
模式:统一入口 + 平台独立 skill。每个 skill 独立触发,不做嵌套执行。
如果使用 conda:
conda activate personalhub
python server.py如果使用 uv:
uv run python server.py如果使用 pip 和虚拟环境:
source venv/bin/activate # Windows 系统:venv\Scripts\activate
python server.py使用这些工具来测试你的设置:
# 测试各个平台
test_steam_credentials()
test_youtube_credentials()
test_bilibili_credentials()
test_reddit_credentials()
# 检查整体状态
get_personalization_status()CLI 引导配置示例:
personalhub onboarding --platform steam,youtube
personalhub onboarding --all
personalhub onboarding --platform steam --set STEAM_API_KEY=xxx --set STEAM_USER_ID=7656119xxx- 创建新的
platform_mcp.py文件 - 使用
@mcp.tool()装饰器实现平台特定的工具 - 在
server.py中添加设置函数 - 更新配置文件和文档
- 本地存储:所有 API 密钥和令牌都存储在你的本地机器上
- 无数据传输:你的个人数据永远不会传输给第三方
- 直接 API 调用:所有 API 调用都是从你的机器直接发送到相应平台
- 安全配置:使用环境变量或本地配置文件
- 定期更新:定期轮换 API 密钥和令牌以确保安全
- 不要提交敏感文件:确保
config、.env、myinfo.json和youtube_tokens.json在.gitignore中 - 定期更新 cookies:Bilibili cookies 会过期,需要定期更新
- 使用环境变量:在生产环境中使用系统环境变量
- 文件权限:确保配置文件只有你可以读取
- YouTube 令牌安全:系统会在本地文件中安全地自动管理 OAuth2 令牌
- 渐进式配置:你可以逐步配置平台 - 缺少凭据不会导致错误
问:Bilibili cookies 不工作? 答:Cookies 会定期过期。请从浏览器重新提取并更新你的配置。
问:Steam API 速率限制? 答:Steam API 有速率限制。避免频繁调用并实施合理的延迟。
问:YouTube API 配额超出? 答:YouTube API 有每日配额。你可以请求增加配额或优化使用。
问:YouTube OAuth2 令牌过期?
答:系统会自动刷新过期令牌。如果需要手动刷新,请使用 refresh_youtube_token()。
问:我可以只使用某些平台吗? 答:可以!你可以只配置你想使用的平台。缺少凭据不会导致错误。
问:如何验证我的配置?
答:使用测试工具或调用 get_personalization_status() 来检查所有平台。
- 检查配置文件格式
- 验证 API 密钥和 cookies 是否有效
- 查看 MCP 服务器日志
- 使用测试工具验证每个平台配置
欢迎贡献!以下是你可以帮助的方式:
- Fork 仓库
- 创建功能分支:
git checkout -b feature/amazing-feature - 进行更改并在适用时添加测试
- 提交更改:
git commit -m 'Add amazing feature' - 推送到分支:
git push origin feature/amazing-feature - 打开 Pull Request
想要添加对新平台的支持?请按照以下步骤:
- 创建新的
platform_mcp.py文件(例如spotify_mcp.py) - 使用
@mcp.tool()装饰器实现平台特定的工具 - 添加设置函数并在
server.py中集成 - 更新配置文件和文档
- 添加测试和示例
本项目采用 MIT 许可证 - 详见 LICENSE 文件。
- 模型上下文协议 (MCP) 提供了出色的协议
- Anthropic 开发了 Claude 和 MCP
- 所有使这种集成成为可能的平台 API
如果你觉得这个项目有用,请考虑在 GitHub 上给它一个 star!
用 ❤️ 为连接你的数字生活与 AI 而制作