Skip to content

Releases: Grinv/mal-mcp

v0.9.1

Choose a tag to compare

@github-actions github-actions released this 31 Jul 19:38

Changed

  • Clarify the personal-list tool descriptions: the anime_id/manga_id vs id naming, where to obtain the id, and the manga sort values (225fcb1).
  • Disclose that get_random_character/get_random_person are Tenrai-only (no official-API fallback), matching their anime/manga random siblings (8fb3e8a).

Fixed

  • Correct get_anime_news's sfw description: it filters the news list down, not to zero, rather than emptying it for an NSFW anime (26b612c).

Security

  • Use a random, validated OAuth state for login_mal instead of a fixed constant, and reject a redirect whose state doesn't match (4ea7687).
  • Write the on-disk token store atomically, guaranteeing 0600 on rewrite and preventing a truncated file on a mid-write crash (8161338).
  • Redact the PKCE code_verifier and the X-MAL-CLIENT-ID header, and route non-ApiError failures through the same redaction (036e815).

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 30 Jul 15:27

Added

  • Add get_manga_news for per-manga news, matching the existing get_anime_news (95f5a61).
  • Add sfw/sfw_strict to get_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_producers never 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, and title_synonyms on get_anime/get_manga (plus moreinfo, anime only) (3bf96c8).
  • Add get_magazines, for manga serialization magazines/publishers, giving search_manga's magazines filter an ID lookup (e80346d).
  • Add sort/preliminary/spoilers/sentiment/page filters to get_anime_reviews/get_manga_reviews (488e8a5).
  • Surface is_spoiler/is_preliminary/reactions and 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 type accept multiple values at once on search_anime/search_manga/get_top_anime/get_top_manga, not just one (488e8a5).
  • Add rating to get_top_anime (488e8a5).
  • Add filter/rating/unapproved/continuing/kids/order_by/sort to get_seasonal_anime/get_upcoming_season (488e8a5).
  • Add kids/unapproved/page to get_anime_schedule (488e8a5).
  • Add letter to search_characters/search_people/get_producers (488e8a5).
  • Add sfw_strict alongside sfw on search_anime/search_manga and other list tools, to also exclude Ecchi-tagged shows (e0b8b38).
  • Add sfw/sfw_strict to get_top_anime, get_top_manga, get_random_anime, and get_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_MS env vars to TENRAI_BASE_URL/TENRAI_MIN_INTERVAL_MS (e2540ef).
  • Raise every search/top/list tool's limit cap 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 page parameter description from the unbounded variant used by ranking tools (09f65f1).

Removed

  • Remove get_user_profile/get_user_favorites — Tenrai has no /users endpoint, and the official API can't look up an arbitrary username (e2540ef).

Fixed

  • Make get_anime_reviews/get_manga_reviews's limit actually limit the results — Tenrai silently ignores its own limit param (451aa4e).
  • Accept get_anime_schedule's extra day buckets and a few more real search_anime/search_manga sort fields the schemas previously rejected (be9219f).
  • Reject page above 1000 on every tool except the four get_top_* ranking tools, matching Tenrai's real per-endpoint ceiling (4e8febe, 7622dee).
  • Make get_anime_reviews/get_manga_reviews backfill from later in the page instead of under-returning limit when an early review fails validation (bb04202).
  • Stop get_producer from failing entirely when a producer's established date 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.md was missing from the published files) and shrink the .mcpb bundle to runtime-only files (4580a74, 8e513f6).
  • Fix the same 404 for the README's Security link (SECURITY.md was likewise missing from the published npm files) (2c827bb).
  • Reject a shaped response missing mal_id for characters, people, producers, genres, recommendations, staff, and personal-list items (900aa45).
  • Reject a get_seasons_list entry missing year, instead of silently shipping one the caller can't pass to get_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_PORT values outside the valid TCP port range (1-65535) (ab25e99).

Security

  • Redact access_token/refresh_token/client_secret/client_id in JSON-shaped ("key":"value") log text, not just key=value (59297f4).

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 29 Jul 11:09

Added

  • Let a 2026-07-28-era MCP client cache tools/list, prompts/list, and server/discover for an hour instead of treating them as immediately stale (14fc657).

Changed

  • Pin @modelcontextprotocol/server/client to the stable 2.0.0 release (0341418).
  • List all four of get_top_manga's filter values in its description, not just two (1458de2).
  • Cross-reference get_seasonal_anime/get_upcoming_season in both directions, not just one (1458de2).
  • Clarify that only get_character's voice_actors carry a mal_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 for list_score, list_updated_at, and anime_title (1458de2).
  • Disclose that broadcast comes back empty during search_anime/get_top_anime/get_seasonal_anime/get_upcoming_season's official-API fallback, matching the existing themes/demographics caveat (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 just get_anime's detailed view — get_anime_schedule's own description promised it but the field was silently dropped (bd42963).
  • Validate search_anime/search_manga's genres parameter 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_date values (e.g. 2024-02-30) instead of only checking the YYYY-MM-DD shape (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 default limit of 5 and get_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

Choose a tag to compare

@github-actions github-actions released this 27 Jul 20:22

Fixed

  • Fix get_anime_episodes crashing 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_item report 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

Choose a tag to compare

@github-actions github-actions released this 22 Jul 20:50

Fixed

  • Send an Accept-Encoding: gzip, deflate, br header on Jikan requests, working around an upstream bug (jikan-me/jikan#596) that 504s some routes without it (91dd067).
  • Disclose that get_manga_statistics has no official-API fallback, unlike get_anime_statistics (02a5f72).

v0.7.1

Choose a tag to compare

@github-actions github-actions released this 21 Jul 19:46

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_status now reject a call with only anime_id/manga_id and no other field, instead of silently creating a watching/reading entry with MAL's defaults.

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 21 Jul 18:12

Everything below is one commit: 4187549.

Added

  • Add machine-readable outputSchema/structuredContent to every tool's response, alongside the existing text content, so clients can consume results without re-parsing JSON from text.
  • The recommend_similar prompt now offers live title autocomplete as you type.

Changed

  • The recommend_similar prompt's title argument 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/message push; server logs are now stderr-only. Clients that called logging/setLevel or 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 called get_anime optional despite requiring the score/genres only it provides.
  • Disclose that search_anime/search_manga's official-API fallback also enforces sfw client-side (matching the existing seasonal-fallback caveat) — a filtered page can come back shorter than limit.

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 20 Jul 08:31

Everything below is one commit: 906cf76.

Added

  • get_anime_recommendations/get_manga_recommendations fall back to the official MAL API's own recommendations field (via MAL_CLIENT_ID, no OAuth needed) when Jikan fails, joining the existing search/top/seasonal fallback.
  • get_anime/get_manga gain the same official-API fallback; it omits producers/licensors/streaming/opening_themes/ending_themes/trailer/favorites, which have no official-API equivalent.
  • get_anime_statistics also falls back (watch-status counts only, no score distribution — the official API has no histogram field); get_manga_statistics has no official-API equivalent at all and stays Jikan-only.

Changed

  • Cross-reference get_my_user_info/get_user_profile and disclose that get_my_user_info has no manga statistics at all (the official API has no such field).

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 18 Jul 12:33

Everything below is one commit: e06eb9b.

Added

  • Add a hidden_gems prompt — surfaces highly-rated anime/manga that aren't widely known, alongside recommend_similar/seasonal_overview.

Fixed

  • Fix the .mcpb bundle'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_status responses 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), the search_anime/search_manga fallback's dropped filters, get_seasonal_anime's partial year/season behavior, and cross-reference get_top_anime/get_top_manga and get_anime_characters from tools they could be confused with.

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 17 Jul 22:12

Fixed

  • Remove get_anime_reviews' dangling reference to a nonexistent get_top_reviews tool (2041bb1).

Changed

  • Sharpen several tool descriptions — disclose hidden defaults (review/schedule limits, JST air times), add get_manga's field list, and disambiguate get_top_anime/get_top_manga, get_random_person, get_top_people/get_top_characters and the five mylist tools from their siblings (2041bb1).