anime-mcp-server

v0.1.3 pre-1.0

Search anime/manga, get full detail, franchise watch order, seasonal schedule, characters, rankings, and studio filmography via MCP. STDIO or Streamable HTTP.

public 8 tools 1 resources protocol 2025-11-25
watch-anime-together.zeabur.app/mcp
claude mcp add --transport http anime-mcp-server http://watch-anime-together.zeabur.app/mcp
codex mcp add anime-mcp-server --url http://watch-anime-together.zeabur.app/mcp
{
  "mcpServers": {
    "anime-mcp-server": {
      "url": "http://watch-anime-together.zeabur.app/mcp"
    }
  }
}
gemini mcp add --transport http anime-mcp-server http://watch-anime-together.zeabur.app/mcp
{
  "mcpServers": {
    "anime-mcp-server": {
      "command": "bunx",
      "args": [
        "mcp-remote",
        "http://watch-anime-together.zeabur.app/mcp"
      ]
    }
  }
}
{
  "mcpServers": {
    "anime-mcp-server": {
      "type": "http",
      "url": "http://watch-anime-together.zeabur.app/mcp"
    }
  }
}
curl -X POST http://watch-anime-together.zeabur.app/mcp \
  -H "Content-Type: application/json" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1.0.0"}}}'

Tools

8

anime_search_media

open-world

Search anime or manga by title, genre, tag, season, year, format, or status. Returns ranked results with AniList IDs, titles, scores, format, and episode/chapter counts.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "anime_search_media",
    "arguments": {
      "media_type": "<media_type>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "media_type": {
      "type": "string",
      "enum": [
        "ANIME",
        "MANGA"
      ],
      "description": "Media type to search: anime or manga."
    },
    "query": {
      "description": "Title search query. Supports partial matches.",
      "type": "string",
      "maxLength": 200
    },
    "genre": {
      "description": "Genre filter, e.g. \"Action\", \"Romance\", \"Slice of Life\".",
      "type": "string",
      "maxLength": 100
    },
    "tag": {
      "description": "Tag filter, e.g. \"Isekai\", \"Mecha\", \"School Life\".",
      "type": "string",
      "maxLength": 100
    },
    "season": {
      "type": "string",
      "enum": [
        "WINTER",
        "SPRING",
        "SUMMER",
        "FALL"
      ],
      "description": "Anime broadcast season. WINTER=Jan–Mar, SPRING=Apr–Jun, SUMMER=Jul–Sep, FALL=Oct–Dec."
    },
    "season_year": {
      "description": "4-digit year for the broadcast season, e.g. 2024. Required when season is set.",
      "type": "integer",
      "minimum": 1940,
      "maximum": 2100
    },
    "format": {
      "type": "string",
      "enum": [
        "TV",
        "TV_SHORT",
        "MOVIE",
        "SPECIAL",
        "OVA",
        "ONA",
        "MUSIC",
        "MANGA",
        "NOVEL",
        "ONE_SHOT"
      ],
      "description": "Publication/broadcast format filter."
    },
    "status": {
      "type": "string",
      "enum": [
        "FINISHED",
        "RELEASING",
        "NOT_YET_RELEASED",
        "CANCELLED",
        "HIATUS"
      ],
      "description": "Production status filter."
    },
    "sort": {
      "description": "Sort order list. Common values: SEARCH_MATCH (default), SCORE_DESC, POPULARITY_DESC, TRENDING_DESC, START_DATE_DESC.",
      "maxItems": 5,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 50,
        "description": "A sort field string, e.g. \"SCORE_DESC\" or \"POPULARITY_DESC\"."
      }
    },
    "page": {
      "default": 1,
      "description": "1-based page number for paginated results.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "per_page": {
      "default": 20,
      "description": "Results per page. Maximum 50.",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "include_adult": {
      "default": false,
      "description": "Include adult/NSFW content. Default false.",
      "type": "boolean"
    }
  },
  "required": [
    "media_type",
    "page",
    "per_page",
    "include_adult"
  ],
  "additionalProperties": false
}

anime_get_media

Full detail for one anime or manga by AniList ID. Returns synopsis, format, episode/chapter count, status, season, studios, source material, genres and tags (spoiler-flagged), AniList and MAL scores side by side, streaming links, cover/banner, and direct relations. Use anime_search_media first to find the AniList ID.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "anime_get_media",
    "arguments": {
      "id": "<id>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991,
      "description": "AniList media ID. Obtain from anime_search_media results."
    },
    "include_adult": {
      "default": false,
      "description": "Include adult/NSFW content. Default false.",
      "type": "boolean"
    }
  },
  "required": [
    "id",
    "include_adult"
  ],
  "additionalProperties": false
}

anime_get_relations

Franchise untangler. Walks the related-works graph from a media ID across multiple hops — sequels, prequels, side stories, movies, OVAs, source/adaptation — and returns them ordered into a suggested watch/read order. This is the "how do I watch this whole series" tool. Use anime_get_media first to confirm the ID.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "anime_get_relations",
    "arguments": {
      "id": "<id>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991,
      "description": "AniList media ID of any entry in the franchise."
    },
    "max_depth": {
      "default": 2,
      "description": "Maximum hops to traverse from the root entry. Default 2. Maximum 4. Deeper traversal makes more AniList requests — use 3–4 only for large franchises.",
      "type": "integer",
      "minimum": 1,
      "maximum": 4
    }
  },
  "required": [
    "id",
    "max_depth"
  ],
  "additionalProperties": false
}

anime_get_schedule

open-world

Airing schedule for a season or upcoming episode window. "season" mode returns all anime airing in a given season/year. "upcoming" mode returns next episode for airing titles within a date window, with UTC timestamps.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "anime_get_schedule",
    "arguments": {
      "mode": "<mode>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "mode": {
      "type": "string",
      "enum": [
        "season",
        "upcoming"
      ],
      "description": "\"season\": all anime from a specific season/year. Requires season and season_year. \"upcoming\": next airing episode for each currently-airing title within days_ahead window."
    },
    "season": {
      "type": "string",
      "enum": [
        "WINTER",
        "SPRING",
        "SUMMER",
        "FALL"
      ],
      "description": "Anime broadcast season. WINTER=Jan–Mar, SPRING=Apr–Jun, SUMMER=Jul–Sep, FALL=Oct–Dec."
    },
    "season_year": {
      "description": "4-digit year. Required with mode \"season\".",
      "type": "integer",
      "minimum": 1940,
      "maximum": 2100
    },
    "days_ahead": {
      "default": 7,
      "description": "Days ahead to look for upcoming episodes. Used only in \"upcoming\" mode. Default 7.",
      "type": "integer",
      "minimum": 1,
      "maximum": 30
    },
    "page": {
      "default": 1,
      "description": "1-based page number.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "per_page": {
      "default": 25,
      "description": "Results per page. Maximum 50.",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "include_adult": {
      "default": false,
      "description": "Include adult/NSFW titles. Default false.",
      "type": "boolean"
    }
  },
  "required": [
    "mode",
    "days_ahead",
    "page",
    "per_page",
    "include_adult"
  ],
  "additionalProperties": false
}

anime_find_characters

open-world

Characters and voice actors for a title, or look up a character/VA by name. Provide "id" for title → cast lookup, or "character_name" / "voice_actor_name" for name-based lookup. Returns characters with their role, voice actors by language, and cross-links to other media.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "anime_find_characters",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "description": "AniList media ID for title → cast lookup. Use anime_search_media to find this ID.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "character_name": {
      "description": "Character name to search for. Returns the character's appearances across media.",
      "type": "string",
      "maxLength": 200
    },
    "voice_actor_name": {
      "description": "Voice actor/staff name to search for. Returns their roles across anime.",
      "type": "string",
      "maxLength": 200
    },
    "language": {
      "description": "Filter voice actors by language. Common: JAPANESE, ENGLISH, KOREAN. Only applies when fetching by media ID.",
      "type": "string",
      "enum": [
        "JAPANESE",
        "ENGLISH",
        "KOREAN",
        "ITALIAN",
        "SPANISH",
        "PORTUGUESE",
        "FRENCH",
        "GERMAN",
        "HEBREW",
        "HUNGARIAN"
      ]
    },
    "page": {
      "default": 1,
      "description": "1-based page number for character/role results.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "per_page": {
      "default": 25,
      "description": "Results per page. Maximum 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 25
    }
  },
  "required": [
    "page",
    "per_page"
  ],
  "additionalProperties": false
}

anime_get_recommendations

Recommendations for a title, merged from AniList and Jikan (MAL), with scores and vote counts. AniList recommendations use community rating scores; Jikan adds MAL user recommendations with vote counts. Both sources are surfaced separately — not blended into a composite score.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "anime_get_recommendations",
    "arguments": {
      "id": "<id>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991,
      "description": "AniList media ID of the title to get recommendations for."
    },
    "liked_aspects": {
      "description": "What you liked about this title — e.g. \"the slow-burn romance\" or \"mecha action\". Returned as-is in the response.",
      "type": "string",
      "maxLength": 500
    },
    "page": {
      "default": 1,
      "description": "1-based page number for AniList recommendations.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "per_page": {
      "default": 25,
      "description": "Recommendations per page from AniList. Maximum 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 25
    }
  },
  "required": [
    "id",
    "page",
    "per_page"
  ],
  "additionalProperties": false
}

anime_get_rankings

open-world

Top, trending, or seasonal rankings. Filterable by genre, tag, and format. "top" returns all-time by score; "trending" returns current week; "seasonal" returns the current or specified season sorted by popularity.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "anime_get_rankings",
    "arguments": {
      "mode": "<mode>",
      "media_type": "<media_type>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "mode": {
      "type": "string",
      "enum": [
        "top",
        "trending",
        "seasonal"
      ],
      "description": "\"top\": highest-scoring of all time. \"trending\": most active this week. \"seasonal\": most popular in the current or specified season/year."
    },
    "media_type": {
      "type": "string",
      "enum": [
        "ANIME",
        "MANGA"
      ],
      "description": "Media type to rank."
    },
    "format": {
      "type": "string",
      "enum": [
        "TV",
        "TV_SHORT",
        "MOVIE",
        "SPECIAL",
        "OVA",
        "ONA",
        "MUSIC",
        "MANGA",
        "NOVEL",
        "ONE_SHOT"
      ],
      "description": "Publication/broadcast format filter."
    },
    "genre": {
      "description": "Genre filter, e.g. \"Action\", \"Romance\".",
      "type": "string",
      "maxLength": 100
    },
    "season": {
      "description": "Season for \"seasonal\" mode. Defaults to current season.",
      "type": "string",
      "enum": [
        "WINTER",
        "SPRING",
        "SUMMER",
        "FALL"
      ]
    },
    "season_year": {
      "description": "Year for \"seasonal\" mode. Defaults to current year.",
      "type": "integer",
      "minimum": 1940,
      "maximum": 2100
    },
    "page": {
      "default": 1,
      "description": "1-based page number.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "per_page": {
      "default": 25,
      "description": "Results per page. Maximum 50.",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "include_adult": {
      "default": false,
      "description": "Include adult/NSFW content. Default false.",
      "type": "boolean"
    }
  },
  "required": [
    "mode",
    "media_type",
    "page",
    "per_page",
    "include_adult"
  ],
  "additionalProperties": false
}

anime_get_studio

open-world

A studio's full filmography by name or AniList studio ID. Returns all titles the studio produced, sortable by year or score, with format, status, and episode count. Provide "name" for a name-based search, or "id" for direct lookup by AniList studio ID.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "anime_get_studio",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": {
      "description": "Studio name to search for, e.g. \"MAPPA\", \"Kyoto Animation\", \"ufotable\".",
      "type": "string",
      "maxLength": 200
    },
    "id": {
      "description": "AniList studio ID for direct lookup. More precise than name search.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "sort": {
      "default": "POPULARITY_DESC",
      "description": "Sort order for the filmography. POPULARITY_DESC: most popular first (default). SCORE_DESC: highest-scored first. START_DATE_DESC: newest first. START_DATE: oldest first (release chronology).",
      "type": "string",
      "enum": [
        "POPULARITY_DESC",
        "SCORE_DESC",
        "START_DATE_DESC",
        "START_DATE"
      ]
    },
    "page": {
      "default": 1,
      "description": "1-based page number.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "per_page": {
      "default": 25,
      "description": "Results per page. Maximum 50.",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  },
  "required": [
    "sort",
    "page",
    "per_page"
  ],
  "additionalProperties": false
}

Resources

1

Full media record for an anime or manga by AniList ID. Returns the same data as anime_get_media — title, synopsis, scores, studios, tags, streaming links. Use as a stable URI for injectable context about a specific title.

uri anime://media/{id} mime application/json