mcpField
A
anime-mcp-server

anime-mcp-server

ローカル
github.com/cyanheadsゲーム・エンタメ22 週間前に更新

anime-mcp-server について

anime-mcp-server は、AniList、Jikan、Kitsu のデータを MCP クライアントに提供するアニメ・マンガ検索サーバーです。作品検索、詳細、シリーズ関係、放送予定、キャラクター、ランキング、スタジオ作品を扱い、AniList と MAL のスコアを別々に表示します。

主な機能

  1. 01アニメ・マンガの検索
  2. 02各サービスのスコアを含む詳細取得
  3. 03シリーズ関係のたどり
  4. 04放送予定と声優の確認
  5. 05おすすめ・ランキング・スタジオ作品の検索

活用シーン

  1. 01タイトル・ジャンル・シーズンによる作品検索
  2. 02AniList と MAL のスコア比較
  3. 03シリーズ関係や次回放送の確認
  4. 04キャラクター・声優・スタジオ作品の検索

MCP 対応

8 つのツールと anime://media/{id} リソースを MCP 経由で公開し、STDIO と Streamable HTTP に対応します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"cyanheads-anime": {
"command": "npx",
"args": [
"-y",
"@cyanheads/anime-mcp-server"
],
"env": {
"MCP_LOG_LEVEL": "<MCP_LOG_LEVEL>",
"MCP_TRANSPORT_TYPE": "<MCP_TRANSPORT_TYPE>",
"MCP_HTTP_HOST": "<MCP_HTTP_HOST>",
"MCP_HTTP_PORT": "<MCP_HTTP_PORT>",
"MCP_HTTP_ENDPOINT_PATH": "<MCP_HTTP_ENDPOINT_PATH>",
"MCP_AUTH_MODE": "<MCP_AUTH_MODE>"
}
}
}
}
起動コマンドnpx -y @cyanheads/anime-mcp-server
設定が必要な環境変数
MCP_LOG_LEVELSets the minimum log level for output (e.g., 'debug', 'info', 'warn').
MCP_TRANSPORT_TYPESelects the HTTP transport.
MCP_HTTP_HOSTThe hostname for the HTTP server.
MCP_HTTP_PORTThe port to run the HTTP server on.
MCP_HTTP_ENDPOINT_PATHThe endpoint path for the MCP server.
MCP_AUTH_MODEシークレットAuthentication mode to use: 'none', 'jwt', or 'oauth'.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@cyanheads/anime-mcp-server0.3.0

ツール

8

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
tagstringいいえAniList のタグフィルター。例:"Isekai"、"School"、"Time Manipulation"。"Action" などのジャンルはタグではありません。前後の空白は削除され、空白のみの場合は未指定として扱われます。
pageintegerいいえ1始まりのページ番号です。AniList が提供するのは最初の 5,000 件のみのため、page × per_page は 5,000 以下である必要があります。
sortarrayいいえソート順のリストです。デフォルト:query が設定されている場合は SEARCH_MATCH(タイトルの関連度)、それ以外は POPULARITY_DESC です。SEARCH_MATCH は query に基づく場合のみ順位付けします。
genrestringいいえジャンルフィルター。例:"Action"、"Romance"、"Slice of Life"、"Mecha"。前後の空白は削除され、空白のみの場合は未指定として扱われます。
querystringいいえタイトル検索クエリです。部分一致に対応しています。前後の空白は削除され、空白のみの場合は未指定として扱われます。
formatenumいいえ出版/放送フォーマットのフィルターです。TV | TV_SHORT | MOVIE | SPECIAL | OVA | ONA | MUSIC | MANGA | NOVEL | ONE_SHOT
seasonenumいいえアニメの放送シーズンです。WINTER=1~3月、SPRING=4~6月、SUMMER=7~9月、FALL=10~12月。WINTER | SPRING | SUMMER | FALL
statusenumいいえ制作状況のフィルターです。FINISHED | RELEASING | NOT_YET_RELEASED | CANCELLED | HIATUS
per_pageintegerいいえ1ページあたりの結果数です。上限は50です。page × per_page は5,000以下である必要があります。MyAnimeList へのフォールバックは25件以下の場合のみ実行されます。
media_typeenumはい検索するメディアの種類:anime または manga。ANIME | MANGA
season_yearintegerいいえ放送シーズンの4桁の年。例:2024。指定しない場合、すべての年から該当シーズンを検索します。
include_adultbooleanいいえMyAnimeList のフォールバック結果を含め、成人向け/NSFW コンテンツを含めます。デフォルトは false です。

詳細

@cyanheads/anime-mcp-server

MCP を通じて、アニメ・マンガを検索し、詳細情報、シリーズの関連作品、シーズン別スケジュール、キャラクター、ランキング、スタジオの作品一覧を取得できます。STDIO または Streamable HTTP に対応しています。

8 個のツール • 1 個のリソース

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework


概要

AniList、Jikan(MyAnimeList)、Kitsu のアニメ・マンガデータを利用できます。作品を検索し、AniList と MAL のスコアを並べて表示する詳細情報を取得できます。また、シリーズの関連作品をたどったり、放送スケジュールを確認したり、キャラクター、声優、スタジオの作品一覧を検索したりできます。

ツール
ツール説明
anime_search_mediaタイトル、ジャンル、タグ、シーズン、年、形式、またはステータスでアニメや漫画を検索します。ID、タイトル、スコア、形式、エピソード数/話数を含む、順位付けされた結果を返します。AniListを優先し、タイトルのみのクエリでAniListに一致する結果がない場合はJikan(MAL)をフォールバックとして使用します。
anime_get_mediaAniList IDを指定して、1つのアニメや漫画の詳細を取得します。あらすじ、形式、エピソード数/話数、ステータス、シーズン、スタジオ、原作、ジャンル、タグ(ネタバレのフラグ付き)、AniListとMALのスコアの比較、配信リンク、カバー/バナー、直接の関連作品を含みます。
anime_get_relationsホップ数の上限内で関連作品のグラフをたどります。主要作品と補足作品を関連度の優先順位、次に年ごとにまとめます。厳密な時系列順ではありません。
anime_get_scheduleシーズンまたは今後のエピソード期間の放送スケジュールです。シーズンモードでは、指定したシーズン/年に放送されるすべてのアニメを一覧表示します。今後の放送モードでは、日付の範囲内に放送される各作品の次のエピソードを、UTCタイムスタンプとカウントダウン付きで返します。
anime_find_characters作品のキャラクターと声優を検索するか、名前でキャラクター/声優を検索します。役割(メイン/サポート/背景)、言語別の声優、他のメディアへの相互リンクとともにキャラクターを返します。
anime_get_recommendationsAniListのおすすめと、対応するJikan(MAL)の投票数を返します。任意で、選んだ作品についてユーザーが気に入った点を反映し、おすすめの背景を説明できます。
anime_get_rankingsトップ、トレンド、またはシーズン別のランキングです。ジャンル、タグ、形式で絞り込めます。トップは全期間のスコア順、トレンドはAniListのトレンド順、シーズン別は現在または指定したシーズンの人気順です。
anime_get_studio名前またはAniListのスタジオIDで、スタジオの全作品一覧を取得します。スタジオが制作したすべての作品を、年またはスコアで並べ替えられます。形式、ステータス、エピソード数も含みます。
リソース
リソース説明
anime://media/{id}AniList IDによる簡潔なメディアレコードです。タイトル、あらすじ、スコア、ジャンル、配信数、カバー画像を含みます。注入可能なコンテキストに使える安定したURIです。

すべてのリソースデータはツールからも取得できます。リソースURIを取得する前に、anime_search_mediaを使ってAniList IDを見つけてください。


機能リファレンス

anime_search_media tool
  • タイトル、ジャンル、タグ、シーズン/年、形式、ステータス、または最大5つの並べ替え値でアニメや漫画を検索します。少なくとも1つの条件が必要です。page/per_pageで結果をページ分割できます(最大50件)。include_adult: trueを指定すると成人向け作品も含まれます
  • 結果にはAniList ID、タイトル、スコア、エピソード数/話数が含まれます。AniListを優先し、一致する結果がないタイトルのみの検索では、per_pageが25以下の場合にJikanへフォールバックすることがあります。has_next_pageに従ってください。total_resultsが正確なのは最終ページのみです
  • AniListでは、検索、シーズン、ランキングの各エントリーは先頭5,000件のみ提供されます。それより後のページはpage_depth_exceededで失敗するため、条件を絞り込んでください

anime_get_media tool
  • AniListのidを指定して詳細を取得します。成人向けコンテンツの取得にはinclude_adult: trueが必要です。anime_search_mediaを使ってIDを見つけてください
  • あらすじ、ジャンル、ネタバレのフラグ付きタグ、スタジオ、直接の関連作品、画像、配信リンク、AniListとMALそれぞれのスコアを返します。data_sourcesは補完データの取得に成功したソースを示します。IDが解決できなかった場合はnot_foundが返されます
  • full_text: trueを指定すると、完全な結果をフェンス付きJSONで返します。デフォルトでは、あらすじは500文字のプレビューで、タグと関連作品は省略件数とともに短縮されます

anime_get_relations tool
  • AniList の id を起点に、max_depth ホップまでフランチャイズをたどります(デフォルトは 2、最大 4)
  • シーズンの年とエピソード数/章数を含む main と supplementary のエントリーを、関連の優先度、次に年の順で返します。not_found はルート ID が解決されなかったことを示します
  • depth、parent_id、relation_to_parent、path は、各エントリーへの最短経路を示します。relation_to_root はルートに直接関連付けられたエントリーにのみ設定され、それ以外は null です。ホップ上限に達したエントリーは、そのエントリー自身の関連を伴わずに返されます。depth_reached は返された中で最も深いホップを示します

anime_get_schedule tool
  • season モードでは season と season_year が必要です。upcoming モードでは days_ahead を使用します(デフォルトは 7、最大 30)。page/per_page でページ分割できます(最大 50)。成人向けタイトルには include_adult: true が必要です
  • UTC の ISO 8601 放送時刻と time_until_airing_seconds を返します。has_next_page に従ってください。total_results が正確なのはシーズンの最終ページのみです。invalid_season と conflicting_inputs は無効なモード入力を示します

anime_find_characters tool
  • メディアの id、character_name、voice_actor_name のうち、ちょうど 1 つを指定します。language はメディアのキャスト検索にのみ適用されます。per_page の上限は 25 です
  • mode に応じて、キャスト、声優、またはメディアへの出演情報を返します。truncated: true は、上限に達したキャスト一覧の次ページに関する案内を含みます。media_not_found/not_found により、不明なメディア ID と一致する名前がない場合を区別します
  • voice_actor_data_available: false は、空の一覧とは異なり、プロバイダーに声優データがなかったことを示します。full_text: true を指定すると、ページ内のすべての役と完全な経歴をフェンス付き JSON として返します。デフォルトでは、経歴は 500 文字のプレビューで、スタッフの役職は 20 件までとなり、省略された項目数が示されます

anime_get_recommendations tool
  • AniList の id に対するおすすめを取得し、page/per_page でページ分割します(最大 25)。任意の liked_aspects は変更せずにそのまま返されます
  • anilist_rating と jikan_votes を分けて返し、sources で各情報の提供元を示します。truncated: true は次ページに関する案内を含みます。not_found はソース ID が解決されなかったことを示します

anime_get_rankings tool
  • top/trending の ANIME または MANGA をランキングします。シーズン別およびシーズン/年のフィルターは ANIME にのみ適用されます(それ以外では anime_only_season)。ジャンル/タグ/フォーマットのフィルターと page/per_page(最大 50)も利用できます。成人向けタイトルには include_adult: true が必要です
  • 各エントリーには 1 始まりの rank と season_label が含まれます。has_next_page に従ってください。total_results が正確なのは最終ページのみです。シーズン別モードでは、season と season_year を両方指定するか、どちらも指定せずに現在のシーズンを使用します(それ以外では invalid_season)

anime_get_studio tool
  • name または id のどちらか 1 つだけでスタジオを特定します。人気度、スコア、公開日のいずれかで並べ替え、page/per_page でページ分割します(最大 25)
  • ページ内のタイトルごとに 1 行を返し、is_main_studio でメインクレジットかどうかを示します。has_next_page に従ってください。total_titles が正確なのは、全作品が 1 ページ目に収まる場合のみです。not_found はスタジオが解決されなかったことを示します

anime://media/{id} resource
  • anime_search_media または anime_get_media で取得した AniList の id を使って、コンパクトな application/json 形式のメディアレコードを読み取ります
  • ID は 1 から 2147483647 までの整数である必要があります。それ以外の場合は、上流への呼び出し前に invalid_id で失敗します
  • タイトルの各種表記、あらすじ、スコア、ジャンル、配信数、カバー画像を返します。タグ、スタジオ、配信リンク、関連作品には anime_get_media を使用してください

機能

@cyanheads/mcp-ts-core を基盤としており、stdio および Streamable HTTP トランスポート、切り替え可能な認証(none/jwt/oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレーシングに対応した構造化ログを備えています。

アニメ・マンガに特化した機能:

  • 3つのソースを利用するアーキテクチャ:AniList GraphQL(メイン)、Jikan v4 REST(MAL スコア+おすすめ)、Kitsu JSON:API(字幕/吹き替えの言語情報を含む配信リンク)
  • AniList の idMal ブリッジを使用して ID を照合するため、ソース間で ID を推測する必要はありません
  • フランチャイズの関連グラフをたどり、関連タイプの優先度、次いでシーズンの年に基づくヒューリスティックで順序を決定します
  • レート制限を考慮したサービスレイヤー:AniList は30リクエスト/30秒で自動バックオフ、Jikan は呼び出し間隔を350ms以上に設定
  • API キー不要の設計 — 3つのソースはいずれも公開されており、API 認証情報は不要です

エージェントが扱いやすい出力:

  • 2種類のスコアを別々に提示 — AniList の meanScore(0~100)と MAL の score(0~10)に、エージェントが重みを判断できるよう母数(scored_by)を付加します。合成スコアにまとめることはありません
  • ネタバレフラグ — タグの概要ではネタバレタグと成人向けタグを非表示にします。構造化出力と full_text: true では、フラグ付きのすべてのタグを取得できます
  • 補足データの出所 — anime_get_media.data_sources には、AniList、MAL/Jikan、Kitsu のデータを取得できたかどうかが報告されます。補足データを利用できない場合、そのフラグは false のままです
  • タイムスタンプはすべて UTC。季節ラベル(WINTER 2024)もそのまま返し、冬/春/夏/秋の境界で起きる問題を回避します

はじめに

API キーは不要です — 3つの上流ソース(AniList、Jikan、Kitsu)はすべて、API キーなしで利用できる公開 API です。

MCP クライアントの設定ファイルに次の内容を追加します:

{
  "mcpServers": {
    "anime-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["@cyanheads/anime-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info"
      }
    }
  }
}

または npx を使用する場合(Bun は不要です):

{
  "mcpServers": {
    "anime-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@cyanheads/anime-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info"
      }
    }
  }
}

または Docker を使用する場合:

{
  "mcpServers": {
    "anime-mcp-server": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "MCP_TRANSPORT_TYPE=stdio",
        "ghcr.io/cyanheads/anime-mcp-server:latest"
      ]
    }
  }
}

Streamable HTTP を使用するには、トランスポートを設定してサーバーを起動します:

MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
  • Bun v1.4.0 以上(または Node.js v24 以上)。API キーは不要です。
インストール
  1. リポジトリをクローンします:
git clone https://github.com/cyanheads/anime-mcp-server.git
  1. ディレクトリに移動します:
cd anime-mcp-server
  1. 依存関係をインストールします:
bun install
  1. 環境を設定します(任意):
cp .env.example .env
# edit .env if you want to change transport or log level

設定

サーバー固有の環境変数は不要です。フレームワークの変数はすべて任意で、適切なデフォルト値が設定されています。

変数説明デフォルト
MCP_TRANSPORT_TYPEトランスポート:stdio または http。stdio
MCP_HTTP_PORTHTTP サーバーのポート。3010
MCP_HTTP_HOSTHTTP サーバーのホスト名。127.0.0.1
MCP_HTTP_ENDPOINT_PATHMCP サーバーのエンドポイントパス。/mcp
MCP_SESSION_MODEセッションモード:auto、stateful、または stateless。stateless
MCP_AUTH_MODE認証モード:none、jwt、または oauth。none
MCP_LOG_LEVELログレベル(RFC 5424):debug、info、notice、warning、error。info
LOG_TOOL_FAILURE_PAYLOADS失敗した呼び出しの引数と結果をログに記録します。キー名に基づいて機密情報を伏せ、LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES(デフォルトは 16384)を上限とします。自由形式の値に含まれる機密情報は伏せられません。false
OTEL_ENABLEDOpenTelemetry の計装を有効にします。false

任意の上書き設定の一覧は .env.example を参照してください。


サーバーの実行

ローカル開発
  • ビルドして実行:

    # One-time build
    bun run rebuild
    
    # Run the built server
    bun run start:stdio
    # or
    bun run start:http
    
  • チェックとテストを実行:

    bun run devcheck   # Lint, format, typecheck, security
    bun run test       # Vitest test suite
    bun run lint:mcp   # Validate MCP definitions against spec
    
Docker
docker build -t anime-mcp-server .
docker run --rm -p 3010:3010 anime-mcp-server

Dockerfile のデフォルトは HTTP トランスポート、ステートレスなセッションモードで、ログは /var/log/anime-mcp-server に出力されます。OpenTelemetry のピア依存関係はデフォルトでインストールされます。これらを省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。


プロジェクト構成

ディレクトリ用途
src/index.tscreateApp() のエントリーポイントです。ツールとリソースを登録し、サービスを初期化します。
src/mcp-server/toolsツール定義(*.tool.ts)です。
src/mcp-server/resourcesリソース定義(*.resource.ts)です。
src/services/anilistAniList GraphQL クライアントです。すべてのクエリの主要なデータソースです。
src/services/jikanJikan v4 REST クライアントです。MAL のスコアとおすすめを提供します。
src/services/kitsuKitsu JSON:API クライアントです。字幕・吹き替えの言語情報を含むストリーミングリンクを提供します。
tests/src/ の構成を反映した単体テストと統合テストです。
changelog/バージョンごとの変更履歴ファイル(changelog/<minor>.x/<version>.md)です。

開発ガイド

開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md/AGENTS.md を参照してください。要点は以下のとおりです。

  • ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジック内で try/catch を使わないでください。
  • リクエストスコープのログには ctx.log を、テナントスコープのストレージには ctx.state を使用してください。
  • 新しいツールとリソースは、src/mcp-server/*/definitions/index.ts のバレル経由で登録してください。
  • 外部 API の呼び出しはラップしてください。生データを検証し、ドメイン型に正規化してから、出力スキーマに従って返します。不足しているフィールドを決して捏造しないでください。
  • AniList を主要なデータソースとします。補助サービス(Jikan、Kitsu)の障害には、Promise.allSettled を使用して適切に対応します。

コントリビューション

Issue を歓迎します。提出前にチェックとテストを実行してください。

bun run devcheck
bun run test

ライセンス

Apache-2.0 — 詳細は LICENSE を参照してください。

コメント

MCP は初めてですか?

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

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