Skip to main content
Glama
brunolm
by brunolm

mal-mcp

Ein Model Context Protocol-Server, der die MyAnimeList v2 API für Claude und andere MCP-kompatible Clients bereitstellt. Er ist in TypeScript geschrieben, läuft lokal über Bun via stdio oder kann als gehosteter Multi-User-Server auf Cloudflare Workers bereitgestellt werden.

Tools

Einrichtung

  • configurenur stdio — speichert die MyAnimeList client_id (und client_secret, falls ausgestellt) des Benutzers. Muss vor jedem anderen Tool aufgerufen werden. Nicht auf dem Worker registriert; auf dem Worker meldet sich jeder Benutzer über den MCP-OAuth-Flow an, wenn er den Server zu seinem Client hinzufügt.

  • authenticatenur stdio (sinnvoll) — startet den MAL-OAuth-Flow; öffnet einen Browser und wartet auf den lokalen Callback. Auf dem Worker ist dies ein No-Op, das aus Kompatibilitätsgründen beibehalten wurde — die Authentifizierung erfolgt automatisch bei der Verbindung über MCP-OAuth.

  • get_auth_status — prüft, ob Anmeldedaten und Benutzertoken verfügbar sind.

Öffentlich (nur Client ID)

  • search_anime — Anime nach Titel suchen

  • get_anime_details — vollständige Details für eine Anime-ID

  • get_anime_ranking — Ranglisten (all, airing, upcoming, tv, ova, movie, special, bypopularity, favorite)

  • get_seasonal_anime — Anime nach Jahr + Saison

  • search_manga — Manga nach Titel suchen

  • get_manga_details — vollständige Details für eine Manga-ID

  • get_manga_ranking — Ranglisten (all, manga, novels, oneshots, doujin, manhwa, manhua, bypopularity, favorite)

Benutzerspezifisch (OAuth2-Zugriffstoken erforderlich)

  • get_current_user — Profil + Anime-Statistiken für den authentifizierten Benutzer

  • get_anime_suggestions — personalisierte Anime-Empfehlungen

  • get_user_anime_list — öffentliche Anime-Liste eines beliebigen Benutzers lesen (oder @me)

  • update_anime_list_status — Listenstatus, Bewertung, gesehene Episoden usw. hinzufügen/aktualisieren

  • delete_anime_list_item — einen Anime aus deiner Liste entfernen

  • get_user_manga_list — öffentliche Manga-Liste eines beliebigen Benutzers lesen (oder @me)

  • update_manga_list_status — Listenstatus, Bewertung, gelesene Kapitel usw. hinzufügen/aktualisieren

  • delete_manga_list_item — einen Manga aus deiner Liste entfernen

Related MCP server: Claude Code MCP

Option 1: Lokal über stdio ausführen

1. Installation

bun install

2. Mit deinem MCP-Client verbinden

Füge dies zu claude_desktop_config.json hinzu (Windows: %APPDATA%\Claude\claude_desktop_config.json):

{
  "mcpServers": {
    "mal": {
      "command": "bun",
      "args": ["C:\\BrunoLM\\Projects\\mal-mcp\\src\\index.ts"]
    }
  }
}

Für Claude Code verwende claude mcp add oder füge den entsprechenden Block in .claude/mcp.json ein.

3. Deine MAL-Anmeldedaten konfigurieren

Erstelle einen API-Client unter https://myanimelist.net/apiconfig:

  • App Type: other / web

  • App Redirect URL: http://localhost:8765/callback

Rufe dann von deinem MCP-Client aus das configure-Tool mit deiner client_id (und client_secret, falls MAL eines ausgestellt hat) auf. Die Anmeldedaten werden in ~/.mal-mcp-config.json gespeichert.

4. (Optional) Für benutzerspezifische Tools autorisieren

Rufe authenticate von deinem MCP-Client aus auf. Ein Browser öffnet sich, du genehmigst die Anfrage, der lokale Server auf Port 8765 fängt den Redirect ab und die Token landen in ~/.mal-mcp-tokens.json. Der Server aktualisiert sie von dort aus automatisch.

Wenn du ein CLI bevorzugst:

$env:MAL_CLIENT_ID = "your-client-id"
# $env:MAL_CLIENT_SECRET = "your-client-secret"   # only if issued
bun run auth

Option 2: Auf Cloudflare Workers hosten (Multi-User, MCP OAuth)

Ein einzelner Worker bedient jeden Benutzer über Standard-MCP-OAuth 2.1 (Dynamic Client Registration). Eine URL für alle: https://mal-mcp.<account>.workers.dev/mcp. Während der Anmeldung gibt jeder Benutzer seine eigene MAL client_id (und client_secret, falls ausgestellt) an; der Status pro Benutzer befindet sich in einem Durable Object, das mit einem Hash dieser Anmeldedaten verschlüsselt ist.

1. Operator-Einrichtung (einmalig)

bun install
bunx wrangler login
bunx wrangler kv namespace create OAUTH_KV

Füge die zurückgegebene Namespace-id in wrangler.jsonc ein (ersetze REPLACE_WITH_KV_ID) und stelle dann bereit:

bun run worker:deploy

Für die lokale Entwicklung:

bunx wrangler kv namespace create OAUTH_KV --preview
bun run worker:dev

2. Jeder Benutzer verbindet sich

  1. Erstelle einen MAL-API-Client unter https://myanimelist.net/apiconfig (App Type: other). Setze die App Redirect URL auf:

    https://mal-mcp.<account>.workers.dev/mal/callback

    (Diese exakte URL — dieselbe für jeden Benutzer einer bestimmten Bereitstellung.)

  2. Füge den MCP-Server zu deinem Client hinzu:

    claude mcp add --transport http mal https://mal-mcp.<account>.workers.dev/mcp

    Oder äquivalent in der Konfiguration:

    {
      "mcpServers": {
        "mal": {
          "url": "https://mal-mcp.<account>.workers.dev/mcp"
        }
      }
    }
  3. Dein MCP-Client öffnet beim ersten Verbinden einen Browser-Tab. Die Autorisierungsseite des Workers fragt nach deiner MAL client_id (und client_secret, falls ausgestellt), leitet dich zur Genehmigung an MyAnimeList weiter und führt dich dann zu deinem MCP-Client zurück — jetzt angemeldet. Zugriffs- und Aktualisierungstoken werden in deinem Durable Object gespeichert; das MAL-Zugriffstoken wird automatisch aktualisiert.

Sicherheitshinweise für gehostete Bereitstellungen

  • Der Worker ist sein eigener OAuth 2.1-Autorisierungsserver für MCP. Bearer-Token, die an deinen MCP-Client ausgegeben werden, sind auf dich beschränkt; das Durchsickern eines Tokens ermöglicht es dem Inhaber, in deinem Namen MAL aufzurufen, bis das Token abläuft.

  • Unterschiedliche MAL-Anmeldedaten → unterschiedliches Durable Object → vollständig getrennter Status. Es gibt keinen zwischen Benutzern geteilten Status.

  • Der Worker speichert keine eigenen MAL-Anmeldedaten; jeder Benutzer stellt seinen eigenen MAL-API-Client bereit.

Datenspeicherung

stdio

Zwei Klartext-JSON-Dateien in deinem Home-Verzeichnis, erstellt mit Modus 0600 (nur Besitzer kann lesen/schreiben):

Datei

Inhalt

~/.mal-mcp-config.json

Deine MAL client_id und (falls ausgestellt) client_secret.

~/.mal-mcp-tokens.json

MAL access_token, refresh_token und expires_at nach authenticate.

Lösche eine der Dateien, um den entsprechenden Status zurückzusetzen. Außer an myanimelist.net und api.myanimelist.net werden nirgendwo Daten gesendet.

Gehosteter Worker

Zwei Cloudflare-Speicheroberflächen:

OAUTH_KV (Workers KV-Namespace) — verwendet von @cloudflare/workers-oauth-provider und vom MAL-Autorisierungs-Relay:

  • Registrierte OAuth-Clients (Dynamic Client Registration), Autorisierungsgenehmigungen und Zugriffs-/Aktualisierungstoken. Der Provider speichert Genehmigungs-props verschlüsselt; der Verschlüsselungsschlüssel ist in das ausgegebene Token selbst eingebettet, sodass KV-Snapshots allein nicht ausreichen, um die Props wiederherzustellen.

  • Kurzlebige (10-Minuten-TTL) ausstehende MAL-Auth-Datensätze, die mit einem zufälligen State-String verschlüsselt sind. Jeder Datensatz enthält die ausstehende Autorisierungs-URL, deine MAL client_id/client_secret, den PKCE-Verifier und die Callback-URL. Einträge werden gelöscht, sobald der MAL-Callback sie verbraucht, oder laufen andernfalls automatisch ab. Sie werden als Klartext-JSON in KV gespeichert.

MAL_SESSION (Durable Object, eines pro Benutzer) — verschlüsselt mit u:<32-hex>, wobei der Hex-Wert die ersten 32 Zeichen von sha256("v1:" + mal_client_id + ":" + (mal_client_secret ?? "")) ist. Gespeichert als Klartext im SQLite-Speicher des DO (Cloudflare verschlüsselt DO-Speicher im Ruhezustand auf der Festplatte):

  • config: deine MAL client_id und (falls ausgestellt) client_secret.

  • tokens: MAL access_token, refresh_token, expires_at.

Zwei verschiedene MAL-Anmeldedatenpaare erzeugen zwei verschiedene Hashes → zwei vollständig getrennte Durable Objects ohne geteilten Status.

Was nicht gespeichert wird: Anime-/Manga-Listen, Benutzerprofildaten, Suchergebnisse oder alles andere, was von MAL zurückgegeben wird — diese fließen bei Bedarf direkt durch die Anfrage. Keine Analysen, keine Protokolle der Anfrageinhalte über die Standard-Cloudflare-Observability-Metriken hinaus.

Was über die Leitung übertragen wird: MAL client_id/client_secret werden als Formularfelder von deinem Browser über HTTPS an die Autorisierungsseite übermittelt. MAL-Zugriffstoken werden als Authorization: Bearer … an api.myanimelist.net weitergeleitet.

Zurücksetzen des Benutzerstatus: Widerrufe die Genehmigung von deinem MCP-Client aus (oder verbinde dich neu) oder kontaktiere den Operator, um das entsprechende Durable Object zu löschen. Eine erneute Autorisierung mit denselben MAL-Anmeldedaten verwendet dasselbe DO und seine vorhandenen Token wieder.

Umgebungsvariablen (nur stdio)

Variable

Erforderlich

Zweck

MAL_CLIENT_ID

nein

Initialisiert den stdio-Konfigurationsspeicher beim ersten Start, falls noch nichts gespeichert ist.

MAL_CLIENT_SECRET

nein

Dasselbe, für Clients, denen ein Secret ausgestellt wurde.

MAL_AUTH_PORT

nein

Port, auf dem der One-Shot-OAuth-Callback lauscht (Standard 8765).

Bei gehosteten Worker-Bereitstellungen werden diese Umgebungsvariablen nicht verwendet; jeder Endbenutzer gibt seine eigenen MAL-Anmeldedaten über die Autorisierungsseite des Workers während der MCP-OAuth-Anmeldung an.

Entwicklung

bun run dev              # stdio, watch mode
bun run worker:dev       # Worker, local (miniflare)
bun run typecheck        # tsc --noEmit

Alle Tools akzeptieren einen optionalen fields-String, der direkt an MAL weitergegeben wird — siehe die Feld-Spezifikation, falls du die Standardwerte überschreiben musst.

A
license - permissive license
Not graded
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

Related MCP Connectors

  • A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…

  • Augments MCP Server - A comprehensive framework documentation provider for Claude Code

  • Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.

View all MCP Connectors

Latest Blog Posts

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/brunolm/mal-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server