mal-mcp
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
configure— nur stdio — speichert die MyAnimeListclient_id(undclient_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.authenticate— nur 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 suchenget_anime_details— vollständige Details für eine Anime-IDget_anime_ranking— Ranglisten (all, airing, upcoming, tv, ova, movie, special, bypopularity, favorite)get_seasonal_anime— Anime nach Jahr + Saisonsearch_manga— Manga nach Titel suchenget_manga_details— vollständige Details für eine Manga-IDget_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 Benutzerget_anime_suggestions— personalisierte Anime-Empfehlungenget_user_anime_list— öffentliche Anime-Liste eines beliebigen Benutzers lesen (oder@me)update_anime_list_status— Listenstatus, Bewertung, gesehene Episoden usw. hinzufügen/aktualisierendelete_anime_list_item— einen Anime aus deiner Liste entfernenget_user_manga_list— öffentliche Manga-Liste eines beliebigen Benutzers lesen (oder@me)update_manga_list_status— Listenstatus, Bewertung, gelesene Kapitel usw. hinzufügen/aktualisierendelete_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 install2. 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 authOption 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_KVFüge die zurückgegebene Namespace-id in wrangler.jsonc ein (ersetze REPLACE_WITH_KV_ID) und stelle dann bereit:
bun run worker:deployFür die lokale Entwicklung:
bunx wrangler kv namespace create OAUTH_KV --preview
bun run worker:dev2. Jeder Benutzer verbindet sich
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.)
Füge den MCP-Server zu deinem Client hinzu:
claude mcp add --transport http mal https://mal-mcp.<account>.workers.dev/mcpOder äquivalent in der Konfiguration:
{ "mcpServers": { "mal": { "url": "https://mal-mcp.<account>.workers.dev/mcp" } } }Dein MCP-Client öffnet beim ersten Verbinden einen Browser-Tab. Die Autorisierungsseite des Workers fragt nach deiner MAL
client_id(undclient_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 |
| Deine MAL |
| MAL |
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-
propsverschlü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 MALclient_idund (falls ausgestellt)client_secret.tokens: MALaccess_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 |
| nein | Initialisiert den stdio-Konfigurationsspeicher beim ersten Start, falls noch nichts gespeichert ist. |
| nein | Dasselbe, für Clients, denen ein Secret ausgestellt wurde. |
| nein | Port, auf dem der One-Shot-OAuth-Callback lauscht (Standard |
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 --noEmitAlle Tools akzeptieren einen optionalen fields-String, der direkt an MAL weitergegeben wird — siehe die Feld-Spezifikation, falls du die Standardwerte überschreiben musst.
This server cannot be installed
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
- AlicenseAqualityAmaintenanceMCP Server for the Notion API, enabling Claude to interact with Notion workspaces.31682918MIT
- AlicenseBqualityDmaintenanceAn implementation of Claude Code as a Model Context Protocol server that enables using Claude's software engineering capabilities (code generation, editing, reviewing, and file operations) through the standardized MCP interface.821185MIT
- FlicenseNot gradedqualityDmaintenanceA customizable Model Context Protocol server built with mcp-framework that enables Claude to access external tools and capabilities through a standardized interface.84
- AlicenseBqualityDmaintenanceAn MCP server that enables AI models to perform Google Web searches using the Gemini API, complete with citations and grounding metadata for accurate information retrieval. It is compatible with Claude Desktop and other MCP clients for real-time web access.13Apache 2.0
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.
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/brunolm/mal-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server