Releases: Grinv/mal-mcp
Releases · Grinv/mal-mcp
Release list
v0.9.1
Changed
- Clarify the personal-list tool descriptions: the
anime_id/manga_idvsidnaming, where to obtain the id, and the mangasortvalues (225fcb1). - Disclose that
get_random_character/get_random_personare Tenrai-only (no official-API fallback), matching their anime/manga random siblings (8fb3e8a).
Fixed
- Correct
get_anime_news'ssfwdescription: it filters the news list down, not to zero, rather than emptying it for an NSFW anime (26b612c).
Security
- Use a random, validated OAuth
stateforlogin_malinstead of a fixed constant, and reject a redirect whose state doesn't match (4ea7687). - Write the on-disk token store atomically, guaranteeing
0600on rewrite and preventing a truncated file on a mid-write crash (8161338). - Redact the PKCE
code_verifierand theX-MAL-CLIENT-IDheader, and route non-ApiErrorfailures through the same redaction (036e815).
v0.9.0
Added
- Add
get_manga_newsfor per-manga news, matching the existingget_anime_news(95f5a61). - Add
sfw/sfw_stricttoget_anime/get_manga, their recommendation tools,get_anime_news, and character/person lookups (691bca9). - Add
get_producer, a single producer/studio's detail (about, external links) —get_producersnever had a by-id counterpart (77f2a55). - Add
get_anime_videos, every promo/episode-preview/music video for an anime, not just the one main trailer (77f2a55). - Add
get_recent_anime_recommendations/get_recent_manga_recommendations, a site-wide feed of recommendation pairs (77f2a55). - Add
get_news, a site-wide MyAnimeList news feed (77f2a55). - Surface
external,explicit_genres, andtitle_synonymsonget_anime/get_manga(plusmoreinfo, anime only) (3bf96c8). - Add
get_magazines, for manga serialization magazines/publishers, givingsearch_manga'smagazinesfilter an ID lookup (e80346d). - Add
sort/preliminary/spoilers/sentiment/pagefilters toget_anime_reviews/get_manga_reviews(488e8a5). - Surface
is_spoiler/is_preliminary/reactionsand episode/chapter progress on each review from those two tools (488e8a5). - Add several new search filters to
search_anime/search_manga: rating, score range, exclude-genres, letter, producers/magazines, dates, unapproved (488e8a5). - Let
typeaccept multiple values at once onsearch_anime/search_manga/get_top_anime/get_top_manga, not just one (488e8a5). - Add
ratingtoget_top_anime(488e8a5). - Add
filter/rating/unapproved/continuing/kids/order_by/sorttoget_seasonal_anime/get_upcoming_season(488e8a5). - Add
kids/unapproved/pagetoget_anime_schedule(488e8a5). - Add
lettertosearch_characters/search_people/get_producers(488e8a5). - Add
sfw_strictalongsidesfwonsearch_anime/search_mangaand other list tools, to also exclude Ecchi-tagged shows (e0b8b38). - Add
sfw/sfw_stricttoget_top_anime,get_top_manga,get_random_anime, andget_random_manga(e0b8b38). - Add a privacy policy (
PRIVACY.md) covering data handling and what the personal-list tools can read/change on your account (d380b9a). - Add a security policy (
SECURITY.md) covering tool tiers, token storage, and credential redaction (ffa2868). - Add a custom icon for the MCPB submission: an original kawaii creature head in MyAnimeList's brand blue (bf9d6ec, cfecd36, 83eafd3).
Changed
- Replace the read backend with Tenrai, a free, unofficial MyAnimeList mirror, after reliability problems with the previous one (e2540ef).
- Rename the
JIKAN_BASE_URL/JIKAN_MIN_INTERVAL_MSenv vars toTENRAI_BASE_URL/TENRAI_MIN_INTERVAL_MS(e2540ef). - Raise every search/top/list tool's
limitcap from 25 to 50, matching Tenrai's own per-page ceiling (451aa4e). - Raise runtime floor to Node ≥ 20.11 (was ≥ 20.3) (cfd8cca).
- Distinguish the
pageparameter description from the unbounded variant used by ranking tools (09f65f1).
Removed
- Remove
get_user_profile/get_user_favorites— Tenrai has no/usersendpoint, and the official API can't look up an arbitrary username (e2540ef).
Fixed
- Make
get_anime_reviews/get_manga_reviews'slimitactually limit the results — Tenrai silently ignores its ownlimitparam (451aa4e). - Accept
get_anime_schedule's extra day buckets and a few more realsearch_anime/search_mangasort fields the schemas previously rejected (be9219f). - Reject
pageabove 1000 on every tool except the fourget_top_*ranking tools, matching Tenrai's real per-endpoint ceiling (4e8febe, 7622dee). - Make
get_anime_reviews/get_manga_reviewsbackfill from later in the page instead of under-returninglimitwhen an early review fails validation (bb04202). - Stop
get_producerfrom failing entirely when a producer'sestablisheddate isn't a clean timestamp — that field is now just omitted instead (a7d92cf). - Make README's and manifest.json's
docs/links absolute so they still resolve from an installed extension, not just on GitHub (2c51eec). - Fix a 404'ing Privacy Policy link on npm (
PRIVACY.mdwas missing from the published files) and shrink the.mcpbbundle to runtime-only files (4580a74, 8e513f6). - Fix the same 404 for the README's Security link (
SECURITY.mdwas likewise missing from the published npm files) (2c827bb). - Reject a shaped response missing
mal_idfor characters, people, producers, genres, recommendations, staff, and personal-list items (900aa45). - Reject a
get_seasons_listentry missingyear, instead of silently shipping one the caller can't pass toget_seasonal_anime(acdf72d). - Drop a single malformed entry (e.g. missing
mal_id) from a list instead of failing the whole call (354f6c8, ec4b032). - Reject
MAL_OAUTH_PORTvalues outside the valid TCP port range (1-65535) (ab25e99).
Security
- Redact
access_token/refresh_token/client_secret/client_idin JSON-shaped ("key":"value") log text, not justkey=value(59297f4).
v0.8.0
Added
- Let a 2026-07-28-era MCP client cache
tools/list,prompts/list, andserver/discoverfor an hour instead of treating them as immediately stale (14fc657).
Changed
- Pin
@modelcontextprotocol/server/clientto the stable2.0.0release (0341418). - List all four of
get_top_manga'sfiltervalues in its description, not just two (1458de2). - Cross-reference
get_seasonal_anime/get_upcoming_seasonin both directions, not just one (1458de2). - Clarify that only
get_character'svoice_actorscarry amal_id;get_anime_characters's are names only (1458de2). - Cover the same-machine-but-busy-port case in
login_mal's description, not just remote/local (1458de2). - State
get_my_anime_list's sort direction forlist_score,list_updated_at, andanime_title(1458de2). - Disclose that
broadcastcomes back empty duringsearch_anime/get_top_anime/get_seasonal_anime/get_upcoming_season's official-API fallback, matching the existingthemes/demographicscaveat (b6cfc98).
Fixed
- Reject unknown/misspelled tool parameters instead of silently accepting them — on a mutation tool, this previously let a typo'd field ride along with a real one and apply unintentionally (b078608).
- Surface
broadcast(JST air time) in every anime summary, not justget_anime's detailed view —get_anime_schedule's own description promised it but the field was silently dropped (bd42963). - Validate
search_anime/search_manga'sgenresparameter against its documented comma-separated-digits format instead of accepting any string and failing confusingly against the upstream API (943f127). - Reject calendar-invalid
start_date/finish_datevalues (e.g.2024-02-30) instead of only checking theYYYY-MM-DDshape (bf8f2cf). - Reject whitespace-only search queries and usernames instead of sending them to the upstream API (bf8f2cf).
- Advertise
get_anime_reviews/get_manga_reviews's defaultlimitof 5 andget_anime_schedule's default of 25 in the tool's own schema, so clients that read it directly (not just the description) see the default (bf8f2cf).
v0.7.3
Fixed
- Fix
get_anime_episodescrashing with an unhelpful error, and skipping retry/fallback, when Jikan reports its own failure inside an HTTP 200 response (4d253e9). - Disclose that
delete_my_anime_list_item/delete_my_manga_list_itemreport success even when the entry was never on the list (684cd1a). - Disclose that
search_anime/search_manga's official-API fallback can return unrelated results instead of empty for a no-match query (684cd1a). - Soften
get_person's description of voice-role ordering — the upstream API's own order isn't necessarily by prominence (684cd1a).
v0.7.2
Fixed
- Send an
Accept-Encoding: gzip, deflate, brheader on Jikan requests, working around an upstream bug (jikan-me/jikan#596) that 504s some routes without it (91dd067). - Disclose that
get_manga_statisticshas no official-API fallback, unlikeget_anime_statistics(02a5f72).
v0.7.1
Everything below is one commit: 8474b7f.
Fixed
- Fix
get_anime_statistics's official-API fallback throwing a raw validation error instead of a result — the official API sends watch-status counts as numeric strings, which were passed through unconverted. update_my_anime_status/update_my_manga_statusnow reject a call with onlyanime_id/manga_idand no other field, instead of silently creating awatching/readingentry with MAL's defaults.
v0.7.0
Everything below is one commit: 4187549.
Added
- Add machine-readable
outputSchema/structuredContentto every tool's response, alongside the existing text content, so clients can consume results without re-parsing JSON from text. - The
recommend_similarprompt now offers live title autocomplete as you type.
Changed
- The
recommend_similarprompt'stitleargument is now optional — if omitted, it asks which anime you mean instead of failing the call (some clients, e.g. Claude Code, don't prompt the user for a missing required argument).
Removed
- Remove the MCP logging capability and
notifications/messagepush; server logs are now stderr-only. Clients that calledlogging/setLevelor listened for log notifications will no longer receive them — check the server's stderr instead.
Fixed
- Drop a single malformed item from a list response (search/top/seasonal/characters/people/producers/news/etc.) instead of failing the whole call, for both the Jikan and official-API-fallback backends.
- Fix
recommend_similar's prompt steps, which calledget_animeoptional despite requiring the score/genres only it provides. - Disclose that
search_anime/search_manga's official-API fallback also enforcessfwclient-side (matching the existing seasonal-fallback caveat) — a filtered page can come back shorter thanlimit.
v0.6.0
Everything below is one commit: 906cf76.
Added
get_anime_recommendations/get_manga_recommendationsfall back to the official MAL API's ownrecommendationsfield (viaMAL_CLIENT_ID, no OAuth needed) when Jikan fails, joining the existing search/top/seasonal fallback.get_anime/get_mangagain the same official-API fallback; it omitsproducers/licensors/streaming/opening_themes/ending_themes/trailer/favorites, which have no official-API equivalent.get_anime_statisticsalso falls back (watch-status counts only, no score distribution — the official API has no histogram field);get_manga_statisticshas no official-API equivalent at all and stays Jikan-only.
Changed
- Cross-reference
get_my_user_info/get_user_profileand disclose thatget_my_user_infohas no manga statistics at all (the official API has no such field).
v0.5.0
Everything below is one commit: e06eb9b.
Added
- Add a
hidden_gemsprompt — surfaces highly-rated anime/manga that aren't widely known, alongsiderecommend_similar/seasonal_overview.
Fixed
- Fix the
.mcpbbundle's advertised tool list (manifest.json), which was missing 22 of the 45 tools since the v0.2.0/v0.3.0 expansions. - Validate
get_my_user_info/get_my_anime_list/get_my_manga_list/update_my_anime_status/update_my_manga_statusresponses against the expected shape, surfacing a clear error instead of forwarding a malformed upstream response as-is.
Changed
- Disclose undisclosed caps/truncation (recommendations capped at 25,
get_person's voice roles capped at 50, reviews truncated to 1200 chars), thesearch_anime/search_mangafallback's dropped filters,get_seasonal_anime's partial year/season behavior, and cross-referenceget_top_anime/get_top_mangaandget_anime_charactersfrom tools they could be confused with.
v0.4.1
Fixed
- Remove
get_anime_reviews' dangling reference to a nonexistentget_top_reviewstool (2041bb1).
Changed
- Sharpen several tool descriptions — disclose hidden defaults (review/schedule limits, JST air times), add
get_manga's field list, and disambiguateget_top_anime/get_top_manga,get_random_person,get_top_people/get_top_charactersand the five mylist tools from their siblings (2041bb1).