๐ฏ 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
-
Clone the repository
git clone https://github.com/YangLiangwei/PersonalizationMCP.git cd PersonalizationMCP
-
Install dependencies
> ๐ See detailed installation instructions: Installation and Setup
-
Configure your API keys
cp config.example config # Edit config file with your actual API keys
-
Add to Cursor settings
> ๐ See detailed MCP configuration: Cursor Configuration
๐ 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.txt
Option 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 dependencies
Option 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 config
Then 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 videosget_video_details(video_id)
- Get detailed video informationget_channel_info(channel_id)
- Get channel informationget_trending_videos()
- Get trending videosget_youtube_subscriptions()
- Get your subscriptions (OAuth2 required)get_youtube_playlists()
- Get your playlists (OAuth2 required)get_youtube_liked_videos()
- Get your liked videos (OAuth2 required)refresh_youtube_token()
- Manually refresh OAuth2 tokenget_youtube_token_status()
- Check OAuth2 token status
๐บ Bilibili Tools
get_bilibili_user_info(uid)
- Get user profile informationget_my_bilibili_profile()
- Get your own profilesearch_bilibili_videos(keyword)
- Search for videosget_bilibili_video_info(bvid)
- Get detailed video informationget_bilibili_user_videos(uid)
- Get videos uploaded by a userget_bilibili_following_list()
- Get your following listget_bilibili_watch_history()
- Get your watch historyget_bilibili_favorites()
- Get your favorite videosget_bilibili_liked_videos()
- Get your liked videosget_bilibili_coin_videos()
- Get videos you've given coins toget_bilibili_toview_list()
- Get your "to view later" list
๐ต Spotify Tools (17 Total)
Authentication & Configuration (7 tools):
test_spotify_credentials()
- Test API credentialssetup_spotify_oauth()
- Initialize OAuth flowcomplete_spotify_oauth()
- Complete OAuth authenticationget_spotify_token_status()
- Get token statusrefresh_spotify_token()
- Manual token refresh
Music Discovery & Social (9 tools):
get_current_user_profile()
- Get your Spotify profileget_user_top_items()
- Get top artists/tracksget_user_recently_played()
- Get recently played musicget_followed_artists()
- Get followed artistsfollow_artists_or_users()
/unfollow_artists_or_users()
- Social features
Library & Playlists (6 tools):
get_user_saved_tracks()
/get_user_saved_albums()
- Library managementget_user_saved_shows()
/get_user_saved_episodes()
- Podcast contentget_current_user_playlists()
/get_playlist_items()
- Playlist operations
๐ฌ Reddit Tools (25 Total)
Authentication & Configuration (6 tools):
test_reddit_credentials()
- Test API credentialssetup_reddit_oauth()
- Initialize OAuth flowcomplete_reddit_oauth()
- Complete OAuth authenticationget_reddit_token_status()
- Get token statusrefresh_reddit_token()
- Manual token refreshauto_refresh_reddit_token_if_needed()
- Auto token management
Account Information (6 tools):
get_user_subreddits()
- Get subscribed communitiesget_user_trophies()
- Get Reddit trophies and achievementsget_user_preferences()
- Get account settingsget_user_karma_breakdown()
- Get karma distributionget_moderated_subreddits()
- Get moderated communitiesget_contributor_subreddits()
- Get contributor permissions
Content & Activity (10 tools):
get_user_submitted_posts()
- Get submitted postsget_user_comments()
- Get comment historyget_user_overview()
- Get mixed activity timelineget_saved_content()
- Get saved posts/commentsget_hidden_posts()
- Get hidden contentget_upvoted_content()
- Get upvoted contentget_downvoted_content()
- Get downvoted content
Messaging (3 tools):
get_inbox_messages()
- Get inbox messagesget_unread_messages()
- Get unread messagesget_sent_messages()
- Get sent messages
๐ง System Tools
test_connection()
- Test if MCP server is workingget_personalization_status()
- Get overall platform statustest_steam_credentials()
- Test Steam API configurationtest_youtube_credentials()
- Test YouTube API configurationtest_bilibili_credentials()
- Test Bilibili configurationtest_spotify_credentials()
- Test Spotify API configurationtest_reddit_credentials()
- Test Reddit API configuration
๐ฌ Usage Examples
Gaming Analysis
- "What games have I been playing recently?"
- "Show me my most played Steam games"
- "What games do my friends recommend?"
- "Compare my game library with my friend's"
Video Content Discovery
- "Find YouTube videos about machine learning"
- "What are the trending videos on YouTube today?"
- "Show me my YouTube liked videos"
- "Find popular Bilibili videos about programming"
Personal Data Insights
- "Analyze my gaming habits and preferences"
- "What type of YouTube content do I watch most?"
- "Show me my Bilibili favorites and liked videos"
Music & Audio Analysis
- "What artists have I been listening to most lately on Spotify?"
- "Show me my recently played music and find patterns"
- "What are my top tracks from the past month?"
- "Find new music recommendations based on my Spotify data"
Reddit Activity Analysis
- "What communities am I most active in on Reddit?"
- "Show me my recent Reddit posts and comments"
- "What's my karma breakdown across different subreddits?"
- "Find my saved Reddit content and analyze my interests"
๐ Development
Running the Server
If using conda:
conda activate personalhub
python server.py
If using uv:
uv run python server.py
If using pip with virtual environment:
source venv/bin/activate # On Windows: venv\Scripts\activate
python server.py
Testing Configuration
Use these tools to test your setup:
# Test individual platforms
test_steam_credentials()
test_youtube_credentials()
test_bilibili_credentials()
test_reddit_credentials()
# Check overall status
get_personalization_status()
Adding New Platforms
- Create a new
platform_mcp.py
file - Implement the platform-specific tools using
@mcp.tool()
decorator - Add setup function to
server.py
- Update configuration files and documentation
๐ Privacy and Security
- Local Storage: All API keys and tokens are stored locally on your machine
- No Data Transmission: Your personal data is never transmitted to third parties
- Direct API Calls: All API calls are made directly from your machine to the respective platforms
- Secure Configuration: Use environment variables or local config files
- Regular Updates: Rotate API keys and tokens regularly for security
Security Best Practices
- Don't commit sensitive files: Ensure
config
,.env
,myinfo.json
, andyoutube_tokens.json
are in.gitignore
- Update cookies regularly: Bilibili cookies expire and need periodic updates
- Use environment variables: In production, use system environment variables
- File permissions: Ensure config files are only readable by you
- YouTube token security: The system automatically manages OAuth2 tokens securely in local files
- Gradual configuration: You can configure platforms incrementally - missing credentials won't cause errors
๐ Troubleshooting
Common Issues
Q: Bilibili cookies not working? A: Cookies expire regularly. Re-extract them from your browser and update your config.
Q: Steam API rate limits? A: Steam API has rate limits. Avoid frequent calls and implement reasonable delays.
Q: YouTube API quota exceeded? A: YouTube API has daily quotas. You can request quota increases or optimize your usage.
Q: YouTube OAuth2 token expired?
A: The system automatically refreshes expired tokens. If manual refresh is needed, use refresh_youtube_token()
.
Q: Can I use only some platforms? A: Yes! You can configure only the platforms you want to use. Missing credentials won't cause errors.
Q: How to verify my configuration?
A: Use the test tools or call get_personalization_status()
to check all platforms.
Getting Help
- Check configuration file format
- Verify API keys and cookies are valid
- Review MCP server logs
- Use test tools to validate each platform configuration
๐ค Contributing
Contributions are welcome! Here's how you can help:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature
- Make your changes and add tests if applicable
- Commit your changes:
git commit -m 'Add amazing feature'
- Push to the branch:
git push origin feature/amazing-feature
- Open a Pull Request
Adding New Platforms
Want to add support for a new platform? Follow these steps:
- Create a new
platform_mcp.py
file (e.g.,spotify_mcp.py
) - Implement platform-specific tools using the
@mcp.tool()
decorator - Add a setup function and integrate it in
server.py
- Update configuration files and documentation
- Add tests and examples
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Acknowledgments
- Model Context Protocol (MCP) for the amazing protocol
- Anthropic for Claude and MCP development
- All the platform APIs that make this integration possible
โญ Star History
If you find this project useful, please consider giving it a star on GitHub!
Made with โค๏ธ for connecting your digital life with AI