Trakt について
TraktはTrakt.tvに接続するMCPサーバーで、エンタメ情報や個人の視聴データを扱うAIシステム向けです。公開作品情報、アカウントの履歴、個別推薦、コメントを扱います。
主な機能
- 01トレンド・人気・注目作品の検索
- 02番組・シーズン・エピソード・出演者の詳細表示
- 03視聴履歴・評価・ウォッチリストの管理
- 04視聴進捗と個別推薦の取得
- 05コメント・レビュー・評価分布の閲覧
- 06ページネーションとリアルタイムのトレンド情報
活用シーン
- 01人気の番組や映画の検索
- 02番組のシーズン、出演者、評価の確認
- 03個人の視聴履歴やウォッチリストの更新
- 04視聴履歴に基づく作品の推薦
MCP 対応
このMCPサーバーは、ツールとリソースを通じてTrakt.tvの公開・個人エンタメデータをMCPクライアントに提供します。視聴履歴、評価、ウォッチリストを照会・管理でき、個人データの操作にはデバイスコードフローによるTrakt認証が必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
翻訳後に原文が更新されています。最新の内容は原文をご確認ください。
🎬 MCP Trakt:エンターテインメントデータへのAIのゲートウェイ
AI言語モデルとTrakt.tv APIをつなぐブリッジを構築するModel Context Protocol(MCP)サーバーです。LLMがリアルタイムのエンターテインメントデータや、個人のTrakt視聴履歴にアクセスできるようにします。FastMCPを使用したドメイン特化型アーキテクチャで構築されており、認証、番組、シーズン、エピソード、映画、人物、ユーザーデータ、コメント、検索、チェックイン機能を明確に分離しています。
🖥️ AIの実験
この段落を除き、コードを含め、ここにあるものはすべてAIによって生成されています。MCPについてもっと学びたいと思い、Cursorをたくさん試していたので、両者を組み合わせるのは自然な次のステップに思えました。その結果がこのプロジェクトです。今後の変更もすべてAIによって行われます。
📚 MCPとTraktについて
Model Context Protocol (MCP)を使うと、AIモデルは標準化されたツールやリソースを通じて外部システムとやり取りできます。Trakt.tvは、1,400万人以上のユーザーを擁し、開発者向けの豊富なAPIを提供する、テレビ番組や映画を記録するための総合プラットフォームです。
🚀 クイックスタート
Dockerクイックスタート
docker run -d --rm --name trakt_mcpserver \
-e TRAKT_CLIENT_ID=your_client_id \
-e TRAKT_CLIENT_SECRET=your_client_secret \
-v trakt_auth:/data \
-p 8080:8080 \
ghcr.io/wwiens/trakt_mcpserver:latest
uvxで実行(クローン・インストール不要)
uvがインストールされている必要があります。
uvx --from git+https://github.com/wwiens/trakt_mcpserver trakt-mcp
再現性を確保するには、リリースタグを指定します。
uvx --from git+https://github.com/wwiens/[email protected] trakt-mcp
Claude Desktop/MCPhubの設定:
{
"mcpServers": {
"trakt": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/wwiens/trakt_mcpserver",
"trakt-mcp"
],
"env": {
"TRAKT_CLIENT_ID": "your_client_id",
"TRAKT_CLIENT_SECRET": "your_client_secret"
}
}
}
}
Trakt OAuthトークンは~/.trakt-mcp/auth_token.jsonに保存されます(初回ログイン時にディレクトリが作成されます)。そのため、uvxを再度実行しても認証状態が維持されます。保存先を変更する場合(たとえばDockerボリュームを使用する場合や、複数のアカウントを分離して保持する場合)は、TRAKT_AUTH_TOKEN_PATHに絶対パスを設定してください。
ローカルインストール
Python 3.12以降が必要です。
-
このリポジトリをクローンする
git clone https://github.com/wwiens/trakt_mcpserver.git cd trakt_mcpserver -
仮想環境を作成して依存関係をインストールする
python3 -m venv .venv source .venv/bin/activate pip install -e . -
環境を設定する
cp .env.example .env次に、
.envを編集してTrakt APIの認証情報を追加します。TRAKT_CLIENT_ID=your_client_id TRAKT_CLIENT_SECRET=your_client_secret -
サーバーを実行する
python server.py
Claude Desktopへのインストール
Claude DesktopのMCP設定ファイルに追加します。
{
"mcpServers": {
"trakt": {
"command": "python",
"args": ["/path/to/your/server.py"],
"env": {
"TRAKT_CLIENT_ID": "your_client_id",
"TRAKT_CLIENT_SECRET": "your_client_secret"
}
}
}
}
✨ 機能
🌎 Traktの公開データ
- トレンドの番組や映画、人気の番組や映画にアクセス
- 最も期待されている作品、お気に入り登録数や再生数、視聴数の多いコンテンツを発見
- 先週末の米国興行収入上位の映画を確認
- Traktのグローバルコミュニティからリアルタイムデータを取得
- タイトル、公開年、人気度指標を含む形式でレスポンスを表示
- 番組や映画の詳細な評価を表示:平均スコアや評価の分布を含みます
- 番組のシーズンを一覧表示:各シーズンのエピソード数、放送済みエピソード、評価を確認できます
- 特定のシーズンを詳しく確認:詳細情報、エピソード一覧、評価、キャストとスタッフ、動画、翻訳、エンゲージメント統計を確認できます
- 特定のシーズンを今見ている人を確認
- 特定のシーズンを含むリストを検索
- 個別のエピソードを詳しく確認:詳細な概要、評価、キャストとスタッフ、動画、翻訳、エンゲージメント統計を確認できます
- 特定のエピソードを今見ている人を確認
- 特定のエピソードを含むリストを検索
- 映画や番組のキャストとスタッフを検索:番組ではゲスト出演者も任意で指定できます
- 人物を詳しく確認:経歴、ソーシャルメディア、全出演作品を確認できます
- 人物の出演クレジットを一覧表示:映画や番組での役名やエピソード数を確認できます
- 特定の人物を含むリストを検索
👤 個人の Trakt データ
- 視聴済みの番組を表示:自分が視聴した番組の完全な一覧を取得します
- 各シリーズの最終視聴日を正確に確認できます
- 各番組の視聴回数を確認できます
- 現在視聴中の番組にチェックインして、視聴済みとして記録します
- 番組 ID(より正確)または番組タイトル(より手軽)で指定できます
- チェックインにカスタムメッセージを追加できます
- エピソードを視聴した日時を、人が読みやすい形式で確認できます
- 番組を検索して、詳細情報と ID を確認できます
- 評価を管理:ページネーションに対応し、映画、番組、シーズン、エピソードの個人評価を表示、追加、削除できます
- ウォッチリストを管理:ページネーションと並べ替えに対応し、ウォッチリストの項目を表示、追加、削除できます
- 種類で絞り込みできます(すべて、映画、番組、シーズン、エピソード)
- 複数の基準で並べ替えできます(順位、追加日、タイトル、公開日、再生時間、人気度、パーセンテージ、投票数)
- ウォッチリストの項目に任意のメモを追加できます(VIP 機能、500 文字まで)
- 番組の進捗を確認:任意のテレビ番組の視聴進捗を確認できます
- 視聴済みエピソード数と放送済みエピソード数、および完了率を表示できます
- 次に視聴するエピソードを確認できます
- シーズンごとの進捗統計を表示できます
- 非表示のシーズンと特別編を任意で含めることができます
- 再生進捗を管理:一時停止中の再生項目を表示、消去できます
- 視聴途中で一時停止した映画やエピソードを確認できます
- 進捗率と一時停止した日時を確認できます
- 不要になった再生項目を消去できます
- 視聴履歴を管理:履歴に項目を追加、削除できます
- 映画、番組、シーズン、エピソードを視聴済みとして記録できます
- 視聴日時を任意で指定できます
- 視聴履歴から項目を削除できます
- デバイスコードフローによる Trakt の安全な認証
- 個人データは Trakt アカウントから直接取得されます
🎯 パーソナライズされたおすすめ
- 視聴履歴と評価に基づいて、好みに合わせた映画や番組のおすすめを取得します(認証が必要です)
- すでにコレクションに追加済み、またはウォッチリストに登録済みの項目を除外できます
- 興味のないおすすめを非表示にして、再表示されないようにできます
- 以前に非表示にした項目を再表示して、元に戻せます
💬 コメントとレビュー
- 番組や映画のコメントを表示:お気に入りの作品について、他のユーザーの意見を読めます
- 特定のシーズンやエピソードのコメントを表示:番組の特定の部分に関する見解を確認できます
- 個々のコメントと返信を表示:コミュニティの議論に参加できます
- ネタバレ保護:ネタバレを含むコメントは、デフォルトで非表示になります
- ネタバレの表示を切り替え:ネタバレを表示するか非表示にするか選択できます
- レビューを表示:長く、より詳しいコメントはレビューとして表示されます
- 評価の分布を確認:各評価(1~10)を付けたユーザー数を表示できます
🔄 一般機能
- MCP リソースを通じて Trakt API のデータを公開します
- 最新のエンターテインメント情報を取得するツールを提供します
- AI モデルがパーソナライズされたエンターテインメントのおすすめを提示できるようにします
- シンプルな認証とログアウトの手順
- リストエンドポイント(トレンド、人気、近日公開、人気登録、再生済み、視聴済み、検索、コメント、評価、ウォッチリスト)のページネーションに対応:
page: intを指定すると、ページネーションのメタデータ付きで単一ページの結果を返しますpageを省略すると自動でページネーションし、合計で最大limit件の項目をフラットなリストとして返しますlimit=0を指定すると、利用可能なすべての結果を取得します(安全のため最大 100 件)
🔥 リアルタイムのトレンドデータ
- 現在トレンドのテレビ番組を、リアルタイムの視聴者数とともに確認できます
- リアルタイムに更新されるトレンド映画を取得できます
- 1,400 万人以上の Trakt グローバルコミュニティで人気の作品を確認できます
- 例:The White Lotus (2021)、Daredevil: Born Again (2025)、Black Bag (2025)
🔌 利用可能なリソース
MCP リソースは、AI モデルがアクセスできる静的データエンドポイントを提供します。これらの URI は、標準化されたインターフェースを通じて Trakt データを公開します。
利用可能なすべてのリソースを表示
### 番組リソース | リソース | 説明 | データの例 | |----------|-------------|--------------| | `trakt://shows/trending` | 過去24時間で最も視聴された番組 | 番組名、年、視聴者数 | | `trakt://shows/popular` | 評価に基づく人気番組 | 番組名、年、人気スコア | | `trakt://shows/anticipated` | リスト数順に並べた、最も期待されている番組 | 番組名、年、リスト数 | | `trakt://shows/favorited` | お気に入り登録数が最も多い番組 | 番組名、年、お気に入り数 | | `trakt://shows/played` | 再生回数が最も多い番組 | 番組名、年、再生回数 | | `trakt://shows/watched` | ユニークユーザーによる視聴数が最も多い番組 | 番組名、年、視聴者数 |映画リソース
| リソース | 説明 | データの例 |
|---|---|---|
trakt://movies/trending | 過去24時間で最も視聴された映画 | 映画タイトル、年、視聴者数 |
trakt://movies/popular | 評価に基づく人気映画 | 映画タイトル、年、人気スコア |
trakt://movies/anticipated | リスト数順に並べた、最も期待されている映画 | 映画タイトル、年、リスト数 |
trakt://movies/favorited | お気に入り登録数が最も多い映画 | 映画タイトル、年、お気に入り数 |
trakt://movies/played | 再生回数が最も多い映画 | 映画タイトル、年、再生回数 |
trakt://movies/watched | ユニークユーザーによる視聴数が最も多い映画 | 映画タイトル、年、視聴者数 |
trakt://movies/boxoffice | 先週末の米国興行収入上位10作品 | 映画タイトル、年、興行収入 |
🛠️ 利用可能なツール
MCP ツールは、AI モデルがパラメーターを指定して呼び出せる対話型の関数です。これらを使って、Trakt のデータを取得、検索、管理できます。
番組ツール
# Get trending shows: auto-paginate up to 10 results
fetch_trending_shows(limit=10)
# Get trending shows: fetch ALL results (no limit)
fetch_trending_shows(limit=0)
# Get trending shows: single page with pagination metadata
fetch_trending_shows(limit=10, page=1)
# Get popular shows with optional limit parameter
fetch_popular_shows(limit=10)
# Get anticipated shows with optional limit parameter
fetch_anticipated_shows(limit=10)
# Get favorited shows with optional limit and period parameters
fetch_favorited_shows(limit=10, period="weekly")
# Get most played shows with optional limit and period parameters
fetch_played_shows(limit=10, period="weekly")
# Get most watched shows with optional limit and period parameters
fetch_watched_shows(limit=10, period="weekly")
# Search for shows: auto-paginate all results (omit page parameter)
search_shows(query="Breaking Bad", limit=5)
# Search for shows: single page with pagination metadata
search_shows(query="Breaking Bad", limit=5, page=1)
# Get ratings for a show
fetch_show_ratings(show_id="game-of-thrones")
# Get comprehensive show summary (includes air times, production status, ratings, metadata)
fetch_show_summary(show_id="game-of-thrones", extended=True) # Default: comprehensive
# Get basic show summary (title, year, ID only)
fetch_show_summary(show_id="game-of-thrones", extended=False)
# Get videos for a show (with embedded markdown - default)
fetch_show_videos(show_id="game-of-thrones")
# Get videos for a show (simple text links)
fetch_show_videos(show_id="game-of-thrones", embed_markdown=False)
# Get related shows (similar shows based on genres, themes, and viewer patterns)
fetch_related_shows(show_id="game-of-thrones", limit=10)
# Get related shows with pagination metadata
fetch_related_shows(show_id="game-of-thrones", limit=10, page=1)
# Get all seasons for a show (includes episode counts, aired episodes, ratings)
fetch_show_seasons(show_id="game-of-thrones")
# Get cast and crew for a show
fetch_show_people(show_id="breaking-bad")
# Get cast, crew, and guest stars for a show
fetch_show_people(show_id="breaking-bad", include_guest_stars=True)
# Search for movies: auto-paginate all results (omit page parameter)
search_movies(query="The Godfather", limit=5)
# Search for movies: single page with pagination metadata
search_movies(query="The Godfather", limit=5, page=1)
シーズンツール
# Get detailed info about a specific season
fetch_season_info(show_id="breaking-bad", season=1)
# Get all episodes for a season with ratings and runtime
fetch_season_episodes(show_id="breaking-bad", season=1)
# Get ratings and voting distribution for a season
fetch_season_ratings(show_id="breaking-bad", season=1)
# Get engagement stats (watchers, plays, collectors)
fetch_season_stats(show_id="breaking-bad", season=1)
# Get cast and crew for a season
fetch_season_people(show_id="breaking-bad", season=1)
# Get videos/trailers for a season (with embedded markdown - default)
fetch_season_videos(show_id="breaking-bad", season=1)
# Get videos for a season (simple text links)
fetch_season_videos(show_id="breaking-bad", season=1, embed_markdown=False)
# See who's watching a season right now
fetch_season_watching(show_id="breaking-bad", season=1)
# Get translations for a season (all languages)
fetch_season_translations(show_id="breaking-bad", season=1)
# Get translations for a specific language
fetch_season_translations(show_id="breaking-bad", season=1, language="es")
# Get lists containing a season
fetch_season_lists(show_id="breaking-bad", season=1)
# Get lists with type and sort filters
fetch_season_lists(show_id="breaking-bad", season=1, list_type="personal", sort="popular")
エピソードツール
# Get detailed info about a specific episode
fetch_episode_summary(show_id="breaking-bad", season=1, episode=1)
# Get ratings and voting distribution for an episode
fetch_episode_ratings(show_id="breaking-bad", season=1, episode=1)
# Get engagement stats (watchers, plays, collectors)
fetch_episode_stats(show_id="breaking-bad", season=1, episode=1)
# Get cast and crew for an episode
fetch_episode_people(show_id="breaking-bad", season=1, episode=1)
# Get videos/trailers for an episode (with embedded markdown - default)
fetch_episode_videos(show_id="breaking-bad", season=1, episode=1)
# Get videos for an episode (simple text links)
fetch_episode_videos(show_id="breaking-bad", season=1, episode=1, embed_markdown=False)
# See who's watching an episode right now
fetch_episode_watching(show_id="breaking-bad", season=1, episode=1)
# Get translations for an episode (all languages)
fetch_episode_translations(show_id="breaking-bad", season=1, episode=1)
# Get translations for a specific language
fetch_episode_translations(show_id="breaking-bad", season=1, episode=1, language="es")
# Get lists containing an episode
fetch_episode_lists(show_id="breaking-bad", season=1, episode=1)
# Get lists with type and sort filters
fetch_episode_lists(show_id="breaking-bad", season=1, episode=1, list_type="personal", sort="popular")
映画ツール
# Get trending movies: auto-paginate all results (omit page parameter)
fetch_trending_movies(limit=10)
# Get trending movies: single page with pagination metadata
fetch_trending_movies(limit=10, page=1)
# Get popular movies with optional limit parameter
fetch_popular_movies(limit=10)
# Get anticipated movies with optional limit parameter
fetch_anticipated_movies(limit=10)
# Get favorited movies with optional limit and period parameters
fetch_favorited_movies(limit=10, period="weekly")
# Get most played movies with optional limit and period parameters
fetch_played_movies(limit=10, period="weekly")
# Get most watched movies with optional limit and period parameters
fetch_watched_movies(limit=10, period="weekly")
# Get the top 10 U.S. box office movies from last weekend
fetch_boxoffice_movies()
# Get ratings for a movie
fetch_movie_ratings(movie_id="tron-legacy-2010")
# Get comprehensive movie summary (includes production status, ratings, genres, runtime, certification, metadata)
fetch_movie_summary(movie_id="tron-legacy-2010", extended=True) # Default: comprehensive
# Get basic movie summary (title, year, ID only)
fetch_movie_summary(movie_id="tron-legacy-2010", extended=False)
# Get videos for a movie (with embedded markdown - default)
fetch_movie_videos(movie_id="tron-legacy-2010")
# Get videos for a movie (simple text links)
fetch_movie_videos(movie_id="tron-legacy-2010", embed_markdown=False)
# Get related movies (similar movies based on genres, themes, and viewer patterns)
fetch_related_movies(movie_id="tron-legacy-2010", limit=10)
# Get related movies with pagination metadata
fetch_related_movies(movie_id="tron-legacy-2010", limit=10, page=1)
# Get cast and crew for a movie
fetch_movie_people(movie_id="the-dark-knight-2008")
人物ツール
# Get extended person details (biography, social media, birthday)
fetch_person_summary(person_id="bryan-cranston")
# Get basic person details (name and IDs only)
fetch_person_summary(person_id="bryan-cranston", extended=False)
# Look up by IMDB ID
fetch_person_summary(person_id="nm0186505")
# Get all movie credits for a person (cast roles and crew positions)
fetch_person_movies(person_id="bryan-cranston")
# Get all show credits for a person (with episode counts and series regular flags)
fetch_person_shows(person_id="bryan-cranston")
# Get lists containing a person (all types, sorted by popularity)
fetch_person_lists(person_id="bryan-cranston")
# Get lists with type and sort filters
fetch_person_lists(person_id="bryan-cranston", list_type="personal", sort="likes")
認証とユーザーツール
# Start the device authorization flow with Trakt
start_device_auth()
# Check the status of an ongoing authentication
check_auth_status()
# Clear authentication (logout)
clear_auth()
# Fetch shows watched by the authenticated user
fetch_user_watched_shows(limit=0) # 0 for all shows
# Fetch movies watched by the authenticated user
fetch_user_watched_movies(limit=0) # 0 for all movies
# Fetch user's personal ratings with pagination support
fetch_user_ratings(rating_type="movies", rating=10, page=1)
# Add new ratings for movies, shows, seasons, or episodes
add_user_ratings(rating_type="movies", items=[{"trakt_id": "314", "rating": 9}])
# Remove existing ratings by ID
remove_user_ratings(rating_type="movies", items=[{"trakt_id": "314"}])
# Fetch user's watchlist with pagination and sorting
fetch_user_watchlist(watchlist_type="all", sort_by="rank", sort_how="asc", page=1)
# Add items to watchlist with optional notes (VIP)
add_user_watchlist(watchlist_type="movies", items=[{"trakt_id": "314", "notes": "Must watch!"}])
# Remove items from watchlist
remove_user_watchlist(watchlist_type="movies", items=[{"trakt_id": "314"}])
チェックインツール
# Method 1: Check in using show ID (recommended when precision is important)
# First use search_shows to find the correct show ID
search_shows(query="Breaking Bad", limit=5)
# Then use the ID for check-in
checkin_to_show(
season=1,
episode=3,
show_id="1388",
message="Loving this show!"
)
# Method 2: Check in using show title (more convenient)
checkin_to_show(
season=1,
episode=1,
show_title="Breaking Bad",
show_year=2008, # Optional but helps with accuracy
message="I'm the one who knocks!"
)
コメントツール
# Get comments for a movie: auto-paginate all results (omit page parameter)
fetch_movie_comments(movie_id="123", limit=10, show_spoilers=False)
# Get comments for a movie: single page with pagination metadata
fetch_movie_comments(movie_id="123", limit=10, show_spoilers=False, page=1)
# Get comments for a show: auto-paginate all results (omit page parameter)
fetch_show_comments(show_id="456", limit=10, show_spoilers=False, sort="likes")
# Get comments for a show: single page with pagination metadata
fetch_show_comments(show_id="456", limit=10, show_spoilers=False, sort="likes", page=1)
# Get comments for a specific season sorted by most liked
fetch_season_comments(show_id="456", season=1, limit=10, show_spoilers=False, sort="likes")
# Get comments for a specific episode sorted by most replies
fetch_episode_comments(show_id="456", season=1, episode=3, limit=10, show_spoilers=False, sort="replies")
# Get a specific comment
fetch_comment(comment_id="789", show_spoilers=False)
# Get a comment with its replies
fetch_comment_replies(comment_id="789", limit=10, show_spoilers=False)
おすすめツール
# Get personalized movie recommendations (requires authentication)
fetch_movie_recommendations(limit=10)
# Include movies you've already collected or watchlisted
fetch_movie_recommendations(limit=10, ignore_collected=False, ignore_watchlisted=False)
# Get personalized show recommendations
fetch_show_recommendations(limit=10)
# Hide a movie from future recommendations
hide_movie_recommendation(movie_id="tron-legacy-2010")
# Hide a show from future recommendations
hide_show_recommendation(show_id="breaking-bad")
# Unhide a previously-hidden movie
unhide_movie_recommendation(movie_id="tron-legacy-2010")
# Unhide a previously-hidden show
unhide_show_recommendation(show_id="breaking-bad")
進捗ツール
# Get watched progress for a TV show
fetch_show_progress(show_id="breaking-bad")
# Get show progress with specials and hidden seasons included
fetch_show_progress(
show_id="game-of-thrones",
hidden=True, # Include hidden seasons
specials=True, # Include season 0 (specials)
count_specials=True, # Count specials in overall stats
last_activity="watched" # Calculate next episode based on watched order
)
# Get detailed episode-by-episode progress with watch dates
fetch_show_progress(show_id="breaking-bad", verbose=True)
# Get paused playback progress (all types)
fetch_playback_progress()
# Get paused playback progress (movies only)
fetch_playback_progress(playback_type="movies")
# Get paused playback progress (episodes only)
fetch_playback_progress(playback_type="episodes")
# Remove a paused playback item (get ID from fetch_playback_progress)
remove_playback_item(playback_id=12345)
# Check if a movie has been watched (returns watch dates and count)
fetch_history(history_type="movies", item_id="314") # The Dark Knight
# Check watch history for a show
fetch_history(history_type="shows", item_id="1388") # Breaking Bad
# Browse all movie watch history
fetch_history(history_type="movies")
# Browse all watch history (all types)
fetch_history()
# Filter history by date range
fetch_history(
history_type="movies",
start_at="2024-01-01T00:00:00.000Z",
end_at="2024-12-31T23:59:59.000Z"
)
# Add movies to watch history
add_to_history(
history_type="movies",
items=[{"trakt_id": "314"}] # The Dark Knight
)
# Add movies with custom watched date
add_to_history(
history_type="movies",
items=[{"trakt_id": "314", "watched_at": "2024-01-15T20:30:00.000Z"}]
)
# Add episodes to watch history
add_to_history(
history_type="episodes",
items=[{"trakt_id": "62085"}] # Breaking Bad S01E01
)
# Remove movies from watch history
remove_from_history(
history_type="movies",
items=[{"trakt_id": "314"}]
)
# Remove episodes from watch history
remove_from_history(
history_type="episodes",
items=[{"trakt_id": "62085"}]
)
📝 Claude での使用
インストールすると、Claude はこの MCP サーバーを使ってエンターテインメントデータに関する質問に回答できます。使い始めるための例をいくつか紹介します。
- 「今、話題の番組は何ですか?」
- 「視聴した番組を表示して」(認証が必要です)
- 「Game of Thrones の評価は?」
その他の質問例を見る
**公開データ(認証不要):** - 「現在、最も期待されている番組は何ですか?」 - 「公開予定の映画のうち、最も期待されているものを見せてください」 - 「今週末、映画館で上映されている映画は何ですか?」 - 「現在、興行収入が最も高い映画を見せてください」 - 「今週人気の映画をおすすめしてもらえますか?」 - 「今月最も視聴された番組は何ですか?」 - 「『ブレイキング・バッド』のような番組を検索してください」 - 「『ゴッドファーザー』のような映画を検索してください」 - 「ブレイキング・バッドのコメントを見せてください」 - 「『ゴッドファーザー』について、みんなは何と言っていますか?」 - 「『ストレンジャー・シングス』シーズン1のコメントを見せてください」 - 「『ゲーム・オブ・スローンズ』シーズン2第5話のコメントを取得してください」 - 「返信も含めて、コメント #12345 を見せてください」 - 「ネタバレを含めて、ブレイキング・バッドのコメントを見せてください」 - 「ブレイキング・バッドで最も「いいね」が多いコメントを見せてください」 - 「『ゴッドファーザー』の映画で最も「いいね」が多いコメントを取得してください」 - 「『ストレンジャー・シングス』シーズン1で最も返信が多いコメントを見せてください」 - 「『ゴッドファーザー』の評価分布を見せてください」 - 「ブレイキング・バッドの評価はどれくらい高いですか?」 - 「『トロン:レガシー』の予告編を見せてください」 - 「『ゲーム・オブ・スローンズ』の動画を取得してください」 - 「『ゴッドファーザー』の予告編はありますか?」 - 「ブレイキング・バッドの詳細な概要を取得してください」 - 「『ゴッドファーザー』の映画について詳しく見せてください」 - 「『ゲーム・オブ・スローンズ』の基本情報を教えてください」 - 「ブレイキング・バッドに似た番組を見せてください」 - 「『トロン:レガシー』に関連する映画は何ですか?」 - 「『ゲーム・オブ・スローンズ』のような番組を探してください」 - 「ブレイキング・バッドのシーズン1について教えてください」 - 「『ゲーム・オブ・スローンズ』シーズン2には何話ありますか?」 - 「ブレイキング・バッドのシーズン5の評価はどうですか?」 - 「『ゲーム・オブ・スローンズ』シーズン1の出演者は誰ですか?」 - 「ブレイキング・バッドのシーズン1はどれくらい人気ですか?」 - 「『ストレンジャー・シングス』シーズン2の予告編はありますか?」 - 「今、ブレイキング・バッドのシーズン1を見ている人はいますか?」 - 「ブレイキング・バッドのシーズン1のスペイン語訳を取得してください」 - 「ブレイキング・バッドのシーズン1が含まれているリストは何ですか?」 - 「ブレイキング・バッドのパイロット版について教えてください」 - 「『ゲーム・オブ・スローンズ』シーズン1第1話の評価はどうですか?」 - 「ブレイキング・バッドの第1話の出演者は誰ですか?」 - 「ブレイキング・バッドのシーズン5第16話はどれくらい人気ですか?」 - 「『ストレンジャー・シングス』シーズン1第1話の予告編はありますか?」 - 「今、ブレイキング・バッドのシーズン1第1話を見ている人はいますか?」 - 「ブレイキング・バッドのシーズン1第1話のスペイン語訳を取得してください」 - 「ブレイキング・バッドのシーズン1第1話が含まれているリストは何ですか?」 - 「『ダークナイト』の出演者は誰ですか?」 - 「ブレイキング・バッドのキャストとスタッフを見せてください」 - 「ブレイキング・バッドのゲスト出演者を見せてください」 - 「ブライアン・クランストンについて教えてください」 - 「ブライアン・クランストンはどの映画に出演していますか?」 - 「ブライアン・クランストンはどのテレビ番組に出演しましたか?」 - 「ブライアン・クランストンを特集しているリストは何ですか?」個人データ(認証が必要):
- 「最後に見た番組は何ですか?」
- 「これまでに見た映画を見せてください」
- 「最後に見た映画は何ですか?」
- 「『ダークナイト』を見たことがありますか?」
- 「『インセプション』を見ましたか?」
- 「『マトリックス』を見たのはいつですか?」
- 「評価を10/10にした映画を見せてください」
- 「ブレイキング・バッドに9/10の評価を追加してください」
- 「ウォッチリストを見せてください」
- 「ウォッチリストにはどの映画がありますか?」
- 「『ゴッドファーザー』をウォッチリストに追加してください」
- 「メモを付けてブレイキング・バッドをウォッチリストに追加してください」(VIP)
- 「『ダークナイト』をウォッチリストから削除してください」
- 「追加した日時順に並べたウォッチリストを見せてください」
- 「ブレイキング・バッドのシーズン2第5話の視聴を記録してください」
- 「番組ID 1388 のシーズン1第3話の視聴を記録してください」
- 「ブレイキング・バッドの視聴状況はどうなっていますか?」
- 「『ゲーム・オブ・スローンズ』をどこまで見ましたか?」
- 「『ストレンジャー・シングス』の次のエピソードは何ですか?」
- 「一時停止中の映画やエピソードを見せてください」
- 「その映画の一時停止中の再生位置をクリアしてください」
- 「『ダークナイト』を視聴済みにしてください」
- 「ブレイキング・バッドのシーズン1を視聴履歴に追加してください」
- 「『インセプション』を視聴履歴から削除してください」
認証すると、以下にアクセスできます。
- 視聴した番組や映画の全履歴
- 各番組や映画を最後に視聴した日付
- 各番組や映画を視聴した回数
- 現在視聴中の番組をチェックインし、進捗を追跡
- 個人の視聴統計
- フィルタリングと並べ替えが可能な、ウォッチリスト全体
- ウォッチリストへのアイテムの追加と削除
- ウォッチリストのアイテムへの個人的なメモの追加(VIP 機能)
- 番組の進捗追跡:任意のテレビ番組をどこまで視聴したか確認し、次のエピソードのおすすめを表示します
- 再生進捗:視聴途中で一時停止した映画やエピソードを表示、削除します
- 視聴履歴の管理:任意のタイムスタンプを指定して、視聴履歴にアイテムを追加、削除します
すべてのデータは、Trakt アカウントからリアルタイムで直接取得されます。
🔐 認証
サーバーは Trakt のデバイス認証フローを使用します。
- ユーザー固有のデータをリクエストすると、必要に応じてサーバーが自動的に認証を開始します
- ブラウザーでアクセスする URL とコードが届きます
- Trakt のウェブサイトでコードを入力してアプリを認証したら、認証が完了したことを Claude に伝えます
- Claude が認証状態を確認してから、個人データを取得します
- 今後のリクエストに備えて、認証トークンは
~/.trakt-mcp/auth_token.jsonに0o600の権限で安全に保存されます。保存先はTRAKT_AUTH_TOKEN_PATH環境変数で変更できます。Docker イメージでは/data/auth_token.jsonに設定されています。コンテナーを再作成しても認証情報を保持するには、/dataにボリュームをマウントしてください(例:-v trakt_auth:/data)。
clear_auth ツールを使えば、いつでもログアウトできます。
🐳 Docker のデプロイ
トランスポート方式の異なる Docker イメージを 2 種類用意しています。各リリースでは、バージョンを固定できるバージョンタグ(例::0.9.0、:0.9.0-stdio)も公開されます。
| イメージタグ | トランスポート | 用途 |
|---|---|---|
:latest | SSE(HTTP) | リモートアクセス、ウェブクライアント、docker-compose |
:latest-stdio | stdio | MCPhub、Claude Desktop、ローカル MCP クライアント |
:stdio | stdio | :latest-stdio の非推奨エイリアスです。v1.0.0 で削除されます |
stdio トランスポート(MCPhub、Claude Desktop)
stdin/stdout を介して通信する MCP クライアントでは、:latest-stdio イメージ(または :0.9.0-stdio のようにバージョンを固定したイメージ)を使用します。
# Pull and run the stdio image
docker run -i --rm --name trakt_mcpserver_stdio \
-e TRAKT_CLIENT_ID=your_client_id \
-e TRAKT_CLIENT_SECRET=your_client_secret \
-v trakt_auth:/data \
ghcr.io/wwiens/trakt_mcpserver:latest-stdio
Claude Desktop の設定:
{
"mcpServers": {
"trakt": {
"command": "docker",
"args": [
"run", "-i", "--rm", "--name", "trakt_mcpserver_stdio",
"-e", "TRAKT_CLIENT_ID=your_client_id",
"-e", "TRAKT_CLIENT_SECRET=your_client_secret",
"-v", "trakt_auth:/data",
"ghcr.io/wwiens/trakt_mcpserver:latest-stdio"
]
}
}
}
SSE トランスポート(HTTP/リモート)
HTTP ベースでアクセスする場合は、:latest イメージを使用します。
# Option 1: Pull and run from GHCR (recommended)
docker run -d --rm --name trakt_mcpserver \
-e TRAKT_CLIENT_ID=your_client_id \
-e TRAKT_CLIENT_SECRET=your_client_secret \
-v trakt_auth:/data \
-p 8080:8080 \
ghcr.io/wwiens/trakt_mcpserver:latest
# Option 2: Build locally and run
docker build -t trakt_mcpserver .
docker run -d --rm --name trakt_mcpserver \
-e TRAKT_CLIENT_ID=your_client_id \
-e TRAKT_CLIENT_SECRET=your_client_secret \
-v trakt_auth:/data \
-p 8080:8080 \
trakt_mcpserver
docker compose の使用
# Builds the docker image using the default Dockerfile (SSE variant) and starts the service
docker compose up
これにより、サーバーが http://localhost:8080 で起動し、MCP リクエストが SSE(HTTP トランスポート)経由でプロキシされます。
🧪 開発とテスト
この MCP サーバーを使用、または拡張する開発者向けに、テストツールと開発ワークフローを紹介します。
🚀 AI を活用した開発体験
このプロジェクトは、AI 支援開発ツールを使用して構築されました。
- Cursor - 迅速な開発を支援する AI 搭載コードエディター
- Aider - コードの共同作業を支援する AI ペアプログラミングツール
- Claude Code - Claude 専用のコーディングインターフェース
MCP Inspector を使ったテスト
MCP サーバーの実装を検証し、利用可能なツール、リソース、プロンプトを確認します。
MCP Inspector のコマンドを表示
# List available tools
npx @modelcontextprotocol/inspector --cli python server.py --method tools/list
# List available resources
npx @modelcontextprotocol/inspector --cli python server.py --method resources/list
# List available prompts
npx @modelcontextprotocol/inspector --cli python server.py --method prompts/list
テストの実行
変更を加える前に、pytest、型チェック、リンティングでコード品質を確認してください。
テストコマンドを表示
# Create a virtual environment, then install the project (editable) and test dependencies
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
pip install -r requirements-dev.txt
# Run all tests
pytest
# Run with verbose output
pytest -v -s
# Type checking
pyright
# Code linting and formatting with ruff
ruff check --fix # Auto-fix issues
ruff format # Format code
📄 ライセンス
🧠 AI と人間の協力によって構築
Claude を活用
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。