anime-mcp-server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@anime-mcp-serversearch for anime Attack on Titan"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 from any MCP client. Runs as a stdio process or a local Streamable HTTP server.
Tools
Tool | Description |
| Search 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. |
| Full 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. |
| Walks the related-works graph within a hop limit, preserving BFS discovery paths. Groups main and supplementary entries using a relation-priority/year heuristic, not a topological chronology. |
| Airing 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. |
| Characters 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. |
| AniList recommendations with matching Jikan (MAL) vote counts. Optionally echoes what the user liked about the source title to contextualize picks. |
| Top, 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. |
| A 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
Resource | Description |
| Compact media record by AniList ID — title, synopsis, scores, genres, streaming count, and cover image. Stable URI for injectable context. |
All resource data is also reachable via tools. Use anime_search_media to discover AniList IDs before fetching the resource URI.
Related MCP server: MyAnimeList MCP Server
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_pagepages results (max 50), andinclude_adult: trueopts into adult titlesResults 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_page25 or less. Followhas_next_page;total_resultsis exact only on the final page
anime_get_media tool
Fetch full detail by AniList
id, with adult content requiringinclude_adult: true; discover IDs throughanime_search_mediaReturns synopsis, genres, spoiler-flagged tags, studios, direct relations, images, streaming links, and separate AniList/MAL scores.
data_sourcesidentifies successful supplements;not_foundmeans the ID did not resolvefull_text: truerenders the complete domain result as fenced JSON. Default text uses a 500-character synopsis preview and bounded tag/relation details, with exact omission counts and a same-input retrieval instruction
anime_get_relations tool
Walk a franchise from an AniList
idup tomax_depthhops (default 2, max 4)Returns
mainandsupplementaryentries with season year and episode/chapter counts, ordered by relation priority then year.not_foundmeans the root ID did not resolvedepth,parent_id,relation_to_parent, andpathdescribe the first shortest BFS discovery path.relation_to_rootis populated only for direct root edges; root and deeper entries use null. Boundary nodes are returned without fetching their relations;depth_reachedis the maximum returned hop count
anime_get_schedule tool
seasonmode requiresseasonandseason_year;upcomingusesdays_ahead(default 7, max 30). Page withpage/per_page(max 50); adult titles requireinclude_adult: trueReturns UTC ISO 8601 airing times and
time_until_airing_seconds. Followhas_next_page;total_resultsis exact only on the final season page.invalid_seasonandconflicting_inputsidentify invalid mode inputs
anime_find_characters tool
Supply exactly one of media
id,character_name, orvoice_actor_name.languagefilters only media cast lookups;per_pageis capped at 25Returns cast, voice actors, or media appearances according to
mode.truncated: truecarries next-page guidance for capped cast lists;media_not_found/not_founddistinguish an unknown media ID from an unmatched nameCharacter appearances retain their own edge's media, role and actors;
voice_actor_data_available: falsedistinguishes unavailable provider data from an empty list.full_text: truerenders every role on this page and the full biography as fenced JSON; default biographies use 500-character previews and staff role details stop at 20, with exact omission counts
anime_get_recommendations tool
Fetch recommendations for an AniList
id, paging withpage/per_page(max 25); optionalliked_aspectsis echoed unchangedReturns separate
anilist_ratingandjikan_votes, withsourcesidentifying each contribution.truncated: truesupplies next-page guidance;not_foundmeans the source ID did not resolve
anime_get_rankings tool
Rank
ANIMEorMANGAintop/trending;seasonaland season/year filters apply only toANIME(anime_only_seasonotherwise). Genre/tag/format filters andpage/per_page(max 50) remain available. Adult titles requireinclude_adult: trueEntries carry 1-based
rankandseason_label. Followhas_next_page;total_resultsis exact only on the final page. Seasonal mode takesseason/season_yeartogether or neither for the current season (invalid_seasonotherwise)
anime_get_studio tool
Identify a studio with exactly one of
nameorid; sort by popularity, score, or release date and page withpage/per_page(max 25)Returns one row per distinct title within the page, with
is_main_studioidentifying main credits. Followhas_next_page;total_titlesis exact only when the whole filmography fits on page 1.not_foundmeans the studio did not resolve
anime://media/{id} resource
Read a compact
application/jsonmedia record using an AniListidfromanime_search_mediaoranime_get_mediaThe complete SDK-parsed ID segment must contain ASCII decimal digits representing 1–2147483647. Leading zeros are accepted; nondecimal suffixes, encoded whitespace, fractions, exponents, zero and overflow fail with
invalid_idbefore upstream work. Transport URL normalization can strip literal tabs, newlines and trailing ASCII spaces before matchingReturns title variants, synopsis, scores, genres, streaming count, and cover image; use
anime_get_mediafor 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.
AniList serves only the first 5,000 search, season, and ranking entries. The last reachable page carries a notice when more matches exist; deeper pages fail with page_depth_exceeded. Narrow the criteria or request a lower page.
AniList ID inputs are bounded to 1–2147483647. Optional enum inputs accept the exact empty-string form sentinel as absent; other unsupported values, including whitespace, still fail. Search sort lists drop blank items; an all-blank list uses omitted-sort behavior. Blank studio sort uses POPULARITY_DESC. Required media types and modes remain required.
Provider text is escaped at the summary render boundary; structured data stays canonical. Media and character full_text JSON preserves complete domain values on the current response, while enrichment remains in its trailing content block. Upstream schedule pages request TIME order before pagination, preserving equal airing timestamps.
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
idMalbridge — no cross-source ID guessingFranchise 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 MALscore(0–10) with population size (scored_by) so agents can reason about weight; never blended into a compositeSpoiler flags — the tag summary hides spoiler/adult tags; the first five detailed tags retain their flags. Complete tagged data is available in structured output and with
full_text: trueSupplement provenance —
anime_get_media.data_sourcesreports whether AniList, MAL/Jikan, and Kitsu data was retrieved; an unavailable supplement leaves its flag falseUTC 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:
{
"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):
{
"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:
{
"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:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcpPrerequisites
Bun v1.4.0 or higher (or Node.js v24+). No API keys needed.
Installation
Clone the repository:
git clone https://github.com/cyanheads/anime-mcp-server.gitNavigate into the directory:
cd anime-mcp-serverInstall dependencies:
bun installConfigure environment (optional):
cp .env.example .env
# edit .env if you want to change transport or log levelConfiguration
No server-specific env vars are required. All framework variables are optional with sensible defaults.
Variable | Description | Default |
| Transport: |
|
| Port for HTTP server. |
|
| Hostname for HTTP server. |
|
| Endpoint path for the MCP server. |
|
| Overrides the source-declared default: |
|
| Auth mode: |
|
| Log level (RFC 5424): |
|
| Log failed calls' arguments and results, redacted by key name and capped at |
|
| Enable OpenTelemetry instrumentation. |
|
See .env.example for the full list of optional overrides.
Running the server
Local development
Build and run:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:httpRun checks and tests:
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-serverThe 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
Directory | Purpose |
|
|
| Tool definitions ( |
| Resource definitions ( |
| AniList GraphQL client — primary source for all queries. |
| Jikan v4 REST client — MAL scores and recommendations. |
| Kitsu JSON:API client — streaming links with sub/dub language detail. |
| Unit and integration tests mirroring |
| Per-version changelog files ( |
Development guide
See CLAUDE.md/AGENTS.md for development guidelines and architectural rules. The short version:
Handlers throw, framework catches — no
try/catchin tool logicUse
ctx.logfor request-scoped logging,ctx.statefor tenant-scoped storageRegister new tools and resources via the barrels in
src/mcp-server/*/definitions/index.tsWrap 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:
bun run devcheck
bun run testLicense
Apache-2.0 — see LICENSE for details.
This server cannot be deployed
Maintenance
Related MCP Connectors
Unlock a world of television with the TV Maze MCP server. Effortlessly search for shows by name or
MCP server for AI dialogue using various LLM models via AceDataCloud
Capability registry for the agentic economy. Semantic search over verified MCP server listings.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that provides access to MyAnimeList's API for anime and manga data. It enables users to search, view rankings, manage their personal lists, and get recommendations through Claude and other MCP clients.69 npm1MIT
- AlicenseBqualityDmaintenanceMCP Server for interacting with the MyAnimeList API, allowing LLM clients to access and interact with anime, manga and more.154MIT
- AlicenseAqualityAmaintenanceMCP server for MyAnimeList that enables searching anime/manga, getting details, rankings, seasons, characters, reviews, and user profiles without authentication, and managing personal anime/manga lists with authentication (token required).5469 npm3MIT
- AlicenseAqualityAmaintenanceMCP server for Anime News Network, enabling search of anime and manga encyclopedia entries, retrieval of details like cast, staff, and episodes, and access to news feeds. No API key or configuration required.456 npmMIT