anilist
Allows managing an AniList anime and manga library, including reading profile and lists, searching media, adding entries, updating progress, status, scores, notes, privacy, and other list-entry fields, removing entries, and performing confirmed bulk updates.
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., "@anilist show my profile and currently watching list"
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.
AniList MCP server
Manage your AniList anime and manga library through a standard MCP server. Works with compatible AI harnesses independently of the model provider. Local stdio is the default; no hosted service, plugin registration or database is needed.
Install and connect
Requires Node.js 22.19+. Install the compiled GitHub release with npm:
npm install --global https://github.com/nochinsky/anilist-manager-mcp/releases/download/v1.0.0/anilist-manager-mcp-1.0.0.tgz
anilist-mcp setupPaste your AniList access token at the hidden prompt. Setup verifies it against your AniList profile and saves it outside the project. It never modifies your library. On Windows the token is encrypted with DPAPI; on macOS/Linux it is stored in an owner-only file. You can alternatively provide ANILIST_ACCESS_TOKEN using your harness's private environment settings.
Choose your installed harness:
# Codex
anilist-mcp connect codex
# Claude Code
anilist-mcp connect claude
# Pi coding agent (current version with built-in MCP)
anilist-mcp connect piEach command registers the local server named anilist using the actual installed Node and server paths. It uses that harness's official mcp add command and its user-level configuration. If an anilist entry already exists, the harness may replace it or ask you to resolve it. Restart/reload the harness, enable its MCP tools, and ask: “Use AniList to show my profile and currently watching list.”
The harness starts the server for you. No extra running terminal, tunnel or second login is needed. All three harnesses must be installed separately; this package does not install or change your model provider.
If the command is not found after global installation, reopen your terminal and check your npm global bin directory is on PATH.
Other install options
Install directly from the tagged GitHub source (requires Git and allows the build hook):
npm install --global github:nochinsky/anilist-manager-mcp#v1.0.0Or develop from a checkout:
git clone https://github.com/nochinsky/anilist-manager-mcp.git
cd anilist-manager-mcp
npm ci
npm run setup
npm run build
node dist/cli.js connect codexPublishing to the npm registry is optional. The release archive and GitHub install already work with npm. This project has not been published to the registry; do not use npx anilist-manager-mcp expecting a registry release.
Related MCP server: mal-mcp
Manual harness configuration
If you prefer editing configuration yourself, these commands print snippets containing this installation's exact paths, with no tokens:
anilist-mcp config codex
anilist-mcp config claude
anilist-mcp config pi
anilist-mcp config jsonHarness | Where to put the generated settings | Check the connection |
Codex | Merge the generated TOML into |
|
Claude Code | Merge the generated mcpServers entry into private user configuration ( |
|
Pi | Merge the generated mcpServers entry into |
|
Other stdio MCP client | Its local MCP settings; use the JSON entry's command and args | The client's tool-discovery view |
~ means your home directory. The config generator handles Windows paths and spaces. It registers node directly so npm banners cannot contaminate the MCP protocol. The current Pi built-in MCP requires no adapter; older Pi versions should be upgraded or connected through a separately installed MCP adapter.
Official setup references: Codex, Claude Code, Pi.
Tools
Read | Write |
get_my_anilist_profile | add_anime_to_list |
get_my_anime_list | add_manga_to_list |
get_my_manga_list | update_anime_progress |
get_currently_watching | update_manga_progress |
search_anime | update_anime_status |
search_manga | update_anime_score |
get_anime_details | update_manga_score |
get_manga_details | update_list_entry |
get_my_anime_statistics | remove_list_entry |
bulk_update_entries |
update_list_entry also handles manga status, volume progress, repeat count, priority, privacy and notes. It sends only the fields explicitly requested. Add refuses an existing entry. Update/delete verify the authenticated owner's existing entry and media ID.
Examples:
“Find the different Fullmetal Alchemist versions before adding one.”
“Add this verified anime ID to planning.”
“Set my anime progress to five episodes.”
“Set this manga to paused and show the updated entry.”
“Read all pages of my library and ratings, then recommend five anime I haven't watched.”
“Preview deleting this entry, including the score, progress and notes that would be removed.”
Recommendations are produced by your connected LLM using library, statistics and search results. The server does not call another model API or require a model-provider API key of its own.
Changes and confirmation
Ordinary requested single-entry additions/updates execute directly. Set dry_run: true to validate and preview any write without executing it.
Deletion, bulk updates, progress reductions, dropping an entry, clearing an existing score, replacing existing notes and making a private entry public require a preview and confirmation:
The first tool call returns the exact preview and
confirmation_id, with no write.The agent shows it and asks you to confirm inside the harness.
After your confirmation it repeats the identical arguments with
confirmation_idandconfirmed: true.
The trusted harness/agent obtains the real human confirmation. The server validates the preview, ownership and current entry, expires previews after ten minutes and permits only one use. Configure the harness's tool approval controls as desired; write annotations are included. There is no browser confirmation page in local stdio mode.
Input rules
Status: CURRENT, PLANNING, COMPLETED, PAUSED, DROPPED, REPEATING.
Use verified AniList media IDs, not MyAnimeList or list-entry IDs. Write selectors accept exactly one of media_id/title. Ambiguous titles return candidates for you to choose.
Progress is an absolute episode/chapter count, never a delta. Manga volumes are separate. Known totals are checked.
Scores use your profile's actual POINT_100, POINT_10_DECIMAL, POINT_10, POINT_5 or POINT_3 format. Zero clears a score; conversions are never guessed.
Follow hasNextPage to fetch complete lists. Page size is at most 50; AniList's Page depth limit is 5000 entries. Narrow the status/search filter if needed and do not describe an incomplete fetch as the full library.
Bulk updates support up to five existing entries with separate explicit patches. They are sequential, not atomic, and stop at the first failure with completed/failed/skipped results.
A network failure may leave a write's result unknown. Read the affected entry before retrying. Mutations are never automatically retried. AniList may apply its own server-side save behavior.
Tokens and security
Your token stays in the local server process and is sent only to AniList using an Authorization header. It is never returned as a tool result or written into generated host configuration. Do not paste tokens into conversations or command arguments.
Saved credentials live outside the repository:
Windows:
%LOCALAPPDATA%\AniListManagerMCP\credentials.dpapi(DPAPI CurrentUser).macOS/Linux:
~/.config/anilist-manager-mcp/credentials.secrets.json(file 0600, directory 0700; not OS encryption).
ANILIST_ACCESS_TOKEN overrides the saved token. Set it using your harness's secret/environment UI rather than sharing a token-bearing config file. If that explicit token fails, the server never silently falls back to another account. Expired/revoked tokens return REAUTH_REQUIRED: replace the token using setup or the environment and reconnect the harness.
An AniList application client ID/client secret is different from an account access token. If you need to obtain a token through your own OAuth application instead of importing one, source-checkout commands npm run setup:oauth and npm run auth implement the authorization-code flow and loopback callback. AniList does not support refresh tokens.
Local stdio exposes no network listener. Access is controlled by your OS account and trusted harness. The optional authenticated HTTP transport is separate and keeps its own OAuth and browser approval protections. This is a personal, single-account server.
Requests are serialized with at least 2.1 seconds between starts for AniList's documented temporary 30/minute rate limit, and Retry-After/reset headers are honored. Full-library reads can take time. Raw upstream errors, token-bearing headers and request payloads are never logged.
Verification
# Installed release: real MCP process plus all nine read tools against your account
anilist-mcp smoke
# No token required: verify real MCP startup and discovery of all 19 tools
anilist-mcp smoke --discovery-onlySmoke checks never write to AniList and return a nonzero exit status on failure. They do not print actual account data or access tokens.
From a checkout:
npm run check
npm test
npm run test:package
npm run inspectorThe suite blocks external requests and tests all tools, OAuth/HTTP protections, token import, vault storage, validation, confirmations and partial failures. A real stdio subprocess uses a test-only mocked AniList endpoint. The package check installs the actual release tarball in a clean directory with lifecycle scripts disabled, then verifies CLI/configuration and real MCP discovery. CI runs Node 22/24 on Windows, Linux and macOS.
Live public anime/manga searches and details have been checked successfully. Automated writes use mocks. Real personal-account reads and writes require each user's token; no live account mutations were made during development. Host setup commands follow official documentation; no claim is made that every LLM or harness version has been tested.
See release maintenance for packaging and optional future npm publication. The project uses TypeScript, native fetch, Zod and the official @modelcontextprotocol/sdk 1.x package. License: MIT.
Available Tools
19 toolsadd_anime_to_listadd anime to listADestructive
Add verified anime only if no entry exists. Explicit status required; optional fields use the account's score format. Existing entries are never overwritten by add. Executes ordinary requested single-entry changes directly. Destructive/bulk changes return a preview; ask the user to confirm, then repeat with confirmation_id and confirmed:true. Set dry_run:true to preview any change. Omitted fields are preserved.
Inputs: status (required), score, title, dry_run, +4 more.
add_manga_to_listadd manga to listADestructive
Add verified manga only if no entry exists. Explicit status required; optional fields use the account's score format. Existing entries are never overwritten by add. Executes ordinary requested single-entry changes directly. Destructive/bulk changes return a preview; ask the user to confirm, then repeat with confirmation_id and confirmed:true. Set dry_run:true to preview any change. Omitted fields are preserved.
Inputs: status (required), score, title, dry_run, +4 more.
bulk_update_entriesbulk update entriesADestructive
Update 1–5 existing entries, each with explicit media ID, media type and requested patch. All are checked before confirmation. After human approval, revalidates and writes sequentially, stops at first failure and reports completed/failed/skipped entries. Not an atomic transaction. Executes ordinary requested single-entry changes directly. Destructive/bulk changes return a preview; ask the user to confirm, then repeat with confirmation_id and confirmed:true. Set dry_run:true to preview any change. Omitted fields are preserved.
Inputs: entries (required), dry_run, confirmed, confirmation_id.
get_anime_detailsget anime detailsARead-onlyIdempotent
Verify an AniList anime ID; read episodes, genres, description, existing entry and community recommendations. Recommendations are candidates: check library membership before suggesting.
Inputs: media_id (required).
get_currently_watchingget currently watchingARead-onlyIdempotent
Read a paginated anime list. CURRENT is watching; set include_repeating=true to also return the separate REPEATING page for rewatches. Follow both pageInfo values.
Inputs: page, per_page, include_repeating.
get_manga_detailsget manga detailsARead-onlyIdempotent
Verify an AniList manga ID; read chapter/volume counts, genres, existing entry and community recommendations.
Inputs: media_id (required).
get_my_anilist_profileget my anilist profileARead-onlyIdempotent
Get the connected owner, AniList user ID, profile URL and scoreFormat. Read before score changes; never assume a 10-point scale.
Inputs: no named parameters.
get_my_anime_listget my anime listARead-onlyIdempotent
Read one page of the owner anime library, including status, score, episodes, genres and notes. Follow pageInfo.hasNextPage until false for complete analysis and unwatched recommendations.
Inputs: page, status, per_page.
get_my_anime_statisticsget my anime statisticsARead-onlyIdempotent
Read anime totals, mean score, formats, statuses, genres and tags to infer preferences. Combine with all pages of the anime library to recommend unseen titles and explain why each fits.
Inputs: no named parameters.
get_my_manga_listget my manga listARead-onlyIdempotent
Read one page of the owner manga library, including chapter/volume progress, scores and genres. Follow hasNextPage for the complete library.
Inputs: page, status, per_page.
remove_list_entryremove list entryADestructive
Permanently delete the connected owner list entry, including score, progress and notes; the anime/manga itself is not deleted. Always require explicit human approval of the exact preview. Executes ordinary requested single-entry changes directly. Destructive/bulk changes return a preview; ask the user to confirm, then repeat with confirmation_id and confirmed:true. Set dry_run:true to preview any change. Omitted fields are preserved.
Inputs: type (required), title, dry_run, media_id, +2 more.
search_animesearch animeARead-onlyIdempotent
Search anime candidates by title or browse by genre/year/popularity. Returns verified AniList IDs and current list entries. For recommendations first analyze the complete library, then exclude watched/current/repeating/dropped titles; never silently choose an ambiguous title.
Inputs: page, sort, year, genre, +4 more.
search_mangasearch mangaBRead-onlyIdempotent
Search manga candidates or browse by genre/year. Returns IDs, chapter/volume counts and current list entries. Present ambiguous matches for the user to choose.
Inputs: page, sort, year, genre, +4 more.
update_anime_progressupdate anime progressADestructive
Set absolute episodes watched on an existing anime entry. Checks known totals. Does not request status, score, dates or other field changes. Executes ordinary requested single-entry changes directly. Destructive/bulk changes return a preview; ask the user to confirm, then repeat with confirmation_id and confirmed:true. Set dry_run:true to preview any change. Omitted fields are preserved.
Inputs: progress (required), title, dry_run, media_id, +2 more.
update_anime_scoreupdate anime scoreADestructive
Set an existing anime entry score using the owner's scoreFormat (POINT_100, POINT_10_DECIMAL, POINT_10, POINT_5 or POINT_3); zero clears. No automatic score conversion. Executes ordinary requested single-entry changes directly. Destructive/bulk changes return a preview; ask the user to confirm, then repeat with confirmation_id and confirmed:true. Set dry_run:true to preview any change. Omitted fields are preserved.
Inputs: score (required), title, dry_run, media_id, +2 more.
update_anime_statusupdate anime statusADestructive
Set only the existing anime entry status: CURRENT, PLANNING, COMPLETED, PAUSED, DROPPED or REPEATING. Episode progress is not inferred. Executes ordinary requested single-entry changes directly. Destructive/bulk changes return a preview; ask the user to confirm, then repeat with confirmation_id and confirmed:true. Set dry_run:true to preview any change. Omitted fields are preserved.
Inputs: status (required), title, dry_run, media_id, +2 more.
update_list_entryupdate list entryADestructive
Patch an existing anime or manga entry by verified media ID or unambiguous title. Supports status (including manga), score, absolute progress/volumes, repeat, priority, privacy and notes. Only patch fields explicitly requested. Executes ordinary requested single-entry changes directly. Destructive/bulk changes return a preview; ask the user to confirm, then repeat with confirmation_id and confirmed:true. Set dry_run:true to preview any change. Omitted fields are preserved.
Inputs: type (required), changes (required), title, dry_run, +3 more.
update_manga_progressupdate manga progressADestructive
Set absolute chapters read on an existing manga entry. Checks known totals. Does not request status, score, dates or other field changes. Executes ordinary requested single-entry changes directly. Destructive/bulk changes return a preview; ask the user to confirm, then repeat with confirmation_id and confirmed:true. Set dry_run:true to preview any change. Omitted fields are preserved.
Inputs: progress (required), title, dry_run, media_id, +2 more.
update_manga_scoreupdate manga scoreADestructive
Set an existing manga entry score using the owner's scoreFormat (POINT_100, POINT_10_DECIMAL, POINT_10, POINT_5 or POINT_3); zero clears. No automatic score conversion. Executes ordinary requested single-entry changes directly. Destructive/bulk changes return a preview; ask the user to confirm, then repeat with confirmation_id and confirmed:true. Set dry_run:true to preview any change. Omitted fields are preserved.
Inputs: score (required), title, dry_run, media_id, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 19 tools
Most tools split cleanly along resource+action lines, but update_list_entry overlaps heavily with the specialized update_anime_progress/score/status and update_manga_progress/score tools, leaving an agent unsure which to pick for a single-field change. get_my_anime_list and get_currently_watching also overlap, though descriptions differentiate them reasonably.
Almost all tools follow a consistent snake_case verb_noun pattern (search_, get_, add_, update_, remove_). Minor deviations exist: get_currently_watching lacks a noun, and the generic entry tools use 'entry/entries' instead of the _to_list phrasing used elsewhere.
At 19 tools this is on the heavy side, largely due to the symmetric anime/manga duplication plus focused per-field update tools. The surface is justifiable for full list management, but the generic update_list_entry makes several specialized tools feel redundant rather than earning their place.
Coverage is strong: search, details, profile, paginated list reads, statistics, add/update/remove, generic patching, and bulk updates all exist, so an agent can complete core lifecycle workflows. Minor gaps include no manga statistics equivalent and no dedicated note/privacy-only tool (though update_list_entry handles those).
Maintenance
Related MCP Connectors
AniList MCP — wraps AniList GraphQL API (free, no auth)
Access and interact with anime and manga data seamlessly. Retrieve detailed information about your…
AniList MCP server for ChatGPT, Claude and any AI agent: update list entry, rate anime or manga, list your anime list, read notifications, reply to activity and favourite a title in your own AniList account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to AniList yourself; Cotlet does not store your password and you need no AniList API key. About the official AniList API: AniList has a full, free public GraphQL API but no official MCP server (checked 17 Oct 2026). The API covers searching titles, reading and saving list entries, activity, favourites, follows and the forum. Setup and FAQ: https://cotlet.dev/integrations/anilist-api-mcp-server
The media memory layer for AI agents and their humans. Your AI client can search your collection, add and log what you've finished, update ratings and lists, and find patterns across everything you've read, watched, played, and listened to.
Related MCP Servers
- AlicenseBqualityDmaintenanceMCP Server for interacting with the MyAnimeList API, allowing LLM clients to access and interact with anime, manga and more.154MIT
- AlicenseAqualityDmaintenanceExposes a user's MyAnimeList data (watch list, scores, statistics) as MCP tools for AI assistants to analyze taste, build statistics, and make recommendations.20MIT
- AlicenseAqualityDmaintenanceEnables AI clients to search, inspect, rank, and manage MyAnimeList anime and manga, including authenticated user list operations.15MIT
- AlicenseNot gradedqualityNot gradedmaintenanceMCP server that exposes MyAnimeList v2 API with OAuth authentication, enabling anime and manga search, rankings, seasonal charts, and user list management through natural language.Apache 2.0