PersonalizationMCP
Enables AI assistants to access and interact with personal data from platforms like Steam, YouTube, Bilibili, Spotify, and Reddit for personalized, context-aware interactions.
README
ðŊ 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.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"
ð§Đ Skills (CLI-oriented)
This repo now includes standalone skills under skills/ that map directly to personalhub CLI workflows:
personalhub-onboarding(unified credential onboarding entry)personalhub-manager(aggregate day-2 manager)personalhub-statuspersonalhub-steampersonalhub-youtubepersonalhub-bilibilipersonalhub-spotifypersonalhub-reddit
Pattern: one unified entry + platform-specific skills. Each skill remains independent (no nested execution).
ð Development
Running the Server
Recommended (CLI with tool exposure profiles):
# Safer default: expose a curated subset of tools
personalhub serve --profile safe
# Legacy behavior: expose all tools
personalhub serve --profile full
# See available profiles
personalhub profiles
# Show integration status
personalhub status
# Interactive onboarding (recommended for first-time setup)
personalhub onboarding --platform steam,youtube
personalhub onboarding --all
personalhub onboarding --platform steam --set STEAM_API_KEY=xxx --set STEAM_USER_ID=7656119xxx
# Run direct Steam commands (without MCP)
personalhub steam credentials
personalhub steam library
personalhub steam profile
# Run direct YouTube commands (without MCP)
personalhub youtube credentials
personalhub youtube search -q "lofi"
personalhub youtube trending --region-code US
# Run direct Spotify commands
personalhub spotify credentials
personalhub spotify token-status
personalhub spotify recent --limit 20
# Run direct Reddit commands
personalhub reddit credentials
personalhub reddit token-status
personalhub reddit subreddits --limit 20
# Run direct Bilibili commands
personalhub bilibili credentials
personalhub bilibili search -k "įžįĻ"
personalhub bilibili video --bvid BV1xx411c7mD
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.pyfile - 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.jsonare 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.pyfile (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
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.