MCP server for anime & manga search — powered by AniList. Search 500,000+ entries, get character details, seasonal charts, and Japanese cultural context explanations.
This server has clear, well-structured tool definitions with reasonable naming and descriptions. All 5 tools are explicitly registered in TOOLS array with names, descriptions, and inputSchemas. However, parameter descriptions are missing, the rubric requires every parameter to have a description explaining what it controls. Input schemas lack property descriptions for all parameters (query, limit, season, year, term, name). This is a CRITICAL gap: without parameter descriptions, LLMs cannot infer valid values or constraints. All tools are READ_ONLY with no state modification, which is appropriate. The descriptions are reasonably detailed (100-150 chars avg) and explain WHAT the tool does and WHEN to use it. Error handling is basic, responses use jsonOut() wrapper with minimal recovery guidance. No structured error classification or retry hints. Output schemas are not explicitly documented in the code, though the gql() function returns typed responses. Overall composition is clean: each tool has one responsibility, tool names start with action verbs (search_, get_, explain_), and there is clear separation of concerns.
Get English cultural-context explanation for anime terms: tsundere, isekai, moe, kawaii, cour, mangaka, filler, otaku, shoujo, seinen.
Get anime/manga character info by name: description, gender, age, appearances.
Get anime airing in a season/year. Seasons: WINTER SPRING SUMMER FALL.
Search anime by title or keyword. Returns titles, synopsis, genres, episodes, score, season, studio.
Search manga by title or keyword. Returns titles, synopsis, genres, chapters, volumes, score.
All input parameters lack descriptions. Schema defines properties but no 'description' field for query, limit, season, year, name, or term parameters. This violates the CRITICAL requirement that every parameter needs a description explaining what it controls.
Output schema is not documented. Tools return JSON via jsonOut() but there is no formal documentation of return types or fields. LLMs cannot plan downstream operations without knowing expected output structure.
No error recovery guidance. When a search fails or character is not found, the tool returns basic JSON errors with no hints on how to proceed. Should include suggestions like 'Try searching with a different spelling or a shorter keyword'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 53 | - | v1 |
Parameter constraints not documented in descriptions. The limit parameter accepts 1-10 (or 1-20 for seasonal), but this is only enforced in code (Math.min()). Descriptions should state: 'Maximum number of results (default 5, max 10, 1 - 10 range)'.
No error classification. Errors are returned as plain JSON objects without categorizing them as retryable, user-fixable, or fatal. An LLM cannot determine whether to retry, ask the user, or abort.