mcpField
T
Trakt

Trakt

ローカル
github.com/wwiensゲーム・エンタメ493 日前に更新

Trakt について

TraktはTrakt.tvに接続するMCPサーバーで、エンタメ情報や個人の視聴データを扱うAIシステム向けです。公開作品情報、アカウントの履歴、個別推薦、コメントを扱います。

主な機能

  1. 01トレンド・人気・注目作品の検索
  2. 02番組・シーズン・エピソード・出演者の詳細表示
  3. 03視聴履歴・評価・ウォッチリストの管理
  4. 04視聴進捗と個別推薦の取得
  5. 05コメント・レビュー・評価分布の閲覧
  6. 06ページネーションとリアルタイムのトレンド情報

活用シーン

  1. 01人気の番組や映画の検索
  2. 02番組のシーズン、出演者、評価の確認
  3. 03個人の視聴履歴やウォッチリストの更新
  4. 04視聴履歴に基づく作品の推薦

MCP 対応

このMCPサーバーは、ツールとリソースを通じてTrakt.tvの公開・個人エンタメデータをMCPクライアントに提供します。視聴履歴、評価、ウォッチリストを照会・管理でき、個人データの操作にはデバイスコードフローによるTrakt認証が必要です。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

翻訳後に原文が更新されています。最新の内容は原文をご確認ください。

🎬 MCP Trakt:エンターテインメントデータへのAIのゲートウェイ

MCP Trakt AI+Humansによる構築 バージョン Claudeを搭載

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以降が必要です。

  1. このリポジトリをクローンする

    git clone https://github.com/wwiens/trakt_mcpserver.git
    cd trakt_mcpserver
    
  2. 仮想環境を作成して依存関係をインストールする

    python3 -m venv .venv
    source .venv/bin/activate
    pip install -e .
    
  3. 環境を設定する

    cp .env.example .env
    

    次に、.envを編集してTrakt APIの認証情報を追加します。

    TRAKT_CLIENT_ID=your_client_id
    TRAKT_CLIENT_SECRET=your_client_secret
    
  4. サーバーを実行する

    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 のデバイス認証フローを使用します。

  1. ユーザー固有のデータをリクエストすると、必要に応じてサーバーが自動的に認証を開始します
  2. ブラウザーでアクセスする URL とコードが届きます
  3. Trakt のウェブサイトでコードを入力してアプリを認証したら、認証が完了したことを Claude に伝えます
  4. Claude が認証状態を確認してから、個人データを取得します
  5. 今後のリクエストに備えて、認証トークンは ~/.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)も公開されます。

イメージタグトランスポート用途
:latestSSE(HTTP)リモートアクセス、ウェブクライアント、docker-compose
:latest-stdiostdioMCPhub、Claude Desktop、ローカル MCP クライアント
:stdiostdio: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

📄 ライセンス

MIT ライセンス


🧠 AI と人間の協力によって構築

Claude を活用

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。