Skip to main content
Glama
JunnB

AniList MCP

by JunnB

AniList MCP (Convex)

Personal MCP server for AniList. Convex hosts the MCP at https://<deployment>.convex.site/mcp — no local Node process, no OAuth backend.

AniList only has a GraphQL endpoint (https://graphql.anilist.co) and an implicit grant: you create a client, you grab a JWT valid for one year, you store it as a Convex environment variable. That’s the single-user shortcut.

Five tools

Tool

Role

chercher

Searches a title, returns the AniList id and the episode count

ma_liste

Your collection, filterable by status (CURRENT, PLANNING, …)

progression

SaveMediaListEntry with the progress — the episode you just watched

noter

SaveMediaListEntry with the score and status

en_cours_de_diffusion

What’s airing this week among your followed series

The last one uses the AniList calendar (airingAt), not a hand-maintained list. “What to watch tonight” becomes the episode that came out today.

Related MCP server: MAL User MCP Server

1. Convex

npm install
npx convex dev

It creates (or links) the project on your Convex account and pushes the functions. The site’s HTTP URL appears in the dashboard (*.convex.site).

2. AniList Token (implicit grant)

  1. anilist.co/settings/developer → Click on “Create New Client”

  2. Redirect URL : https://anilist.co/api/v2/oauth/pin (PIN page, no backend)

  3. Open:

https://anilist.co/api/v2/oauth/authorize?client_id=TON_CLIENT_ID&response_type=token
  1. Copy the JWT, then:

npx convex env set ANILIST_TOKEN 'eyJ...'
npx convex env set ANILIST_TIMEZONE Europe/Paris

Optional, to lock down POST /mcp:

npx convex env set MCP_SECRET 'un-secret-long'

3. Cursor

In ~/.cursor/mcp.json (or Settings → MCP):

{
  "mcpServers": {
    "anilist": {
      "url": "https://VOTRE_DEPLOIEMENT.convex.site/mcp"
    }
  }
}

If MCP_SECRET is set:

{
  "mcpServers": {
    "anilist": {
      "url": "https://VOTRE_DEPLOIEMENT.convex.site/mcp",
      "headers": {
        "Authorization": "Bearer un-secret-long"
      }
    }
  }
}

The transport is Streamable HTTP, with no persistent session (recent spec). Convex remains the host.

Examples

  • “Search for Frieren” → chercher → id + 28 episodes

  • “Mark episode 12 of Frieren” → progression

  • “Rate 85 and COMPLETED” → noter

  • “What’s airing tonight in my list?” → en_cours_de_diffusion

Dev

npm test
npm run lint
npx convex dev          # watch + push (dev uniquement)

npx convex deploy for production only.

AniList calls are Convex actions (convex/anilist.ts). The HTTP router (convex/http.ts) translates MCP JSON-RPC → these actions.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables searching and retrieving anime and manga data from Kitsu's catalogue, including top lists and categories, through natural language queries via Pipeworx gateway.
    2 npm
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables searching and browsing anime/manga, characters, staff, and more on AniList without credentials, and with a one-time login allows managing personal lists, favorites, follows, and activity.
    49
    89 npm
    1
    MIT