Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

MAL MCP Server

NPM · MAL-MCP · 2 COMPONENTS

MyAnimeList MCP server: Tenrai-powered reads plus official MAL personal-list management.

−1 this week 94 Trust /100

Last scanned (19 hours ago)

Scores higher than 97% of npm servers

Category Entertainment and Games

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 0 of 3 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to Grinv/mal-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 12 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability78
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 13285 tokens (~246/item across 54 items; 54 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management85
  • Stability check failed: the tool surface changed between 0.10.0 and 0.11.0: 0 tool removals, 5 breaking changes, 0 additions. See how to fix → Fail
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 55 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 4 Nov 26 −1

    No change was recorded against any check on this day. Stability & Change Management went from 95 to 85.

  • 22 Oct 26 +4
    • Stability: 0.97 → fail ▼ security
    • CVE-2026-111768 no longer affects this package ▲ security
    • CVE-2026-111770 no longer affects this package ▲ security
    • CVE-2026-111771 no longer affects this package ▲ security
    • Known CVEs: fail → pass ▲ security
    • Stability: 0.97 → pass security
    • Package version: 0.10.0 → 0.11.0 functional
  • 21 Oct 26 −5
    • CVE-2026-111770 affects this package: high ▼ security
    • CVE-2026-111771 affects this package: high ▼ security
    • CVE-2026-111768 affects this package: high ▼ security
    • Known CVEs: pass → fail ▼ security
    • Stability: pass → 0.97 functional
  • 17 Oct 26 +3
    • Stability: 0.80 → pass security
  • 16 Oct 26 −3
    • Stability: pass → 0.80 functional
  • 15 Oct 26 0
    • Stability: 0.97 → pass security
  • 14 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 12 Oct 26 +1
    • Security disclosure: unverified → pass ▲ functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 4 Nov 2026 · Analysed npm/mal-mcp@0.11.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo Grinv/mal-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/Grinv/mal-mcp/.github/workflows/release.yml@refs/tags/v0.11.0
Rekor log index 3382146583
Predicate type SLSA build provenance https://slsa.dev/provenance/v1
Subject digest sha512:ad95e11d525ed36def309ac90453485c41310772b3613f688a67459bf2177de59170614e8d768c85d3e346499263a4fed4d96633257a2e9439413cdf9

Background: How many MCP packages publish verified provenance →

Dependencies 3 packages
Packages resolved 3
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 54 exposed · ~13,134 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
delete_my_anime_list_item ~165

Remove an anime entry from the authenticated user's list. This cannot be undone. Returns `deleted: true` whenever MAL accepts the request — including when the anime was never on the list to begin with, since MAL's own delete endpoint doesn't distinguish the two — so success alone isn't proof something existed; check get_my_anime_list first if you need to confirm. Requires a MyAnimeList login.

NameTypeReqDescription
anime_idintegeryesMyAnimeList numeric ID of the target entry. (The read tools call this same id `id`; it's named anime_id/manga_id here to match MAL's own write endpoints.) Obtain it from search_anime/search_manga, or…
NameTypeReqDescription
anime_idintegeryes–
deletedbooleanyes–

No examples provided.

delete_my_manga_list_item ~165

Remove a manga entry from the authenticated user's list. This cannot be undone. Returns `deleted: true` whenever MAL accepts the request — including when the manga was never on the list to begin with, since MAL's own delete endpoint doesn't distinguish the two — so success alone isn't proof something existed; check get_my_manga_list first if you need to confirm. Requires a MyAnimeList login.

NameTypeReqDescription
manga_idintegeryesMyAnimeList numeric ID of the target entry. (The read tools call this same id `id`; it's named anime_id/manga_id here to match MAL's own write endpoints.) Obtain it from search_anime/search_manga, or…
NameTypeReqDescription
deletedbooleanyes–
manga_idintegeryes–

No examples provided.

get_anime ~381

Get full details for one anime by mal_id: synopsis, score, genres, studios, streaming links, external links (official site, social media), alternate title synonyms, and related entries. `moreinfo` is a free-text field MAL editors sometimes add (e.g. suggested viewing order for a franchise) — usually absent. Only carries the single main `trailer` URL — use get_anime_videos for every promo/episode-preview/music video. Obtain the mal_id from search_anime first. `sfw`/`sfw_strict` don't affect this anime itself (its id was requested explicitly) — they filter NSFW entries out of its `relations` list. If Tenrai is unavailable and MAL_CLIENT_ID is set, transparently retries via the official API, which omits `themes`/`demographics`/`producers`/`licensors`/`streaming`/`opening_themes`/`ending_themes`/`trailer`/`favorites`/`moreinfo`/`explicit_genres`/`external` (no equivalent fields there) and ignores `sfw`/`sfw_strict` entirely.

NameTypeReqDescription
idintegeryesMyAnimeList numeric ID.
sfwboolean–If true, exclude adult/explicit-rated entries (R+ Mild Nudity and up). Defaults to false (no filtering). Note: this alone still allows mainstream, safely-rated shows tagged with the Ecchi genre (fans…
sfw_strictboolean–If true, exclude adult/explicit-rated entries AND anything tagged with the Ecchi genre, even otherwise-mainstream/safely-rated shows. Stricter than `sfw` alone. Defaults to false.
NameTypeReqDescription
airedstring––
airingboolean––
backgroundstring––
broadcaststring––
demographicsarray––
durationstring––
ending_themesarray––
episodesinteger––
explicit_genresarray––
externalarray––
favoritesinteger––
genresarray––
image_urlstring––
licensorsarray––
mal_idintegeryes–
membersinteger––
moreinfostring––
opening_themesarray––
popularityinteger––
producersarray––
rankinteger––
ratingstring––
relationsarray––
scorenumber––
scored_byinteger––
seasonstring––
sourcestring––
statusstring––
streamingarray––
studiosarray––
synopsisstring––
themesarray––
titlestring––
title_englishstring––
title_japanesestring––
title_synonymsarray––
trailerstring––
typestring––
urlstring––
yearinteger––

No examples provided.

get_anime_characters ~51

List the characters of an anime (by mal_id) with their roles and Japanese voice actors. Get the mal_id from search_anime.

NameTypeReqDescription
idintegeryesMyAnimeList numeric ID.
NameTypeReqDescription
charactersarrayyes–

No examples provided.

get_anime_episodes ~89

List an anime's episodes (by mal_id) with titles, air dates and filler/recap flags. Paginated (~100 per page); use `page` for long-running series. Get the mal_id from search_anime.

NameTypeReqDescription
idintegeryesMyAnimeList numeric ID.
pageinteger–1-based page number for pagination (1-20000).
NameTypeReqDescription
episodesarrayyes–
pageobjectyes–

No examples provided.

get_anime_genres ~212

List anime genres/themes/demographics with their MAL IDs. Use this to discover the numeric IDs that the `genres` parameter of search_anime expects. `sfw`/`sfw_strict` drop the adult (and, for sfw_strict, Ecchi) genres from the list itself.

NameTypeReqDescription
filterstring–Restrict to one kind of tag. Omit to list all.
sfwboolean–If true, exclude adult/explicit-rated entries (R+ Mild Nudity and up). Defaults to false (no filtering). Note: this alone still allows mainstream, safely-rated shows tagged with the Ecchi genre (fans…
sfw_strictboolean–If true, exclude adult/explicit-rated entries AND anything tagged with the Ecchi genre, even otherwise-mainstream/safely-rated shows. Stricter than `sfw` alone. Defaults to false.
NameTypeReqDescription
genresarrayyes–

No examples provided.

get_anime_interest_stacks ~438

List the public MyAnimeList Interest Stacks that include a given anime (by mal_id) — useful for 'what do people group this with' and as a jumping-off point for recommendations rooted in human curation rather than vote counts. Get the mal_id from search_anime. Returns stack metadata only; pass a stack's own mal_id to get_interest_stack for its entries. No official-API fallback exists for this tool — it always needs Tenrai itself to be reachable.

NameTypeReqDescription
challengesstring–Filter by challenge stacks (watch-along style lists). 'true' includes them alongside the rest, 'false' (default) excludes them, 'only' returns exclusively those.
idintegeryesMyAnimeList numeric ID.
limitinteger–Max results per page (1-100).
officialstring–Filter by official MAL-editorial stacks. 'true' includes them alongside the rest, 'false' (default) excludes them, 'only' returns exclusively those.
order_bystring–Field to order by. Defaults to created_at (newest stacks first).
pageinteger–1-based page number for pagination (1-20000).
sfwboolean–If true, exclude adult/explicit-rated entries (R+ Mild Nudity and up). Defaults to false (no filtering). Note: this alone still allows mainstream, safely-rated shows tagged with the Ecchi genre (fans…
sfw_strictboolean–If true, exclude adult/explicit-rated entries AND anything tagged with the Ecchi genre, even otherwise-mainstream/safely-rated shows. Stricter than `sfw` alone. Defaults to false.
sortstring–Sort direction. Only takes effect together with `order_by`; ignored on its own.
spoilersstring–Filter by stacks flagged as containing spoilers. 'true' includes them alongside the rest, 'false' (default) excludes them, 'only' returns exclusively those.
NameTypeReqDescription
pageobjectyes–
resultsarrayyes–

No examples provided.

get_anime_news ~262

List recent news articles about an anime (by mal_id): headline, date, author and excerpt. Useful for 'what's new / any announcements' questions. Get the mal_id from search_anime. Use get_news instead for a site-wide feed not tied to one anime. `sfw`/`sfw_strict` filter out articles for an NSFW/adult-adjacent anime — verified live this can cut the result down sharply (not necessarily to zero) rather than being a no-op.

NameTypeReqDescription
idintegeryesMyAnimeList numeric ID.
pageinteger–1-based page number for pagination (1-20000).
sfwboolean–If true, exclude adult/explicit-rated entries (R+ Mild Nudity and up). Defaults to false (no filtering). Note: this alone still allows mainstream, safely-rated shows tagged with the Ecchi genre (fans…
sfw_strictboolean–If true, exclude adult/explicit-rated entries AND anything tagged with the Ecchi genre, even otherwise-mainstream/safely-rated shows. Stricter than `sfw` alone. Defaults to false.
NameTypeReqDescription
pageobjectyes–
resultsarrayyes–

No examples provided.

get_anime_recommendations ~300

Get community recommendations for anime similar to the given mal_id, ordered by votes and capped at the top 25 (no pagination). Get the mal_id from search_anime. Use get_top_anime instead for a global popularity/score ranking not tied to one title, or get_recent_anime_recommendations for a site-wide feed of recommendation pairs not tied to this title either. `sfw`/`sfw_strict` filter NSFW entries out of the recommendation list itself. If Tenrai is unavailable and MAL_CLIENT_ID is set, transparently retries via the official API's own recommendations field (same output shape, but at most 10 entries, ordering may differ from Tenrai's, and `sfw`/`sfw_strict` are ignored entirely).

NameTypeReqDescription
idintegeryesMyAnimeList numeric ID.
sfwboolean–If true, exclude adult/explicit-rated entries (R+ Mild Nudity and up). Defaults to false (no filtering). Note: this alone still allows mainstream, safely-rated shows tagged with the Ecchi genre (fans…
sfw_strictboolean–If true, exclude adult/explicit-rated entries AND anything tagged with the Ecchi genre, even otherwise-mainstream/safely-rated shows. Stricter than `sfw` alone. Defaults to false.
NameTypeReqDescription
recommendationsarrayyes–

No examples provided.

get_anime_reviews ~323

Get user reviews for one anime (by mal_id): review text (truncated to 1200 characters), score, spoiler/preliminary flags, episodes watched at review time (`episodes_watched`, not `chapters_read` — that field is manga-only), and community reaction counts. `limit` (default 5) caps how many of the fetched page's reviews come back — it does not itself fetch further pages, use `page` for Tenrai's own ~20-per-page listing. `sort`/`preliminary`/`spoilers`/`sentiment` filter/order the underlying set before that cap is applied. Get the mal_id from search_anime.

NameTypeReqDescription
idintegeryesMyAnimeList numeric ID.
limitinteger–How many of the page's reviews to return (1-20; a page holds 20).
pageinteger–1-based page number for pagination (1-20000).
preliminarystring–Filter by preliminary. 'true' includes them alongside other reviews, 'false' (default) excludes them, 'only' returns exclusively preliminary reviews.
sentimentstring–Restrict to reviews with this overall sentiment tag. Omit for all sentiments.
sortstring–Sort order. Defaults to most_helpful (Tenrai's own default) when omitted.
spoilersstring–Filter by spoiler. 'true' includes them alongside other reviews, 'false' (default) excludes them, 'only' returns exclusively spoiler reviews.
NameTypeReqDescription
pageobjectyes–
reviewsarrayyes–

No examples provided.

get_anime_schedule ~330

Get the anime broadcast schedule (air times in JST), optionally for a single weekday (or the `unknown`/`other` buckets Tenrai uses for shows with no fixed weekly slot). `broadcast` is only present for currently-airing shows. Defaults to 25 results if `limit` is omitted; use `page` for further results.

NameTypeReqDescription
daystring–Weekday to filter by, or `unknown`/`other` for shows with no fixed weekly slot. Omit for the whole week.
kidsboolean–If true, exclude entries tagged as children's/kids content. Defaults to false.
limitinteger–Max results per page (1-100).
pageinteger–1-based page number for pagination (1-20000).
sfwboolean–If true, exclude adult/explicit-rated entries (R+ Mild Nudity and up). Defaults to false (no filtering). Note: this alone still allows mainstream, safely-rated shows tagged with the Ecchi genre (fans…
sfw_strictboolean–If true, exclude adult/explicit-rated entries AND anything tagged with the Ecchi genre, even otherwise-mainstream/safely-rated shows. Stricter than `sfw` alone. Defaults to false.
unapprovedstring–Entries not yet approved by MAL's moderators: 'true' also includes them, 'false' (default) excludes them, 'only' returns exclusively unapproved entries.
NameTypeReqDescription
pageobjectyes–
resultsarrayyes–

No examples provided.

get_anime_staff ~68

List the production staff of an anime (by mal_id) — director, composer, etc. — with their roles. Complements get_anime_characters (which covers voice actors). Get the mal_id from search_anime.

NameTypeReqDescription
idintegeryesMyAnimeList numeric ID.
NameTypeReqDescription
staffarrayyes–

No examples provided.

get_anime_statistics ~89

Get watch-status counts (watching/completed/…) and the score distribution for an anime by mal_id. Get the mal_id from search_anime. If Tenrai is unavailable and MAL_CLIENT_ID is set, transparently retries via the official API, which omits the score distribution (`scores`) entirely — no equivalent field there.

NameTypeReqDescription
idintegeryesMyAnimeList numeric ID.
NameTypeReqDescription
completedinteger––
droppedinteger––
on_holdinteger––
plan_to_readinteger––
plan_to_watchinteger––
readinginteger––
scoresarray––
totalinteger––
watchinginteger––

No examples provided.

get_anime_videos ~107

List an anime's promotional videos (PVs/trailers), episode preview clips, and music videos (openings/endings), each with a title, watch URL, thumbnail, and view/like counts where available. This is richer than get_anime's single `trailer` field — use this instead when the caller wants every promo, not just the main one. Get the mal_id from search_anime.

NameTypeReqDescription
idintegeryesMyAnimeList numeric ID.
NameTypeReqDescription
episodesarrayyes–
music_videosarrayyes–
promoarrayyes–

No examples provided.

get_character ~220

Get full details for one character by mal_id: bio, the anime/manga they appear in, and their voice actors. Obtain the mal_id from search_characters or get_anime_characters. `sfw`/`sfw_strict` filter NSFW/adult-adjacent titles out of the character's own anime/manga appearance lists (verified live) rather than affecting the character itself.

NameTypeReqDescription
idintegeryesMyAnimeList numeric ID.
sfwboolean–If true, exclude adult/explicit-rated entries (R+ Mild Nudity and up). Defaults to false (no filtering). Note: this alone still allows mainstream, safely-rated shows tagged with the Ecchi genre (fans…
sfw_strictboolean–If true, exclude adult/explicit-rated entries AND anything tagged with the Ecchi genre, even otherwise-mainstream/safely-rated shows. Stricter than `sfw` alone. Defaults to false.
NameTypeReqDescription
aboutstring––
animearray––
favoritesinteger––
image_urlstring––
mal_idintegeryes–
mangaarray––
namestring––
name_kanjistring––
nicknamesarray––
urlstring––
voice_actorsarray––

No examples provided.

get_interest_stack ~278

Get one MyAnimeList Interest Stack by mal_id, with its entries in the curator's own order — each carrying that curator's score (`author_score`) and note. Obtain the stack's mal_id from get_interest_stacks, get_anime_interest_stacks or get_manga_interest_stacks. Every entry's own `mal_id` chains into get_anime or get_manga (the stack's `stack_type` says which). `sfw`/`sfw_strict` filter NSFW entries out of the entry list rather than hiding the stack itself. No official-API fallback exists for this tool — it always needs Tenrai itself to be reachable.

NameTypeReqDescription
idintegeryesMyAnimeList numeric ID of the interest stack.
sfwboolean–If true, exclude adult/explicit-rated entries (R+ Mild Nudity and up). Defaults to false (no filtering). Note: this alone still allows mainstream, safely-rated shows tagged with the Ecchi genre (fans…
sfw_strictboolean–If true, exclude adult/explicit-rated entries AND anything tagged with the Ecchi genre, even otherwise-mainstream/safely-rated shows. Stricter than `sfw` alone. Defaults to false.
NameTypeReqDescription
author_urlstring––
author_usernamestring––
created_atstring––
descriptionstring––
entriesarray––
entry_countinteger––
is_challengeboolean––
is_officialboolean––
is_spoilerboolean––
mal_idintegeryes–
restack_countinteger––
stack_typestring––
titlestring––
urlstring––

No examples provided.

get_interest_stacks ~511

Browse or search MyAnimeList Interest Stacks: themed anime/manga lists curated by real users, each entry carrying the curator's own score and note. Use this for taste- or mood-shaped requests ('something melancholy', 'cozy slice-of-life') where a ranking or a genre filter is the wrong instrument — get_top_anime answers 'what is best', this answers 'what goes together'. Returns stack metadata only; pass a stack's mal_id to get_interest_stack for its actual entries. For stacks containing one specific title, use get_anime_interest_stacks/get_manga_interest_stacks instead. No official-API fallback exists for this tool — it always needs Tenrai itself to be reachable.

NameTypeReqDescription
challengesstring–Filter by challenge stacks (watch-along style lists). 'true' includes them alongside the rest, 'false' (default) excludes them, 'only' returns exclusively those.
limitinteger–Max results per page (1-100).
officialstring–Filter by official MAL-editorial stacks. 'true' includes them alongside the rest, 'false' (default) excludes them, 'only' returns exclusively those.
order_bystring–Field to order by. Defaults to created_at (newest stacks first).
pageinteger–1-based page number for pagination (1-20000).
qstring–Free-text search over stack titles and descriptions. Omit to browse all.
sfwboolean–If true, exclude adult/explicit-rated entries (R+ Mild Nudity and up). Defaults to false (no filtering). Note: this alone still allows mainstream, safely-rated shows tagged with the Ecchi genre (fans…
sfw_strictboolean–If true, exclude adult/explicit-rated entries AND anything tagged with the Ecchi genre, even otherwise-mainstream/safely-rated shows. Stricter than `sfw` alone. Defaults to false.
sortstring–Sort direction. Only takes effect together with `order_by`; ignored on its own.
spoilersstring–Filter by stacks flagged as containing spoilers. 'true' includes them alongside the rest, 'false' (default) excludes them, 'only' returns exclusively those.
stack_typestring–Restrict to anime stacks or manga stacks. Omit for both.
NameTypeReqDescription
pageobjectyes–
resultsarrayyes–

No examples provided.

get_magazines ~159

List or search manga serialization magazines/publishers (e.g. Weekly Shonen Jump) with their MAL IDs and manga counts. Use `q` to search by name, or look up an ID here for search_manga's `magazines` filter.

NameTypeReqDescription
letterstring–Restrict results to entries whose title starts with this single letter.
limitinteger–Max results per page (1-100).
order_bystring–Field to order by.
pageinteger–1-based page number for pagination (1-20000).
qstring–Filter by name.
sortstring–Sort direction. Only takes effect together with `order_by`; ignored on its own.
NameTypeReqDescription
pageobjectyes–
resultsarrayyes–

No examples provided.

get_manga ~294

Get full details for one manga by mal_id: synopsis, score, genres, authors, serialization, external links (official site, social media), alternate title synonyms, and related entries. Obtain the mal_id from search_manga first. `sfw`/`sfw_strict` don't affect this manga itself (its id was requested explicitly) — they filter NSFW entries out of its `relations` list. If Tenrai is unavailable and MAL_CLIENT_ID is set, transparently retries via the official API, which omits `themes`/`demographics`/`favorites`/`moreinfo`/`explicit_genres`/`external` (no equivalent fields there) and ignores `sfw`/`sfw_strict` entirely.

NameTypeReqDescription
idintegeryesMyAnimeList numeric ID.
sfwboolean–If true, exclude adult/explicit-rated entries (R+ Mild Nudity and up). Defaults to false (no filtering). Note: this alone still allows mainstream, safely-rated shows tagged with the Ecchi genre (fans…
sfw_strictboolean–If true, exclude adult/explicit-rated entries AND anything tagged with the Ecchi genre, even otherwise-mainstream/safely-rated shows. Stricter than `sfw` alone. Defaults to false.
NameTypeReqDescription
authorsarray––
backgroundstring––
chaptersinteger––
demographicsarray––
explicit_genresarray––
externalarray––
favoritesinteger––
genresarray––
image_urlstring––
mal_idintegeryes–
membersinteger––
moreinfostring––
popularityinteger––
publishedstring––
publishingboolean––
rankinteger––
relationsarray––
scorenumber––
scored_byinteger––
serializationsarray––
statusstring––
synopsisstring––
themesarray––
titlestring––
title_englishstring––
title_japanesestring––
title_synonymsarray––
typestring––
urlstring––
volumesinteger––

No examples provided.

get_manga_characters ~47

List the characters of a manga (by mal_id) with their roles. Get the mal_id from search_manga.

NameTypeReqDescription
idintegeryesMyAnimeList numeric ID.
NameTypeReqDescription
charactersarrayyes–

No examples provided.

get_manga_genres ~212

List manga genres/themes/demographics with their MAL IDs. Use this to discover the numeric IDs that the `genres` parameter of search_manga expects. `sfw`/`sfw_strict` drop the adult (and, for sfw_strict, Ecchi) genres from the list itself.

NameTypeReqDescription
filterstring–Restrict to one kind of tag. Omit to list all.
sfwboolean–If true, exclude adult/explicit-rated entries (R+ Mild Nudity and up). Defaults to false (no filtering). Note: this alone still allows mainstream, safely-rated shows tagged with the Ecchi genre (fans…
sfw_strictboolean–If true, exclude adult/explicit-rated entries AND anything tagged with the Ecchi genre, even otherwise-mainstream/safely-rated shows. Stricter than `sfw` alone. Defaults to false.
NameTypeReqDescription
genresarrayyes–

No examples provided.

get_manga_interest_stacks ~420

List the public MyAnimeList Interest Stacks that include a given manga (by mal_id). The manga counterpart of get_anime_interest_stacks. Get the mal_id from search_manga. Returns stack metadata only; pass a stack's own mal_id to get_interest_stack for its entries. No official-API fallback exists for this tool — it always needs Tenrai itself to be reachable.

NameTypeReqDescription
challengesstring–Filter by challenge stacks (watch-along style lists). 'true' includes them alongside the rest, 'false' (default) excludes them, 'only' returns exclusively those.
idintegeryesMyAnimeList numeric ID.
limitinteger–Max results per page (1-100).
officialstring–Filter by official MAL-editorial stacks. 'true' includes them alongside the rest, 'false' (default) excludes them, 'only' returns exclusively those.
order_bystring–Field to order by. Defaults to created_at (newest stacks first).
pageinteger–1-based page number for pagination (1-20000).
sfwboolean–If true, exclude adult/explicit-rated entries (R+ Mild Nudity and up). Defaults to false (no filtering). Note: this alone still allows mainstream, safely-rated shows tagged with the Ecchi genre (fans…
sfw_strictboolean–If true, exclude adult/explicit-rated entries AND anything tagged with the Ecchi genre, even otherwise-mainstream/safely-rated shows. Stricter than `sfw` alone. Defaults to false.
sortstring–Sort direction. Only takes effect together with `order_by`; ignored on its own.
spoilersstring–Filter by stacks flagged as containing spoilers. 'true' includes them alongside the rest, 'false' (default) excludes them, 'only' returns exclusively those.
NameTypeReqDescription
pageobjectyes–
resultsarrayyes–

No examples provided.

get_manga_news ~262

List recent news articles about a manga (by mal_id): headline, date, author and excerpt. Useful for 'what's new / any announcements' questions. Get the mal_id from search_manga. Use get_news instead for a site-wide feed not tied to one manga. `sfw`/`sfw_strict` filter out articles for an NSFW/adult-adjacent manga — verified live this can cut the result down sharply (not necessarily to zero) rather than being a no-op.

NameTypeReqDescription
idintegeryesMyAnimeList numeric ID.
pageinteger–1-based page number for pagination (1-20000).
sfwboolean–If true, exclude adult/explicit-rated entries (R+ Mild Nudity and up). Defaults to false (no filtering). Note: this alone still allows mainstream, safely-rated shows tagged with the Ecchi genre (fans…
sfw_strictboolean–If true, exclude adult/explicit-rated entries AND anything tagged with the Ecchi genre, even otherwise-mainstream/safely-rated shows. Stricter than `sfw` alone. Defaults to false.
NameTypeReqDescription
pageobjectyes–
resultsarrayyes–

No examples provided.

get_manga_recommendations ~300

Get community recommendations for manga similar to the given mal_id, ordered by votes and capped at the top 25 (no pagination). Get the mal_id from search_manga. Use get_top_manga instead for a global popularity/score ranking not tied to one title, or get_recent_manga_recommendations for a site-wide feed of recommendation pairs not tied to this title either. `sfw`/`sfw_strict` filter NSFW entries out of the recommendation list itself. If Tenrai is unavailable and MAL_CLIENT_ID is set, transparently retries via the official API's own recommendations field (same output shape, but at most 10 entries, ordering may differ from Tenrai's, and `sfw`/`sfw_strict` are ignored entirely).

NameTypeReqDescription
idintegeryesMyAnimeList numeric ID.
sfwboolean–If true, exclude adult/explicit-rated entries (R+ Mild Nudity and up). Defaults to false (no filtering). Note: this alone still allows mainstream, safely-rated shows tagged with the Ecchi genre (fans…
sfw_strictboolean–If true, exclude adult/explicit-rated entries AND anything tagged with the Ecchi genre, even otherwise-mainstream/safely-rated shows. Stricter than `sfw` alone. Defaults to false.
NameTypeReqDescription
recommendationsarrayyes–

No examples provided.

get_manga_reviews ~323

Get user reviews for one manga (by mal_id): review text (truncated to 1200 characters), score, spoiler/preliminary flags, chapters read at review time (`chapters_read`, not `episodes_watched` — that field is anime-only), and community reaction counts. `limit` (default 5) caps how many of the fetched page's reviews come back — it does not itself fetch further pages, use `page` for Tenrai's own ~20-per-page listing. `sort`/`preliminary`/`spoilers`/`sentiment` filter/order the underlying set before that cap is applied. Get the mal_id from search_manga.

NameTypeReqDescription
idintegeryesMyAnimeList numeric ID.
limitinteger–How many of the page's reviews to return (1-20; a page holds 20).
pageinteger–1-based page number for pagination (1-20000).
preliminarystring–Filter by preliminary. 'true' includes them alongside other reviews, 'false' (default) excludes them, 'only' returns exclusively preliminary reviews.
sentimentstring–Restrict to reviews with this overall sentiment tag. Omit for all sentiments.
sortstring–Sort order. Defaults to most_helpful (Tenrai's own default) when omitted.
spoilersstring–Filter by spoiler. 'true' includes them alongside other reviews, 'false' (default) excludes them, 'only' returns exclusively spoiler reviews.
NameTypeReqDescription
pageobjectyes–
reviewsarrayyes–

No examples provided.

get_manga_statistics ~78

Get read-status counts (reading/completed/…) and the score distribution for a manga by mal_id. Get the mal_id from search_manga. Unlike get_anime_statistics, no official-API fallback exists for this tool — it always needs Tenrai itself to be reachable.

NameTypeReqDescription
idintegeryesMyAnimeList numeric ID.
NameTypeReqDescription
completedinteger––
droppedinteger––
on_holdinteger––
plan_to_readinteger––
plan_to_watchinteger––
readinginteger––
scoresarray––
totalinteger––
watchinginteger––

No examples provided.

get_my_anime_list ~98

Get the authenticated user's own anime list, with each entry's status, score and progress. Requires a MyAnimeList login.

NameTypeReqDescription
limitinteger–Max results (1-1000).
offsetinteger–Offset for pagination.
sortstring–Sort order. list_score/list_updated_at return highest/most-recent first; anime_title returns A-Z.
statusstring–List status bucket.
NameTypeReqDescription
has_next_pagebooleanyes–
itemsarrayyes–

No examples provided.

get_my_manga_list ~95

Get the authenticated user's own manga list, with status, score and progress. Requires a MyAnimeList login.

NameTypeReqDescription
limitinteger–Max results (1-1000).
offsetinteger–Offset for pagination.
sortstring–Sort order. list_score/list_updated_at return highest/most-recent first; manga_title returns A-Z.
statusstring–List status bucket.
NameTypeReqDescription
has_next_pagebooleanyes–
itemsarrayyes–

No examples provided.

get_my_user_info ~58

Get the logged-in user's MyAnimeList profile and anime watch-status statistics. Requires a MyAnimeList login. Anime-only — the official API has no manga statistics field at all, and there is no tool for a user's manga read stats.

Input schema present but exposes no named parameters.

NameTypeReqDescription
anime_statisticsobject––
idintegeryes–
joined_atstring––
locationstring|null––
namestringyes–

No examples provided.

get_news ~304

List recent MyAnimeList news articles site-wide (headline, date, author, excerpt) — not tied to one anime or manga. Use `q` to search by keyword or `tag` to filter by topic tag. Use get_anime_news/get_manga_news instead for news about one specific anime/manga by mal_id. `sfw`/`sfw_strict` drop articles about adult content.

NameTypeReqDescription
limitinteger–Max results per page (1-100).
pageinteger–1-based page number for pagination (1-20000).
qstring–Search query, e.g. a keyword or title. Verified live to search beyond just the headline (a real, unfamiliar-sounding title can still match) — don't assume a result's title visibly contains the term.
sfwboolean–If true, exclude adult/explicit-rated entries (R+ Mild Nudity and up). Defaults to false (no filtering). Note: this alone still allows mainstream, safely-rated shows tagged with the Ecchi genre (fans…
sfw_strictboolean–If true, exclude adult/explicit-rated entries AND anything tagged with the Ecchi genre, even otherwise-mainstream/safely-rated shows. Stricter than `sfw` alone. Defaults to false.
tagstring–Filter by topic tag.
NameTypeReqDescription
pageobjectyes–
resultsarrayyes–

No examples provided.

get_person ~396

Get full details for one person by mal_id: bio, their anime/manga staff-credit lists, and their voiced roles. Staff credits are capped at the first 200 (only an extreme outlier hits that — a prolific sound director can have 500+; a well-known director sits under 100); when the cap bites, the response says so via `credits_truncated` plus `total_anime_credits`/`total_manga_credits`, and `full_credits: true` returns every entry. `voice_roles` is separately capped at the first 50, in whatever order the upstream API returns them (not necessarily their most notable roles). Obtain the mal_id from search_people, or from get_character's voice_actors (which include each actor's mal_id — get_anime_characters' voice_actors are names only, with no id). `sfw`/`sfw_strict` filter NSFW/adult-adjacent titles out of the person's own anime/manga credit lists (verified live) rather than affecting the person themselves.

NameTypeReqDescription
full_creditsboolean–If true, return every staff credit instead of the first 200. Only needed for the handful of people whose response reports `credits_truncated`. Defaults to false.
idintegeryesMyAnimeList numeric ID.
sfwboolean–If true, exclude adult/explicit-rated entries (R+ Mild Nudity and up). Defaults to false (no filtering). Note: this alone still allows mainstream, safely-rated shows tagged with the Ecchi genre (fans…
sfw_strictboolean–If true, exclude adult/explicit-rated entries AND anything tagged with the Ecchi genre, even otherwise-mainstream/safely-rated shows. Stricter than `sfw` alone. Defaults to false.
NameTypeReqDescription
aboutstring––
alternate_namesarray––
animearray––
birthdaystring––
credits_truncatedboolean––
family_namestring––
favoritesinteger––
given_namestring––
image_urlstring––
mal_idintegeryes–
mangaarray––
namestring––
total_anime_creditsinteger––
total_manga_creditsinteger––
urlstring––
voice_rolesarray––

No examples provided.

get_producer ~64

Get full details for one anime producer/studio by mal_id: about text and external links (official site, social media) alongside the fields get_producers already returns. Obtain the mal_id from get_producers.

NameTypeReqDescription
idintegeryesMyAnimeList numeric ID.
NameTypeReqDescription
aboutstring––
countinteger––
establishedstring––
externalarray––
favoritesinteger––
image_urlstring––
mal_idintegeryes–
namestring––
urlstring––

No examples provided.

get_producers ~147

List or search anime producers and studios with their MAL IDs and counts. Use `q` to search by name, then get_producer for one studio's full profile (about text, external links).

NameTypeReqDescription
letterstring–Restrict results to entries whose title starts with this single letter.
limitinteger–Max results per page (1-100).
order_bystring–Field to order by.
pageinteger–1-based page number for pagination (1-20000).
qstring–Filter by name.
sortstring–Sort direction. Only takes effect together with `order_by`; ignored on its own.
NameTypeReqDescription
pageobjectyes–
resultsarrayyes–

No examples provided.

get_random_anime ~200

Return one random anime (core details: no `relations`/`streaming`/`opening_themes`/`ending_themes`/`external` — call get_anime with the returned mal_id for those). Good for discovery / suggestions. No official-API fallback exists for this tool — it always needs Tenrai itself to be reachable.

NameTypeReqDescription
sfwboolean–If true, exclude adult/explicit-rated entries (R+ Mild Nudity and up). Defaults to false (no filtering). Note: this alone still allows mainstream, safely-rated shows tagged with the Ecchi genre (fans…
sfw_strictboolean–If true, exclude adult/explicit-rated entries AND anything tagged with the Ecchi genre, even otherwise-mainstream/safely-rated shows. Stricter than `sfw` alone. Defaults to false.
NameTypeReqDescription
airedstring––
airingboolean––
backgroundstring––
broadcaststring––
demographicsarray––
durationstring––
ending_themesarray––
episodesinteger––
explicit_genresarray––
externalarray––
favoritesinteger––
genresarray––
image_urlstring––
licensorsarray––
mal_idintegeryes–
membersinteger––
moreinfostring––
opening_themesarray––
popularityinteger––
producersarray––
rankinteger––
ratingstring––
relationsarray––
scorenumber––
scored_byinteger––
seasonstring––
sourcestring––
statusstring––
streamingarray––
studiosarray––
synopsisstring––
themesarray––
titlestring––
title_englishstring––
title_japanesestring––
title_synonymsarray––
trailerstring––
typestring––
urlstring––
yearinteger––

No examples provided.

get_random_character ~70

Return one random character (core details: no `anime`/`manga`/`voice_actors` — call get_character with the returned mal_id for those). Good for discovery / trivia. No official-API fallback exists for this tool — it always needs Tenrai itself to be reachable.

Input schema present but exposes no named parameters.

NameTypeReqDescription
aboutstring––
animearray––
favoritesinteger––
image_urlstring––
mal_idintegeryes–
mangaarray––
namestring––
name_kanjistring––
nicknamesarray––
urlstring––
voice_actorsarray––

No examples provided.

get_random_manga ~183

Return one random manga (core details: no `relations`/`external` — call get_manga with the returned mal_id for those). Good for discovery / suggestions. No official-API fallback exists for this tool — it always needs Tenrai itself to be reachable.

NameTypeReqDescription
sfwboolean–If true, exclude adult/explicit-rated entries (R+ Mild Nudity and up). Defaults to false (no filtering). Note: this alone still allows mainstream, safely-rated shows tagged with the Ecchi genre (fans…
sfw_strictboolean–If true, exclude adult/explicit-rated entries AND anything tagged with the Ecchi genre, even otherwise-mainstream/safely-rated shows. Stricter than `sfw` alone. Defaults to false.
NameTypeReqDescription
authorsarray––
backgroundstring––
chaptersinteger––
demographicsarray––
explicit_genresarray––
externalarray––
favoritesinteger––
genresarray––
image_urlstring––
mal_idintegeryes–
membersinteger––
moreinfostring––
popularityinteger––
publishedstring––
publishingboolean––
rankinteger––
relationsarray––
scorenumber––
scored_byinteger––
serializationsarray––
statusstring––
synopsisstring––
themesarray––
titlestring––
title_englishstring––
title_japanesestring––
title_synonymsarray––
typestring––
urlstring––
volumesinteger––

No examples provided.

get_random_person ~76

Return one random person — voice actor, director, author (core details: no `anime`/`manga`/`voice_roles` — call get_person with the returned mal_id for those). Good for discovery / trivia. No official-API fallback exists for this tool — it always needs Tenrai itself to be reachable.

Input schema present but exposes no named parameters.

NameTypeReqDescription
aboutstring––
alternate_namesarray––
animearray––
birthdaystring––
credits_truncatedboolean––
family_namestring––
favoritesinteger––
given_namestring––
image_urlstring––
mal_idintegeryes–
mangaarray––
namestring––
total_anime_creditsinteger––
total_manga_creditsinteger––
urlstring––
voice_rolesarray––

No examples provided.

get_recent_anime_recommendations ~241

Get a site-wide feed of recently-submitted anime recommendation pairs (e.g. 'if you liked X, try Y') with the submitting user's own commentary — not tied to any one title. Use get_anime_recommendations instead for recommendations similar to a specific mal_id. No official-API fallback exists for this tool — it always needs Tenrai itself to be reachable.

NameTypeReqDescription
limitinteger–Max results per page (1-100).
pageinteger–1-based page number for pagination (1-20000).
sfwboolean–If true, exclude adult/explicit-rated entries (R+ Mild Nudity and up). Defaults to false (no filtering). Note: this alone still allows mainstream, safely-rated shows tagged with the Ecchi genre (fans…
sfw_strictboolean–If true, exclude adult/explicit-rated entries AND anything tagged with the Ecchi genre, even otherwise-mainstream/safely-rated shows. Stricter than `sfw` alone. Defaults to false.
NameTypeReqDescription
pageobjectyes–
resultsarrayyes–

No examples provided.

get_recent_manga_recommendations ~241

Get a site-wide feed of recently-submitted manga recommendation pairs (e.g. 'if you liked X, try Y') with the submitting user's own commentary — not tied to any one title. Use get_manga_recommendations instead for recommendations similar to a specific mal_id. No official-API fallback exists for this tool — it always needs Tenrai itself to be reachable.

NameTypeReqDescription
limitinteger–Max results per page (1-100).
pageinteger–1-based page number for pagination (1-20000).
sfwboolean–If true, exclude adult/explicit-rated entries (R+ Mild Nudity and up). Defaults to false (no filtering). Note: this alone still allows mainstream, safely-rated shows tagged with the Ecchi genre (fans…
sfw_strictboolean–If true, exclude adult/explicit-rated entries AND anything tagged with the Ecchi genre, even otherwise-mainstream/safely-rated shows. Stricter than `sfw` alone. Defaults to false.
NameTypeReqDescription
pageobjectyes–
resultsarrayyes–

No examples provided.

Install

How do I install the MAL MCP Server server?

MAL MCP Server runs locally as an npm package, launched with npx -y mal-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · mal-mcp

# add to Claude Code
claude mcp add grinv-mal-mcp -- npx -y mal-mcp
Common questions

What is the MAL MCP Server server?

MAL MCP Server is listed in the public MCP registry as io.github.Grinv/mal-mcp. MyAnimeList MCP server: Tenrai-powered reads plus official MAL personal-list management. This page covers its npm package (mal-mcp).

Is the MAL MCP Server server safe to use?

MAL MCP Server scores 94 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 4 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the MAL MCP Server server expose?

MAL MCP Server exposes 54 tools: search_anime, search_manga, get_anime, get_manga, get_anime_characters, and 49 more. Their descriptions and schemas cost roughly 13,134 tokens of context every time the server is loaded.

Is the MAL MCP Server server still maintained?

MAL MCP Server is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the MAL MCP Server server under?

MAL MCP Server declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.