AniList MCP Server (Unofficial)

io.github.Grinv由 GitHub 账号 Grinv 发布v0.11.0更新于 Oct 30, 2026

MCP server for the AniList GraphQL API — anime/manga search, details, and personal list management.

概览

AI 生成的概览

非官方 AniList 服务器,可搜索动漫、漫画、角色、制作人员和工作室,并管理自己的 AniList 列表、收藏和动态。

可以做什么
  • 搜索和浏览动漫、漫画、角色、制作人员、工作室与用户,支持类型、标签和排行筛选
  • 读取作品详情、统计、角色、制作人员、评论、关联作品、推荐和播出时间表
  • 查询类型、标签、站点统计、今日生日、论坛帖子和动态流
  • 管理自己的列表:添加、更新、批量更新和删除条目,切换收藏
  • 发布、修改和删除自己的动态、论坛帖子和评论,关注用户并查看通知
适用场景
适合让助手基于 AniList 实时数据回答动漫、漫画相关问题,或在对话中维护自己的 AniList 列表、收藏和社交动态。仅做只读查询时完全无需配置。
运行要求
通过 npx 或 .mcpb 包在本地以 stdio 运行;npx 和源码安装需要 Node.js 22.18 或更高版本。只读工具无需任何凭据。个人与社交工具需要 AniList 应用的 ANILIST_CLIENT_ID 和 ANILIST_CLIENT_SECRET,并执行一次 login_anilist,或预先设置 ANILIST_ACCESS_TOKEN。可选 ANILIST_OAUTH_PORT 和 ANILIST_TOKEN_STORE。配置需通过客户端的 env 块传入,服务器不读取 .env 文件。
安装前请注意
个人工具会操作真实的 AniList 账号,可写入、发布和删除:列表条目、收藏、关注、动态、帖子和评论,且删除无法撤销。ANILIST_CLIENT_SECRET 和 ANILIST_ACCESS_TOKEN 属于机密;登录令牌会保存在本地磁盘(路径可用 ANILIST_TOKEN_STORE 更改)。除非设置 sfw,否则不会过滤成人内容。非官方项目,与 AniList 无关联。

安装

在 SourceWeft 中

  1. 打开 控制台中的 AniList MCP Server (Unofficial),将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

AniList MCP Server (Unofficial)

[npm version] [CI] [license: MIT] [MCP Registry] [anilist-mcp-server MCP server]

An MCP server for AniList. It works with any MCP-compatible client or agent (Claude Desktop/Code, Cursor, VS Code, Cline, Continue, and others). It speaks the standard MCP stdio protocol.

What it does

Talks directly to AniList's public GraphQL API (https://graphql.anilist.co):

  • Reads (no credentials needed). Search and browse anime/manga, characters, staff, studios; genres/tags; recommendations; forum threads; activity feeds; public/unlisted user profiles and lists.
  • Your own AniList account (requires a one-time login). Manage your own anime/manga list (add/update/remove entries), favourites, follows, your notifications, and post/delete your own activity and threads.

What you need (and what it gets you)

Nothing is required to get started, so you can skip straight to Install. Everything below is optional:

You set...You get...
(nothing)Search, details, genres/tags, recommendations, threads, activity, public profiles/lists. Works immediately.
An AniList Client ID + Client Secret (2 minutes, free →), plus running login_anilist onceEverything above, plus your own AniList account: manage your list, favourites, follows, activity, and threads.

Without a login, the personal/mutation tools reply with a clear message telling you how to get one; everything else keeps working regardless.

Example queries

Once it's connected, just ask your agent in natural language.

No credentials needed:

"Search for the anime Frieren and show its score, genres and synopsis.""What recommendations does AniList have for fans of Steins;Gate?""Show me today's birthday characters.""What genres and tags does AniList use for anime?""Show the public profile and stats for user <username>.""What's in <username>'s AniList anime list marked as watching?"

With your AniList account (after a one-time login_anilist; see Connect your AniList account):

"Add Frieren to my AniList plan-to-watch list.""Set Cowboy Bebop to completed on my AniList with a score of 9.""Follow user <username> for me.""Post a text update to my AniList activity feed.""What are my unread AniList notifications?"

Tools

ToolAuth
get_genres, get_media_tags, get_site_statistics, get_studionone
get_media, get_media_statistics, get_media_characters, get_media_staffnone
get_media_reviews, get_media_relations, get_anime_schedulenone
get_character, get_staff, get_todays_birthdaysnone
get_recommendation, get_recommendations_for_medianone
search_media, search_character, search_staff, search_studio, search_user, search_activitynone
search_thread, get_thread, get_thread_commentsnone
get_user_profile, get_user_stats, get_full_user_info, get_user_recent_activitynone
get_activity, get_user_activitynone
get_user_listnone
toggle_favouritetoken
add_list_entry, update_list_entry, update_list_entries, remove_list_entrytoken
post_text_activity, post_message_activity, delete_activitytoken
post_thread, post_thread_comment, delete_thread, delete_thread_commenttoken
get_authorized_user, toggle_follow_user, update_usertoken
get_notificationstoken
login_anilist, submit_anilist_redirectlogin

token = needs an AniList login (run login_anilist once). A few none tools also have a filter that does: onList on search_media/get_character/ get_staff/get_studio, isFollowing on search_activity, and excludeInList on get_recommendations_for_media error without a login.

Prompts

Reusable multi-step plans your client can offer as one-click flows: recommend_similar, seasonal_overview, hidden_gems, catch_up_activity, check_notifications.

Install

The npx and from-source installs run on your own Node.js, which must be ≥ 22.18.

As an .mcpb bundle (one-click, e.g. Claude Desktop)

Download anilist-mcp-server.mcpb (always the latest release) and open it with your MCP client. It prompts for an optional AniList Client ID and Client Secret. Set them and run the login_anilist tool to enable the personal-list/social tools (see Connect your AniList account). Leave them blank to use just the credential-free read tools.

Via npx (no install)

Published on npm as anilist-mcp-server. Add it to your client's MCP config (Claude Desktop/Code, Cursor, VS Code, Cline, …):

json
{  "mcpServers": {    "anilist": {      "command": "npx",      "args": ["-y", "anilist-mcp-server"],      "env": {        "ANILIST_CLIENT_ID": "...",        "ANILIST_CLIENT_SECRET": "..."      }    }  }}

Or with the Claude Code CLI:

sh
claude mcp add anilist -e ANILIST_CLIENT_ID=... -e ANILIST_CLIENT_SECRET=... -- npx -y anilist-mcp-server

From source

sh
git clone https://github.com/Grinv/anilist-mcp-servercd anilist-mcp-servernpm cinpm run build

This produces a self-contained dist/index.js. Point your client at it the same way as above, swapping "command": "npx", "args": ["-y", "anilist-mcp-server"] for "command": "node", "args": ["/absolute/path/to/anilist-mcp-server/dist/index.js"] (and npx -y anilist-mcp-server for node /absolute/path/to/anilist-mcp-server/dist/index.js in the CLI form).

The env block (shown above for both install methods) is optional: omit it to use only the credential-free read tools; the personal/mutation tools return a clear error until you log in. To enable them, set ANILIST_CLIENT_ID + ANILIST_CLIENT_SECRET and run the login_anilist tool once (a one-time browser authorization; the token is then stored and reused). The server does not read a .env file, so pass config via this env block (or your shell environment). See docs/auth.md for the full login walkthrough and docs/clients.md for more clients.

Connect your AniList account

The search/browse tools work with no setup. To use the personal/mutation tools, authorize your account once. It takes about two minutes.

Step 1: Register an AniList app (one minute).

  1. Go to https://anilist.co/settings/developer and click Create New Client.
  2. Name: anything.
  3. Redirect URL: enter exactly
    http://localhost:8082/callback
    (If port 8082 is already used on your machine, pick another port here and set ANILIST_OAUTH_PORT to the same number, see Configuration.)
  4. Save. Copy the Client ID and Client Secret.

Step 2: Give the credentials to the server.

json
"env": { "ANILIST_CLIENT_ID": "...", "ANILIST_CLIENT_SECRET": "..." }

Restart the server/client so it picks up the values.

Step 3: Log in (one click).

In your assistant, run the login_anilist tool (or just say "log in to AniList"). It replies with a link. Open the link, sign in to AniList, and click Approve.

  • Running locally (Claude Desktop, or Claude Code on your own machine): login finishes automatically as soon as you click Approve. Confirm with "show my AniList profile" (get_authorized_user).
  • Running on a remote/SSH/headless host: after clicking Approve your browser lands on a page that won't load; that's expected. Copy the full address from the browser's address bar (it contains ?code=…) and give it to the submit_anilist_redirect tool to finish.

That's it. The token is saved locally (~/.config/anilist-mcp-server/tokens.json, 0600). AniList access tokens don't expire for about a year and there's no refresh mechanism, so you'll need to run login_anilist again once it does.

Prefer no interactive step? Pre-set a standalone ANILIST_ACCESS_TOKEN instead. See docs/auth.md.

Configuration

All configuration is via environment variables, all optional; without credentials the read tools still work.

VariablePurpose
ANILIST_CLIENT_IDYour AniList app's Client ID (see Connect your AniList account).
ANILIST_CLIENT_SECRETYour AniList app's Client Secret, paired with the Client ID above.
ANILIST_ACCESS_TOKENAdvanced, optional. Pre-supply a token instead of running login_anilist. See docs/auth.md.
ANILIST_TOKEN_STOREOverride where the login token is saved on disk (default: your OS's config folder).
ANILIST_OAUTH_PORTOnly needed if port 8082 is already in use (see step 1 of the account walkthrough).
LOG_LEVELHow much the server logs: debug | info | warn | error | silent (default info).

Tuning (rarely needed)

VariablePurpose
ANILIST_MIN_INTERVAL_MSMin spacing between AniList calls (default 2100, i.e. ~30/min, since AniList's API is currently in a documented degraded state; see docs/api-references.md). Set to 0 to disable client-side throttling.
CACHE_TTL_MSTTL for the in-memory read cache (default 300000 = 5 min).
HTTP_TIMEOUT_MS, HTTP_RETRIESPer-request timeout (default 15000) and retry attempts for transient failures (default 2).
ANILIST_GRAPHQL_URL, ANILIST_OAUTH_BASE_URLOverride upstream base URLs.

Provide these in your MCP client config's env block (the server does not read a .env file). See docs/auth.md for how to obtain the credentials, and docs/clients.md for client configuration snippets.

NSFW content

NSFW (adult) results are not filtered by default; the server returns whatever AniList provides. search_media accepts an optional sfw parameter; set sfw: true to exclude adult entries.

Development

sh
npm run build        # type-check + bundle to dist/npm test             # node:test suite (mocked, offline)npm run test:coveragenpm run lintnpm run formatnpm run check:api    # live health-check of the AniList GraphQL endpointnpm run inspector    # run under the MCP Inspector

Runtime requires Node ≥ 22.18. See AGENTS.md for contributor/agent guidance, including why this server exists and how it avoids the upstream bug that motivated building it.

Updating

To be notified of new versions, click Watch → Releases on GitHub.

  • .mcpb bundle: download the new anilist-mcp-server.mcpb from the releases page and reinstall it in your client (it replaces the old version).
  • npx: unpinned npx -y anilist-mcp-server fetches the latest on the next run.
  • From source: git pull && npm ci && npm run build.

See the CHANGELOG for what changed in each release.

Attribution and terms

This is an unofficial project and is not affiliated with or endorsed by AniList. All data comes from the public AniList GraphQL API; personal-account operations use your own AniList account and token. Use is subject to AniList's Terms of Service.

Privacy Policy

This server runs locally on your machine and has no telemetry of its own. Personal/mutation tools act on your real AniList account (list, favourites, follows, posts, account settings) using a token you supply. See PRIVACY.md for the full details on data collection, what gets sent where, caching/token storage and retention, and contact info.

Security

This is the broadest write/social tool surface of this project's sibling servers: list mutations, favourites, follows, and posting/deleting activity, threads, and comments, all on your real AniList account. See SECURITY.md for the full mutating-tool inventory, token storage/handling, credential redaction, and how to report a vulnerability.

License

MIT © Grinv

来源:README.md,提交 68a04ce

工具

50

get_genres

Get genres

List every genre name AniList uses to tag anime/manga (e.g. Action, Comedy, Slice of Life). Call this before filtering search_media by genre, so you pass a name AniList actually recognizes.

无需输入参数。

get_media_tags

Get media tags

List every descriptive tag AniList uses on anime/manga (finer-grained than genres, e.g. 'Time Skip', 'Tragedy', 'Reincarnation'), with category and adult-content flag. There are ~425 tags total, so results are paginated — use `page`/`perPage` rather than expecting them all in one response. Use this to look up a tag's exact name before passing it to search_media's `tag_in` — tag names are case-sensitive, and an unrecognized name doesn't error, it just silently matches nothing (confirmed live).

输入参数pageperPage

get_site_statistics

Get AniList site statistics

Get AniList's own site-wide statistics (new users/anime/manga daily counts), newest first. Useful for questions about AniList's growth/activity, not for anime data. Defaults to the last 7 days; use `page`/`perPage` to go further back. Confirmed live (bypassing this tool's own 25 cap): AniList's SiteStatistics field silently caps `perPage` at 25 itself, so this tool's own limit doesn't lose you anything.

输入参数pageperPage

get_studio

Get studio

Get a studio's profile (name, whether it's an animation studio) and the titles it's credited on (`media`, most popular first), by AniList studio ID or by name. `media` is paginated (`page`/`perPage`, max 25) — check `media.pageInfo.hasNextPage` before treating it as the studio's full catalog. By default it mixes titles the studio animated with ones it's only credited on (e.g. as a producer); set `isMain` to split them. Confirmed live: `name` already does AniList's own fuzzy search (same mechanism as search_studio), so a partial name (e.g. "Kyoto Anim") resolves directly — reach for search_studio instead only when you need to browse multiple candidates rather than take the closest match. If both `id` and `name` are given, `id` takes precedence and `name` is ignored.

输入参数idnamepageisMainonListperPage

get_activity

Get an activity post

Get a single AniList activity post (list update, text post, or message) by its ID, including `replyCount`, `likeCount`, and `isLiked`.

输入参数id必填

get_user_activity

Get a user's activity feed

List recent AniList activity posts from a specific user, newest first — by default every activity type (list updates, text posts, and message activity they received). Narrow it server-side with `type` and/or a `createdAfter`/`createdBefore` window rather than paging through everything and discarding. Accepts an exact AniList username directly (it's resolved to an id with one extra internal lookup) — no need to call search_user first unless you only have a partial/fuzzy name. Use search_activity instead to browse without pinning to one user. Use get_user_recent_activity instead if you just want a quick, fixed-size (5-item) recent snapshot without paginating.

输入参数pagetypeuser必填perPagecreatedAftercreatedBefore

post_text_activity

Post a text activity

[Requires login] Post a new text-status update to the authenticated user's own AniList profile, or update an existing one by passing its `id`.

输入参数idtext必填

post_message_activity

Post a message activity

[Requires login] Post a new message-style activity to another AniList user's profile, or update an existing one by passing its `id`. Despite the name, this is NOT a private DM — like post_text_activity, it's publicly visible on both users' activity feeds/profiles to anyone who can view them. This is a limitation of this tool, not AniList itself: AniList's underlying mutation does accept a `private` argument, but this tool doesn't expose it, so every message sent through it is public. Don't use it for anything the sender expects to stay confidential.

输入参数idmessage必填recipientId必填

delete_activity

Delete an activity post

[Requires login] Delete an activity post the authenticated user owns. This cannot be undone, and calling it again on an already-deleted id errors as not found rather than silently succeeding.

输入参数id必填

get_user_list

Get a user's anime or manga list

Get a user's AniList anime or manga list. Returns a compact table of one row per entry by default (`format: "compact"`) — entry id, media id, MAL id, status, score, progress and title, which is what a sync, comparison or pick-something-to-watch task needs; switch to `format: "full"` only when you actually need dates, notes, custom lists, advanced scores or the status/custom-list grouping, since that response is roughly ten times larger per entry. Filter server-side with `statuses` rather than fetching everything and discarding — asking for just CURRENT costs a fraction of a whole-list read. Pass `sort` (e.g. UPDATED_TIME_DESC) to have AniList order the list before chunking, so a small `perChunk` returns the top entries by that key rather than an arbitrary slice. To answer "what did they finish/start in a period", use the `completedAt_*`/`startedAt_*` bounds (strict, server-side) instead of scanning the list — e.g. everything completed in 2026 is `completedAt_greater: {year: 2025, month: 12, day: 31}` plus `completedAt_lesser: {year: 2027}`; chunking then counts only the matching entries. Works for any public/unlisted user. Accepts an exact AniList username directly — no need to call search_user first unless you only have a partial/fuzzy name. Paginated by `chunk`/`perChunk` (AniList's own mechanism for this — counted across entries of ALL statuses combined, not per status), since a large list can otherwise return thousands of entries in one response; check `hasNextChunk` and increment `chunk` to keep paging. `perChunk` itself has no cap — AniList accepts values in the thousands, so raise it to pull a whole list in one call instead of paging through it. The collection AniList exposes here is capped at its ~11,000 most recently updated unique entries — irrelevant for virtually every account, but a hard ceiling if one is ever hit (older entries beyond it aren't retrievable through this field at all, by any chunk).

输入参数sorttype必填user必填chunkformatperChunkstatusesstartedAt_lesserstartedAt_greatercompletedAt_lessercompletedAt_greater

add_list_entry

Add an entry to your AniList list

[Requires login] Add an anime/manga to the authenticated user's own AniList list. Use search_media first to resolve the title to its AniList media ID. Only set the fields you care about — everything else is left at AniList's defaults ONLY if this media isn't already on the list. AniList upserts by media ID: if an entry for it already exists (e.g. previously dropped, with its own score/notes/progress), calling this updates that entry in place instead — every field you don't set here keeps its previous value, not a default. Use get_user_list first to check for an existing entry if you need a guaranteed-fresh one. The response echoes what AniList actually stored, so check it rather than assuming the write landed verbatim. It includes `customLists`/`advancedScores` only when you set them — those are the fields AniList zeroes/replaces rather than merges, so they're worth reading back; otherwise the echo is trimmed, since a list sync is hundreds of writes.

输入参数notesscorerepeatstatusmediaId必填privatepriorityprogressstartedAtcompletedAtcustomListsadvancedScores另有 2 个

update_list_entry

Update an entry on your AniList list

[Requires login] Update an existing entry on the authenticated user's own AniList list by its list-entry ID (NOT the media ID — get it from get_user_list, or from add_list_entry's response). Only set the fields you want to change. Updating MANY entries to the SAME values? Use update_list_entries instead — one request rather than one per entry. The response echoes what AniList actually stored, so check it rather than assuming the write landed verbatim. It includes `customLists`/`advancedScores` only when you set them — those are the fields AniList zeroes/replaces rather than merges; otherwise the echo is trimmed.

输入参数notesscorerepeatstatusprivatepriorityprogressstartedAtcompletedAtcustomListslistEntryId必填advancedScores另有 2 个

update_list_entries

Update many entries on your AniList list at once

[Requires login] Apply ONE set of values to many entries on the authenticated user's own AniList list in a single request — e.g. mark thirty titles COMPLETED, or set the same score on a batch. Use this instead of calling update_list_entry in a loop whenever the entries share the values you're writing; use update_list_entry when each entry needs DIFFERENT values (this tool cannot vary them per entry), or when you need to set `customLists`/`advancedScores`, which this tool deliberately doesn't accept. Takes list-ENTRY ids (not media ids) — get them from get_user_list. The whole call is all-or-nothing: if any id is unknown or isn't yours, AniList rejects the request and applies NOTHING, so there is never a half-applied batch to clean up — but the error does not say which id was at fault, so re-check the ids against get_user_list. Returns a summary (how many were updated, and their ids), not the full entries.

输入参数notesscorerepeatstatusprivatepriorityprogressstartedAtcompletedAtlistEntryIds必填progressVolumeshiddenFromStatusLists

remove_list_entry

Remove an entry from your AniList list

[Requires login] Delete an entry from the authenticated user's own AniList list by its list-entry ID (NOT the media id) — get it from get_user_list. This cannot be undone, and calling it again on an already-deleted id errors as not found rather than silently succeeding.

输入参数listEntryId必填

get_media

Get anime/manga details

Get information about one or more anime or manga by their AniList ID(s). At the default `format: "full"` that means the whole card: title, format, status, episode/chapter/volume count, genres, score, synopsis, dates, and `rankings` — AniList's own ranking badges (e.g. "#134 highest rated all time", "#11 highest rated 2024"), one entry per rated/popular ranking window the title currently appears in. Also returns `nextAiringEpisode` (for currently-releasing anime), `externalLinks` (official sites, streaming platforms), and — [requires login] — `mediaListEntry`, the authenticated user's own list entry for this title, or null if it isn't on their list. Identify titles by AniList ID (`ids`) or by MyAnimeList ID (`malIds`) — exactly one of the two, and either accepts a batch. Use search_media first only when you have neither: a title search costs a call per title and can match the wrong entry, so prefer `malIds` whenever you already have MAL IDs. For a batch whose point is mapping IDs to titles rather than reading them, pass `format: "compact"` instead, which drops everything above except the identifiers, titles, type/format/status and episode/chapter counts — measured at 5KB against 125KB for the same 30-title batch. Returns a single object if you passed a single ID, or an array (same order as the IDs you passed, with `null` in place of any that didn't resolve to a real anime/manga) if you passed an array.

输入参数idstype必填formatmalIdsincludeStreamingEpisodes

get_media_statistics

Get an anime/manga's score/status distribution

Get an anime/manga's watch/read-status counts (watching/completed/planning/etc.) and score distribution histogram across all AniList users. Use search_media first to resolve a title to its AniList ID.

输入参数id必填type必填

get_media_characters

Get an anime/manga's characters

List an anime/manga's characters with their role (MAIN/SUPPORTING/BACKGROUND) and, for anime, their voice actors. Use search_media first to resolve a title to its AniList ID. Grouped by role — MAIN first, then SUPPORTING, then BACKGROUND (confirmed live) — and in AniList's own relevance order within each. Voice actors come back in every dub language unless you set `voiceActorLanguage`; set `role` to list only one role (e.g. just the MAIN cast).

输入参数id必填pageroletype必填perPagevoiceActorLanguage

get_media_staff

Get an anime/manga's production staff

List an anime/manga's staff (director, writer, character designer, author, illustrator, etc.) with their role. Use search_media first to resolve a title to its AniList ID. No explicit ordering is requested — don't assume results are sorted by role or popularity (unlike get_staff's reverse-direction lookup, which IS popularity-sorted).

输入参数id必填pagetype必填perPage

get_media_reviews

Get an anime/manga's reviews

List user-written reviews for an anime or manga, most-helpful-voted first (confirmed live: ordered by `rating`, not `score` — see those fields' own descriptions). Always includes `summary` (a short excerpt); set `includeBody` to also fetch each review's full text (can be long — leave it off unless you actually need the full text). Use search_media first to resolve a title to its AniList ID.

输入参数id必填pagetype必填perPageincludeBody

get_media_relations

Get a title's related media

Get the anime/manga related to a given title, each with its `relationType`: PREQUEL, SEQUEL, PARENT, SIDE_STORY, SPIN_OFF, ALTERNATIVE, SUMMARY, CHARACTER, ADAPTATION (this title adapted into another format), SOURCE (the material this title was adapted from), COMPILATION, CONTAINS, SAME_UNIVERSE or OTHER. Use search_media first to resolve a title to its AniList ID.

输入参数id必填type必填

get_anime_schedule

Get the anime airing schedule

Get upcoming (or a specific title's) episode air times, soonest-airing first (confirmed live) — or, with `notYetAired: false`, already-aired ones newest first. Omit `mediaId` for the site-wide upcoming schedule, or pass it (from search_media/get_media) to get one title's next-episode air time. Set `airingAfter`/`airingBefore` for a date window instead (e.g. what airs this week, or what aired yesterday). Anime only — manga has no airing schedule; a manga id (like any non-anime id) is rejected as not-found rather than silently returning an empty schedule, though that error reads the same as a nonexistent id and doesn't single out the manga/anime mismatch.

输入参数pagemediaIdperPageairingAfternotYetAiredairingBefore

toggle_favourite

Favourite/unfavourite an anime, manga, character, staff member, or studio

[Requires login] Toggle an anime, manga, character, staff member, or studio in the authenticated user's AniList favourites. Calling it again on the same `kind`+`id` un-favourites it. Read `isFavourite` for the outcome: true = now favourited, false = now removed, null = can't tell (the list runs past the first 50 returned, and a newly added favourite goes to its end). `favourites` holds the first page (up to 50, id-only) of the toggled kind, under its key (anime/manga/characters/staff/studios). Resolve `id` first via search_media/get_media (kind: ANIME/MANGA), search_character/get_character, search_staff/get_staff, or search_studio/get_studio, matching `kind`. Confirmed live: AniList does NOT validate that `id` actually belongs to the given `kind` — e.g. passing an anime's ID with `kind: CHARACTER` succeeds silently instead of erroring, favouriting a nonexistent character. Always resolve `id` from the tool matching `kind` rather than reusing an ID you already have on hand. Note: immediately re-checking with get_media/get_character/get_staff/get_studio's own `isFavourite` can briefly still show the pre-toggle value — a confirmed AniList-side read-after-write lag, not a bug in this call; this tool's own `isFavourite` already reflects the new state.

输入参数id必填kind必填

get_character

Get character details

Get a character's profile by AniList character ID: name, image, description, and the anime/manga they appear in (`media`, most popular first, with their `characterRole` — MAIN/SUPPORTING/BACKGROUND — in each). Use search_character first to resolve a name to its ID. `media` is paginated (`page`/`perPage`, max 25): a long-running franchise character can appear in far more titles than one page holds, so check `media.pageInfo.hasNextPage` before treating it as the full list. Narrow it with `type` (anime or manga only) or `onList`.

输入参数id必填pagetypeonListperPage

get_staff

Get staff member details

Get a staff member's profile by AniList staff ID: name, image, occupations, description, and the anime/manga they hold production credits on (`staffMedia`, most popular first, with their `staffRole` — e.g. Director, Character Design, Theme Song Performance — in each). Use search_staff first to resolve a name to its ID. Voice-acting roles are NOT part of `staffMedia` (confirmed live: Kana Hanazawa's lists only her theme/insert song credits) — for a voice actor, pass `credits: "voice"` to get `characterMedia` instead: each title with the character(s) voiced and their `characterRole`. Either list is paginated (`page`/`perPage`, max 25) — check its `pageInfo.hasNextPage` before treating it as the full list. Narrow it with `onList`, or `type` (anime or manga only; production credits only).

输入参数id必填pagetypeonListcreditsperPage

get_todays_birthdays

Get today's birthday characters or staff

List AniList characters or staff members whose birthday (month/day) is today, most favourited first. Paginated — a single day can have well over a thousand entries, so check `hasNextPage` before treating a page as the full list. Returns character-shaped or staff-shaped objects for kind: CHARACTER/STAFF respectively, but a lighter fetch than get_character/get_staff: it does NOT include those tools' `media`/`staffMedia` filmography, nor each entry's bio (`description`) unless you set `includeDescription` — call get_character/get_staff by ID for an entry's full roles/works and bio, don't read a missing filmography here as 'none'.

输入参数kind必填pageperPageincludeDescription

get_recommendation

Get a recommendation by ID

Get a single AniList recommendation pairing (media + the media users recommend alongside it) by its AniList recommendation ID — useful for re-checking one specific pairing's current `rating`/`userRating` (e.g. after voting on it directly on anilist.co — this server has no tool to cast that vote itself) without re-paginating the whole list. Use get_recommendations_for_media instead to discover recommendation IDs for a title in the first place, or to browse/list them. Confirmed live (raw GraphQL, independent of this server): this is an AniList-side inconsistency, not a client bug — a majority of ids from get_recommendations_for_media's own `nodes[].id` 404 here anyway (7 of 10 tested for one title), with no correlation to that pairing's `rating`. A 404 on an id you just got from that tool doesn't mean the pairing doesn't exist, only that this specific lookup can't resolve it.

输入参数id必填

get_recommendations_for_media

Get recommendations for a title

List anime/manga AniList users recommend as similar to a given title, ranked by rating (highest first). Use search_media first to resolve the title to its AniList ID. Each result's `mediaRecommendation.mediaListEntry` (requires login) shows whether it's already on your own list — set `excludeInList: true` to drop those from the fetched page instead of checking each one yourself (a local post-fetch filter: AniList's own `onList` filter applies to the source title, not the recommended one).

输入参数pagemediaId必填perPageexcludeInList

search_media

Search anime/manga

Search AniList for anime or manga by title and/or filters (genre, tag, format, status, season/year, country, length — most with an exclusion variant), or browse term-less by ranking (top-rated, most popular, trending — see the `sort` parameter) when you don't have a title to search for. Adult (NSFW) results are included unless you set `sfw: true` (or `isAdult: false`); `isAdult: true` returns adult titles only. Returns AniList IDs to use with get_media and other ID-based tools.

输入参数sfwpagesorttermtype必填genresonListseasontag_inisAdultperPageformat_in另有 27 个

search_character

Search characters

Search AniList for characters by name. Returns AniList IDs to use with get_character. Each result's bio (`description`) is omitted unless you set `includeDescription`.

输入参数pageterm必填perPageincludeDescription

search_staff

Search staff

Search AniList for staff members by name. Returns AniList IDs to use with get_staff. Each result's bio (`description`) is omitted unless you set `includeDescription`.

输入参数pageterm必填perPageincludeDescription

search_studio

Search studios

Search/browse AniList's animation/production studios by name, when you want to see multiple candidates rather than take the closest match — get_studio's own `name` param already does this same fuzzy search directly and resolves a partial name on its own. Returns AniList IDs to use with get_studio.

输入参数pageterm必填perPage

search_user

Search users

Search AniList for users by username. Returns AniList user IDs to use with get_user_profile/get_full_user_info (profile), get_user_stats (statistics), get_user_list (their public list), or toggle_follow_user.

输入参数pageterm必填perPageincludeDescription

search_thread

Search forum threads

Search/browse AniList's forum threads by title/body text and/or restrict to one category. Returns AniList thread IDs (with title/category for context) to use with get_thread, get_thread_comments, post_thread, or post_thread_comment.

输入参数pagetermperPagecategoryIdmediaCategoryId

search_activity

Search activity feed

Search/browse AniList's activity feed (list updates, text posts, messages), optionally filtered to one user or — with `isFollowing` [Requires login] — to your following feed, to one or more activity types, and/or to a creation-time window. Each result already includes its full content (text/message/status, `replyCount`/`likeCount`/`isLiked`, the posting user, and — for list activity — the media) — no follow-up get_activity call needed unless you need to re-check one specific result's `replyCount`/`likeCount`/`isLiked` later (e.g. after liking it).

输入参数pagetypeuserperPageisFollowingcreatedAftercreatedBefore

get_thread

Get a forum thread

Get an AniList forum thread's title, body and metadata (including `replyCount`, `viewCount`, `likeCount`, `isLiked`) by its ID.

输入参数id必填

get_thread_comments

Get comments on a forum thread

List top-level comments posted on an AniList forum thread, by the thread's ID. Replies (posted via post_thread_comment's `parentCommentId`) are nested under their parent's `childComments` rather than appearing as separate entries in this list.

输入参数pageperPagethreadId必填

post_thread

Post a forum thread

[Requires login] Post a new forum thread to the authenticated user's own AniList account, or update an existing one by passing its `id`. Use search_thread first if you want to check whether a similar thread already exists before posting a new one. Note: this tool's own response doesn't include `categories`/`mediaCategories`/`isSticky`/`isLocked` — call get_thread with the returned `id` afterward to confirm whether a category/sticky/locked change actually applied, especially since sticky/locked can silently no-op and categories/mediaCategories can silently drop existing values (see those fields' own descriptions below).

输入参数idbodytitlelockedstickycategoriesmediaCategories

post_thread_comment

Post a comment on a forum thread

[Requires login] Post a new comment on an AniList forum thread from the authenticated user's account, or update an existing one by passing its `id`.

输入参数idcomment必填threadId必填parentCommentId

delete_thread

Delete a forum thread

[Requires login] Delete a forum thread the authenticated user owns, by its ID (from search_thread, get_thread, or the id returned by post_thread). This cannot be undone, and calling it again on an already-deleted id errors as not found rather than silently succeeding.

输入参数id必填

delete_thread_comment

Delete a comment on a forum thread

[Requires login] Delete a comment the authenticated user owns, by its ID (from get_thread_comments or the id returned by post_thread_comment). This cannot be undone, and calling it again on an already-deleted id errors as not found rather than silently succeeding.

输入参数id必填

get_user_profile

Get a user's profile

Get an AniList user's public profile: name, about text, avatar, donator status — plus their account settings (title/name-language preferences, notification toggles, list display options). Confirmed live these settings are NOT viewer-gated, so they're included for any user, not just the authenticated caller. Accepts an exact AniList username directly — no need to call search_user first unless you only have a partial/fuzzy name and need to look up the exact one. Need statistics too? Use get_full_user_info instead of also calling get_user_stats separately.

输入参数user必填

get_user_stats

Get a user's statistics

Get an AniList user's anime/manga statistics: counts, mean score, time watched, episodes/chapters/volumes consumed. Accepts an exact AniList username directly — no need to call search_user first unless you only have a partial/fuzzy name. AniList's own stats aggregation can lag behind the account's real list — confirmed live, an account with real scored/progressed entries still read back all-zero statistics — so don't treat a zeroed result as 'this account has no list activity' without cross-checking get_user_list. Need the profile too? Use get_full_user_info instead of also calling get_user_profile separately.

输入参数user必填

get_full_user_info

Get a user's complete profile and stats

Get an AniList user's profile AND statistics in a single call — use this instead of calling get_user_profile and get_user_stats separately. Like get_user_profile, this also returns the target's account settings (notifications, list display, etc.) regardless of who's authenticated — AniList doesn't viewer-gate those fields. Accepts an exact AniList username directly — no need to call search_user first unless you only have a partial/fuzzy name. Its embedded statistics carry the same staleness caveat as get_user_stats: AniList's own aggregation can lag and read all-zero even for an account with real list entries.

输入参数user必填

get_user_recent_activity

Get a user's most recent activity

Get an AniList user's 5 most recent activity posts, with full content (not just IDs) — every activity type (list updates, text posts, and message activity they received; the underlying query applies no type filter of its own), a fixed count, not configurable; use get_user_activity for a paginated full feed instead. Accepts an exact AniList username directly — no need to call search_user first unless you only have a partial/fuzzy name (username resolution costs one extra internal lookup either way).

输入参数user必填

get_authorized_user

Get the logged-in user's profile

[Requires login] Get the profile of the AniList account currently authorized via login_anilist/ANILIST_ACCESS_TOKEN — use this to confirm which account is connected. Also the authoritative source to fetch BEFORE an update_user call touching `options.notificationOptions`/`options.disabledListActivity` (confirmed live: full array replace, not merge by entry) or `mediaListOptions.animeList/mangaList.customLists` (confirmed live: same full-replace behavior) — read the current values here first and resend them in full alongside your changes. The sibling `advancedScoring` array carries a related but distinct risk instead: it's positional, not name-matched, so reordering/renaming its entries silently reinterprets already-scored list entries (see update_user's own `advancedScoring` field for detail) — fetch it here first too before changing it.

无需输入参数。

toggle_follow_user

Follow/unfollow a user

[Requires login] Toggle following another AniList user from the authenticated user's account. Calling it again on the same user unfollows them.

输入参数id必填

update_user

Update your AniList account settings

[Requires login] Update settings on the authenticated user's own AniList account (about text, preferred title language, adult-content visibility, score format, notification/messaging preferences, anime/manga list options). Only set the fields you want to change — most fields are a true partial update (see `notificationOptions`/`disabledListActivity` below for two confirmed exceptions, PLUS `animeListOptions`/`mangaListOptions`'s nested `customLists` — a third: that one field's ARRAY VALUE is a full replace even though its sibling fields and the other list type merge normally).

输入参数aboutrowOrdertimezonescoreFormatdonatorBadgeprofileColortitleLanguageanimeListOptionsmangaListOptionsactivityMergeTimestaffNameLanguageairingNotifications另有 4 个

get_notifications

Get your AniList notifications

[Requires login] Get the authenticated user's AniList notifications: new episodes airing, activity likes/replies/mentions, new followers, thread replies/likes, and media/staff/character data-submission updates. Every item has `id`, `type` and a human-readable `context`/`contexts` string; the rest of the fields depend on `type` (e.g. an AIRING item includes `media`/`episode`, a FOLLOWING item includes `user`, an ACTIVITY_MESSAGE item includes `message.message` — the actual DM text is nested one level inside `message`).

输入参数pageperPagetype_inmarkAsRead

login_anilist

Log in to AniList

Authorize the personal-list and social tools with your AniList account (one-time). Prerequisite: register an app at anilist.co/settings/developer with Redirect URL set to `http://localhost:8082/callback` (the default; override the port via ANILIST_OAUTH_PORT if 8082 is taken — it must match exactly what you register), and set ANILIST_CLIENT_ID + ANILIST_CLIENT_SECRET in the server env. Calling this returns an authorization URL: open it, log in, and click Approve. If your browser genuinely runs on the same machine as this server, login then completes automatically; otherwise copy the URL you land on and pass it to submit_anilist_redirect. `auto_capture` in the response is NOT a reliable detector of that — it only reflects whether this server process could bind its own localhost listener, which typically succeeds even when the server runs remotely (SSH/headless) and the browser can never reach it; you (or the user) know the actual machine layout, the response doesn't.

无需输入参数。

submit_anilist_redirect

Complete AniList login with a pasted redirect URL

Complete a login started with login_anilist by submitting the URL your browser was redirected to after clicking Approve (the one containing ?code=...). Use this when login didn't complete automatically — e.g. the server runs on a remote/headless host. Pass the whole URL, not just the code: its `state` is checked against the login attempt, so a bare code or a URL from another login is rejected. Fails if no login is in progress (e.g. the server restarted since login_anilist) — run login_anilist again.

输入参数redirect_url必填

版本历史

4
  1. v0.11.0最新Oct 22, 2026
  2. v0.10.0Oct 20, 2026
  3. v0.9.0Sep 25, 2026
  4. v0.8.0Sep 16, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分