Skip to main content
Glama
MyAnimeList MCP Server

MyAnimeList MCP Server

by MorpKnight

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.

TIP

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

  • uv

  • 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 --locked

Edit .env and set at least MAL_CLIENT_ID. Add MAL_CLIENT_SECRET before using authenticated tools.

Run the server:

uv run --locked main.py

The 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:

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.py

MCP 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-mcp

The 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

https://api.myanimelist.net/v2

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.

IMPORTANT

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=false

Refresh 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 --locked

Run linting and tests:

uv run --locked ruff check .
uv run --locked pytest -q

The 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=18080

OAuth 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 tools
delete_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

    A3.5/5.0

    Scored across 15 tools

    Disambiguation5/5

    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.

    Naming Consistency4/5

    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.

    Tool Count5/5

    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.

    Completeness4/5

    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

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      A 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 npm
      2
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Exposes a user's MyAnimeList data (watch list, scores, statistics) as MCP tools for AI assistants to analyze taste, build statistics, and make recommendations.
      20
      12 PyPI
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables searching and retrieving anime and manga data from MyAnimeList via the Jikan API, including anime details, top rankings, and character information.
      140 npm
      MIT