Anime Mcp Server

io.github.cyanheads由 GitHub 帳號 cyanheads 發布v0.4.0更新於 Oct 30, 2026

Search anime/manga, franchise relations, schedule, characters, rankings, studio filmography.

概覽

AI 產生的概覽

搜尋動畫與漫畫,並提供詳細資料、系列關聯、播出時刻表、角色、排行榜與製作公司作品列表,資料來自 AniList、Jikan 和 Kitsu。

可以做什麼
  • 依標題、類型、標籤、季度、年份、形式或狀態搜尋動畫或漫畫,並依 AniList ID 取得單一作品的完整資料
  • 沿系列關聯作品圖向上追溯數層,並查看某季的播出時刻表或即將播出的集數
  • 依作品或依姓名查詢角色與聲優
  • 分頁取得推薦、熱門/趨勢/季度排行榜,以及某製作公司的作品列表
  • 透過固定資源 URI 讀取精簡的作品紀錄
適用情境
適合讓助理進行動畫與漫畫研究:尋找作品、查看當季播出、釐清續作與外傳關係、整理製作公司作品,或比較 AniList 與 MyAnimeList 的評分。
執行需求
以本機 stdio 程序執行,可透過 npx 或 bunx 啟動(需 Bun v1.4.0+ 或 Node.js v24+),也可使用 Docker 映像;同時支援 Streamable HTTP。不需要 API 金鑰。選用環境變數可設定傳輸方式(MCP_TRANSPORT_TYPE)、HTTP 主機、連接埠與路徑、驗證模式及日誌等級。需要能連線至 AniList、Jikan 和 Kitsu 的網路。
安裝前請注意
資料全部來自第三方公開 API(AniList、Jikan、Kitsu),查詢內容與作品名稱會傳送給這些服務。受上游速率限制影響,超出 AniList 前 5000 筆的深層分頁會失敗。成人內容僅在明確開啟時回傳。啟用 LOG_TOOL_FAILURE_PAYLOADS 會記錄失敗呼叫的參數與結果,且自由文字中的機密資訊不會被遮蔽。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Anime Mcp Server,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

@cyanheads/anime-mcp-server

Search anime/manga, get full detail, franchise relations, seasonal schedule, characters, rankings, and studio filmography via MCP. STDIO or Streamable HTTP.

8 Tools • 2 Resources


Overview

Anime and manga data from AniList, Jikan (MyAnimeList), and Kitsu. Search titles, pull full detail with side-by-side AniList and MAL scores, walk a franchise's relation graph, check the airing schedule, and look up characters, voice actors, and studio filmographies.

Tools

ToolDescription
anime_search_mediaSearch anime or manga by title, genre, tag, season, year, format, or status. Returns ranked results with IDs, titles, scores, format, and episode/chapter counts. AniList primary; Jikan (MAL) fallback when AniList has no match for a title-only query.
anime_get_mediaFull detail for one anime or manga by AniList ID — synopsis, format, episode/chapter count, status, season, studios, source material, genres and tags (spoiler-flagged), AniList and MAL scores side by side, streaming links, cover/banner, and direct relations.
anime_get_relationsWalks the related-works graph within a hop limit. Groups main and supplementary entries by relation priority, then year; not a strict chronology.
anime_get_scheduleAiring schedule for a season or upcoming episode window. Season mode lists all anime airing in a given season/year. Upcoming mode returns the next episode for each airing title within a date window, with UTC timestamp and countdown.
anime_find_charactersCharacters and voice actors for a title, or look up a character/VA by name. Returns characters with role (main/supporting/background), voice actors by language, and cross-links to other media.
anime_get_recommendationsPage AniList recommendations with matching MAL votes, or Jikan candidates resolved through AniList. Reports the selected source and Jikan availability; optionally echoes what you liked.
anime_get_rankingsTop, trending, or seasonal rankings. Filterable by genre, tag, and format. Top returns all-time by score; trending uses AniList's trending order; seasonal returns the current or specified season sorted by popularity.
anime_get_studioA studio's full filmography by name or AniList studio ID — all titles the studio produced, sortable by year or score, with format, status, and episode count.

Resources

ResourceDescription
anime://media/{id}Compact media record by AniList ID — title, synopsis, scores, genres, streaming count, and cover image. Stable URI for injectable context.
skill://anime-guide/SKILL.mdCaller guide for franchise research, cast-to-career lookups, studio filmographies, and recommendation coverage. Also included in plugin, npm, Docker, and MCPB installs.

Media resource data is also reachable via tools. Use anime_search_media to discover AniList IDs before fetching its resource URI.


Capability reference

anime_search_media tool

  • Search anime or manga by title, genre, tag, season/year, format, status, or up to 5 sort values; at least one criterion is required. page/per_page pages results (max 50), and include_adult: true opts into adult titles
  • Results carry AniList IDs, titles, scores, and episode/chapter counts. AniList is primary; title-only searches with no match can fall back to Jikan at per_page 25 or less. Follow has_next_page; total_results is exact only on the final page
  • AniList serves only the first 5,000 search, season, and ranking entries; deeper pages fail with page_depth_exceeded, so narrow the criteria instead

anime_get_media tool

  • Fetch full detail by AniList id, with adult content requiring include_adult: true; discover IDs through anime_search_media
  • Returns synopsis, genres, spoiler-flagged tags, studios, direct relations, images, streaming links, and separate AniList/MAL scores. data_sources identifies successful supplements; not_found means the ID did not resolve
  • full_text: true returns the complete result as fenced JSON; by default the synopsis is a 500-character preview and tags and relations are shortened, with counts of what was omitted

anime_get_relations tool

  • Walk a franchise from an AniList id up to max_depth hops (default 2, max 4)
  • Returns main and supplementary entries with season year and episode/chapter counts, ordered by relation priority then year. not_found means the root ID did not resolve
  • depth, parent_id, relation_to_parent, and path show the shortest route to each entry. relation_to_root is set only for entries linked directly to the root, and is null otherwise. Entries at the hop limit are returned without their own relations; depth_reached is the deepest hop returned

anime_get_schedule tool

  • season mode requires season and season_year; upcoming uses days_ahead (default 7, max 30). Page with page/per_page (max 50); adult titles require include_adult: true
  • Returns UTC ISO 8601 airing times and time_until_airing_seconds. Follow has_next_page; total_results is exact only on the final season page. invalid_season and conflicting_inputs identify invalid mode inputs

anime_find_characters tool

  • Supply exactly one of media id, character_name, or voice_actor_name. language filters only media cast lookups; per_page is capped at 25
  • Returns cast, voice actors, or media appearances according to mode. truncated: true carries next-page guidance for capped cast lists; media_not_found/not_found distinguish an unknown media ID from an unmatched name
  • voice_actor_data_available: false means the provider had no voice actor data, as opposed to an empty list. full_text: true returns every role on the page and the full biography as fenced JSON; by default biographies are 500-character previews and staff roles stop at 20, with counts of what was omitted

anime_get_recommendations tool

  • Fetch recommendations for an AniList id with source: "anilist" (default) or source: "jikan"; optional liked_aspects is echoed unchanged. AniList pages its recommendations and adds matching MAL votes. Jikan deduplicates its supplied list by maximum votes, orders votes descending/MAL ID ascending, and locally pages candidates with page/per_page (max 25) before resolving that slice through AniList. Adult and unresolved candidates are omitted; has_next_page still follows candidate pages. Jikan does not guarantee a global ranking or a stable snapshot across calls
  • Both surfaces report source and jikan_status (available, unavailable, or not_applicable when the source lacks a MAL ID), plus separate anilist_rating, jikan_votes, and item sources. Jikan mode uses null anilist_rating and sources: ["jikan"]. Optional annotation failures retain AniList results; selected Jikan/resolution failures return retry-or-switch guidance. truncated: true supplies continuation with the same source; not_found means the source ID did not resolve, while valid empty pages succeed

anime_get_rankings tool

  • Rank ANIME or MANGA in top/trending; seasonal and season/year filters apply only to ANIME (anime_only_season otherwise). Genre/tag/format filters and page/per_page (max 50) remain available. Adult titles require include_adult: true
  • Entries carry 1-based rank and season_label. Follow has_next_page; total_results is exact only on the final page. Seasonal mode takes season/season_year together or neither for the current season (invalid_season otherwise)

anime_get_studio tool

  • Identify a studio with exactly one of name or id; sort by popularity, score, or release date and page with page/per_page (max 25)
  • Returns one row per distinct title within the page, with is_main_studio identifying main credits. Follow has_next_page; total_titles is exact only when the whole filmography fits on page 1. not_found means the studio did not resolve

anime://media/{id} resource

  • Read a compact application/json media record using an AniList id from anime_search_media or anime_get_media
  • The ID must be a whole number from 1 to 2147483647; anything else fails with invalid_id before any upstream call
  • Returns title variants, synopsis, scores, genres, streaming count, and cover image; use anime_get_media for tags, studios, streaming links, and relations

Features

Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.

Anime/manga-specific:

  • Three-source architecture: AniList GraphQL (primary), Jikan v4 REST (MAL scores + recommendations), Kitsu JSON:API (streaming links with sub/dub language detail)
  • ID reconciliation via AniList's idMal bridge — no cross-source ID guessing
  • Franchise relation graph traversal with heuristic ordering by relation-type priority, then season year
  • Rate-limit-aware service layer: AniList 30 req/30s with automatic backoff; Jikan 350ms floor between calls
  • Keyless by design — all three sources are public and require no API credentials

Agent-friendly output:

  • Dual scores surfaced separately — AniList meanScore (0–100) and MAL score (0–10) with population size (scored_by) so agents can reason about weight; never blended into a composite
  • Spoiler flags — the tag summary hides spoiler/adult tags; structured output and full_text: true carry all tags with their flags
  • Supplement provenance — anime_get_media.data_sources reports whether AniList, MAL/Jikan, and Kitsu data was retrieved; an unavailable supplement leaves its flag false
  • UTC timestamps throughout; season labels echoed (WINTER 2024) to avoid the winter/spring/summer/fall boundary footgun

Getting started

No API keys required — all three upstream sources (AniList, Jikan, Kitsu) are keyless public APIs.

Add the following to your MCP client configuration file:

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

Or with npx (no Bun required):

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

Or with Docker:

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

For Streamable HTTP, set the transport and start the server:

sh
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http# Server listens at http://localhost:3010/mcp

Prerequisites

  • Bun v1.4.0 or higher (or Node.js v24+). No API keys needed.

Installation

  1. Clone the repository:
sh
git clone https://github.com/cyanheads/anime-mcp-server.git
  1. Navigate into the directory:
sh
cd anime-mcp-server
  1. Install dependencies:
sh
bun install
  1. Configure environment (optional):
sh
cp .env.example .env# edit .env if you want to change transport or log level

Configuration

No server-specific env vars are required. All framework variables are optional with sensible defaults.

VariableDescriptionDefault
MCP_TRANSPORT_TYPETransport: stdio or http.stdio
MCP_HTTP_PORTPort for HTTP server.3010
MCP_HTTP_HOSTHostname for HTTP server.127.0.0.1
MCP_HTTP_ENDPOINT_PATHEndpoint path for the MCP server./mcp
MCP_SESSION_MODESession mode: auto, stateful, or stateless.stateless
MCP_AUTH_MODEAuth mode: none, jwt, or oauth.none
MCP_LOG_LEVELLog level (RFC 5424): debug, info, notice, warning, error.info
LOG_TOOL_FAILURE_PAYLOADSLog failed calls' arguments and results, redacted by key name and capped at LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES (default 16384). Secrets inside free-form values are not redacted.false
OTEL_ENABLEDEnable OpenTelemetry instrumentation.false

See .env.example for the full list of optional overrides.


Running the server

Local development

  • Build and run:

    sh
    # One-time buildbun run rebuild
    # Run the built serverbun run start:stdio# orbun run start:http
  • Run checks and tests:

    sh
    bun run devcheck   # Lint, format, typecheck, securitybun run test       # Vitest test suitebun run lint:mcp   # Validate MCP definitions against spec

Docker

sh
docker build -t anime-mcp-server .docker run --rm -p 3010:3010 anime-mcp-server

The Dockerfile defaults to HTTP transport, stateless session mode, and logs to /var/log/anime-mcp-server. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.


Project structure

DirectoryPurpose
src/index.tscreateApp() entry point — registers tools, resources, and inits services.
src/mcp-server/toolsTool definitions (*.tool.ts).
src/mcp-server/resourcesResource definitions (*.resource.ts).
src/services/anilistAniList GraphQL client — primary source for all queries.
src/services/jikanJikan v4 REST client — MAL scores and recommendations.
src/services/kitsuKitsu JSON:API client — streaming links with sub/dub language detail.
tests/Unit and integration tests mirroring src/.
skills/Published caller guide, available through plugins and MCP skill discovery.
changelog/Per-version changelog files (changelog/<minor>.x/<version>.md).

Development guide

See CLAUDE.md/AGENTS.md for development guidelines and architectural rules. The short version:

  • Handlers throw, framework catches — no try/catch in tool logic
  • Use ctx.log for request-scoped logging, ctx.state for tenant-scoped storage
  • Register new tools and resources via the barrels in src/mcp-server/*/definitions/index.ts
  • Wrap external API calls: validate raw → normalize to domain type → return output schema; never fabricate missing fields
  • AniList is primary — supplement failures (Jikan, Kitsu) degrade gracefully via Promise.allSettled

Contributing

Issues are welcome. Run checks and tests before submitting:

sh
bun run devcheckbun run test

License

Apache-2.0 — see LICENSE for details.

來源:README.md,提交 00d5286

工具

8

anime_search_media

Anime Search Media

Search anime or manga by title, genre, tag, season, year, format, or status. Needs at least one criterion — a sort other than SEARCH_MATCH alone browses the whole catalog. Returns ranked results with AniList IDs, titles, scores, format, and episode/chapter counts. When AniList has no match for a title-only query, falls back to MyAnimeList (via Jikan) and maps its rows to AniList IDs.

輸入參數tagpagesortgenrequeryformatseasonstatusper_pagemedia_type必填season_yearinclude_adult

anime_get_media

Anime Get Media

Full detail for one anime or manga by AniList ID. Returns synopsis, format, episode/chapter count, status, season, studios, source material, genres and tags (spoiler-flagged), AniList and MAL scores side by side, streaming links, cover/banner, and direct relations. Use anime_search_media first to find the AniList ID.

輸入參數id必填full_textinclude_adult

anime_get_relations

Anime Get Relations

Franchise untangler. Walks the related-works graph from a media ID across multiple hops — sequels, prequels, side stories, movies, OVAs, source/adaptation — and returns them ordered by a relation-priority/year heuristic, not a topological franchise chronology. Use anime_get_media first to confirm the ID.

輸入參數id必填max_depth

anime_get_schedule

Anime Get Schedule

Airing schedule for a season or upcoming episode window. "season" mode returns all anime airing in a given season/year. "upcoming" mode returns next episode for airing titles within a date window, with UTC timestamps.

輸入參數mode必填pageseasonper_pagedays_aheadseason_yearinclude_adult

anime_find_characters

Anime Find Characters

Characters and voice actors for a title, or look up a character/VA by name. Provide "id" for title → cast lookup, or "character_name" / "voice_actor_name" for name-based lookup. Returns characters with their role, voice actors by language, and cross-links to other media.

輸入參數idpagelanguageper_pagefull_textcharacter_namevoice_actor_name

anime_get_recommendations

Anime Get Recommendations

Find recommendations for an AniList media ID. source anilist (default) pages AniList community recommendations and adds matching MAL vote counts when available. source jikan deduplicates the list supplied by Jikan using maximum votes, sorts by votes descending then MAL ID ascending, pages those candidates locally, and resolves up to 25 selected IDs through AniList; adult and unresolved candidates are omitted without changing candidate pagination. Jikan pages do not guarantee a global ranking or a snapshot across calls. Check source, jikan_status and has_next_page; repeat the same source, id and per_page with the next page to continue. Ratings and vote counts stay separate. Selected-source failures require retrying or switching to anilist; optional annotation failure is reported as unavailable.

輸入參數id必填pagesourceper_pageliked_aspects

anime_get_rankings

Anime Get Rankings

Top, trending, or seasonal rankings. Filterable by genre, tag, and format. "top" returns all-time by score; "trending" returns current week; "seasonal" returns the current or specified ANIME season sorted by popularity; MANGA supports top/trending without season/year filters.

輸入參數tagmode必填pagegenreformatseasonper_pagemedia_type必填season_yearinclude_adult

anime_get_studio

Anime Get Studio

A studio's full filmography by name or AniList studio ID. Returns all titles the studio produced, sortable by year or score, with format, status, and episode count. Provide "name" for a name-based search, or "id" for direct lookup by AniList studio ID.

輸入參數idnamepagesortper_page

版本歷史

6
  1. v0.4.0最新Oct 30, 2026
  2. v0.3.0Oct 13, 2026
  3. v0.2.1Oct 7, 2026
  4. v0.2.0Sep 24, 2026
  5. v0.1.8Sep 20, 2026
  6. v0.1.7Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分