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.
无需输入参数。

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.
非官方 AniList 服务器,可搜索动漫、漫画、角色、制作人员和工作室,并管理自己的 AniList 列表、收藏和动态。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
参照 仓库 中的启动说明。
[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.
Talks directly to AniList's public GraphQL API (https://graphql.anilist.co):
Nothing is required to get started, so you can skip straight to Install. Everything below is optional:
Without a login, the personal/mutation tools reply with a clear message telling you how to get one; everything else keeps working regardless.
Once it's connected, just ask your agent in natural language.
No credentials needed:
With your AniList account (after a one-time login_anilist; see
Connect your AniList account):
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.
Reusable multi-step plans your client can offer as one-click flows:
recommend_similar, seasonal_overview, hidden_gems, catch_up_activity,
check_notifications.
The npx and from-source installs run on your own Node.js, which must be ≥ 22.18.
.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.
Published on npm as anilist-mcp-server.
Add it to your client's MCP config (Claude Desktop/Code, Cursor, VS Code, Cline, …):
Or with the Claude Code CLI:
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.
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).
ANILIST_OAUTH_PORT to the same number, see Configuration.)Step 2: Give the credentials to the server.
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.
get_authorized_user).?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_TOKENinstead. See docs/auth.md.
All configuration is via environment variables, all optional; without credentials the read tools still work.
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 (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.
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.
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 -y anilist-mcp-server fetches the latest on the next run.git pull && npm ci && npm run build.See the CHANGELOG for what changed in each release.
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.
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.
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.
MIT © Grinv
来源:README.md,提交 68a04ce
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
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).
pageperPageGet 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.
pageperPageGet 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.
idnamepageisMainonListperPageGet 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 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必填perPagecreatedAftercreatedBeforePost 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 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 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 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_greaterAdd 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 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 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必填progressVolumeshiddenFromStatusListsRemove 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 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必填formatmalIdsincludeStreamingEpisodesGet 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 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必填perPagevoiceActorLanguageGet 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必填perPageGet 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必填perPageincludeBodyGet 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 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.
pagemediaIdperPageairingAfternotYetAiredairingBeforeFavourite/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 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必填pagetypeonListperPageGet 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必填pagetypeonListcreditsperPageGet 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必填pageperPageincludeDescriptionGet 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 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必填perPageexcludeInListSearch 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 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必填perPageincludeDescriptionSearch 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必填perPageincludeDescriptionSearch 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必填perPageSearch 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必填perPageincludeDescriptionSearch 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.
pagetermperPagecategoryIdmediaCategoryIdSearch 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).
pagetypeuserperPageisFollowingcreatedAftercreatedBeforeGet a forum thread
Get an AniList forum thread's title, body and metadata (including `replyCount`, `viewCount`, `likeCount`, `isLiked`) by its ID.
id必填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 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).
idbodytitlelockedstickycategoriesmediaCategoriesPost 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必填parentCommentIdDelete 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 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 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 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 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 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 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.
无需输入参数。
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 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 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_inmarkAsReadLog 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.
无需输入参数。
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必填已满足适用检查项的 90%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
"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?""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?"{ "mcpServers": { "anilist": { "command": "npx", "args": ["-y", "anilist-mcp-server"], "env": { "ANILIST_CLIENT_ID": "...", "ANILIST_CLIENT_SECRET": "..." } } }}claude mcp add anilist -e ANILIST_CLIENT_ID=... -e ANILIST_CLIENT_SECRET=... -- npx -y anilist-mcp-servergit clone https://github.com/Grinv/anilist-mcp-servercd anilist-mcp-servernpm cinpm run buildhttp://localhost:8082/callback"env": { "ANILIST_CLIENT_ID": "...", "ANILIST_CLIENT_SECRET": "..." }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