🚀 PersonalizationMCP
PersonalizationMCPは、MCP(Model Context Protocol)を基盤とした統合型個人データハブです。これにより、AIアシスタントが複数のプラットフォームからあなたのデジタル生活にアクセスでき、真に個人的かつ状況に応じた対話を実現します。

📖 日本語ドキュメント: README_ja.md
🚀 クイックスタート
-
リポジトリをクローンする
git clone https://github.com/YangLiangwei/PersonalizationMCP.git
cd PersonalizationMCP
-
依存関係をインストールする
📖 詳細なインストール手順はこちらを参照: インストールとセットアップ
-
APIキーを設定する
cp config.example config
-
Cursor設定に追加する
📖 詳細なMCP設定はこちらを参照: Cursor設定
✨ 主な機能
🎮 Steam統合
- 詳細な統計情報とプレイ時間を含むゲームライブラリを取得する
- 最近のゲーム活動と現在プレイ中のゲームを表示する
- 詳細なゲーム情報と実績を取得する
- 友人とゲームを比較し、推薦を受ける
- ゲーム習慣と嗜好を分析する
🎥 YouTube統合
- YouTube動画を検索し、詳細な動画情報を取得する
- チャンネル情報とトレンド動画を取得する
- OAuth2を使用して個人データにアクセスする(登録チャンネル、プレイリスト、高評価した動画)
- 視聴履歴に基づいた個人化された推薦を受ける
- 🔄 スマートトークン管理 - 期限切れのOAuth2トークンを自動的に検出し、更新する
- 🛡️ メンテナンスフリー設定 - トークンファイルを優先し、MCP設定を手動で更新する必要がない
📺 Bilibili統合
- ユーザープロファイル情報と統計を取得する
- 動画を検索し、詳細な動画情報を取得する
- 個人データにアクセスする(視聴履歴、お気に入り、高評価した動画、コイン履歴)
- フォローリストとユーザーアップロード動画を取得する
- 「後で見る」リストと個人コレクションを閲覧する
🎵 Spotify統合
- 自動トークン管理でOAuth2認証を完了する
- ユーザープロファイルと音楽ライブラリデータを取得する
- 人気アーティスト、トラック、最近再生した音楽にアクセスする
- ソーシャル機能:アーティストとプレイリストをフォロー/フォロー解除する
- ライブラリ管理:保存したトラック、アルバム、番組、エピソード、オーディオブック
- プレイリスト操作:個人プレイリストを表示し、管理する
💬 Reddit統合
- 自動トークン管理でOAuth2認証を完了する
- ユーザーアカウント情報、カルマ内訳、設定を取得する
- 投稿した記事、コメント、ユーザー活動の概要を取得する
- 保存したコンテンツ、非表示にした記事、投票履歴を表示する
- 登録したコミュニティとモデレーション権限を探索する
- メッセージシステムにアクセスする(受信箱、未読メッセージ、送信したメッセージ)
📦 インストールとセットアップ
1. 依存関係のインストール
bilibili-apiの依存関係が複雑であるため(特にlxmlのコンパイル問題)、インストールには特定の手順が必要です。以下の方法から1つを選択してください。
オプションA: condaを使用する(推奨)
conda create -n personalhub python=3.12
conda activate personalhub
conda install lxml
pip install bilibili-api --no-deps
pip install -r requirements.txt
オプションB: uvを使用する
uv venv
uv sync
source .venv/bin/activate
uv pip install lxml
uv pip install bilibili-api --no-deps
uv pip install aiohttp beautifulsoup4 colorama PyYAML brotli urllib3
オプションC: pipを使用する(手動の多段階インストール)
python -m venv venv
source venv/bin/activate
pip install lxml
pip install bilibili-api --no-deps
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 | 日本語ガイド
概要:
- Google Cloud ConsoleからYouTube APIキーを取得する
- 個人データへのアクセスには、「TVおよび入力制限デバイス」タイプでOAuth2を設定する
- MCPツールを使用して簡単に認証する
設定:
YOUTUBE_API_KEY=your_youtube_api_key_here
📺 Bilibiliの設定
📖 詳細な設定ガイド: platforms/bilibili/README.md | 日本語ガイド
概要: Bilibiliにログインした後、ブラウザからクッキーを抽出する
設定:
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 | 日本語ガイド
概要:
- Spotify Developer Dashboardで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
💬 Reddit APIの設定
📖 詳細な設定ガイド: platforms/reddit/README.md | 日本語ガイド
概要:
- Reddit AppsでRedditアプリを作成する
- 「ウェブアプリ」として設定し、リダイレクト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
🖥️ Cursor設定
Cursor設定にMCPサーバーを追加します。
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設定ファイルでトークンを手動で更新する必要がない
🔧 トークンの優先順位
- 明示的に渡されたaccess_tokenパラメータ(最優先)
- トークンファイルからの自動更新トークン(推奨方法)
- 環境変数からのトークン(バックアップ方法)
システムはすべてのトークン管理を自動的に処理し、手動でのメンテナンスは必要ありません!
🛠️ 利用可能なツール
🎮 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() - カルマの分布を取得する
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で最も多く聴いているアーティストは誰ですか?"
- "最近再生した音楽を表示し、パターンを見つけてください"
- "過去1か月間の人気トラックは何ですか?"
- "Spotifyのデータに基づいて新しい音楽推薦を見つけてください"
Reddit活動分析
- "Redditで最も活動的なコミュニティはどれですか?"
- "最近のRedditの投稿とコメントを表示してください"
- "異なるサブレディットでのカルマの内訳はどうですか?"
- "保存したRedditコンテンツを見つけ、興味を分析してください"
🚀 開発
サーバーの実行
condaを使用する場合:
conda activate personalhub
python server.py
uvを使用する場合:
uv run python server.py
pipと仮想環境を使用する場合:
source venv/bin/activate
python server.py
テスト設定
以下のツールを使用して設定をテストします。
test_steam_credentials()
test_youtube_credentials()
test_bilibili_credentials()
test_reddit_credentials()
get_personalization_status()
新しいプラットフォームの追加
- 新しい
platform_mcp.pyファイルを作成する
@mcp.tool()デコレータを使用してプラットフォーム固有のツールを実装する
server.pyにセットアップ関数を追加する
- 設定ファイルとドキュメントを更新する
🔒 プライバシーとセキュリティ
- ローカル保存: すべてのAPIキーとトークンはローカルマシンに保存されます
- データ送信なし: 個人データは決して第三者に送信されません
- 直接API呼び出し: すべてのAPI呼び出しはローカルマシンからそれぞれのプラットフォームに直接行われます
- 安全な設定: 環境変数またはローカル設定ファイルを使用する
- 定期的な更新: セキュリティのために、APIキーとトークンを定期的に更新する
セキュリティのベストプラクティス
- 機密ファイルをコミットしない:
config, .env, myinfo.json, youtube_tokens.jsonが.gitignoreに含まれていることを確認する
- クッキーを定期的に更新する: Bilibiliのクッキーは期限切れになるため、定期的に更新する必要があります
- 環境変数を使用する: 本番環境では、システム環境変数を使用する
- ファイル権限: 設定ファイルが自分だけに読み取り可能であることを確認する
- YouTubeトークンのセキュリティ: システムはOAuth2トークンをローカルファイルで安全に自動管理します
- 段階的な設定: プラットフォームを段階的に設定することができます。不足している資格情報はエラーを引き起こしません
🆘 トラブルシューティング
一般的な問題
Q: Bilibiliのクッキーが機能しない場合?
A: クッキーは定期的に期限切れになります。ブラウザから再抽出し、設定を更新してください。
Q: Steam APIのレート制限?
A: Steam APIにはレート制限があります。頻繁な呼び出しを避け、適切な遅延を実装してください。
Q: YouTube APIのクォータを超えた場合?
A: YouTube APIには日次クォータがあります。クォータを増やすように要求するか、使用方法を最適化することができます。
Q: YouTube OAuth2トークンが期限切れになった場合?
A: システムは期限切れのトークンを自動的に更新します。手動で更新する必要がある場合は、refresh_youtube_token()を使用してください。
Q: 一部のプラットフォームのみを使用できますか?
A: はい!使用したいプラットフォームのみを設定することができます。不足している資格情報はエラーを引き起こしません。
Q: 設定を検証する方法は?
A: テストツールを使用するか、get_personalization_status()を呼び出してすべてのプラットフォームを確認してください。
ヘルプの取得
- 設定ファイルの形式を確認する
- APIキーとクッキーが有効であることを検証する
- MCPサーバーのログを確認する
- 各プラットフォームの設定を検証するためにテストツールを使用する
🤝 コントリビューション
コントリビューションは大歓迎です!以下の手順で協力することができます。
- リポジトリをフォークする
- 機能ブランチを作成する:
git checkout -b feature/amazing-feature
- 変更を加える 必要に応じてテストを追加する
- 変更をコミットする:
git commit -m 'Add amazing feature'
- ブランチにプッシュする:
git push origin feature/amazing-feature
- プルリクエストを開く
新しいプラットフォームの追加
新しいプラットフォームのサポートを追加したい場合は、以下の手順に従ってください。
- 新しい
platform_mcp.pyファイルを作成する(例: spotify_mcp.py)
@mcp.tool()デコレータを使用してプラットフォーム固有のツールを実装する
- セットアップ関数を追加し、
server.pyに統合する
- 設定ファイルとドキュメントを更新する
- テストとサンプルを追加する
📄 ライセンス
このプロジェクトはMITライセンスの下でライセンスされています。詳細についてはLICENSEファイルを参照してください。
🙏 謝辞
⭐ スター履歴
このプロジェクトが役に立った場合は、GitHubでスターを付けてください!
Made with ❤️ for connecting your digital life with AI