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 "Install 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 ServerSearch 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-mcp
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.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityCmaintenanceA smart AniList integration for the Model Context Protocol that provides AI assistants with tools for searching media, managing watchlists, and analyzing user anime or manga tastes. It goes beyond basic API calls by offering personalized recommendations, taste comparisons, and natural language profile summaries.Last updated12551253MIT
- Alicense-qualityDmaintenanceA 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.Last updated745MIT
- AlicenseBqualityDmaintenanceMCP Server for interacting with the MyAnimeList API, allowing LLM clients to access and interact with anime, manga and more.Last updated152MIT
- FlicenseAqualityDmaintenanceEnables AI assistants to interact with MyAnimeList user accounts for list management, progress tracking, and personalized anime recommendations.Last updated11
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)
AnimeQuotes MCP — wraps animechan.io (free, no auth)
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/MorpKnight/myanimelist-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server