mal-mcp
mal-mcp
MyAnimeList v2 APIをClaudeやその他のMCP対応クライアントに公開するModel Context Protocolサーバーです。TypeScriptで記述されており、Bunを使用してstdio経由でローカル実行するか、ホスト型マルチユーザーサーバーとしてCloudflare Workersにデプロイできます。
ツール
セットアップ
configure— stdioのみ — ユーザーのMyAnimeListclient_id(および発行されている場合はclient_secret)を保存します。他のツールを呼び出す前に実行する必要があります。Worker上では登録されません。Workerでは、ユーザーがクライアントにサーバーを追加する際、MCP OAuthフローを通じてサインインします。authenticate— stdioのみ(意味のある操作) — MAL OAuthフローを開始します。ブラウザを開き、ローカルのコールバックを待機します。Worker上では互換性のために残されているノーオペレーション(何もしない)です。認証はMCP OAuth経由の接続時に自動的に行われます。get_auth_status— 資格情報とユーザートークンが利用可能かどうかを確認します。
公開(Client IDのみ)
search_anime— タイトルでアニメを検索get_anime_details— アニメIDの詳細情報を取得get_anime_ranking— ランキングリスト(すべて、放送中、今後放送、TV、OVA、映画、スペシャル、人気順、お気に入り)get_seasonal_anime— 年とシーズンでアニメを取得search_manga— タイトルでマンガを検索get_manga_details— マンガIDの詳細情報を取得get_manga_ranking— ランキングリスト(すべて、マンガ、小説、読み切り、同人、マンファ、マンホア、人気順、お気に入り)
ユーザースコープ(OAuth2アクセストークンが必要)
get_current_user— 認証済みユーザーのプロフィールとアニメ統計情報を取得get_anime_suggestions— パーソナライズされたアニメのおすすめを取得get_user_anime_list— 任意のユーザーの公開アニメリスト(または@me)を読み取りupdate_anime_list_status— リストのステータス、スコア、視聴済みエピソード数などを追加/更新delete_anime_list_item— リストからアニメを削除get_user_manga_list— 任意のユーザーの公開マンガリスト(または@me)を読み取りupdate_manga_list_status— リストのステータス、スコア、読了チャプター数などを追加/更新delete_manga_list_item— リストからマンガを削除
Related MCP server: Claude Code MCP
オプション1: stdio経由でローカル実行
1. インストール
bun install2. MCPクライアントへの接続
claude_desktop_config.json(Windowsの場合: %APPDATA%\Claude\claude_desktop_config.json)に追加します:
{
"mcpServers": {
"mal": {
"command": "bun",
"args": ["C:\\BrunoLM\\Projects\\mal-mcp\\src\\index.ts"]
}
}
}Claude Codeの場合は、claude mcp addを使用するか、同等のブロックを .claude/mcp.json に記述してください。
3. MAL資格情報の設定
https://myanimelist.net/apiconfig でAPIクライアントを作成します:
App Type: other / web
App Redirect URL:
http://localhost:8765/callback
その後、MCPクライアントから configure ツールを呼び出し、client_id(およびMALが発行した場合は client_secret)を入力します。資格情報は ~/.mal-mcp-config.json に保存されます。
4. (オプション)ユーザースコープツールの承認
MCPクライアントから authenticate を呼び出します。ブラウザが開き、リクエストを承認すると、ポート8765で待機しているローカルサーバーがリダイレクトをキャッチし、トークンが ~/.mal-mcp-tokens.json に保存されます。サーバーはそこから自動的にトークンを更新します。
CLIを好む場合:
$env:MAL_CLIENT_ID = "your-client-id"
# $env:MAL_CLIENT_SECRET = "your-client-secret" # only if issued
bun run authオプション2: Cloudflare Workersでホスト(マルチユーザー、MCP OAuth)
単一のWorkerが、標準のMCP OAuth 2.1(動的クライアント登録)を使用してすべてのユーザーにサービスを提供します。全員共通のURL: https://mal-mcp.<account>.workers.dev/mcp。サインイン時に各ユーザーは自身のMAL client_id(および発行されている場合は client_secret)を提供します。ユーザーごとの状態は、それらの資格情報のハッシュをキーとするDurable Objectに保持されます。
1. オペレーターのセットアップ(初回のみ)
bun install
bunx wrangler login
bunx wrangler kv namespace create OAUTH_KV返された名前空間 id を wrangler.jsonc に貼り付け(REPLACE_WITH_KV_ID を置換)、デプロイします:
bun run worker:deployローカル開発の場合:
bunx wrangler kv namespace create OAUTH_KV --preview
bun run worker:dev2. 各ユーザーの接続
https://myanimelist.net/apiconfig でMAL APIクライアントを作成します(App Type: other)。App Redirect URL を以下に設定します:
https://mal-mcp.<account>.workers.dev/mal/callback(この正確なURL — 特定のデプロイメントの全ユーザーで共通です。)
MCPクライアントにサーバーを追加します:
claude mcp add --transport http mal https://mal-mcp.<account>.workers.dev/mcpまたは設定ファイルで同等に記述します:
{ "mcpServers": { "mal": { "url": "https://mal-mcp.<account>.workers.dev/mcp" } } }初回接続時にMCPクライアントがブラウザタブを開きます。Workerの承認ページでMAL
client_id(および発行されている場合はclient_secret)を入力し、MyAnimeListにリダイレクトされて承認を行うと、MCPクライアントに戻り、サインインが完了します。アクセストークンとリフレッシュトークンはDurable Objectに保存され、MALアクセストークンは自動的に更新されます。
ホスト型デプロイメントのセキュリティに関する注意点
WorkerはMCP用の独自のOAuth 2.1認可サーバーです。MCPクライアントに発行されたベアラートークンはユーザーごとにスコープが限定されています。トークンが漏洩した場合、有効期限が切れるまで第三者がユーザーの代わりにMALを呼び出すことが可能です。
MAL資格情報が異なれば、Durable Objectも異なり、状態は完全に分離されます。ユーザー間で共有される状態はありません。
Worker自体はMAL資格情報を保持しません。各ユーザーが自身のMAL APIクライアントを提供します。
データストレージ
stdio
ホームディレクトリに作成される2つのプレーンテキストJSONファイル(モード 0600、所有者のみ読み書き可能):
ファイル | 内容 |
| MAL |
|
|
いずれかのファイルを削除すると、対応する状態がリセットされます。myanimelist.net および api.myanimelist.net 以外には何も送信されません。
ホスト型Worker
2つのCloudflareストレージ領域を使用します:
OAUTH_KV (Workers KV名前空間) — @cloudflare/workers-oauth-provider およびMAL承認リレーによって使用されます:
登録済みOAuthクライアント(動的クライアント登録)、認可グラント、アクセストークン/リフレッシュトークン。プロバイダーはグラントの
propsを暗号化して保存します。暗号化キーは発行されたトークン自体にラップされているため、KVのスナップショットだけではpropsを復元できません。ランダムな状態文字列をキーとする、短命(TTL 10分)の保留中MAL認証レコード。各レコードには、保留中の承認URL、MAL
client_id/client_secret、PKCE検証コード、コールバックURLが保持されます。MALコールバックが消費すると即座に削除されるか、期限切れで自動的に削除されます。これらは KV内にプレーンテキストのJSONとして保存されます。
MAL_SESSION (Durable Object、ユーザーごとに1つ) — u:<32-hex> をキーとします(hexは sha256("v1:" + mal_client_id + ":" + (mal_client_secret ?? "")) の最初の32文字)。DOのSQLiteストレージにプレーンテキストで保存されます(CloudflareはDOストレージをディスク上で暗号化します):
config: MALclient_idおよび(発行されている場合)client_secret。tokens: MALaccess_token、refresh_token、expires_at。
2つの異なるMAL資格情報のペアは2つの異なるハッシュを生成し、共有状態のない完全に分離された2つのDurable Objectを作成します。
保存されないもの: アニメ/マンガリスト、ユーザープロフィールデータ、検索結果、その他MALから返されるデータ。これらはリクエストに応じて直接流れるだけです。分析や、標準的なCloudflareの可観測性メトリクスを超えるリクエスト内容のログは記録されません。
通信経路: MAL client_id/client_secret は、ブラウザからHTTPS経由で承認ページへフォームフィールドとして送信されます。MALアクセストークンは Authorization: Bearer … として api.myanimelist.net に転送されます。
ユーザー状態のリセット: MCPクライアントからグラントを取り消す(または再接続する)、あるいはオペレーターに連絡して該当するDurable Objectを削除してください。同じMAL資格情報で再承認すると、同じDOとその既存のトークンが再利用されます。
環境変数(stdioのみ)
変数 | 必須 | 目的 |
| いいえ | 設定が保存されていない場合、初回起動時にstdio設定ストアをシードします。 |
| いいえ | 同上。シークレットが発行されたクライアント用。 |
| いいえ | ワンショットOAuthコールバックがリッスンするポート(デフォルト |
ホスト型Workerデプロイメントではこれらの環境変数は使用されません。各エンドユーザーは、MCP OAuthサインイン中にWorkerの承認ページを通じて自身のMAL資格情報を提供します。
開発
bun run dev # stdio, watch mode
bun run worker:dev # Worker, local (miniflare)
bun run typecheck # tsc --noEmitすべてのツールは、MALにそのまま渡されるオプションの fields 文字列を受け取ります。デフォルトを上書きする必要がある場合は、フィールド仕様を参照してください。
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