Reported issues for anime-mcp-server
Pod holds 21 of 27 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.
Back to anime-mcp-server.
Most discussed
ux(anime_get_studio): missing-identifier case uses validationError() factory, not ctx.fail — data.reason is null
Server version
0.1.1
mcp-ts-core version
^0.9.21
Runtime
Node.js
Runtime version
=24.0.0
Transport
HTTP (Streamable HTTP)
Description
When `anime_get_studio` is called with neither `name` nor `id`, the handler throws via `validationError()` factory directly (not `ctx.fail`). This produces `error_data: null` in the tool response — `data.reason` is absent, the error contract isn't declared, and machine consumers can't route on the structured reason
Read the thread · 2026-06-07 · closed · 2 comments
ux(anime_search_media): description leaks internal fallback routing detail
The anime_search_media description ends with: 'AniList is the primary source; Jikan (MAL) is used as a fallback when AniList returns no results.'
This exposes internal service routing — which APIs the tool uses and in what order — rather than describing what the tool does for the caller. The output schema already surfaces a source field that indicates which service provided results, so callers can observe the actual source without being coached on the internal fallback logic.
Steps t
Read the thread · 2026-06-07 · closed · 2 comments
ux(anime_get_media): scores output description meta-coaches rather than describes
The scores output field description in anime_get_media ends with a directive: 'AniList and MAL use different scales and methodologies — never blend them.'
The phrase "never blend them" is meta-coaching — it tells the reader how to use the data rather than describing what the data is. Output schema descriptions should explain what the value is, not prescribe how to interpret it.
Steps to reproduce
- Call
tools/listand inspect theoutputSchema.properties.scores.descriptionfor
Read the thread · 2026-06-07 · closed · 2 comments
ux(anime_get_recommendations): liked_aspects param description has audience leak
The liked_aspects parameter description in anime_get_recommendations contains consumer-aware phrasing that names the calling agent as the reader.
Current description
'Included in the output for context; the agent can use it to highlight relevant picks.'
The phrase "the agent can use it" names the LLM reader directly — this violates the definition language rule that descriptions should describe the value, not coach the caller.
Steps to reproduce
- Call
tools/listand inspect
Read the thread · 2026-06-07 · closed · 2 comments
ux(anime_search_media,anime_get_rankings,anime_get_schedule): no notice field in empty-result structuredContent
anime_search_media, anime_get_rankings, and anime_get_schedule return empty results/entries arrays on zero matches, but their structuredContent (output schema) has no notice field. The content[] text says "No results found (source: anilist)." but this guidance is invisible to structuredContent-only clients (e.g., Claude Code API mode).
Proposal
Add a notice: z.string().optional() field to the output schemas of these three tools. Populate it on empty results with an actio
Read the thread · 2026-06-07 · closed · 2 comments
feat(config): declare stateless mode in createApp
Use case
Source, bunx, and npm launches still inherit the framework's auto session-mode default, which resolves to stateful. This read-only data server has no request-spanning user or session state.
The configuration-owned surfaces are already aligned in v0.1.6: .env.example actively selects stateless, and the Docker image sets MCP_SESSION_MODE=stateless.
Proposed behavior
After cyanheads/mcp-ts-core#376 is released and adopted, declare sessionMode: "stateless" in `src/
Read the thread · 2026-08-22 · open · 1 comment
docs(community-health): CONTRIBUTING.md and SECURITY.md ship unresolved scaffold comments
Description
.github/CONTRIBUTING.md and .github/SECURITY.md were scaffolded by the framework's community-health generator and committed with placeholder HTML comments still in place, meant to be filled in or removed by the maintainer.
Actual behavior
.github/CONTRIBUTING.md:
<!-- Optional: swap the line above for direct links once you know your repo URL —
https://github.com/OWNER/REPO/issues/new?template=bug_report.yml -->
<!-- If you accept pull requests, say so here
[Read the thread](https://github.com/cyanheads/anime-mcp-server/issues/16) · 2026-08-22 · closed · 1 comment
### bug(enrichment): expose capping guidance for two paged tools
### Server version
0.1.5
### mcp-ts-core version
0.12.3
### Runtime
Node.js
### Runtime version
v26.5.0
### Transport
stdio (the response-shaping path is shared with HTTP)
### OS
macOS 26.1 (Darwin 25.1.0)
### Description
On a capped `anime_find_characters` or `anime_get_recommendations` call, `ctx.enrich.truncated()` stores a default or supplied `notice`, but each tool's `enrichment` shape omits `notice`. The framework strips undeclared enrichment from `structuredContent` and its `
[Read the thread](https://github.com/cyanheads/anime-mcp-server/issues/15) · 2026-08-21 · closed · 1 comment
## Most recent
### bug(anime_find_characters): restore voice actors in character mode
### Server version
0.1.7
### mcp-ts-core version
0.12.3
### Runtime
Bun
### Runtime version
Bun 1.4.0
### Transport
HTTP (Streamable HTTP)
### OS
macOS 26.1
### Description
`anime_find_characters` returns empty `voice_actors` for character-name appearances even when AniList has voice actors for those exact character/media edges. The service requests both `media.nodes` and `media.edges`; on this connection AniList returns the nested `edge.voiceActors` values as `null`, which the hand
[Read the thread](https://github.com/cyanheads/anime-mcp-server/issues/27) · 2026-08-31 · open · 0 comments
### bug(pagination): stop presenting AniList totals as exact
### Server version
0.1.7
### mcp-ts-core version
0.12.3
### Runtime
Bun
### Runtime version
Bun 1.4.0
### Transport
HTTP (Streamable HTTP)
### OS
macOS 26.1
### Description
Search, schedule, rankings, and studio responses present AniList `PageInfo.total` as an exact result count. AniList's official [pagination guide](https://docs.anilist.co/guide/graphql/pagination) says `total` and `lastPage` are not currently accurate and only `hasNextPage` should drive pagination.
### Steps to r
[Read the thread](https://github.com/cyanheads/anime-mcp-server/issues/26) · 2026-08-31 · open · 0 comments
### bug(schemas): reject ambiguous multi-mode inputs
### Server version
0.1.7
### mcp-ts-core version
0.12.3
### Runtime
Bun
### Runtime version
Bun 1.4.0
### Transport
HTTP (Streamable HTTP)
### OS
macOS 26.1
### Description
Three multi-mode tools expose flat all-optional schemas and resolve ambiguity by branch order. Valid-looking but contradictory inputs therefore succeed while silently ignoring declared fields.
### Steps to reproduce
1. Call `anime_find_characters` with both `id: 5114` and `character_name: "Edward Elric"`.
2. Ca
[Read the thread](https://github.com/cyanheads/anime-mcp-server/issues/25) · 2026-08-31 · open · 0 comments
### feat(anime_get_rankings): expose the advertised tag filter
### Use case
`anime_get_rankings` says rankings are filterable by genre, tag, and format, but its public schema exposes genre and format only. Tag-led discovery is a real AniList workflow—for example, ranking `Isekai`, `Time Travel`, or `Found Family` titles within a media type—and AniList already supports the `tag` filter.
### Proposed behavior
Add an optional `tag` input to `anime_get_rankings`, pass it to the AniList media query, echo it in enrichment, and keep the tool description and REA
[Read the thread](https://github.com/cyanheads/anime-mcp-server/issues/24) · 2026-08-31 · open · 0 comments
### bug(anime-media resource): validate IDs and align payload claims
### Server version
0.1.7
### mcp-ts-core version
0.12.3
### Runtime
Bun
### Runtime version
Bun 1.4.0
### Transport
HTTP (Streamable HTTP)
### OS
macOS 26.1
### Description
The `anime://media/{id}` resource accepts numeric prefixes instead of validating the complete ID segment, and its advertised payload parity with `anime_get_media` is inaccurate.
### Steps to reproduce
1. Read `anime://media/16498junk`.
2. Compare `anime://media/5114` with `anime_get_media({ "id": 5114 })`.
###
[Read the thread](https://github.com/cyanheads/anime-mcp-server/issues/23) · 2026-08-31 · open · 0 comments
### bug(anime_get_recommendations): include Jikan-only candidates
### Server version
0.1.7
### mcp-ts-core version
0.12.3
### Runtime
Bun
### Runtime version
Bun 1.4.0
### Transport
HTTP (Streamable HTTP)
### OS
macOS 26.1
### Description
`anime_get_recommendations` advertises combined AniList and Jikan recommendations, but Jikan can only annotate candidates already returned by AniList. Jikan-only candidates are collected in `jikanVoteMap`, left after overlap deletion, and never added to the response. A failed Jikan leg is also indistinguishable f
[Read the thread](https://github.com/cyanheads/anime-mcp-server/issues/22) · 2026-08-31 · open · 0 comments
### bug(anime_search_media): preserve empty results when fallback fails
### Server version
0.1.7
### mcp-ts-core version
0.12.3
### Runtime
Bun
### Runtime version
Bun 1.4.0
### Transport
HTTP (Streamable HTTP)
### OS
macOS 26.1
### Description
When AniList successfully returns an empty page, `anime_search_media` unconditionally calls Jikan. If that fallback is unavailable, the successful primary result is replaced with a `ServiceUnavailable` error, so callers cannot distinguish an exhausted page or genuine zero-match result from a total search outage.
[Read the thread](https://github.com/cyanheads/anime-mcp-server/issues/21) · 2026-08-31 · open · 0 comments
### bug(anime_search_media): reject empty search criteria
### Server version
0.1.7
### mcp-ts-core version
0.12.3
### Runtime
Bun
### Runtime version
Bun 1.4.0
### Transport
HTTP (Streamable HTTP)
### OS
macOS 26.1
### Description
`anime_search_media` accepts no search criterion and treats empty strings as absent filters. A malformed or empty request therefore becomes an unfiltered AniList query instead of failing loudly.
### Steps to reproduce
1. Call `anime_search_media` with `{ "media_type": "ANIME", "per_page": 2 }`.
2. Repeat with `
[Read the thread](https://github.com/cyanheads/anime-mcp-server/issues/20) · 2026-08-31 · open · 0 comments
### bug(format): make bounded text output lossless and retrievable
### Server version
0.1.7
### mcp-ts-core version
0.12.3
### Runtime
Bun
### Runtime version
Bun 1.4.0
### Transport
HTTP (Streamable HTTP)
### OS
macOS 26.1
### Description
Several formatters omit data that exists in `structuredContent` without a same-page retrieval path. This leaves content-only clients with incomplete records even though the tool call succeeded.
Related: #11
### Steps to reproduce
1. Call `anime_get_media` with `{ "id": 5114 }`.
2. Compare all tags and relation
[Read the thread](https://github.com/cyanheads/anime-mcp-server/issues/19) · 2026-08-31 · open · 0 comments
### bug(anime_get_relations): enforce traversal depth and preserve edge semantics
### Server version
0.1.7
### mcp-ts-core version
0.12.3
### Runtime
Bun
### Runtime version
Bun 1.4.0
### Transport
HTTP (Streamable HTTP)
### OS
macOS 26.1
### Description
`anime_get_relations` processes a node at `max_depth` and still adds that node's children to the result. Those extra nodes are labeled with the edge from their immediate parent as `relation_to_root`, so multi-hop relationships are presented as direct root relationships and can distort the suggested order.
### St
[Read the thread](https://github.com/cyanheads/anime-mcp-server/issues/18) · 2026-08-31 · open · 0 comments
### bug(tools): pass declared recovery hints into error responses
### Server version
0.1.5
### mcp-ts-core version
0.12.3
### Runtime
Bun
### Runtime version
Bun 1.4.0
### Transport
stdio and HTTP
### Description
The five tools that declare a `recovery` hint call `ctx.fail(...)` without its data argument on their reachable contract-failure paths. The framework therefore emits `data.reason` but omits `data.recovery.hint`, and `content[0].text` has no `Recovery:` line.
### Steps to reproduce
1. Call `anime_get_schedule` with `{ "mode": "season" }`.
[Read the thread](https://github.com/cyanheads/anime-mcp-server/issues/14) · 2026-08-21 · closed · 1 comment
### bug(anime_search_media): Jikan fallback returns unusable AniList ID 0
### Server version
0.1.6
### mcp-ts-core version
^0.12.3
### Runtime
Bun
### Runtime version
Bun 1.4.0
### Transport
stdio
### OS
macOS (source-level and mocked-handler reproduction)
### Description
When AniList returns no matches for a title query, `anime_search_media` falls back to Jikan but returns every Jikan row with `id: 0`. That field is documented as an AniList media ID and is the input expected by the server's follow-up tools and `anime://media/{id}` resource, so fallback r
[Read the thread](https://github.com/cyanheads/anime-mcp-server/issues/13) · 2026-06-30 · closed · 1 comment
### bug(anime_get_schedule): upcoming mode ignores include_adult
### Server version
0.1.6
### mcp-ts-core version
^0.12.3
### Runtime
Bun
### Runtime version
Bun 1.4.0 / Node v26.5.0
### Transport
HTTP (Streamable HTTP)
### OS
macOS 26.1
### Description
`anime_get_schedule` defaults `include_adult` to `false`, but its `upcoming` branch returns every AniList airing schedule it receives. The season branch already passes the flag to AniList; the upcoming branch needs local filtering because AniList's `Page.airingSchedules` field has no adult-content
[Read the thread](https://github.com/cyanheads/anime-mcp-server/issues/12) · 2026-06-30 · closed · 1 comment
The remaining reports are on [the project's issue tracker](https://github.com/cyanheads/anime-mcp-server/issues).