Back to MCP directory
publicPublicdnsLocal runtime

personalizationmcp

一个基于MCP协议的个人数据聚合中心,允许AI助手访问多个平台的个人数据,提供个性化的交互体验。

article

README

🚀 个性化MCP(PersonalizationMCP)

这是一个基于MCP(模型上下文协议)构建的统一个人数据中心。它使AI助手能够从多个平台访问你的数字生活,从而实现真正个性化且贴合情境的交互体验。

License: MIT Python 3.12+ MCP

📖 中文文档: README_zh.md

🚀 快速开始

  1. 克隆仓库

    git clone https://github.com/YangLiangwei/PersonalizationMCP.git
    cd PersonalizationMCP
    
  2. 安装依赖

    📖 查看详细安装说明:安装与设置

  3. 配置API密钥

    cp config.example config
    # 使用实际的API密钥编辑配置文件
    
  4. 添加到Cursor设置

    📖 查看详细的MCP配置:Cursor配置

✨ 主要特性

🎮 Steam集成

  • 获取你的游戏库,包含详细统计信息和游戏时长
  • 查看近期游戏活动和正在玩的游戏
  • 获取详细的游戏信息和成就
  • 与朋友比较游戏并获取推荐
  • 分析游戏习惯和偏好

🎥 YouTube集成

  • 搜索YouTube视频并获取详细的视频信息
  • 获取频道信息和热门视频
  • 通过OAuth2访问个人数据(订阅、播放列表、喜欢的视频)
  • 根据你的观看历史获取个性化推荐
  • 🔄 智能令牌管理 - 自动检测并刷新过期的OAuth2令牌
  • 🛡️ 免维护配置 - 优先使用令牌文件,无需手动更新MCP配置

📺 Bilibili集成

  • 获取用户个人资料信息和统计数据
  • 搜索视频并获取详细的视频信息
  • 访问个人数据(观看历史、收藏、喜欢的视频、投币历史)
  • 获取关注列表和用户上传的视频
  • 浏览“稍后观看”列表和个人收藏

🎵 Spotify集成

  • 通过自动令牌管理完成OAuth2认证
  • 获取用户个人资料和音乐库数据
  • 访问热门艺术家、曲目和最近播放的音乐
  • 社交功能:关注/取消关注艺术家和播放列表
  • 库管理:保存的曲目、专辑、节目、剧集、有声读物
  • 播放列表操作:查看和管理个人播放列表

💬 Reddit集成

  • 通过自动令牌管理完成OAuth2认证
  • 访问用户账户信息、 Karma 细分和偏好设置
  • 获取提交的帖子、评论和用户活动概述
  • 查看保存的内容、隐藏的帖子和投票历史
  • 探索订阅的社区和版主权限
  • 访问消息系统(收件箱、未读消息、已发送消息)

📦 安装指南

1. 安装依赖

由于bilibili-api依赖项的复杂性(特别是lxml编译问题),安装需要特定的步骤。请选择以下方法之一:

选项A:使用conda(推荐)

# 1. 创建conda环境
conda create -n personalhub python=3.12
conda activate personalhub

# 2. 通过conda安装lxml(避免编译问题)
conda install lxml

# 3. 安装其余包
pip install bilibili-api --no-deps
pip install -r requirements.txt

选项B:使用uv

# 1. 如果尚未安装uv,请进行安装
# 访问:https://docs.astral.sh/uv/getting-started/installation/

# 2. 创建环境并安装核心依赖项
uv venv
uv sync
source .venv/bin/activate  # 在Windows上:.venv\Scripts\activate

# 3. 分别安装bilibili-api及其依赖项(由于版本冲突)
uv pip install lxml  # 首先安装lxml(使用预编译的wheel)
uv pip install bilibili-api --no-deps  # 不安装依赖项的情况下安装bilibili-api
uv pip install aiohttp beautifulsoup4 colorama PyYAML brotli urllib3  # 安装所需的依赖项

选项C:使用pip(手动多步骤安装)

# 1. 创建虚拟环境
python -m venv venv
source venv/bin/activate  # 在Windows上:venv\Scripts\activate

# 2. 按特定顺序安装包以避免编译问题
pip install lxml  # 首先安装lxml(使用预编译的wheel)
pip install bilibili-api --no-deps  # 不安装依赖项的情况下安装bilibili-api
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 | 中文指南

快速总结

  1. 从Google Cloud Console获取YouTube API密钥
  2. 要访问个人数据,请使用“电视和有限输入设备”类型设置OAuth2
  3. 使用MCP工具进行轻松认证

配置

YOUTUBE_API_KEY=your_youtube_api_key_here
# 设置完成后,OAuth2令牌将自动管理

📺 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 | 中文指南

快速总结

  1. Spotify开发者控制台中创建一个Spotify应用
  2. 在应用设置中配置重定向URI
  3. 使用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令牌将自动管理

💬 Reddit API设置

📖 详细设置指南platforms/reddit/README.md | 中文指南

快速总结

  1. Reddit应用中创建一个Reddit应用
  2. 将其配置为“网页应用”并设置重定向URI
  3. 使用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令牌将自动管理

🖥️ 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配置文件中的令牌

🔧 令牌优先级

  1. 显式传递的access_token参数(最高优先级)
  2. 从令牌文件自动刷新的令牌(推荐方法)
  3. 环境变量中的令牌(备份方法)

系统自动处理所有令牌管理 - 无需手动维护!

🛠️ 可用工具

🎮 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  # 在Windows上:venv\Scripts\activate
python server.py

测试配置

使用以下工具测试你的设置:

# 测试单个平台
test_steam_credentials()
test_youtube_credentials()
test_bilibili_credentials()
test_reddit_credentials()

# 检查整体状态
get_personalization_status()

添加新平台

  1. 创建一个新的platform_mcp.py文件
  2. 使用@mcp.tool()装饰器实现特定平台的工具
  3. server.py中添加设置函数
  4. 更新配置文件和文档

🔒 隐私与安全

  • 本地存储:所有API密钥和令牌都存储在你的本地机器上
  • 无数据传输:你的个人数据永远不会传输给第三方
  • 直接API调用:所有API调用都直接从你的机器发送到相应的平台
  • 安全配置:使用环境变量或本地配置文件
  • 定期更新:定期轮换API密钥和令牌以确保安全

安全最佳实践

  1. 不要提交敏感文件:确保config.envmyinfo.jsonyoutube_tokens.json.gitignore
  2. 定期更新Cookie:Bilibili的Cookie会过期,需要定期更新
  3. 使用环境变量:在生产环境中,使用系统环境变量
  4. 文件权限:确保配置文件只能由你读取
  5. YouTube令牌安全:系统自动在本地文件中安全管理OAuth2令牌
  6. 逐步配置:可以逐步配置平台 - 缺少凭证不会导致错误

🆘 故障排除

常见问题

问:Bilibili的Cookie不起作用怎么办? 答:Cookie会定期过期。从浏览器中重新提取它们并更新你的配置。

问:Steam API达到速率限制怎么办? 答:Steam API有速率限制。避免频繁调用并实现合理的延迟。

问:YouTube API配额超出怎么办? 答:YouTube API有每日配额。你可以申请增加配额或优化使用方式。

问:YouTube OAuth2令牌过期怎么办? 答:系统会自动刷新过期的令牌。如果需要手动刷新,请使用refresh_youtube_token()

问:我可以只使用部分平台吗? 答:可以!你可以只配置你想使用的平台。缺少凭证不会导致错误。

问:如何验证我的配置? 答:使用测试工具或调用get_personalization_status()检查所有平台。

获取帮助

  1. 检查配置文件格式
  2. 验证API密钥和Cookie是否有效
  3. 查看MCP服务器日志
  4. 使用测试工具验证每个平台的配置

🤝 贡献

欢迎贡献代码!你可以通过以下方式提供帮助:

  1. 分叉仓库
  2. 创建功能分支git checkout -b feature/amazing-feature
  3. 进行更改,并在适用的情况下添加测试
  4. 提交更改git commit -m 'Add amazing feature'
  5. 推送到分支git push origin feature/amazing-feature
  6. 打开拉取请求

添加新平台

想为新平台添加支持?请遵循以下步骤:

  1. 创建一个新的platform_mcp.py文件(例如,spotify_mcp.py
  2. 使用@mcp.tool()装饰器实现特定平台的工具
  3. 添加设置函数并将其集成到server.py
  4. 更新配置文件和文档
  5. 添加测试和示例

📄 许可证

本项目采用MIT许可证 - 详情请参阅LICENSE文件。

🙏 致谢

⭐ 星标历史

如果你觉得这个项目有用,请在GitHub上给它加个星!


用心打造,让你的数字生活与AI紧密相连

help

Runtime guide

cloud

Hosted runtime

Hosted servers run from a provider-managed environment. You usually connect the MCP client to the hosted endpoint or follow the provider's authorization flow, without keeping a local process alive

  1. Open provider connection page
  2. Authorize or copy endpoint
  3. Connect from your MCP client
terminal

Local runtime / other methods

Local servers run on your own machine or infrastructure. You normally copy the server_config into your MCP client, install the required package, and provide env variables from env_schema when needed

  1. Copy server_config
  2. Install required package
  3. Fill env variables and restart client