đŻ PersonalizationMCP
A unified personal data hub built on MCP (Model Context Protocol) that allows AI assistants to access your digital life from multiple platforms, providing truly personalized and contextual interactions.
đ ä¸ćć楣: README_zh.md
đ Quick Start (Current Recommended Flow)
-
Clone and install
git clone https://github.com/YangLiangwei/PersonalizationMCP.git cd PersonalizationMCP # choose one uv venv && uv sync # or python3 -m venv venv && source venv/bin/activate && pip install -r requirements.txt -
Run onboarding (interactive)
personalhub onboarding --all -
Or run onboarding (non-interactive / scriptable)
personalhub onboarding --platform steam --set STEAM_API_KEY=xxx --set STEAM_USER_ID=7656119xxx personalhub onboarding --platform youtube --set YOUTUBE_API_KEY=xxx -
Verify and run
personalhub status personalhub serve --profile safe
đ§ How the Project Works Now
- Unified entry for setup:
personalhub onboarding - Unified entry for operations:
personalhub-managerskill - Platform-specific flows: independent skills for Steam / YouTube / Bilibili / Spotify / Reddit
- No nested skill execution: one skill leads a task at a time
đ Features
đŽ Steam Integration
- Get your game library with detailed statistics and playtime
- View recent gaming activity and currently playing games
- Get detailed game information and achievements
- Compare games with friends and get recommendations
- Analyze gaming habits and preferences
đĽ YouTube Integration
- Search YouTube videos and get detailed video information
- Get channel information and trending videos
- Access personal data with OAuth2 (subscriptions, playlists, liked videos)
- Get personalized recommendations based on your viewing history
- đ Smart Token Management - Automatically detect and refresh expired OAuth2 tokens
- đĄď¸ Maintenance-Free Configuration - Prioritize token files, no need to manually update MCP configuration
đş Bilibili Integration
- Get user profile information and statistics
- Search videos and get detailed video information
- Access personal data (watch history, favorites, liked videos, coin history)
- Get following list and user-uploaded videos
- Browse "to view later" list and personal collections
đľ Spotify Integration
- Complete OAuth2 authentication with automatic token management
- Get user profile and music library data
- Access top artists, tracks, and recently played music
- Social features: follow/unfollow artists and playlists
- Library management: saved tracks, albums, shows, episodes, audiobooks
- Playlist operations: view and manage personal playlists
đŹ Reddit Integration
- Complete OAuth2 authentication with automatic token management
- Access user account information, karma breakdown, and preferences
- Get submitted posts, comments, and user activity overview
- View saved content, hidden posts, and voting history
- Explore subscribed communities and moderation permissions
- Message system access (inbox, unread, sent messages)
đŚ Installation and Setup
1. Install Dependencies
Due to the complexity of bilibili-api dependencies (especially lxml compilation issues), installation requires specific steps. Choose one of the methods below:
Option A: Using conda (Recommended)
# 1. Create conda environment
conda create -n personalhub python=3.12
conda activate personalhub
# 2. Install lxml via conda (avoids compilation issues)
conda install lxml
# 3. Install remaining packages
pip install bilibili-api --no-deps
pip install -r requirements.txtOption B: Using uv
# 1. Install uv if not already installed
# Visit: https://docs.astral.sh/uv/getting-started/installation/
# 2. Create environment and install core dependencies
uv venv
uv sync
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# 3. Install bilibili-api and its dependencies separately (due to version conflicts)
uv pip install lxml # Install lxml first (uses precompiled wheel)
uv pip install bilibili-api --no-deps # Install bilibili-api without dependencies
uv pip install aiohttp beautifulsoup4 colorama PyYAML brotli urllib3 # Install required dependenciesOption C: Using pip (Manual Multi-Step Installation)
# 1. Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# 2. Install packages in specific order to avoid compilation issues
pip install lxml # Install lxml first (uses precompiled wheel)
pip install bilibili-api --no-deps # Install bilibili-api without dependencies
pip install -r requirements.txt # Install all other dependenciesâ ď¸ Important: The bilibili-api package has complex dependency requirements that can cause compilation failures on some systems. The multi-step installation approach ensures compatibility by installing lxml first, then bilibili-api without its conflicting dependencies, and finally all other required packages.
2. Configuration Setup
Copy the example configuration file and fill in your credentials:
cp config.example configThen edit the config file with your actual API keys and tokens.
đ§ Platform Configuration
đŽ Steam API Setup
đ Detailed setup guide: platforms/steam/README.md | ä¸ććĺ
Quick summary: Get Steam API key and User ID, then configure:
STEAM_API_KEY=your_steam_api_key_here
STEAM_USER_ID=your_steam_user_id_heređĽ YouTube API Setup
đ Detailed setup guide: platforms/youtube/README.md | ä¸ććĺ
Quick summary:
- Get YouTube API key from Google Cloud Console
- For personal data access, set up OAuth2 with "TV and Limited Input device" type
- Use MCP tools for easy authentication
Configuration:
YOUTUBE_API_KEY=your_youtube_api_key_here
# OAuth2 tokens are managed automatically after setupđş Bilibili Setup
đ Detailed setup guide: platforms/bilibili/README.md | ä¸ććĺ
Quick summary: Extract cookies from your browser after logging into Bilibili
Configuration:
BILIBILI_SESSDATA=your_bilibili_sessdata_cookie
BILIBILI_BILI_JCT=your_bilibili_bili_jct_cookie
BILIBILI_BUVID3=your_bilibili_buvid3_cookieđľ Spotify API Setup
đ Detailed setup guide: platforms/spotify/README.md | ä¸ććĺ
Quick summary:
- Create a Spotify app in Spotify Developer Dashboard
- Configure redirect URIs in your app settings
- Use MCP tools for OAuth2 authentication with automatic token management
Configuration:
SPOTIFY_CLIENT_ID=your_spotify_client_id_here
SPOTIFY_CLIENT_SECRET=your_spotify_client_secret_here
SPOTIFY_REDIRECT_URI=https://example.com/callback
# OAuth2 tokens are managed automatically after authenticationđŹ Reddit API Setup
đ Detailed setup guide: platforms/reddit/README.md | ä¸ććĺ
Quick summary:
- Create a Reddit app in Reddit Apps
- Configure as "web app" with redirect URI
- Use MCP tools for OAuth2 authentication with automatic token management
Configuration:
REDDIT_CLIENT_ID=your_reddit_client_id_here
REDDIT_CLIENT_SECRET=your_reddit_client_secret_here
REDDIT_REDIRECT_URI=http://localhost:8888/callback
# OAuth2 tokens are managed automatically after authenticationđĽď¸ Cursor Configuration
Add the MCP server to your Cursor settings:
If using 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"
}
}
}
}If using 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"
}
}
}
}If using pip with virtual environment:
{
"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"
}
}
}
}Note: For YouTube OAuth2 tokens, we recommend using automatic token management. No need to add YOUTUBE_ACCESS_TOKEN in the above configuration. The system will automatically read and refresh tokens from the youtube_tokens.json file.
đ YouTube Smart Token Management
This system implements intelligent YouTube OAuth2 token management with the following features:
⨠Core Features
- Automatic Expiration Detection: System automatically detects tokens expiring within 5 minutes
- Auto-Refresh: No manual intervention needed, system automatically refreshes expired tokens
- Smart Priority: Prioritizes token files, with environment variables as backup
- Maintenance-Free Configuration: No need to manually update tokens in MCP configuration files
đ§ Token Priority
- Explicitly passed access_token parameter (Highest priority)
- Auto-refresh tokens from token file (Recommended method)
- Tokens from environment variables (Backup method)
The system automatically handles all token management - no manual maintenance required!
đ ď¸ Available Tools
đŽ Steam Tools
get_steam_library()- Get your game library with statisticsget_steam_recent_activity()- Get recent gaming activityget_steam_friends()- Get your Steam friends listget_steam_profile()- Get Steam profile informationget_player_achievements(app_id)- Get achievements for a specific gameget_user_game_stats(app_id)- Get detailed game statisticsget_friends_current_games()- See what games your friends are playingcompare_games_with_friend(friend_steamid)- Compare game librariesget_friend_game_recommendations(friend_steamid)- Get game recommendations
đĽ YouTube Tools
search_youtube_videos(query)- Search for videos- `get_video_details(video_
âŚ