MyAnimeList MCP Server
Provides tools for searching anime and manga, fetching details, rankings, seasonal anime, public user lists, and managing the authenticated user's anime and manga list entries through the MyAnimeList API.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MyAnimeList MCP Server Search for anime titled 'Frieren' and show its synopsis."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MyAnimeList MCP Server
Search, inspect, rank, and manage MyAnimeList anime and manga from any MCP-compatible AI client.
MyAnimeList MCP Server is a Python MCP server for the MyAnimeList API. It uses MCP SDK v2, keeps stdio as the default transport, and exposes the MAL API through typed tools that work with Claude, Codex, Gemini, and other MCP clients.
Public tools work with a MAL client ID. Authenticated tools use OAuth and can either open a local browser flow or use a refresh token in headless environments.
Features
15 tools for anime, manga, rankings, seasonal releases, public lists, and the authenticated user profile.
MCP SDK v2 with stdio transport and protocol compatibility for existing clients.
One reusable async HTTP client per server lifespan.
Explicit timeouts, bounded retries for safe GET requests, connection limits, and sanitized errors.
MAL OAuth with PKCE plain mode, state validation, localhost callback handling, token reuse, and concurrency locking.
Memory-only access and refresh tokens; no token persistence files.
Docker image built from the locked dependency graph with uv.
Related MCP server: MAL User MCP Server
How it works
The server starts an MCP stdio process. Each tool call is translated into a MyAnimeList API request through the shared client. Public requests use the MAL client ID; authenticated requests add a bearer token obtained from the in-memory OAuth manager.
Successful responses preserve the MAL response shape. Error responses use a stable error field and, when available, status_code, without returning raw response bodies, URLs, authorization codes, or tokens.
Prerequisites
Python 3.12 or newer
A MyAnimeList API client ID
A MyAnimeList client secret for authenticated tools
Docker, only if you want to run the container image
Quick start
Clone the repository and install the locked environment:
git clone https://github.com/MorpKnight/myanimelist-mcp.git
cd myanimelist-mcp
cp .env.example .env
uv sync --lockedEdit .env and set at least MAL_CLIENT_ID. Add MAL_CLIENT_SECRET before using authenticated tools.
Run the server:
uv run --locked main.pyThe default transport is stdio. stdout is reserved for MCP messages; OAuth diagnostics are sent to stderr.
MyAnimeList application setup
Create an application from MyAnimeList API Config.
Use these values as a starting point:
App Description: An open-source MCP server for searching and managing MyAnimeList data from AI clients.
App Redirect URL: http://127.0.0.1:8080/callback
Homepage URL: https://github.com/MorpKnight/myanimelist-mcp
Copy the generated client ID and client secret into .env. The redirect URL must exactly match the URL registered in MAL.
Configure an MCP client
Claude Desktop
Add this entry to claude_desktop_config.json and replace the project path:
{
"mcpServers": {
"myanimelist": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/myanimelist-mcp",
"run",
"--locked",
"main.py"
]
}
}
}Keep .env in the project directory so the server can load it when started with --directory.
Codex and other stdio clients
Use the same command in the client's MCP server configuration:
uv --directory /absolute/path/to/myanimelist-mcp run --locked main.pyMCP clients can use different configuration wrappers, but discovery, schemas, and tool calls use the same MCP protocol.
Smithery
The repository includes a stdio smithery.yaml manifest. The manifest can be published under the project's own Smithery namespace when that namespace is available. No upstream Smithery namespace is assumed by this repository.
Docker
Build the image:
docker build -t myanimelist-mcp .Run it as an MCP stdio server:
docker run --rm -i --env-file .env myanimelist-mcpThe image installs dependencies with uv sync --locked and does not include .env, tests, Git metadata, or local caches.
Configuration
Variable | Required | Default | Description |
MAL_CLIENT_ID | Yes | — | MyAnimeList API client ID. |
MAL_CLIENT_SECRET | OAuth | — | MyAnimeList OAuth client secret. |
MAL_REFRESH_TOKEN | No | — | Refresh token for headless authenticated deployments. |
MAL_API_URL | No | MAL API base URL. | |
MAL_OPEN_BROWSER | No | true | Open the browser for interactive OAuth. |
MAL_CALLBACK_HOST | No | 127.0.0.1 | Loopback host for the OAuth callback. |
MAL_CALLBACK_PORT | No | 8080 | Local OAuth callback port. |
MAL_CALLBACK_TIMEOUT | No | 300 | OAuth callback timeout in seconds. |
Keep.env private. Access tokens and refresh tokens are held in memory only, but the values in .env still grant access to your MAL application or account.
Headless OAuth
For a deployment without a browser, set a valid refresh token and disable interactive browser opening:
MAL_REFRESH_TOKEN=your_refresh_token
MAL_OPEN_BROWSER=falseRefresh tokens are never written back to disk by this server.
Available tools
Anime
Tool | Auth | Purpose |
get_anime | Public | Search anime by query. |
get_anime_details | Public | Fetch details for an anime ID. |
get_anime_ranking | Public | Fetch anime rankings. |
get_seasonal_anime | Public | Fetch anime for a season and year. |
get_anime_list | Public | Fetch a user's public anime list. |
get_suggested_anime | OAuth | Fetch suggestions for the authenticated user. |
update_myanimelist | OAuth | Update an anime list entry. |
delete_myanimelist_item | OAuth | Delete an anime list entry. |
Manga
Tool | Auth | Purpose |
get_manga | Public | Search manga by query. |
get_manga_details | Public | Fetch details for a manga ID. |
get_manga_ranking | Public | Fetch manga rankings. |
get_manga_list | Public | Fetch a user's public manga list. |
update_mymangalist | OAuth | Update a manga list entry. |
delete_mymangalist_item | OAuth | Delete a manga list entry. |
User
Tool | Auth | Purpose |
get_user_profile | OAuth | Fetch the authenticated user's profile. |
Development and testing
Install all locked dependencies, including the development group:
uv sync --lockedRun linting and tests:
uv run --locked ruff check .
uv run --locked pytest -qThe default suite uses mocked HTTP responses, MCP in-memory tests, OAuth callback tests, and stdio subprocess tests. It does not mutate a real MAL account.
Troubleshooting
MAL_CLIENT_ID is not configured
Set MAL_CLIENT_ID in .env or in the MCP client's process environment, then restart the client.
OAuth callback port conflict
Stop the process using port 8080, or choose another loopback port and register the matching redirect URL in MAL:
MAL_CALLBACK_PORT=18080OAuth does not open a browser
Use MAL_OPEN_BROWSER=true for interactive authorization. For headless use, provide MAL_REFRESH_TOKEN and set MAL_OPEN_BROWSER=false.
MCP client reports malformed output
Start the server with the stdio command above. Do not add application prints to stdout; stdout must contain only MCP protocol messages.
Authenticated tool returns an OAuth error
Check the client ID, client secret, refresh token, redirect URL, and callback port. If the refresh token is expired or revoked, run the interactive flow again.
Resources
Project policies and attribution are documented in CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md, and NOTICE.md.
Available Tools
15 toolsdelete_myanimelist_itemA
Delete one anime from the authenticated user's MAL list.
Inputs: anime_id (required).
delete_mymangalist_itemB
Delete one manga from the authenticated user's MAL list.
Inputs: manga_id (required).
get_animeA
Search MyAnimeList anime by title or another text query.
Inputs: q (required), limit, offset.
get_anime_detailsC
Fetch details for one anime, optionally selecting MAL response fields.
Inputs: anime_id (required), fields.
get_anime_listB
Fetch an anime list for a MAL user.
Inputs: status (required), username (required), sort, limit, +1 more.
get_anime_rankingC
Fetch anime rankings using MAL's ranking_type query parameter.
Inputs: limit, offset, ranking_type.
get_mangaC
Search MyAnimeList manga by title or another text query.
Inputs: q (required), limit, offset.
get_manga_detailsA
Fetch details for one manga, optionally selecting MAL response fields.
Inputs: manga_id (required), fields.
get_manga_listB
Fetch a manga list for a MAL user.
Inputs: status (required), username (required), sort, limit, +1 more.
get_manga_rankingB
Fetch manga rankings using MAL's ranking_type query parameter.
Inputs: limit, offset, ranking_type.
get_seasonal_animeA
Fetch anime released in a specific MAL season and year.
Inputs: year (required), season (required), sort, limit, +1 more.
get_suggested_animeA
Fetch anime suggestions for the authenticated MAL user.
Inputs: limit, offset.
get_user_profileC
Fetch the authenticated MAL user's profile.
Inputs: fields.
update_myanimelistB
Update fields on an anime in the authenticated user's MAL list.
Inputs: anime_id (required), tags, score, status, +6 more.
update_mymangalistB
Update fields on a manga in the authenticated user's MAL list.
Inputs: manga_id (required), tags, score, status, +7 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 15 tools
Each tool has a distinct purpose: search vs details vs rankings vs seasonal vs user lists vs suggestions, and clear update/delete operations for user lists. No two tools appear to do the same thing.
Most tools follow a 'get_<resource>_<modifier>' pattern, but a few deviate (e.g., get_seasonal_anime, get_suggested_anime) and the delete/update tools use 'myanimelist'/'mymangalist' as one word, which is inconsistent with the underscore style elsewhere. Still, the verb-noun convention is consistent and predictable.
15 tools is appropriate for a server covering both anime and manga, including search, details, rankings, seasonal, user lists, suggestions, profile, and list management. Each tool serves a clear purpose without excessive overlap.
The set covers the main workflows: searching, retrieving details, rankings, seasonal anime, user lists, suggestions, profile, and updating/deleting user list entries. The only notable gap is the lack of an explicit 'add to list' operation, though update may implicitly cover it.
Maintenance
Related MCP Connectors
Access and interact with anime and manga data seamlessly. Retrieve detailed information about your…
AniList MCP — wraps AniList GraphQL API (free, no auth)
AniList MCP server for ChatGPT, Claude and any AI agent: update list entry, rate anime or manga, list your anime list, read notifications, reply to activity and favourite a title in your own AniList account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to AniList yourself; Cotlet does not store your password and you need no AniList API key. About the official AniList API: AniList has a full, free public GraphQL API but no official MCP server (checked 17 Oct 2026). The API covers searching titles, reading and saving list entries, activity, favourites, follows and the forum. Setup and FAQ: https://cotlet.dev/integrations/anilist-api-mcp-server
The media memory layer for AI agents and their humans. Your AI client can search your collection, add and log what you've finished, update ratings and lists, and find patterns across everything you've read, watched, played, and listened to.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that provides access to MyAnimeList's API for anime and manga data. It enables users to search, view rankings, manage their personal lists, and get recommendations through Claude and other MCP clients.93 npm2MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with MyAnimeList user accounts for list management, progress tracking, and personalized anime recommendations.11MIT
- AlicenseAqualityDmaintenanceExposes a user's MyAnimeList data (watch list, scores, statistics) as MCP tools for AI assistants to analyze taste, build statistics, and make recommendations.2012 PyPIMIT
- AlicenseNot gradedqualityCmaintenanceEnables searching and retrieving anime and manga data from MyAnimeList via the Jikan API, including anime details, top rankings, and character information.140 npmMIT