mal-mcp
mal-mcp
Сервер Model Context Protocol, предоставляющий доступ к MyAnimeList v2 API для Claude и других MCP-совместимых клиентов. Написан на TypeScript, запускается локально через Bun по stdio или развертывается в Cloudflare Workers как хостинговый многопользовательский сервер.
Инструменты
Настройка
configure— только stdio — сохранениеclient_id(иclient_secret, если он был выдан) пользователя MyAnimeList. Должен быть вызван перед любым другим инструментом. Не регистрируется в Worker; в Worker каждый пользователь входит в систему через процесс MCP OAuth при добавлении сервера в свой клиент.authenticate— только stdio (имеет смысл) — запуск процесса MAL OAuth; открывает браузер и ожидает локального обратного вызова. В Worker это заглушка, оставленная для совместимости — аутентификация происходит автоматически при подключении через MCP OAuth.get_auth_status— проверка доступности учетных данных и пользовательских токенов.
Публичные (только Client ID)
search_anime— поиск аниме по названиюget_anime_details— полная информация об аниме по IDget_anime_ranking— рейтинговые списки (все, транслируемые, предстоящие, ТВ, OVA, фильмы, спецвыпуски, по популярности, избранное)get_seasonal_anime— аниме по году + сезонуsearch_manga— поиск манги по названиюget_manga_details— полная информация о манге по IDget_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
Создайте API-клиент на странице https://myanimelist.net/apiconfig:
App Type: other / web
App Redirect URL:
http://localhost:8765/callback
Затем из вашего MCP-клиента вызовите инструмент configure с вашим client_id (и client_secret, если MAL его выдал). Учетные данные сохраняются в ~/.mal-mcp-config.json.
4. (Опционально) Авторизация для пользовательских инструментов
Вызовите authenticate из вашего MCP-клиента. Откроется браузер, вы подтвердите запрос, локальный сервер на порту 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 (Dynamic Client Registration). Один URL для всех: https://mal-mcp.<account>.workers.dev/mcp. При входе каждый пользователь предоставляет свой собственный client_id MAL (и 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. Подключение пользователя
Создайте API-клиент MAL на https://myanimelist.net/apiconfig (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 запросит ваш
client_idMAL (иclient_secret, если выдан), перенаправит вас на MyAnimeList для подтверждения, а затем вернет в ваш MCP-клиент — теперь вы вошли в систему. Токены доступа и обновления сохраняются в вашем Durable Object; токен доступа MAL обновляется автоматически.
Заметки по безопасности для хостинговых развертываний
Worker является собственным сервером авторизации OAuth 2.1 для MCP. Токены Bearer, выданные вашему MCP-клиенту, привязаны к вам; утечка токена позволит злоумышленнику вызывать MAL от вашего имени до истечения срока действия токена.
Разные учетные данные MAL → разные Durable Object → полностью раздельное состояние. Общего состояния между пользователями нет.
Worker не хранит учетные данные MAL; каждый пользователь предоставляет свой собственный API-клиент MAL.
Хранение данных
stdio
Два текстовых JSON-файла в вашей домашней директории, созданные с правами 0600 (только чтение/запись владельцем):
Файл | Содержимое |
| Ваш |
|
|
Удалите любой из файлов, чтобы сбросить соответствующее состояние. Никакие данные не отправляются никуда, кроме myanimelist.net и api.myanimelist.net.
Хостинговый Worker
Две поверхности хранения Cloudflare:
OAUTH_KV (пространство имен Workers KV) — используется @cloudflare/workers-oauth-provider и реле авторизации MAL:
Зарегистрированные OAuth-клиенты (Dynamic Client Registration), разрешения на авторизацию и токены доступа/обновления. Провайдер хранит
propsразрешений в зашифрованном виде; ключ шифрования встроен в сам выданный токен, поэтому одних снимков KV недостаточно для восстановленияprops.Кратковременные (TTL 10 минут) записи ожидающей авторизации MAL, ключом которых является случайная строка состояния. Каждая запись содержит ожидающий URL авторизации, ваш
client_id/client_secretMAL, верификатор PKCE и URL обратного вызова. Записи удаляются, как только обратный вызов MAL их использует, или истекают автоматически. Они хранятся как обычный JSON в KV.
MAL_SESSION (Durable Object, один на пользователя) — ключ u:<32-hex>, где hex — первые 32 символа sha256("v1:" + mal_client_id + ":" + (mal_client_secret ?? "")). Хранится в виде обычного текста в хранилище SQLite объекта DO (Cloudflare шифрует хранилище DO на диске в состоянии покоя):
config: вашclient_idMAL и (если выдан)client_secret.tokens:access_token,refresh_token,expires_atMAL.
Две разные пары учетных данных MAL создают два разных хеша → два полностью раздельных Durable Object без общего состояния.
Что не хранится: списки аниме/манги, данные профиля пользователя, результаты поиска или что-либо еще, возвращаемое из MAL — эти данные проходят через запрос по требованию. Никакой аналитики, никаких логов содержимого запросов, кроме стандартных метрик наблюдаемости Cloudflare.
Что передается по сети: client_id/client_secret MAL отправляются как поля формы из вашего браузера на страницу авторизации по HTTPS. Токены доступа MAL пересылаются как Authorization: Bearer … на api.myanimelist.net.
Сброс состояния пользователя: отзовите разрешение в вашем MCP-клиенте (или переподключитесь), либо свяжитесь с оператором для удаления соответствующего Durable Object. Повторная авторизация с теми же учетными данными MAL повторно использует тот же DO и его существующие токены.
Переменные окружения (только stdio)
Переменная | Обязательно | Цель |
| нет | Заполняет хранилище конфигурации stdio при первом запуске, если ничего еще не сохранено. |
| нет | То же самое, для клиентов, которым был выдан секрет. |
| нет | Порт, на котором прослушивается однократный обратный вызов OAuth (по умолчанию |
В хостинговых развертываниях Worker эти переменные окружения не используются; каждый конечный пользователь предоставляет свои учетные данные MAL через страницу авторизации Worker во время входа через MCP OAuth.
Разработка
bun run dev # stdio, watch mode
bun run worker:dev # Worker, local (miniflare)
bun run typecheck # tsc --noEmitВсе инструменты принимают необязательную строку fields, которая передается напрямую в MAL — см. спецификацию полей, если вам нужно переопределить значения по умолчанию.
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