{
  "markdown": "# AniList MCP Server\n\n[![npm version](https://img.shields.io/npm/v/anilist-mcp-server.svg)](https://www.npmjs.com/package/anilist-mcp-server)\n[![CI](https://github.com/Grinv/anilist-mcp-server/actions/workflows/ci.yml/badge.svg)](https://github.com/Grinv/anilist-mcp-server/actions/workflows/ci.yml)\n[![license: MIT](https://img.shields.io/npm/l/anilist-mcp-server.svg)](LICENSE)\n[![MCP Registry](https://img.shields.io/badge/MCP%20Registry-io.github.Grinv%2Fanilist--mcp--server-blue)](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.Grinv/anilist-mcp-server&version=latest)\n[![anilist-mcp-server MCP server](https://glama.ai/mcp/servers/Grinv/anilist-mcp-server/badges/score.svg)](https://glama.ai/mcp/servers/Grinv/anilist-mcp-server)\n\nAn [MCP](https://modelcontextprotocol.io) server for **[AniList](https://anilist.co)**.\nIt works with any MCP-compatible client or agent (Claude Desktop/Code, Cursor,\nVS Code, Cline, Continue, and others). It speaks the standard MCP\nstdio protocol.\n\n## What it does\n\nTalks directly to AniList's public GraphQL API (`https://graphql.anilist.co`):\n\n- **Reads (no credentials needed).** Search and browse anime/manga,\n  characters, staff, studios; genres/tags; recommendations; forum threads;\n  activity feeds; public/unlisted user profiles and lists.\n- **Your own AniList account (requires a one-time login).** Manage your own\n  anime/manga list (add/update/remove entries), favourites, follows, your\n  notifications, and post/delete your own activity and threads.\n\n## What you need (and what it gets you)\n\nNothing is required to get started, so you can skip straight to\n[Install](#install). Everything below is optional:\n\n| You set...                                                                                                                       | You get...                                                                                                         |\n| -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |\n| _(nothing)_                                                                                                                      | Search, details, genres/tags, recommendations, threads, activity, public profiles/lists. Works immediately.        |\n| An AniList **Client ID + Client Secret** ([2 minutes, free →](#connect-your-anilist-account)), plus running `login_anilist` once | Everything above, plus your **own AniList account**: manage your list, favourites, follows, activity, and threads. |\n\nWithout a login, the personal/mutation tools reply with a clear message\ntelling you how to get one; everything else keeps working regardless.\n\n## Example queries\n\nOnce it's connected, just ask your agent in natural language.\n\n**No credentials needed:**\n\n```\n\"Search for the anime Frieren and show its score, genres and synopsis.\"\n\"What recommendations does AniList have for fans of Steins;Gate?\"\n\"Show me today's birthday characters.\"\n\"What genres and tags does AniList use for anime?\"\n\"Show the public profile and stats for user <username>.\"\n\"What's in <username>'s AniList anime list marked as watching?\"\n```\n\n**With your AniList account** (after a one-time `login_anilist`; see\n[Connect your AniList account](#connect-your-anilist-account)):\n\n```\n\"Add Frieren to my AniList plan-to-watch list.\"\n\"Set Cowboy Bebop to completed on my AniList with a score of 9.\"\n\"Follow user <username> for me.\"\n\"Post a text update to my AniList activity feed.\"\n\"What are my unread AniList notifications?\"\n```\n\n## Tools\n\n| Tool                                                                                                  | Auth  |\n| ----------------------------------------------------------------------------------------------------- | ----- |\n| `get_genres`, `get_media_tags`, `get_site_statistics`, `get_studio`                                   | none  |\n| `get_media`, `get_media_statistics`, `get_media_characters`, `get_media_staff`                        | none  |\n| `get_media_reviews`, `get_media_relations`, `get_anime_schedule`                                      | none  |\n| `get_character`, `get_staff`, `get_todays_birthdays`                                                  | none  |\n| `get_recommendation`, `get_recommendations_for_media`                                                 | none  |\n| `search_media`, `search_character`, `search_staff`, `search_studio`, `search_user`, `search_activity` | none  |\n| `search_thread`, `get_thread`, `get_thread_comments`                                                  | none  |\n| `get_user_profile`, `get_user_stats`, `get_full_user_info`, `get_user_recent_activity`                | none  |\n| `get_activity`, `get_user_activity`                                                                   | none  |\n| `get_user_list`                                                                                       | none  |\n| `toggle_favourite`                                                                                    | token |\n| `add_list_entry`, `update_list_entry`, `remove_list_entry`                                            | token |\n| `post_text_activity`, `post_message_activity`, `delete_activity`                                      | token |\n| `post_thread`, `post_thread_comment`, `delete_thread`, `delete_thread_comment`                        | token |\n| `get_authorized_user`, `toggle_follow_user`, `update_user`                                            | token |\n| `get_notifications`                                                                                   | token |\n| `login_anilist`, `submit_anilist_redirect`                                                            | login |\n\n`token` = needs an AniList login (run `login_anilist` once).\n\n## Prompts\n\nReusable multi-step plans your client can offer as one-click flows:\n`recommend_similar`, `seasonal_overview`, `hidden_gems`, `catch_up_activity`,\n`check_notifications`.\n\n## Install\n\n### As an `.mcpb` bundle (one-click, e.g. Claude Desktop)\n\nDownload [**`anilist-mcp-server.mcpb`**](https://github.com/Grinv/anilist-mcp-server/releases/latest/download/anilist-mcp-server.mcpb)\n(always the latest release) and open it with your MCP client. It prompts for an optional\nAniList **Client ID** and **Client Secret**. Set them and run the `login_anilist` tool to\nenable the personal-list/social tools (see\n[Connect your AniList account](#connect-your-anilist-account)). Leave them\nblank to use just the credential-free read tools.\n\n### Via npx (no install)\n\nPublished on npm as [`anilist-mcp-server`](https://www.npmjs.com/package/anilist-mcp-server).\nAdd it to your client's MCP config (Claude Desktop/Code, Cursor, VS Code, Cline, …):\n\n```json\n{\n  \"mcpServers\": {\n    \"anilist\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"anilist-mcp-server\"],\n      \"env\": {\n        \"ANILIST_CLIENT_ID\": \"...\",\n        \"ANILIST_CLIENT_SECRET\": \"...\"\n      }\n    }\n  }\n}\n```\n\nOr with the Claude Code CLI:\n\n```sh\nclaude mcp add anilist -e ANILIST_CLIENT_ID=... -e ANILIST_CLIENT_SECRET=... -- npx -y anilist-mcp-server\n```\n\n### From source\n\n```sh\ngit clone https://github.com/Grinv/anilist-mcp-server\ncd anilist-mcp-server\nnpm ci\nnpm run build\n```\n\nThis produces a self-contained `dist/index.js`. Point your client at it the same\nway as above, swapping `\"command\": \"npx\", \"args\": [\"-y\", \"anilist-mcp-server\"]`\nfor `\"command\": \"node\", \"args\": [\"/absolute/path/to/anilist-mcp-server/dist/index.js\"]`\n(and `npx -y anilist-mcp-server` for `node /absolute/path/to/anilist-mcp-server/dist/index.js`\nin the CLI form).\n\nThe `env` block (shown above for both install methods) is **optional**: omit it to use only the credential-free read\ntools; the personal/mutation tools return a clear error until you log in.\nTo enable them, set `ANILIST_CLIENT_ID` + `ANILIST_CLIENT_SECRET` and run the\n**`login_anilist`** tool once (a one-time browser authorization; the token is\nthen stored and reused). The server does not read a `.env` file, so pass\nconfig via this `env` block (or your shell environment). See\n[docs/auth.md](https://github.com/Grinv/anilist-mcp-server/blob/main/docs/auth.md) for the full login walkthrough and\n[docs/clients.md](https://github.com/Grinv/anilist-mcp-server/blob/main/docs/clients.md) for more clients.\n\n## Connect your AniList account\n\nThe search/browse tools work with **no setup**. To use the personal/mutation\ntools, authorize your account once. It takes about two minutes.\n\n**Step 1: Register an AniList app (one minute).**\n\n1. Go to <https://anilist.co/settings/developer> and click **Create New Client**.\n2. **Name:** anything.\n3. **Redirect URL:** enter exactly\n   ```\n   http://localhost:8082/callback\n   ```\n   _(If port 8082 is already used on your machine, pick another port here and set\n   `ANILIST_OAUTH_PORT` to the same number, see [Configuration](#configuration).)_\n4. Save. Copy the **Client ID** and **Client Secret**.\n\n**Step 2: Give the credentials to the server.**\n\n```json\n\"env\": { \"ANILIST_CLIENT_ID\": \"...\", \"ANILIST_CLIENT_SECRET\": \"...\" }\n```\n\nRestart the server/client so it picks up the values.\n\n**Step 3: Log in (one click).**\n\nIn your assistant, run the **`login_anilist`** tool (or just say _\"log in to\nAniList\"_). It replies with a link. Open the link, sign in to AniList, and\nclick **Approve**.\n\n- **Running locally** (Claude Desktop, or Claude Code on your own machine):\n  login finishes **automatically** as soon as you click Approve. Confirm with\n  _\"show my AniList profile\"_ (`get_authorized_user`).\n- **Running on a remote/SSH/headless host:** after clicking Approve your\n  browser lands on a page that won't load; that's expected. **Copy the full\n  address from the browser's address bar** (it contains `?code=…`) and give it\n  to the **`submit_anilist_redirect`** tool to finish.\n\nThat's it. The token is saved locally (`~/.config/anilist-mcp-server/tokens.json`,\n`0600`). AniList access tokens don't expire for about a year and there's no\nrefresh mechanism, so you'll need to run `login_anilist` again once it does.\n\n> **Prefer no interactive step?** Pre-set a standalone `ANILIST_ACCESS_TOKEN`\n> instead. See [docs/auth.md](https://github.com/Grinv/anilist-mcp-server/blob/main/docs/auth.md).\n\n## Configuration\n\nAll configuration is via environment variables, all optional; without\ncredentials the read tools still work.\n\n| Variable                | Purpose                                                                                                                                                              |\n| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `ANILIST_CLIENT_ID`     | Your AniList app's Client ID (see [Connect your AniList account](#connect-your-anilist-account)).                                                                    |\n| `ANILIST_CLIENT_SECRET` | Your AniList app's Client Secret, paired with the Client ID above.                                                                                                   |\n| `ANILIST_ACCESS_TOKEN`  | _Advanced, optional._ Pre-supply a token instead of running `login_anilist`. See [docs/auth.md](https://github.com/Grinv/anilist-mcp-server/blob/main/docs/auth.md). |\n| `ANILIST_TOKEN_STORE`   | Override where the login token is saved on disk (default: your OS's config folder).                                                                                  |\n| `ANILIST_OAUTH_PORT`    | Only needed if port `8082` is already in use (see step 1 of the [account walkthrough](#connect-your-anilist-account)).                                               |\n| `LOG_LEVEL`             | How much the server logs: `debug` \\| `info` \\| `warn` \\| `error` \\| `silent` (default `info`).                                                                       |\n\n### Tuning (rarely needed)\n\n| Variable                                        | Purpose                                                                                                                                                                                                                                                                                      |\n| ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `ANILIST_MIN_INTERVAL_MS`                       | Min spacing between AniList calls (default `2100`, i.e. ~30/min, since AniList's API is currently in a documented degraded state; see [docs/api-references.md](https://github.com/Grinv/anilist-mcp-server/blob/main/docs/api-references.md)). Set to `0` to disable client-side throttling. |\n| `CACHE_TTL_MS`                                  | TTL for the in-memory read cache (default `300000` = 5 min).                                                                                                                                                                                                                                 |\n| `HTTP_TIMEOUT_MS`, `HTTP_RETRIES`               | Per-request timeout (default `15000`) and retry attempts for transient failures (default `2`).                                                                                                                                                                                               |\n| `ANILIST_GRAPHQL_URL`, `ANILIST_OAUTH_BASE_URL` | Override upstream base URLs.                                                                                                                                                                                                                                                                 |\n\nProvide these in your MCP client config's `env` block (the server does **not**\nread a `.env` file). See [docs/auth.md](https://github.com/Grinv/anilist-mcp-server/blob/main/docs/auth.md) for how to obtain the\ncredentials, and [docs/clients.md](https://github.com/Grinv/anilist-mcp-server/blob/main/docs/clients.md) for client configuration\nsnippets.\n\n## NSFW content\n\nNSFW (adult) results are **not** filtered by default; the server returns\nwhatever AniList provides. `search_media` accepts an optional `sfw`\nparameter; set `sfw: true` to exclude adult entries.\n\n## Development\n\n```sh\nnpm run build        # type-check + bundle to dist/\nnpm test             # node:test suite (mocked, offline)\nnpm run test:coverage\nnpm run lint\nnpm run format\nnpm run check:api    # live health-check of the AniList GraphQL endpoint\nnpm run inspector    # run under the MCP Inspector\n```\n\nRuntime requires Node ≥ 20.11. See [AGENTS.md](AGENTS.md) for contributor/agent\nguidance, including why this server exists and how it avoids the upstream bug\nthat motivated building it.\n\n## Updating\n\nTo be notified of new versions, click **Watch → Releases** on GitHub.\n\n- **`.mcpb` bundle:** download the new `anilist-mcp-server.mcpb` from the\n  [releases page](https://github.com/Grinv/anilist-mcp-server/releases) and\n  reinstall it in your client (it replaces the old version).\n- **npx:** unpinned `npx -y anilist-mcp-server` fetches the latest on the next run.\n- **From source:** `git pull && npm ci && npm run build`.\n\nSee the [CHANGELOG](CHANGELOG.md) for what changed in each release.\n\n## Attribution and terms\n\nThis is an **unofficial** project and is not affiliated with or endorsed by\nAniList. All data comes from the public [AniList GraphQL API](https://docs.anilist.co);\npersonal-account operations use your own AniList account and token. Use is\nsubject to [AniList's Terms of Service](https://anilist.co/terms).\n\n## Privacy Policy\n\nThis server runs locally on your machine and has no telemetry of its own.\nPersonal/mutation tools act on your real AniList account (list, favourites,\nfollows, posts, account settings) using a token you supply. See\n[PRIVACY.md](PRIVACY.md) for the full details on data collection, what gets\nsent where, caching/token storage and retention, and contact info.\n\n## Security\n\nThis is the broadest write/social tool surface of this project's sibling\nservers: list mutations, favourites, follows, and posting/deleting activity,\nthreads, and comments, all on your real AniList account. See\n[SECURITY.md](SECURITY.md) for the full mutating-tool inventory, token\nstorage/handling, credential redaction, and how to report a vulnerability.\n\n## License\n\n[MIT](LICENSE) © Grinv\n",
  "bytes": 16797,
  "sha": "e19c469248b23259a57ef9fe0d88e18c24316487193792e720c3e1d60e1ea658",
  "repo_slug": "grinv/anilist-mcp-server",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_grinv_anilist_mcp_server_7dd105da/readme"
}