Releases: Grinv/anilist-mcp-server
Releases · Grinv/anilist-mcp-server
Release list
v0.1.3
Fixed
- Fix a startup race where a
SIGINT/SIGTERMarriving betweenserveStdio()starting and the signal handlers being registered would kill the process immediately instead of shutting down gracefully — handlers are now armed first. (40d16ba)
v0.1.1
v0.1.0
Everything below is one commit: f84674f.
Added
- Initial release: an MCP server for AniList's GraphQL API, replacing the broken third-party
anilist-mcpwrapper (see AGENTS.md's "Why this server exists"). - Add 45 tools covering anime/manga search and details, characters/staff/studios, genres/tags, recommendations, forum threads, activity feeds, notifications, and personal AniList list management.
- Unify anime/manga tool pairs (e.g.
get_anime/get_manga,search_anime/search_manga) into a single tool taking atypeparameter, instead of one tool per media type. - Add
get_notificationsfor the authenticated user's AniList notifications (airing episodes, activity/thread activity, new followers). - Add
login_anilist/submit_anilist_redirect: an OAuth login flow with localhost auto-capture, falling back to manual redirect paste for remote/headless hosts. - Cache read-only GraphQL queries in-memory (
CACHE_TTL_MS) instead of re-hitting AniList on every call. - Add five MCP Prompts (
recommend_similar,seasonal_overview,hidden_gems,catch_up_activity,check_notifications) as one-click multi-step flows. - Declare an
outputSchemaon every tool so clients can validate/introspectstructuredContentinstead of an opaque blob. - Publish a one-click
.mcpbbundle as a release asset for drag-and-drop MCP clients (e.g. Claude Desktop). - Run on MCP TypeScript SDK v2 beta (
@modelcontextprotocol/server, pinned to an exact version).
Fixed
- Fix
seasonal_overviewto only filter byRELEASINGfor the current season, not an explicit past/future one. - Have
catch_up_activitycheck both the anime AND manga list groups, not just anime. - Never cache
get_notifications, since itsresetNotificationCountside effect and result must always be fresh. - Classify
add_list_entry/update_list_entry's advancedScores validation failures as abad_requesttool error instead of an unclassified one. - Surface a gated tool's actual login guidance instead of a generic "credentials rejected" message.
- Return the actual saved/deleted data from every mutation tool, instead of the raw GraphQL response envelope.
- Reject
remove_list_entry/delete_activity/delete_threadwhen AniList reportsdeleted: false, instead of a false success. - Reject
get_user_activity/catch_up_activitywith a clear error when the given username doesn't resolve, instead of silently returning the global feed. - Report
get_studioas a real tool error, not a disguised success, when neitheridnornameis given. - Send the logged-in user's token on read tools when configured, so viewer-relative fields (
isFavourite,isFollowing,isFollower) resolve correctly. - Verify the OAuth
statevalue inlogin_anilist, rejecting a mismatched callback. - Disable retries on the OAuth token exchange, since an authorization code is single-use.
- Convert
add_list_entry/update_list_entry'sscoreto AniList's raw 0-100 scale, instead of assuming a 0-10scoreFormat. - Order
advancedScoresagainst the account's real configured categories for the entry's actual media type, instead of guessing from key overlap.