AniList MCP Server
The AniList MCP Server connects to AniList's GraphQL API, providing read and write access to anime/manga data. Read-only features require no login; personal account management requires a one-time OAuth login.
Browse & Search (no login required)
Search anime/manga by title, genre, tag, format, status, season/year, score, popularity, and more
Get detailed media info — synopsis, genres, scores, rankings, episode/chapter counts, airing schedules, streaming links, trailers, and related titles
Get characters, staff (voice actors, directors, etc.), and studios associated with any title
Get media statistics, reviews, and community recommendations
Browse airing schedules, activity feeds, and forum threads/comments
Get user profiles, public lists, and site-wide statistics
Get today's birthday characters or staff members
Browse full lists of AniList genres and tags
Personal Account Management (requires login)
Add, update, and remove anime/manga list entries (status, score, progress, notes, dates, custom lists)
Toggle favorites for anime, manga, characters, staff, and studios
Follow/unfollow users
Post and delete text or message activities
Post, update, and delete forum threads and comments
Get notifications (airing alerts, likes, replies, follows) with optional mark-as-read
Update account settings — profile text, title language, score format, notification preferences, list display options
Authentication
OAuth login via
login_anilistandsubmit_anilist_redirect(supports local and headless environments)
Prompts
Reusable multi-step plans for common tasks like finding similar shows, seasonal overviews, hidden gems, and checking notifications
Provides tools to search and browse anime, manga, characters, staff, studios, and user profiles, as well as manage the authenticated user's list, favorites, follows, activity, and forum threads via the AniList API.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@AniList MCP ServerSearch for the anime Frieren and show its score and synopsis."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AniList MCP Server
An MCP server for AniList. It works with any MCP-compatible client or agent (Claude Desktop/Code, Cursor, VS Code, Cline, Continue, and others). It speaks the standard MCP stdio protocol.
What it does
Talks directly to AniList's public GraphQL API (https://graphql.anilist.co):
Reads (no credentials needed). Search and browse anime/manga, characters, staff, studios; genres/tags; recommendations; forum threads; activity feeds; public/unlisted user profiles and lists.
Your own AniList account (requires a one-time login). Manage your own anime/manga list (add/update/remove entries), favourites, follows, your notifications, and post/delete your own activity and threads.
Related MCP server: ani-mcp
What you need (and what it gets you)
Nothing is required to get started, so you can skip straight to Install. Everything below is optional:
You set... | You get... |
(nothing) | Search, details, genres/tags, recommendations, threads, activity, public profiles/lists. Works immediately. |
An AniList Client ID + Client Secret (2 minutes, free →), plus running | Everything above, plus your own AniList account: manage your list, favourites, follows, activity, and threads. |
Without a login, the personal/mutation tools reply with a clear message telling you how to get one; everything else keeps working regardless.
Example queries
Once it's connected, just ask your agent in natural language.
No credentials needed:
"Search for the anime Frieren and show its score, genres and synopsis."
"What recommendations does AniList have for fans of Steins;Gate?"
"Show me today's birthday characters."
"What genres and tags does AniList use for anime?"
"Show the public profile and stats for user <username>."
"What's in <username>'s AniList anime list marked as watching?"With your AniList account (after a one-time login_anilist; see
Connect your AniList account):
"Add Frieren to my AniList plan-to-watch list."
"Set Cowboy Bebop to completed on my AniList with a score of 9."
"Follow user <username> for me."
"Post a text update to my AniList activity feed."
"What are my unread AniList notifications?"Tools
Tool | Auth |
| none |
| none |
| none |
| none |
| none |
| none |
| none |
| none |
| none |
| none |
| token |
| token |
| token |
| token |
| token |
| token |
| login |
token = needs an AniList login (run login_anilist once).
Prompts
Reusable multi-step plans your client can offer as one-click flows:
recommend_similar, seasonal_overview, hidden_gems, catch_up_activity,
check_notifications.
Install
As an .mcpb bundle (one-click, e.g. Claude Desktop)
Download anilist-mcp-server.mcpb
(always the latest release) and open it with your MCP client. It prompts for an optional
AniList Client ID and Client Secret. Set them and run the login_anilist tool to
enable the personal-list/social tools (see
Connect your AniList account). Leave them
blank to use just the credential-free read tools.
Via npx (no install)
Published on npm as anilist-mcp-server.
Add it to your client's MCP config (Claude Desktop/Code, Cursor, VS Code, Cline, …):
{
"mcpServers": {
"anilist": {
"command": "npx",
"args": ["-y", "anilist-mcp-server"],
"env": {
"ANILIST_CLIENT_ID": "...",
"ANILIST_CLIENT_SECRET": "..."
}
}
}
}Or with the Claude Code CLI:
claude mcp add anilist -e ANILIST_CLIENT_ID=... -e ANILIST_CLIENT_SECRET=... -- npx -y anilist-mcp-serverFrom source
git clone https://github.com/Grinv/anilist-mcp-server
cd anilist-mcp-server
npm ci
npm run buildThis produces a self-contained dist/index.js. Point your client at it the same
way as above, swapping "command": "npx", "args": ["-y", "anilist-mcp-server"]
for "command": "node", "args": ["/absolute/path/to/anilist-mcp-server/dist/index.js"]
(and npx -y anilist-mcp-server for node /absolute/path/to/anilist-mcp-server/dist/index.js
in the CLI form).
The env block (shown above for both install methods) is optional: omit it to use only the credential-free read
tools; the personal/mutation tools return a clear error until you log in.
To enable them, set ANILIST_CLIENT_ID + ANILIST_CLIENT_SECRET and run the
login_anilist tool once (a one-time browser authorization; the token is
then stored and reused). The server does not read a .env file, so pass
config via this env block (or your shell environment). See
docs/auth.md for the full login walkthrough and
docs/clients.md for more clients.
Connect your AniList account
The search/browse tools work with no setup. To use the personal/mutation tools, authorize your account once. It takes about two minutes.
Step 1: Register an AniList app (one minute).
Go to https://anilist.co/settings/developer and click Create New Client.
Name: anything.
Redirect URL: enter exactly
http://localhost:8082/callback(If port 8082 is already used on your machine, pick another port here and set
ANILIST_OAUTH_PORTto the same number, see Configuration.)Save. Copy the Client ID and Client Secret.
Step 2: Give the credentials to the server.
"env": { "ANILIST_CLIENT_ID": "...", "ANILIST_CLIENT_SECRET": "..." }Restart the server/client so it picks up the values.
Step 3: Log in (one click).
In your assistant, run the login_anilist tool (or just say "log in to
AniList"). It replies with a link. Open the link, sign in to AniList, and
click Approve.
Running locally (Claude Desktop, or Claude Code on your own machine): login finishes automatically as soon as you click Approve. Confirm with "show my AniList profile" (
get_authorized_user).Running on a remote/SSH/headless host: after clicking Approve your browser lands on a page that won't load; that's expected. Copy the full address from the browser's address bar (it contains
?code=…) and give it to thesubmit_anilist_redirecttool to finish.
That's it. The token is saved locally (~/.config/anilist-mcp-server/tokens.json,
0600). AniList access tokens don't expire for about a year and there's no
refresh mechanism, so you'll need to run login_anilist again once it does.
Prefer no interactive step? Pre-set a standalone
ANILIST_ACCESS_TOKENinstead. See docs/auth.md.
Configuration
All configuration is via environment variables, all optional; without credentials the read tools still work.
Variable | Purpose |
| Your AniList app's Client ID (see Connect your AniList account). |
| Your AniList app's Client Secret, paired with the Client ID above. |
| Advanced, optional. Pre-supply a token instead of running |
| Override where the login token is saved on disk (default: your OS's config folder). |
| Only needed if port |
| How much the server logs: |
Tuning (rarely needed)
Variable | Purpose |
| Min spacing between AniList calls (default |
| TTL for the in-memory read cache (default |
| Per-request timeout (default |
| Override upstream base URLs. |
Provide these in your MCP client config's env block (the server does not
read a .env file). See docs/auth.md for how to obtain the
credentials, and docs/clients.md for client configuration
snippets.
NSFW content
NSFW (adult) results are not filtered by default; the server returns
whatever AniList provides. search_media accepts an optional sfw
parameter; set sfw: true to exclude adult entries.
Development
npm run build # type-check + bundle to dist/
npm test # node:test suite (mocked, offline)
npm run test:coverage
npm run lint
npm run format
npm run check:api # live health-check of the AniList GraphQL endpoint
npm run inspector # run under the MCP InspectorRuntime requires Node ≥ 20.11. See AGENTS.md for contributor/agent guidance, including why this server exists and how it avoids the upstream bug that motivated building it.
Updating
To be notified of new versions, click Watch → Releases on GitHub.
.mcpbbundle: download the newanilist-mcp-server.mcpbfrom the releases page and reinstall it in your client (it replaces the old version).npx: unpinned
npx -y anilist-mcp-serverfetches the latest on the next run.From source:
git pull && npm ci && npm run build.
See the CHANGELOG for what changed in each release.
Attribution and terms
This is an unofficial project and is not affiliated with or endorsed by AniList. All data comes from the public AniList GraphQL API; personal-account operations use your own AniList account and token. Use is subject to AniList's Terms of Service.
Privacy Policy
This server runs locally on your machine and has no telemetry of its own. Personal/mutation tools act on your real AniList account (list, favourites, follows, posts, account settings) using a token you supply. See PRIVACY.md for the full details on data collection, what gets sent where, caching/token storage and retention, and contact info.
Security
This is the broadest write/social tool surface of this project's sibling servers: list mutations, favourites, follows, and posting/deleting activity, threads, and comments, all on your real AniList account. See SECURITY.md for the full mutating-tool inventory, token storage/handling, credential redaction, and how to report a vulnerability.
License
MIT © Grinv
Available Tools
49 toolsadd_list_entryAdd an entry to your AniList listA
[Requires login] Add an anime/manga to the authenticated user's own AniList list. Use search_media first to resolve the title to its AniList media ID. Only set the fields you care about — everything else is left at AniList's defaults ONLY if this media isn't already on the list. AniList upserts by media ID: if an entry for it already exists (e.g. previously dropped, with its own score/notes/progress), calling this updates that entry in place instead — every field you don't set here keeps its previous value, not a default. Use get_user_list first to check for an existing entry if you need a guaranteed-fresh one. The response echoes every field this tool can set, as AniList actually stored it — check it instead of assuming the write landed verbatim, especially for advancedScores and customLists, which AniList zeroes/replaces rather than merges.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Free-text notes for this entry (per AniList's own schema, capped at 6000 characters). | |
| score | No | Score out of 10 (decimals allowed, e.g. 8.5), always on this scale regardless of the account's configured scoreFormat (set via update_user) — no conversion needed. | |
| repeat | No | Number of times rewatched/reread (per AniList's own schema, capped at 1000). | |
| status | No | List status. If omitted on a genuinely NEW entry, AniList defaults to CURRENT (with `startedAt` auto-set to today) — confirmed live; despite AniList's own site UI defaulting new entries to Planning, the API itself does not. If the media is already on the list, this default does NOT apply — omitting `status` on an update-in-place leaves the entry's existing status untouched. | |
| mediaId | Yes | AniList anime/manga ID to add (from search_media). | |
| private | No | Hide this entry from your public list. | |
| priority | No | List priority (higher = more important; per AniList's own schema, capped at 255). | |
| progress | No | Episodes watched / chapters read. | |
| startedAt | No | Date you started. | |
| completedAt | No | Date you completed. | |
| customLists | No | Names of custom lists to file this entry under — REPLACES this entry's full set of enabled lists, not merged: naming only a subset silently turns OFF every other list this entry was previously filed under (confirmed live), it doesn't leave them alone. Include every list name you want this entry to stay tagged with, not just the one you're adding. Also, the list must already exist on the account (update_user's `animeListOptions`/`mangaListOptions` `customLists`) — naming one that doesn't exist yet is silently a no-op, not an error. | |
| advancedScores | No | Per-category scores, 0-10 scale (e.g. {Story: 8, Characters: 9}) — errors if advanced scoring isn't enabled for this media's type, or if a key doesn't match the account's configured category list for it (anime and manga have SEPARATELY configured lists). Any of that list's categories you omit here is set to 0, not left unchanged — include every category if you don't want the others zeroed. Stored positionally, not by name: matched against the account's category order (update_user's `advancedScoring`) at READ time, not write time — if that order is later renamed/reordered, a score you write for 'Story' today can silently be read back as 'Characters' tomorrow, with no error. | |
| progressVolumes | No | Volumes read (manga only). | |
| hiddenFromStatusLists | No | Hide this entry from the public status-grouped list views (e.g. 'Watching') while still counting it in statistics — distinct from `private`, which hides the entry entirely. |
Output Schema
| Name | Required | Description |
|---|---|---|
| entry | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond annotations by disclosing upsert semantics, default-only-for-new-entries behavior, response echoing for verification, and the zero/replace behavior of `advancedScores` and `customLists`. It also reveals subtle API quirks (e.g., API defaults status to CURRENT while the UI defaults to PLANNING), which is exactly the kind of behavioral transparency needed for a mutation tool with openWorldHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries critical information about defaults, upsert, response verification, and pitfalls. It is front-loaded with the required login and core purpose, then logically flows through prerequisites, behavior, and caveats. While dense, it earns its length for a tool with 14 parameters and subtle API semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (14 params, nested objects, output schema), the description is complete. It covers safety (requires login), workflow (search first), edge cases (upsert, defaults), and verification (response echoing). The output schema handles return values, so the description needn't explain them. It addresses all major scenarios an agent would face.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds substantial meaning beyond the schema: it explains the status default nuance per new vs existing entry, clarifies that `customLists` replaces rather than merges and requires pre-existing lists, and warns about `advancedScores` zeroing omitted categories and positional matching at read time. This enriches parameter usage significantly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific verb+resource: 'Add an anime/manga to the authenticated user's own AniList list.' It distinguishes itself from siblings by explicitly covering upsert behavior (update-if-exists), which differentiates it from get_user_list and complements update_list_entry. It also states the prerequisite of using search_media first.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage guidance: 'Use search_media first to resolve the title to its AniList media ID' and 'Use get_user_list first to check for an existing entry if you need a guaranteed-fresh one.' It explains when defaults apply (new entries only) versus when they don't (existing entries keep previous values), giving clear context on when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_activityDelete an activity postADestructive
[Requires login] Delete an activity post the authenticated user owns. This cannot be undone, and calling it again on an already-deleted id errors rather than silently succeeding.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | AniList activity ID to delete — from get_user_activity, get_user_recent_activity, search_activity, or the id returned by a previous post_text_activity/post_message_activity call. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the login requirement, irreversible deletion, and error behavior on re-deletion. These details go beyond the annotations (which only indicate destructive and non-idempotent) by adding concrete operational constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the login requirement, and each sentence provides essential caveats without redundancy. This is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter delete tool, the description covers purpose, auth, irreversibility, and error behavior. With an output schema present and complete parameter documentation, no significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the single 'id' parameter at 100% with provenance details (e.g., from get_user_activity or post_text_activity). The description itself adds no parameter-level meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and resource ('activity post') with an ownership qualifier, distinguishing it from siblings like delete_thread and delete_thread_comment. The title and description align precisely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description sets clear context: it requires login and targets the authenticated user's own activity post. It implies the appropriate use case without explicitly naming alternatives or exclusions, which is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_threadDelete a forum threadADestructive
[Requires login] Delete a forum thread the authenticated user owns, by its ID (from search_thread, get_thread, or the id returned by post_thread). This cannot be undone, and calling it again on an already-deleted id errors rather than silently succeeding.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | AniList thread ID to delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond annotations: auth requirement, ownership constraint, irreversibility ('cannot be undone'), and non-idempotent error behavior on repeated deletes. This enriches the destructiveHint and idempotentHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences with no filler. First sentence states the action and scope; second sentence covers consequences and error behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter destructive delete, the description covers auth, ownership, ID source, irreversibility, and repeat-call behavior. Output schema exists, so return value documentation is not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already fully documents the id parameter with type and description ('AniList thread ID to delete'). The description adds value by explaining the ID can be obtained from search_thread, get_thread, or post_thread, clarifying provenance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb ('Delete'), resource ('forum thread'), and specific scope ('the authenticated user owns'). It also specifies the required input mechanism (by its ID) and distinguishes from siblings like delete_thread_comment by focusing on threads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: requires login, ownership, and sources for the ID (search_thread, get_thread, post_thread). It does not explicitly name alternative tools or exclusions, so it stops short of full when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_thread_commentDelete a comment on a forum threadADestructive
[Requires login] Delete a comment the authenticated user owns, by its ID (from get_thread_comments or the id returned by post_thread_comment). This cannot be undone, and calling it again on an already-deleted id errors rather than silently succeeding.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | AniList comment ID to delete. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable context beyond the annotations: login requirement, ownership constraint, irreversibility, and non-idempotent error behavior. This fully discloses the behavioral profile of the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-structured sentence conveys all essential information: requirement, action, ownership, ID source, and caveats. No filler words, with important caveats placed at the end.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation with one parameter, the description covers prerequisites, ownership, reversibility, and error behavior. Combined with the output schema and annotations, it is fully complete for an agent to invoke confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the id parameter, but the description adds crucial sourcing information (where to obtain the ID) and clarifies that it's the comment owner's ID. This goes beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Delete' with the resource 'comment' and states the ownership requirement, clearly distinguishing it from sibling tools like delete_thread and delete_activity. The mention of ID sources (get_thread_comments, post_thread_comment) further clarifies the target.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the prerequisite of login and ownership, and explains what happens on repeated calls. While it doesn't name explicit alternatives, the context (delete a comment vs. a thread) is clear enough for an agent to choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activityGet an activity postARead-only
Get a single AniList activity post (list update, text post, or message) by its ID, including replyCount, likeCount, and isLiked.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | AniList activity ID — from get_user_activity, get_user_recent_activity, search_activity, or the id returned by post_text_activity/post_message_activity. |
Output Schema
| Name | Required | Description |
|---|---|---|
| activity | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and open-world hints. The description adds context about activity subtypes and return fields, but does not disclose potential errors, permissions, or rate limits. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence, front-loaded with the action and resource, and contains no unnecessary words. It is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple one-parameter GET tool, the presence of annotations, an output schema, and rich schema coverage, the description provides enough context to select and invoke the tool correctly. It names the resource subtypes and key returned fields, leaving no major gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the single 'id' parameter with a detailed description, including valid ID sources. The description adds no extra parameter semantics, but the schema is sufficient, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets a specific AniList activity post by ID, naming the activity types and included fields. It distinguishes itself from list/search tools by emphasizing the 'single' and 'by its ID' scope, but does not explicitly mention sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use when you need one activity post by its ID. The description does not provide explicit when-to-use vs alternatives, though the ID source list in the schema partially compensates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_anime_scheduleGet the anime airing scheduleARead-only
Get upcoming (or a specific title's) episode air times, soonest-airing first (confirmed live). Omit mediaId for the site-wide upcoming schedule, or pass it (from search_media/get_media) to get one title's next-episode air time. Anime only — manga has no airing schedule; a manga id (like any non-anime id) is rejected as not-found rather than silently returning an empty schedule, though that error reads the same as a nonexistent id and doesn't single out the manga/anime mismatch.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination. AniList's paginated connections (search results, a title's characters/staff/reviews, activity feeds, forum comments) reject a page whose page × perPage exceeds ~5000 entries with an upstream error, so paging that deep fails rather than returning more results. | |
| mediaId | No | Restrict to this AniList anime ID (not manga). | |
| perPage | No | Results per page (max 25). | |
| notYetAired | No | Set false to instead list only already-aired episodes (confirmed live: this swaps to a past-only result set, it doesn't add past episodes to the still-upcoming ones). |
Output Schema
| Name | Required | Description |
|---|---|---|
| schedule | Yes | |
| hasNextPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description discloses the 'confirmed live' nature, the soonest-airing ordering, and the notYetAired parameter's behavior of swapping to past-only results. It also reveals that manga IDs are rejected with the same not-found error as nonexistent IDs, preventing agent confusion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver the core purpose, usage modes, and edge-case behavior with no filler. The structure front-loads the main function and logically nests the optional mediaId usage and the manga-related error note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, output schema present, annotations present), the description covers all necessary operational aspects: scheduling modes, ordering, live status, manga exclusion, and error semantics. With a rich output schema available, it is complete without needing to restate return formats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema has 100% parameter coverage, the description adds essential semantic guidance: omitting mediaId yields the site-wide schedule, while passing it gives a single title's next air time. It also explains the effect of notYetAired and the manga ID error nuance, which are not fully covered by the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool returns anime episode air times, sorted by soonest-airing first, and distinguishes site-wide vs specific-title modes. This clearly separates it from sibling tools like get_media or search_media, which return different types of media information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs when to omit mediaId (site-wide schedule) vs when to pass it (specific title), and tells the user to obtain the ID from search_media/get_media. It also states the anime-only restriction and the resulting not-found error for manga IDs, giving clear usage boundaries and expectations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_authorized_userGet the logged-in user's profileARead-only
[Requires login] Get the profile of the AniList account currently authorized via login_anilist/ANILIST_ACCESS_TOKEN — use this to confirm which account is connected. Also the authoritative source to fetch BEFORE an update_user call touching options.notificationOptions/options.disabledListActivity (confirmed live: full array replace, not merge by entry) or mediaListOptions.animeList/mangaList.customLists (confirmed live: same full-replace behavior) — read the current values here first and resend them in full alongside your changes. The sibling advancedScoring array carries a related but distinct risk instead: it's positional, not name-matched, so reordering/renaming its entries silently reinterprets already-scored list entries (see update_user's own advancedScoring field for detail) — fetch it here first too before changing it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| user | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses the login requirement ([Requires login]) and explains that this tool returns the authoritative current values needed for full-replace updates. This is valuable behavioral context that annotations alone do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then provides rich, relevant usage caveats. While long, every sentence carries operational significance, though it could be tightened by moving some update_user details to that tool's own description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no params, read-only) and the rich output schema, the description covers the purpose, auth prerequisite, workflow context, and specific scenarios where this tool is essential. It's complete for an AI agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the description clarifies that the target account is determined via login state rather than a parameter. It explains how the authoritative identity is established (via login_anilist/ANILIST_ACCESS_TOKEN), adding meaning beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the profile of the currently authorized AniList account, using a specific verb and resource. It explicitly differentiates from other user-focused tools (e.g., get_user_profile) by targeting the authorized account and ties it to login_anilist/ANILIST_ACCESS_TOKEN.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit when-to-use guidance: to confirm which account is connected, and as the authoritative prerequisite fetch before update_user calls involving specific fields. It even explains the array-replacement and positional-index risks that necessitate reading current values first, which strongly steers usage toward this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_characterGet character detailsARead-only
Get a character's profile by AniList character ID: name, image, description, and the anime/manga they appear in (media, up to 25 by popularity, with their characterRole — MAIN/SUPPORTING/BACKGROUND — in each). Use search_character first to resolve a name to its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | AniList character ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| character | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, so the description adds useful behavioral details: media limited to 25, sorted by popularity, and includes characterRole (MAIN/SUPPORTING/BACKGROUND). This goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with zero filler. First sentence packs the essential functionality, second gives actionable workflow guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter lookup tool with an output schema, the description sufficiently covers the response shape (including media details and roles) and the prerequisite lookup step. No critical gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description of the `id` parameter. The tool description repeats 'by AniList character ID' but doesn't add meaning beyond the schema. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it gets a character's profile by AniList ID, enumerates the specific data returned (name, image, description, media), and differentiates from search_character by noting the ID-based lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use search_character first to resolve a name to an ID, providing a clear prerequisite and alternative. It doesn't mention all siblings but gives concrete when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_full_user_infoGet a user's complete profile and statsARead-only
Get an AniList user's profile AND statistics in a single call — use this instead of calling get_user_profile and get_user_stats separately. Like get_user_profile, this also returns the target's account settings (notifications, list display, etc.) regardless of who's authenticated — AniList doesn't viewer-gate those fields. Accepts an exact AniList username directly — no need to call search_user first unless you only have a partial/fuzzy name. Its embedded statistics carry the same staleness caveat as get_user_stats: AniList's own aggregation can lag and read all-zero even for an account with real list entries.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | AniList user ID, or username. |
Output Schema
| Name | Required | Description |
|---|---|---|
| user | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already communicate readOnlyHint and openWorldHint, but the description adds meaningful behavioral context: account settings are returned regardless of authentication, and statistics may be stale due to AniList aggregation lag. These are non-obvious traits that help the agent anticipate edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose, then adds usage alternatives, auth behavior, and a caveat. Each sentence earns its place with no redundancy, making it efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter and an output schema, the description covers all essential aspects: what the tool returns, how it differs from siblings, when to use it, and potential data staleness. There are no gaps for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the parameter ('AniList user ID, or username'), so the baseline is 3. The description adds value by clarifying that an exact username works directly without needing search_user, and that partial/fuzzy names require a prior search. This extra guidance goes beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get an AniList user's profile AND statistics in a single call'. It also explicitly distinguishes it from siblings by saying 'use this instead of calling get_user_profile and get_user_stats separately', making the unique value obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides direct usage guidance: when to use this tool vs. alternatives ('use this instead of calling get_user_profile and get_user_stats separately') and when not to need search_user ('no need to call search_user first unless you only have a partial/fuzzy name'). This is explicit and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_genresGet genresARead-only
List every genre name AniList uses to tag anime/manga (e.g. Action, Comedy, Slice of Life). Call this before filtering search_media by genre, so you pass a name AniList actually recognizes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| genres | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description adds limited behavioral transparency beyond confirming it lists genre names. It provides context about the data source (AniList) but doesn't disclose additional traits like return format or pagination. The description does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at two sentences, with the main purpose stated upfront. Every sentence adds value: the first defines the tool's output, and the second explains its practical use case. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists, the description is fully adequate. It explains what the tool returns (genre names), why it's useful (to feed into search_media filtering), and references the relevant sibling tool. This covers all necessary context for an agent to correctly invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description need not explain parameter semantics. The baseline for zero parameters is 4, and the description appropriately focuses on the output and usage rather than parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool lists every genre name AniList uses to tag anime/manga, with examples like Action, Comedy, Slice of Life. It distinguishes itself from other tools by specifying its purpose in the context of filtering search_media by genre, making the purpose very clear and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool: call it before filtering search_media by genre, to ensure you pass a recognized genre name. While it doesn't explicitly state when not to use it or mention alternatives, the guidance is clear and actionable for its intended use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mediaGet anime/manga detailsARead-only
Get detailed information about one or more anime or manga by their AniList ID(s): title, format, status, episode/chapter/volume count, genres, score, synopsis, dates, and rankings — AniList's own ranking badges (e.g. "#134 highest rated all time", "#11 highest rated 2024"), one entry per rated/popular ranking window the title currently appears in. Also returns nextAiringEpisode (for currently-releasing anime), externalLinks (official sites, streaming platforms), and — [requires login] — mediaListEntry, the authenticated user's own list entry for this title, or null if it isn't on their list. Use search_media first to resolve a title to its AniList ID. Returns a single object if ids is a single ID, or an array (same order as ids, with null in place of any ID that didn't resolve to a real anime/manga) if ids is an array.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | A single AniList anime/manga ID, or an array of up to 25 IDs to fetch in one call (same cap as this codebase's paginated list tools — each entry returned here includes the full synopsis/tags/rankings, so an uncapped batch could return a very large response). | |
| type | Yes | Whether `ids` refers to anime or manga. | |
| includeStreamingEpisodes | No | Also fetch `streamingEpisodes` (per-episode streaming links). Kept off by default — AniList doesn't paginate this field, so a long-running title can return hundreds of entries. |
Output Schema
| Name | Required | Description |
|---|---|---|
| media | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses rich behavioral details beyond annotations: ranking window semantics, nextAiringEpisode availability only for currently-releasing anime, mediaListEntry returning null if not on the user's list, batch behavior with null placeholders in order-preserved arrays, and the unbounded streamingEpisodes field. Annotations (readOnlyHint, openWorldHint) are consistent with the description; no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed but front-loaded with the core purpose, and every sentence serves a purpose (returned fields, special cases, usage guidance, return format). It is somewhat dense, but given the tool's complexity and the need to cover rankings, login requirements, and batch behavior, the length is justified. A slight deduction for the long list of fields and asides.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all essential context: what the tool does, when to use it (and when not to, via search_media guidance), authentication requirements, batching semantics, and return type variance. The output schema exists and covers return fields, so the description need not enumerate them. It is fully adequate for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful context: the 25-ID cap is tied to codebase conventions, uncapped batches could be huge, and includeStreamingEpisodes is off by default because AniList doesn't paginate it. It also explains the return shape conditional on `ids` being a scalar vs. array. These insights go beyond the schema descriptions, warranting a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: "Get detailed information about one or more anime or manga by their AniList ID(s)". It enumerates the returned fields (title, format, status, counts, genres, score, synopsis, dates, rankings) and explicitly distinguishes from sibling tools like search_media by stating that search_media should be used first to resolve titles to IDs. This makes the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance: "Use search_media first to resolve a title to its AniList ID." It also clarifies when login is required (for mediaListEntry) and when includeStreamingEpisodes should be enabled (warning that it can return hundreds of entries). This sets clear usage boundaries relative to sibling tools like search_media and get_media_tags.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_media_charactersGet an anime/manga's charactersARead-only
List an anime/manga's characters with their role (Main/Supporting/Background) and, for anime, Japanese voice actors. Use search_media first to resolve a title to its AniList ID. No explicit ordering is requested — don't assume results are grouped by role or sorted by popularity (unlike get_character/get_staff's reverse-direction lookup, which IS popularity-sorted); confirmed live, a Main-role character can appear well after several Supporting ones.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | AniList ID. | |
| page | No | Page number for pagination. AniList's paginated connections (search results, a title's characters/staff/reviews, activity feeds, forum comments) reject a page whose page × perPage exceeds ~5000 entries with an upstream error, so paging that deep fails rather than returning more results. | |
| type | Yes | Whether `id` refers to anime or manga. | |
| perPage | No | Results per page (max 25). |
Output Schema
| Name | Required | Description |
|---|---|---|
| characters | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with readOnlyHint=true in annotations, the description adds valuable behavioral context: results are not guaranteed to be grouped by role or sorted by popularity, with a live example that Main-role characters can appear later than Supporting ones. This discloses non-obvious behavior beyond schema/annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose, then workflow, then the key ordering caveat. Every sentence earns its place; no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description sufficiently covers what is returned (characters, roles, voice actors), how to prepare the ID, and the critical ordering uncertainty. The agent has enough context to invoke and interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds extra meaning for the 'id' parameter by telling users to resolve titles via search_media, and clarifies type-specific output (voice actors only for anime), which goes beyond the bare schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'List an anime/manga's characters' with role and voice actors. This clearly distinguishes it from sibling tools like get_character (reverse lookup) and search_media (title resolution).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs the agent to 'Use search_media first to resolve a title to its AniList ID', establishing a clear workflow. It also contrasts with get_character/get_staff's reverse-direction lookup, helping the agent know when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_media_relationsGet a title's related mediaARead-only
Get the anime/manga related to a given title (prequels, sequels, side stories, adaptations, spin-offs) with the relation type. Use search_media first to resolve a title to its AniList ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | AniList anime/manga ID. | |
| type | Yes | Whether `id` refers to anime or manga. |
Output Schema
| Name | Required | Description |
|---|---|---|
| relations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and openWorldHint. The description adds valuable behavioral context by listing the specific categories of relations returned and noting that the relation type is included in the output, which goes beyond the structured metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, the first stating the core purpose and the second a practical usage note. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (2 required params, read-only, output schema present), and the description covers the essential workflow and output expectations. It is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds meaning by explaining that the ID should be obtained from search_media and that the type parameter determines whether the ID refers to anime or manga, which helps orchestrate the workflow.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Get the anime/manga related to a given title') with a specific resource and enumerates relation types (prequels, sequels, side stories, adaptations, spin-offs). This distinctly differentiates it from siblings like get_media or get_recommendations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to 'Use search_media first to resolve a title to its AniList ID,' providing a clear prerequisite and workflow. It does not enumerate alternatives or exclusions, but the context makes the intended use unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_media_reviewsGet an anime/manga's reviewsARead-only
List user-written reviews for an anime or manga, most-helpful-voted first (confirmed live: ordered by rating, not score — see those fields' own descriptions). Always includes summary (a short excerpt); set includeBody to also fetch each review's full text (can be long — leave it off unless you actually need the full text). Use search_media first to resolve a title to its AniList ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | AniList ID. | |
| page | No | Page number for pagination. AniList's paginated connections (search results, a title's characters/staff/reviews, activity feeds, forum comments) reject a page whose page × perPage exceeds ~5000 entries with an upstream error, so paging that deep fails rather than returning more results. | |
| type | Yes | Whether `id` refers to anime or manga. | |
| perPage | No | Results per page (max 25). | |
| includeBody | No | Also fetch each review's full text (`body`), not just its short `summary`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| reviews | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint and openWorldHint, but the description goes beyond them by disclosing the live ordering behavior ('ordered by rating, not score'), the fact that summary is always included, and that includeBody can return long full-text bodies. This adds meaningful operational context that the annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core action and ordering detail, followed by practical usage tips. Every sentence serves a purpose and there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema (100% coverage), readOnlyHint/openWorldHint annotations, and presence of an output schema, the description still adds essential context: how to resolve IDs, what the response always includes, and when to avoid fetching bodies. This makes the tool fully actionable for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter already has a clear description. The tool description adds some nuance (e.g., 'short excerpt' for summary and 'can be long' for body), but it mostly reinforces what the schema already states. Baseline 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource construction: 'List user-written reviews for an anime or manga.' It also clarifies the ordering and includes a prerequisite (search_media), which distinguishes it from sibling tools like get_media_characters or get_recommendations_for_media.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: it tells the agent to use search_media first to resolve a title to an AniList ID, and advises leaving includeBody off unless full text is needed. It does not explicitly name alternatives or when-not-to-use scenarios, but the prerequisite and body-length warning provide solid guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_media_staffGet an anime/manga's production staffARead-only
List an anime/manga's staff (director, writer, character designer, author, illustrator, etc.) with their role. Use search_media first to resolve a title to its AniList ID. No explicit ordering is requested — don't assume results are sorted by role or popularity (unlike get_staff's reverse-direction lookup, which IS popularity-sorted).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | AniList ID. | |
| page | No | Page number for pagination. AniList's paginated connections (search results, a title's characters/staff/reviews, activity feeds, forum comments) reject a page whose page × perPage exceeds ~5000 entries with an upstream error, so paging that deep fails rather than returning more results. | |
| type | Yes | Whether `id` refers to anime or manga. | |
| perPage | No | Results per page (max 25). |
Output Schema
| Name | Required | Description |
|---|---|---|
| staff | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint and openWorldHint annotations covering the read-only nature, the description adds a non-obvious behavior: 'No explicit ordering is requested — don't assume results are sorted by role or popularity (unlike get_staff ... which IS popularity-sorted).' This adds useful caveat beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first states the action and scope, the second provides workflow and ordering caveat. Information is front-loaded and economical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose, prerequisite workflow (search_media), and a key behavioral caveat (unsorted results). The output schema exists, and annotations cover safety and open-world nature, so no critical context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for all four parameters (id, type, page, perPage). The description only ties `id` to the search_media workflow but adds no parameter-specific syntax or constraints beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'List an anime/manga's staff (director, writer, character designer, author, illustrator, etc.) with their role.' This is a specific verb+resource+scope that clearly distinguishes from sibling tools, especially by noting 'unlike get_staff's reverse-direction lookup'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit workflow guidance is provided: 'Use search_media first to resolve a title to its AniList ID.' It also contrasts with get_staff, telling the agent when not to use this tool, making the usage context unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_media_statisticsGet an anime/manga's score/status distributionARead-only
Get an anime/manga's watch/read-status counts (watching/completed/planning/etc.) and score distribution histogram across all AniList users. Use search_media first to resolve a title to its AniList ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | AniList ID. | |
| type | Yes | Whether `id` refers to anime or manga. |
Output Schema
| Name | Required | Description |
|---|---|---|
| statistics | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds useful behavioral context by specifying the data is 'across all AniList users' and that it returns a histogram, going beyond just saying 'get stats.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the core function, and the second sentence adds a practical usage tip. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple two-parameter schema, an output schema, and annotations, the description fully covers what the tool does and when to invoke it. The output schema removes the need to explain return values, and the description plus annotations provide sufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% description coverage for both parameters (id and type), so the description does not need to add much. The hint to use search_media adds a connection between tools but does not deepen parameter understanding beyond what the schema already offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: it retrieves watch/read-status counts and score distribution histograms for an anime/manga across all AniList users. This specific verb and resource distinguish it from sibling tools like get_media or get_media_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to use search_media first to resolve a title to an AniList ID, which is a clear usage prerequisite. It does not mention when not to use this tool or name alternatives, but the context is sufficient for selecting it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_media_tagsGet media tagsARead-only
List every descriptive tag AniList uses on anime/manga (finer-grained than genres, e.g. 'Time Skip', 'Tragedy', 'Reincarnation'), with category and adult-content flag. There are ~425 tags total, so results are paginated — use page/perPage rather than expecting them all in one response. Use this to look up a tag's exact name before passing it to search_media's tag_in — tag names are case-sensitive, and an unrecognized name doesn't error, it just silently matches nothing (confirmed live).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination. AniList's paginated connections (search results, a title's characters/staff/reviews, activity feeds, forum comments) reject a page whose page × perPage exceeds ~5000 entries with an upstream error, so paging that deep fails rather than returning more results. | |
| perPage | No | Results per page (max 25). |
Output Schema
| Name | Required | Description |
|---|---|---|
| tags | Yes | |
| pageInfo | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals important behavioral details beyond the readOnlyHint and openWorldHint annotations: pagination is required (~425 tags), page/perPage parameters cannot return all at once, tag names are case-sensitive, and unrecognized names silently match nothing (confirmed live). It also mentions the response includes category and adult-content flag, which is additional useful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, all relevant and non-redundant. It front-loads the purpose, then provides pagination behavior, then the specific use case with a caveat. No fluff or repetition of schema/annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers the tool's complexity: what it lists, how pagination works, why it matters, and a critical usage pitfall (case-sensitivity and silent no-match). With an output schema present, the description doesn't need to explain return values, and this description is complete for selection and correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (both page and perPage have descriptions), so the baseline is 3. The description adds context by explaining the ~425 tags total and advising to use pagination rather than expecting all in one response, which reinforces the purpose of the parameters. It doesn't add detailed syntax beyond the schema, but the contextual addition earns a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists every descriptive tag AniList uses on anime/manga, with examples ('Time Skip', 'Tragedy', 'Reincarnation') and distinguishes from genres. It also implies the specific use case for search_media's tag_in, differentiating it from sibling get_genres.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use the tool: to look up a tag's exact name before passing it to search_media's tag_in. It also mentions pagination necessity due to ~425 tags and notes that names are case-sensitive, providing both context and a specific use case. While it doesn't explicitly say 'use get_genres for genres', the 'finer-grained than genres' implies the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_notificationsGet your AniList notificationsA
[Requires login] Get the authenticated user's AniList notifications: new episodes airing, activity likes/replies/mentions, new followers, thread replies/likes, and media/staff/character data-submission updates. Every item has id, type and a human-readable context/contexts string; the rest of the fields depend on type (e.g. an AIRING item includes media/episode, a FOLLOWING item includes user, an ACTIVITY_MESSAGE item includes message.message — the actual DM text is nested one level inside message).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination. AniList's paginated connections (search results, a title's characters/staff/reviews, activity feeds, forum comments) reject a page whose page × perPage exceeds ~5000 entries with an upstream error, so paging that deep fails rather than returning more results. | |
| perPage | No | Results per page (max 25). | |
| type_in | No | Restrict to these notification types. Omit to get every type. This only filters what's returned here — whether a type is generated at all is controlled separately by the account's own notificationOptions (update_user); a type disabled there simply never appears, regardless of this filter. | |
| markAsRead | No | Set true to also reset AniList's unread-notification badge count to 0, as a side effect of this call (the same effect as opening the notifications page on the site). Defaults to false so a routine check doesn't clear the badge. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only and non-idempotent behavior, and the description adds specific details: markAsRead resets the unread badge as a side effect, and type_in only filters results without affecting which types are generated (controlled by account notificationOptions). It also explains type-dependent field structures, going well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences and front-loaded with the login requirement. The first sentence efficiently lists capabilities; the second is a bit dense with nested examples but each part adds value. Slightly complex sentence structure keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists and the description covers the essential behavior (login, notification types, side effects, type-dependent fields, filter nuance), it is fully complete for an agent to select and invoke the tool correctly. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter (page, perPage, type_in, markAsRead) already having detailed descriptions. The tool description doesn't add new parameter-level semantics beyond what the schema provides, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches the authenticated user's AniList notifications and enumerates the notification types (airing, likes, replies, mentions, followers, etc.). This distinguishes it from sibling tools like get_user_activity and get_activity, which handle general activity feeds rather than notifications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says '[Requires login]' and specifies this is for the authenticated user, clarifying when to use it. It doesn't explicitly name alternatives or exclusions, but the focus on notifications versus activity is clear from the description and sibling context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recommendationGet a recommendation by IDARead-only
Get a single AniList recommendation pairing (media + the media users recommend alongside it) by its AniList recommendation ID — useful for re-checking one specific pairing's current rating/userRating (e.g. after voting on it directly on anilist.co — this server has no tool to cast that vote itself) without re-paginating the whole list. Use get_recommendations_for_media instead to discover recommendation IDs for a title in the first place, or to browse/list them. Confirmed live (raw GraphQL, independent of this server): this is an AniList-side inconsistency, not a client bug — a majority of ids from get_recommendations_for_media's own nodes[].id 404 here anyway (7 of 10 tested for one title), with no correlation to that pairing's rating. A 404 on an id you just got from that tool doesn't mean the pairing doesn't exist, only that this specific lookup can't resolve it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | AniList recommendation ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| recommendation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint and openWorldHint, and the description adds valuable behavioral context beyond those: it warns of a known AniList-side inconsistency where a majority of IDs from get_recommendations_for_media may 404 here, independent of the client. It also clarifies that a 404 does not mean the pairing doesn't exist, which is important runtime behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear purpose and usage guidance. However, the caveat about 404 inconsistencies is lengthy, including specific test statistics (7 of 10 tested). That detail is useful but could be more succinct. Overall well-structured, slightly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-ID lookup with an output schema present and one integer parameter, the description is complete. It covers purpose, usage context, alternative tools, and failure behavior. Annotations already flag read-only, so no further safety notes are needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with the only parameter 'id' described as 'AniList recommendation ID' in the schema. The description also mentions the ID's role ('by its AniList recommendation ID'), adding minimal extra meaning but enough to reinforce the semantics. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get a single AniList recommendation pairing') and the resource (by AniList recommendation ID). It also distinguishes itself from the sibling tool get_recommendations_for_media, noting this is for a single lookup rather than browsing the list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes when to use this tool: for re-checking a specific pairing's current rating/userRating after voting, without re-paginating the whole list. It also directs users to get_recommendations_for_media when they need to discover recommendation IDs or browse/list them, providing a clear alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recommendations_for_mediaGet recommendations for a titleARead-only
List anime/manga AniList users recommend as similar to a given title, ranked by rating (highest first). Use search_media first to resolve the title to its AniList ID. Each result's mediaRecommendation.mediaListEntry (requires login) shows whether it's already on your own list — set excludeInList: true to filter those out server-side instead of checking each one yourself.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination. AniList's paginated connections (search results, a title's characters/staff/reviews, activity feeds, forum comments) reject a page whose page × perPage exceeds ~5000 entries with an upstream error, so paging that deep fails rather than returning more results. | |
| mediaId | Yes | AniList ID of the anime/manga to get recommendations for. | |
| perPage | No | Results per page (max 25). | |
| excludeInList | No | [Requires login] Omit recommendations already on your own list. Filtered after fetching this page, so a page can come back with fewer than `perPage` results — not an error, just fewer new ones on that page. No-ops (nothing filtered) if not logged in, since there's no list to check against. |
Output Schema
| Name | Required | Description |
|---|---|---|
| recommendations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description adds meaningful behavioral context: results are 'ranked by rating (highest first)', the mediaListEntry field 'requires login' to show list status, and excludeInList filters 'server-side' rather than client-side. This gives the agent a realistic expectation of behavior without repeating annotation information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, tightly packed with essential purpose, prerequisite, and behavioral details. It front-loads the core function, then adds actionable usage guidance. No fluff or redundancy—each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity and the presence of an output schema, the description is complete. It covers the main use case, the required setup step (search_media), auth-dependent behavior (login for mediaListEntry), and filtering options. The agent has enough to invoke the tool correctly without further clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides detailed descriptions for all parameters (100% coverage), so the baseline is 3. The description adds value by explaining the workflow for mediaId ('Use search_media first') and the practical trade-off of excludeInList ('instead of checking each one yourself'), which goes beyond the schema's already solid parameter docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'List anime/manga AniList users recommend as similar to a given title, ranked by rating (highest first).' This specifies the verb (list), resource (recommendations), and scope (similar to a title), and distinguishes it from sibling tools like get_recommendation (singular) by focusing on a list of recommendations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool (after resolving a title via search_media: 'Use search_media first to resolve the title to its AniList ID') and how to use a key parameter (excludeInList to filter server-side). It does not explicitly mention when not to use it, but the workflow guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_site_statisticsGet AniList site statisticsARead-only
Get AniList's own site-wide statistics (new users/anime/manga daily counts), newest first. Useful for questions about AniList's growth/activity, not for anime data. Defaults to the last 7 days; use page/perPage to go further back. Confirmed live (bypassing this tool's own 25 cap): AniList's SiteStatistics field silently caps perPage at 25 itself, so this tool's own limit doesn't lose you anything.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination. | |
| perPage | No | Results per page/series (max 25, enforced by AniList itself). |
Output Schema
| Name | Required | Description |
|---|---|---|
| statistics | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and open-world hints, and the description adds practical behavior details: default to last 7 days, newest-first ordering, and the AniList-side perPage cap that nullifies any concern about the tool's own limit. These go beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core function, followed by usage guidance and a useful quirk. Every sentence adds distinct value with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with an output schema already present, and the description fully covers purpose, use cases, defaults, and a behavioral quirk. Nothing important is missing for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing baseline 3. The description adds value by explaining that defaults correspond to a 7-day window and that page/perPage are used to 'go further back', linking them to time range rather than just pagination mechanics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets AniList's site-wide statistics (new users/anime/manga daily counts) in newest-first order. It distinguishes itself from siblings by explicitly noting this is not for anime data, unlike get_media_statistics or get_user_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use it ('useful for questions about AniList's growth/activity') and when not to ('not for anime data'). It also explains how to access historical data via pagination, providing clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_staffGet staff member detailsARead-only
Get a staff member's profile by AniList staff ID: name, image, occupations, description, and the anime/manga they worked on (staffMedia, up to 25 by popularity, with their staffRole — e.g. Director, Character Design — in each). Use search_staff first to resolve a name to its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | AniList staff ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| staff | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the returned data structure including staffMedia limited to 25 by popularity with staffRole, adding valuable context beyond the readOnlyHint annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise, front-loaded sentences with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only tool with an output schema, the description provides complete context: what it does, what it returns, and how to obtain the required ID.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes the id parameter as an AniList staff ID. The description does not add further meaning beyond reiterating this, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it gets a staff member's profile by AniList staff ID and enumerates the fields returned, distinguishing it from search_staff and other get_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use search_staff first to resolve a name to an ID, providing clear guidance on when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_studioGet studioARead-only
Get a studio's profile (name, whether it's an animation studio) and its top 10 most popular produced titles (a fixed cap, not paginated — AniList's studio field exposes no more via this lookup), by AniList studio ID or by name. Confirmed live: name already does AniList's own fuzzy search (same mechanism as search_studio), so a partial name (e.g. "Kyoto Anim") resolves directly — reach for search_studio instead only when you need to browse multiple candidates rather than take the closest match. If both id and name are given, id takes precedence and name is ignored.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | AniList studio ID. Provide this or `name`. | |
| name | No | Studio name to look up. Provide this or `id`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| studio | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors beyond annotations: a fixed cap of 10 titles (not paginated), the fuzzy search behavior of the name parameter, and id precedence. These are not evident from readOnlyHint/openWorldHint or the schema, adding significant transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet comprehensive, with each sentence serving a purpose. It is front-loaded with the primary function, followed by limitations, usage nuances, and a clear alternative. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, no required fields, output schema present) and the annotations, the description covers all relevant contextual aspects: what it returns, the cap, the fuzzy matching, the alternative tool, and input precedence. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema already describes both parameters (100% coverage), the description adds critical semantic information: the mutual exclusivity (provide this or that), the fuzzy matching nature of name, and the precedence rule when both are given. This goes well beyond the schema's basic field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: retrieving a studio's profile (name, animation studio status) and top 10 produced titles. It explicitly differentiates from the sibling tool search_studio, noting when one should be preferred over the other.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use this tool vs. search_studio ('reach for search_studio instead only when you need to browse multiple candidates'). It also clarifies the behavior with partial names and the precedence of id over name, giving clear decision-making criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_threadGet a forum threadARead-only
Get an AniList forum thread's title, body and metadata (including replyCount, viewCount, likeCount, isLiked) by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | AniList thread ID — use search_thread to find one, or pass one already known (e.g. from an AniList forum URL, anilist.co/forum/thread/<id>). |
Output Schema
| Name | Required | Description |
|---|---|---|
| thread | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the description only adds specific metadata field names. It does not disclose additional behaviors like error handling, authentication, or side effects, but the annotations cover the safety profile sufficiently.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and resource, with no redundant words. Every phrase adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one param, read-only annotation, and an output schema), the description is nearly complete. It could explicitly state it does not return comments, but the name and content make that obvious.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the `id` parameter is thoroughly documented with examples in the schema. The description merely says 'by its ID' without adding further meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('AniList forum thread') and clearly identifies what is returned (title, body, metadata with specific fields). This distinguishes it from siblings like get_thread_comments or search_thread.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when you have a thread ID and need thread details, but it does not explicitly compare against alternatives. The schema description mentions using search_thread to find an ID, but the tool description itself lacks when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_thread_commentsGet comments on a forum threadARead-only
List top-level comments posted on an AniList forum thread, by the thread's ID. Replies (posted via post_thread_comment's parentCommentId) are nested under their parent's childComments rather than appearing as separate entries in this list.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination. AniList's paginated connections (search results, a title's characters/staff/reviews, activity feeds, forum comments) reject a page whose page × perPage exceeds ~5000 entries with an upstream error, so paging that deep fails rather than returning more results. | |
| perPage | No | Results per page (max 25). | |
| threadId | Yes | AniList thread ID — use search_thread to find one, or pass one already known (e.g. from an AniList forum URL, or from get_thread). |
Output Schema
| Name | Required | Description |
|---|---|---|
| comments | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, so the description correctly does not restate read-only safety. It adds valuable behavioral context beyond annotations: replies are nested under parent's childComments rather than appearing as separate entries. This is a non-obvious trait that helps the agent understand the result shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence front-loads the core purpose, and the second adds an essential detail about nesting. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full input schema, output schema, and read-only annotations, the description covers the key operational nuance (nesting behavior). It is sufficient for an agent to select and invoke the tool correctly without additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: each parameter (page, perPage, threadId) already has a detailed description in the input schema. The description itself adds no parameter-specific meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('List') and resource ('top-level comments on an AniList forum thread'), scoped by thread ID. It also clarifies the nesting behavior of replies, clearly distinguishing it from thread tools like get_thread or search_thread.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (to retrieve top-level comments for a known thread ID) and adds a key caveat about replies being nested. However, it does not explicitly name alternative tools or state when not to use it, though the threadId schema description references search_thread as a lookup method.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_todays_birthdaysGet today's birthday characters or staffARead-only
List AniList characters or staff members whose birthday (month/day) is today, up to 50 results (a fixed cap, not paginated — entries beyond 50 are silently omitted, not an error). Returns character-shaped or staff-shaped objects for kind: CHARACTER/STAFF respectively, but a lighter fetch than get_character/get_staff: it does NOT include those tools' media/staffMedia filmography, nor each entry's bio (description) unless you set includeDescription — call get_character/get_staff by ID for an entry's full roles/works and bio, don't read a missing filmography here as 'none'.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Whether to list characters or staff members. | |
| includeDescription | No | Also fetch each result's full bio (`description`). Kept off by default — a bio can run to several thousand characters, and always including it would burn tokens on text you may not need; use get_character/get_staff for a single entry's full bio instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits beyond annotations: the 50-result fixed cap with silent omission (no pagination), the difference in returned object shapes, and the lighter fetch nature. This adds substantial context not covered by readOnlyHint/openWorldHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a bit dense, with a long second sentence, but every clause carries essential information. It is front-loaded with the core behavior and then covers caveats, making it efficient despite its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the cap, pagination absence, silent omission, return shape, lighter fetch, and includeDescription behavior. Combined with the output schema and annotations, it is fully sufficient for an agent to use the tool correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already provides 100% coverage, but the description adds valuable semantics: kind determines character-shaped vs staff-shaped objects, and includeDescription is explained with a token-burn warning and alternative. This goes beyond the schema's baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists AniList characters or staff with birthdays today, using a specific verb ('List') and resource. It also distinguishes itself from sibling tools like get_character/get_staff by explicitly noting it is a lighter fetch without filmography.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given: use this tool for lightweight birthday lookups, and call get_character/get_staff by ID for full roles/works and bio. It also warns not to interpret missing filmography as 'none', providing clear when-to-use vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_activityGet a user's activity feedARead-only
List recent AniList activity posts from a specific user — every activity type (list updates, text posts, and message activity they received), the underlying query applies no type filter of its own. Accepts an exact AniList username directly (it's resolved to an id with one extra internal lookup) — no need to call search_user first unless you only have a partial/fuzzy name. Use search_activity instead if you want to restrict to one activity type (TEXT/ANIME_LIST/MANGA_LIST/MEDIA_LIST/MESSAGE) or browse without pinning to one user. Use get_user_recent_activity instead if you just want a quick, fixed-size (5-item) recent snapshot without paginating.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination. AniList's paginated connections (search results, a title's characters/staff/reviews, activity feeds, forum comments) reject a page whose page × perPage exceeds ~5000 entries with an upstream error, so paging that deep fails rather than returning more results. | |
| user | Yes | AniList user ID, or username. Unlike search_activity's own `user` filter, both an unknown numeric ID and an unknown username error here rather than silently returning an empty feed. | |
| perPage | No | Results per page (max 25). |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety and dynamic nature are covered. The description adds valuable context: no type filtering, username resolution via an internal lookup, and the absence of a need for search_user. It does not mention error behavior for unknown users in the main description, but that is documented in the parameter schema, so the added value is solid but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences deliver purpose, scope, parameter clarification, and alternative-tool guidance with zero filler. The information is densely packed and front-loaded with the primary purpose before moving to alternatives, making it easy for an agent to quickly grasp the tool's role.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists to explain return values and the annotations cover safety semantics, the description completes the picture: it states what the tool does, how the username parameter works, pagination context is in the schema, and it names the exact alternatives for nearby use cases. The tool is relatively simple (3 params, flat output), and the description covers all necessary decision points.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining that the 'user' parameter accepts an exact username directly (resolved internally) and by contrasting behavior with search_activity's user filter. This enrichment of the user parameter justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'List recent AniList activity posts from a specific user' – a specific verb, resource, and scope. It also notes that all activity types are included and no type filter is applied, which differentiates it from sibling search_activity and get_user_recent_activity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use alternatives: 'Use search_activity instead if you want to restrict to one activity type... or browse without pinning to one user' and 'Use get_user_recent_activity instead if you just want a quick, fixed-size (5-item) recent snapshot.' It also advises that search_user is unnecessary for exact usernames, providing clear decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_listGet a user's anime or manga listARead-only
Get a user's AniList anime or manga list, grouped by status/custom list, with each entry's status, score, progress and dates. Works for any public/unlisted user. Accepts an exact AniList username directly — no need to call search_user first unless you only have a partial/fuzzy name. Paginated by chunk/perChunk (AniList's own mechanism for this — counted across entries of ALL statuses combined, not per status), since a large list can otherwise return thousands of entries in one response; check hasNextChunk and increment chunk to keep paging. AniList itself caps this at the ~11,000 most recently updated unique entries — irrelevant for virtually every account, but a hard ceiling if one is ever hit (older entries beyond it aren't retrievable through this field at all, by any chunk).
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Whether to get the anime or manga list. | |
| user | Yes | AniList user ID, or username. | |
| chunk | No | Chunk number for pagination (AniList paginates this list by chunk, not page). | |
| perChunk | No | Entries per chunk, counted across all statuses combined (max 25). |
Output Schema
| Name | Required | Description |
|---|---|---|
| lists | No | |
| hasNextChunk | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint/openWorldHint, the description discloses pagination semantics (chunk counts across all statuses combined), the need to check hasNextChunk, and AniList's ~11,000 entry cap for older entries. This is valuable behavioral context not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description front-loads the core purpose in the first sentence, then covers usage and pagination in clearly separated clauses. Every sentence adds operational value—no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paginated external-API tool, the description covers grouping, pagination loop (hasNextChunk/increment chunk), API cap, and username-handling. With an output schema present, there is no missing return-value information; the description is fully self-sufficient for invocation decisions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema descriptions cover all four parameters 100%, the tool description enriches 'chunk' and 'perChunk' by explaining they are AniList's own pagination mechanism and that counts are across ALL statuses combined. It also clarifies the 'user' parameter accepts an exact username directly, which is not obvious from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb and resource: 'Get a user's AniList anime or manga list, grouped by status/custom list', enumerating returned fields (status, score, progress, dates). It also clarifies it works for any public/unlisted user, distinguishing it from user-profile tools like get_user_profile or get_full_user_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells agents when not to call search_user: 'Accepts an exact AniList username directly — no need to call search_user first unless you only have a partial/fuzzy name.' Also frames pagination usage with chunk/perChunk and hasNextChunk, giving clear operational context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_profileGet a user's profileARead-only
Get an AniList user's public profile: name, about text, avatar, donator status — plus their account settings (title/name-language preferences, notification toggles, list display options). Confirmed live these settings are NOT viewer-gated, so they're included for any user, not just the authenticated caller. Accepts an exact AniList username directly — no need to call search_user first unless you only have a partial/fuzzy name and need to look up the exact one. Need statistics too? Use get_full_user_info instead of also calling get_user_stats separately.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | AniList user ID, or username. |
Output Schema
| Name | Required | Description |
|---|---|---|
| profile | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly and openWorld, but description adds meaningful beyond-annotation context: explicitly states account settings are included for any user, not just the authenticated caller. This removes potential ambiguity about data accessibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each serving a distinct purpose: scope, transparency detail, input guidance, and alternative tool recommendation. No redundancy or filler; concise yet information-dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with an output schema, the description covers purpose, contents, special behavior, and alternatives. It is fully self-sufficient without requiring external context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers the parameter with 'AniList user ID, or username' (100% coverage). The description adds value by explaining that an exact username is accepted directly, eliminating the need for a preliminary search, which clarifies expected input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a clear verb+resource: 'Get an AniList user's public profile' and enumerates specific contents (name, about, avatar, donator status, account settings). It differentiates from siblings by explicitly naming get_full_user_info and search_user.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: states exact usernames need no search_user first, and suggests get_full_user_info when statistics are needed. Also clarifies that settings are not viewer-gated, so the tool is appropriate for any user.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_recent_activityGet a user's most recent activityARead-only
Get an AniList user's 5 most recent activity posts, with full content (not just IDs) — every activity type (list updates, text posts, and message activity they received; the underlying query applies no type filter of its own), a fixed count, not configurable; use get_user_activity for a paginated full feed instead. Accepts an exact AniList username directly — no need to call search_user first unless you only have a partial/fuzzy name (username resolution costs one extra internal lookup either way).
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | AniList user ID, or username. Unlike search_activity's own `user` filter, both an unknown numeric ID and an unknown username error here rather than silently returning an empty feed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| activity | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description adds behavioral context: full content not just IDs, no type filter (even message activity received), fixed count, and that unknown IDs/usernames error rather than returning empty results (from param description). It also mentions an extra internal lookup for username resolution. This adds substantial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with every clause earning its place: purpose, type coverage, count fixity, alternative, and parameter guidance. No fluff, and the main action is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with an output schema, the description covers all needed context: exact behavior (count, type coverage, full content), error semantics, alternative tool, and parameter resolution. Nothing important is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the 'user' parameter 100%, including the accepted types and error behavior. The description adds practical semantics: 'Accepts an exact AniList username directly — no need to call search_user first' and clarifies the cost of username resolution, which complements the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get an AniList user's 5 most recent activity posts' and clarifies scope with details like full content, all activity types, and fixed count. It also distinguishes from sibling get_user_activity by explicitly naming that alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool vs alternatives: 'use get_user_activity for a paginated full feed instead' and when to consider search_user for partial/fuzzy names. This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_statsGet a user's statisticsARead-only
Get an AniList user's anime/manga statistics: counts, mean score, time watched, episodes/chapters/volumes consumed. Accepts an exact AniList username directly — no need to call search_user first unless you only have a partial/fuzzy name. AniList's own stats aggregation can lag behind the account's real list — confirmed live, an account with real scored/progressed entries still read back all-zero statistics — so don't treat a zeroed result as 'this account has no list activity' without cross-checking get_user_list. Need the profile too? Use get_full_user_info instead of also calling get_user_profile separately.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | AniList user ID, or username. |
Output Schema
| Name | Required | Description |
|---|---|---|
| stats | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint. The description adds critical behavioral context beyond annotations, warning that stats aggregation can lag and may return all-zero for active accounts, instructing agents not to misinterpret such results. This is a valuable caveat not derivable from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with purpose, and each sentence provides value. Slightly dense with multiple clauses, but no fluff. The 'confirmed live' anecdote is a bit wordy but reinforces the caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values are covered. The description addresses purpose, exact parameter usage, data freshness caveats, cross-checking guidance, and alternatives. For a single-parameter read-only tool with these quirks, this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (the 'user' parameter is documented as ID or username). The description adds useful semantic nuance: it must be an exact username, no need to search first, and partial/fuzzy names require search_user. This helps the agent use the parameter correctly beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get an AniList user's anime/manga statistics' and lists specific data fields (counts, mean score, time watched, episodes/chapters/volumes consumed). It also distinguishes from siblings by explicitly mentioning no need for search_user and directing to get_full_user_info for profiles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use and when-not-to-use guidance: 'no need to call search_user first unless you only have a partial/fuzzy name' and 'Use get_full_user_info instead of also calling get_user_profile separately.' It also advises cross-checking get_user_list if results are zeroed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
login_anilistLog in to AniListA
Authorize the personal-list and social tools with your AniList account (one-time). Prerequisite: register an app at anilist.co/settings/developer with Redirect URL set to http://localhost:8082/callback (the default; override the port via ANILIST_OAUTH_PORT if 8082 is taken — it must match exactly what you register), and set ANILIST_CLIENT_ID + ANILIST_CLIENT_SECRET in the server env. Calling this returns an authorization URL: open it, log in, and click Approve. If your browser genuinely runs on the same machine as this server, login then completes automatically; otherwise copy the URL you land on and pass it to submit_anilist_redirect. auto_capture in the response is NOT a reliable detector of that — it only reflects whether this server process could bind its own localhost listener, which typically succeeds even when the server runs remotely (SSH/headless) and the browser can never reach it; you (or the user) know the actual machine layout, the response doesn't.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| auto_capture | Yes | Whether this server process could bind a local callback listener — NOT whether the browser opening authorize_url is actually on the same machine. A remote/SSH server can still bind its own loopback port successfully and read `true` here even though that browser's redirect can never reach it. |
| instructions | Yes | |
| redirect_uri | Yes | The exact localhost callback URI this login attempt used (port from ANILIST_OAUTH_PORT, default 8082) — must exactly match the Redirect URL registered for your AniList app, or the token exchange fails. |
| authorize_url | Yes | The AniList OAuth authorization URL — open it in a browser and click Approve. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, openWorldHint=true), the description discloses prerequisites (app registration, callback URL, env vars), warns that auto_capture is not a reliable detector of local browser access, and explains the remote/SSH headless scenario. This is rich behavioral context that prevents misuse.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, and every subsequent sentence delivers essential prerequisites, flow steps, or a pitfall warning. The length is justified by the complexity of the OAuth flow, and there is no filler or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the OAuth orchestration, the presence of an output schema, and the need to coordinate with submit_anilist_redirect, the description is complete: it covers setup, the returned URL, automatic vs manual completion, and the meaning of the auto_capture field. No ambiguity remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is 100% and the baseline is 4. The description adds context about environment variables and port configuration, but since there are no input parameters to document, it cannot add more beyond that baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Authorize the personal-list and social tools with your AniList account (one-time)', which is a specific verb and resource. It clearly distinguishes this from the follow-up tool submit_anilist_redirect, establishing the tool's role as the initial authorization step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides the complete flow: calling this returns an authorization URL, then either auto-completes if browser is local or instructs to pass the redirect URL to submit_anilist_redirect. It explicitly covers when to use the alternative and the conditions that determine which path to follow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_message_activityPost a message activityA
[Requires login] Post a new message-style activity to another AniList user's profile, or update an existing one by passing its id. Despite the name, this is NOT a private DM — like post_text_activity, it's publicly visible on both users' activity feeds/profiles to anyone who can view them. This is a limitation of this tool, not AniList itself: AniList's underlying mutation does accept a private argument, but this tool doesn't expose it, so every message sent through it is public. Don't use it for anything the sender expects to stay confidential.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Activity ID to update instead of creating a new post. | |
| message | Yes | The message text to post (per AniList's own schema: 2-10000 characters). | |
| recipientId | Yes | AniList numeric user ID of the message recipient (resolve a username via search_user first). |
Output Schema
| Name | Required | Description |
|---|---|---|
| activity | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds critical behavioral context beyond annotations, including the login requirement, the tool's limitation of not exposing the `private` argument (making all posts public), and the fact that it can update existing activities. This directly addresses side effects and limitations without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long and front-loaded with the core purpose, followed by an important caveat. While slightly wordy in explaining the limitations, every sentence provides value and there is no wasted detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (requires login, creates/updates, public visibility), the description covers all key aspects: login, recipient targeting, update capability, privacy warning, and the mutation behavior. The output schema and parameter schemas provide additional technical detail, making the context complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter already described in the schema. The description only briefly mentions `id` for updating and `recipientId` for the recipient, but does not add meaningful meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'Post a new message-style activity to another AniList user's profile, or update an existing one by passing its `id`.' This distinguishes it from sibling tools like post_text_activity by specifying the recipient and update capability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: to post a message activity to another user or update an existing one. It also explicitly warns against using it for confidential messages and mentions post_text_activity as a point of comparison, though it doesn't explicitly state alternative tools for other use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_text_activityPost a text activityA
[Requires login] Post a new text-status update to the authenticated user's own AniList profile, or update an existing one by passing its id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Activity ID to update instead of creating a new post. | |
| text | Yes | The text to post (per AniList's own schema: 5-10000 characters). |
Output Schema
| Name | Required | Description |
|---|---|---|
| activity | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal that this is a write, non-idempotent, non-destructive operation. The description adds the login requirement (`[Requires login]`) and clarifies the dual create/update behavior, which is useful context beyond the annotations. No contradictions noted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is just two sentences, with the login requirement front-loaded and the core behavior stated efficiently. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with two parameters and an output schema, the description covers the essential context: what it does, who it affects, and the create/update distinction. No significant information gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters `id` and `text` are already well documented. The tool description only reiterates the `id` semantics for updates, adding no new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Post a new text-status update') and resource ('authenticated user's own AniList profile'), and explicitly mentions the update variant via an existing `id`. This distinguishes it from sibling tools like `post_message_activity` and `delete_activity`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates that the tool is for the authenticated user's own profile and can either create a new post or update an existing one by passing an `id`. While it doesn't explicitly name alternative tools, the context is clear enough, and the sibling list includes `post_message_activity` for a different activity type.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_threadPost a forum threadA
[Requires login] Post a new forum thread to the authenticated user's own AniList account, or update an existing one by passing its id. Use search_thread first if you want to check whether a similar thread already exists before posting a new one. Note: this tool's own response doesn't include categories/mediaCategories/isSticky/isLocked — call get_thread with the returned id afterward to confirm whether a category/sticky/locked change actually applied, especially since sticky/locked can silently no-op and categories/mediaCategories can silently drop existing values (see those fields' own descriptions below).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Thread ID to update instead of creating a new one. | |
| body | No | Thread body (markdown; per AniList's own schema, up to 30000 characters) — REQUIRED when creating a new thread, optional when updating one via `id` (confirmed live: omitting it on an update leaves the existing body unchanged). | |
| title | No | Thread title (per AniList's own schema: 6-120 characters) — REQUIRED when creating a new thread, optional when updating one via `id` (confirmed live: omitting it on an update leaves the existing title unchanged, it isn't cleared). | |
| locked | No | Lock this thread to prevent further replies (only takes effect if you have moderator permission — confirmed live that a non-mod account's own thread silently stays unlocked). | |
| sticky | No | Pin this thread (only takes effect if you have moderator permission — confirmed live that a non-mod account's own thread silently stays unpinned). | |
| categories | No | Forum category IDs to post this thread under — REQUIRED when creating a new thread (AniList rejects the mutation otherwise), optional when updating one via `id`. When updating and you DO set this, it's a full replace, not a merge — confirmed live: an existing thread with categories [A] updated with just [B] ended up with [B] only, A silently dropped. Fetch the thread's current categories first (get_thread) and include every one you want to keep. Not independently listable by any tool; resolve one from a thread you've already read (get_thread's/search_thread's `categories` field) or from a forum URL like anilist.co/forum/recent?category=<id>. | |
| mediaCategories | No | AniList anime/manga IDs to tag this thread with, for threads about a specific title (from search_media/get_media). Optional on both create and update. When updating and you DO set this, it's a full replace, not a merge — confirmed live: an existing thread tagged with [A] updated with just [B] ended up with [B] only, A silently dropped (same behavior as `categories` above). Fetch the thread's current `mediaCategories` first (get_thread) if you need to keep an existing tag alongside a new one. |
Output Schema
| Name | Required | Description |
|---|---|---|
| thread | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behavioral traits beyond annotations: requires login, response omits certain fields, sticky/locked silently no-op without moderator permission, and categories/mediaCategories are full-replace not merge on update. This is rich, non-obvious context that annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is thorough but every sentence earns its place, covering purpose, usage guidance, and critical caveats. It is front-loaded with the main action and structured into a coherent flow, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description is exceptionally complete: it covers authentication, create vs. update modes, pre-check guidance, response limitations, and silent failure modes. The presence of an output schema does not reduce the need for these descriptive clarifications, and the description delivers them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds critical semantics: body/title are required on create but optional on update, categories required on create, full-replace behavior on update, and mod-only effect for sticky/locked. This goes far beyond the schema's baseline descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: posting a new forum thread to the authenticated user's own account or updating an existing one by passing its id. It distinguishes itself from sibling tools like post_thread_comment, search_thread, and get_thread by focusing specifically on creating/updating threads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using search_thread first to check for duplicates before posting, and instructs calling get_thread with the returned id to confirm category/sticky/locked changes. This gives clear when-to-use and alternatives, exceeding baseline guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_thread_commentPost a comment on a forum threadA
[Requires login] Post a new comment on an AniList forum thread from the authenticated user's account, or update an existing one by passing its id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Comment ID to update instead of creating a new one. Not the comment you're replying to — that's `parentCommentId`. | |
| comment | Yes | The comment text to post (markdown; per AniList's own schema, up to 12000 characters). | |
| threadId | Yes | AniList thread ID to comment on (from get_thread/search_thread). | |
| parentCommentId | No | Reply to this specific comment instead of posting top-level (from get_thread_comments). The reply then appears nested under that comment's `childComments` in get_thread_comments, not as a new top-level entry. Not the comment being edited — that's `id`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| comment | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond the annotations by disclosing that login is required and that the comment is posted from the authenticated user's account. It also reveals the dual create/update behavior, which is not explicitly stated in the annotations. This provides useful behavioral context without contradicting the annotations (readOnlyHint=false, idempotentHint=false, destructiveHint=false).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the action and resource, then clarifies the create/update variation. It contains no fluff, repeats no schema details, and is immediately scannable, making it an exemplary concise description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 parameters, 2 required, all with rich schema descriptions) and the presence of an output schema, the description covers the essential prerequisites (login, authenticated user) and the core create/update capability. It does not mention the reply functionality via `parentCommentId`, but that is thoroughly documented in the schema, so the description is sufficiently complete for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% description coverage across all four parameters, including detailed explanations for `id`, `parentCommentId`, `threadId`, and `comment`. The description's reference to 'or update an existing one by passing its `id`' reinforces the purpose of the `id` parameter but adds negligible new meaning beyond the schema. Thus, the description meets the baseline without significantly enhancing parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Post' to identify the action and 'comment on an AniList forum thread' as the resource, clarifying that it creates a new comment or updates an existing one by passing its id. This distinguishes it from siblings like post_thread (creates threads) and delete_thread_comment (deletes comments), making the purpose specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the prerequisite '[Requires login]' and notes the action is performed from the authenticated user's account, giving some usage context. However, it does not explicitly mention when to use this tool versus alternatives such as post_thread or get_thread_comments, nor does it provide exclusions. The usage is implied by the purpose but not fully articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_list_entryRemove an entry from your AniList listADestructive
[Requires login] Delete an entry from the authenticated user's own AniList list by its list-entry ID (NOT the media id) — get it from get_user_list. This cannot be undone, and calling it again on an already-deleted id errors rather than silently succeeding.
| Name | Required | Description | Default |
|---|---|---|---|
| listEntryId | Yes | The list ENTRY id to delete (not the media id). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, idempotentHint=false), the description adds critical behavioral details: it 'cannot be undone' and that calling it again on an already-deleted id 'errors rather than silently succeeding.' This enriches the annotation signal with concrete consequences, which is exactly what behavioral transparency should provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences, front-loaded with the primary purpose and immediately followed by essential caveats (login, ID source, irreversibility, error behavior). Every phrase earns its place, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter delete operation with a full schema and annotations, the description covers all necessary context: authentication requirement, scope (own list), ID lookup path, irreversibility, and non-idempotent error behavior. The output schema exists but doesn't require explanation, as this is a straightforward mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes listEntryId as 'The list ENTRY id to delete (not the media id)' (100% coverage). The description adds practical guidance on where to obtain this ID ('get it from get_user_list'), which goes beyond the schema and helps the agent source the correct value, so a slight premium over the baseline of 3 is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Delete' and clearly identifies the resource as 'an entry from the authenticated user's own AniList list.' It also distinguishes the correct identifier type ('NOT the media id') and references get_user_list, making it immediately clear which sibling tool (e.g., update_list_entry, add_list_entry) this contrasts with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: login is required, the entry must be from the user's own list, and the ID must be obtained from get_user_list. While it doesn't explicitly mention alternatives like update_list_entry, the purpose is unambiguous and the prerequisite is stated, effectively guiding when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_activitySearch activity feedARead-only
Search/browse AniList's activity feed (list updates, text posts, messages), optionally filtered to one user and/or one activity type. Each result already includes its full content (text/message/status, replyCount/likeCount/isLiked, the posting user, and — for list activity — the media) — no follow-up get_activity call needed unless you need to re-check one specific result's replyCount/likeCount/isLiked later (e.g. after liking it).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination. AniList's paginated connections (search results, a title's characters/staff/reviews, activity feeds, forum comments) reject a page whose page × perPage exceeds ~5000 entries with an upstream error, so paging that deep fails rather than returning more results. | |
| type | No | Restrict to this activity type. MEDIA_LIST matches both ANIME_LIST and MANGA_LIST activities; use ANIME_LIST/MANGA_LIST to restrict to just one. | |
| user | No | Restrict results to this AniList user — numeric ID or exact username (resolved to an id with one extra internal lookup; no need to call search_user first unless you only have a partial/fuzzy name). Validation is asymmetric: an unknown USERNAME errors ('No AniList user named ... was found'), but an unknown numeric ID does NOT — it silently returns an empty result, indistinguishable from 'this user has no matching activity'. Resolve a numeric ID via search_user first if you need to confirm the account actually exists. Use get_user_activity instead if you only need one user's feed without the type filter. | |
| perPage | No | Results per page (max 25). |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds valuable behavioral context: it discloses that each result contains full content (text, counts, user, media), eliminating the need for a follow-up call. It also hints at the ability to later re-check likes after liking, which is beyond what annotations state. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and each clause earns its place. It packs important usage guidance without unnecessary exposition, making it highly scannable and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 params, all rich in schema descriptions, plus an output schema), the description covers the essential context: what it does, what results include, and when to avoid follow-up calls. It does not need to repeat schema details, and the sibling-tool hints (get_activity, get_user_activity) are addressed. The description is complete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all four parameters, including nuanced behavior (e.g., user validation asymmetry, pagination limits). The description only summarizes the parameters at a high level ('optionally filtered to one user and/or one activity type'), which adds minimal value beyond the schema but meets the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (search/browse) and resource (AniList's activity feed), and explicitly scopes what it covers: list updates, text posts, messages. It also distinguishes from sibling tools by mentioning optional filtering by user and activity type, which get_activity and get_user_activity do not both offer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description and schema give explicit guidance: it says no follow-up get_activity call is needed, and the user parameter suggests using get_user_activity when only a single user's feed is required without type filtering. It also points to search_user for numeric ID validation, providing clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_characterSearch charactersARead-only
Search AniList for characters by name. Returns AniList IDs to use with get_character. Each result's bio (description) is omitted unless you set includeDescription.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination. AniList's paginated connections (search results, a title's characters/staff/reviews, activity feeds, forum comments) reject a page whose page × perPage exceeds ~5000 entries with an upstream error, so paging that deep fails rather than returning more results. | |
| term | Yes | Character name (or part of it) to search for. | |
| perPage | No | Results per page (max 25). | |
| includeDescription | No | Also fetch each result's full bio (`description`). Kept off by default — a bio can run to several thousand characters, and always including it would burn tokens on text you may not need; use get_character for a single entry's full bio instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations declaring readOnlyHint and openWorldHint, the description adds valuable behavioral context by noting that each result's bio (`description`) is omitted unless includeDescription is set. This discloses a data-omission behavior that the annotations do not cover, enhancing transparency beyond the structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose, and contains no unnecessary words. Each sentence earns its place, efficiently conveying purpose, relationship to get_character, and an important behavioral note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, full schema coverage, annotations, and an output schema, the description is complete. It sufficiently covers the purpose, return value usage, and a key behavioral nuance (bio omission) without needing to reiterate pagination or return format, which are already handled by schema and output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of the parameters with detailed descriptions, especially for page and includeDescription. The description adds no additional parameter semantics beyond what the schema already provides; it merely repeats the includeDescription effect, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches AniList for characters by name, uses a specific verb ('Search') and resource ('characters'), and explicitly distinguishes the tool from get_character by saying it returns IDs to use with get_character. This is precise and differentiates it from sibling tools like get_media_characters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage context by indicating the tool returns AniList IDs for use with get_character, implying a search-then-detail workflow. However, it does not explicitly mention alternatives or exclusions (e.g., when to use get_media_characters instead), leaving a slight gap but still giving adequate guidance for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_mediaSearch anime/mangaARead-only
Search AniList for anime or manga by title and/or filters (genre, format, status, season/year), or browse term-less by ranking (top-rated, most popular, trending — see the sort parameter) when you don't have a title to search for. Adult (NSFW) results are included unless you set sfw: true — see the sfw parameter. Returns AniList IDs to use with get_media and other ID-based tools.
| Name | Required | Description | Default |
|---|---|---|---|
| sfw | No | Set true to exclude adult (isAdult) entries. Adult results are NOT filtered by default. | |
| page | No | Page number for pagination. AniList's paginated connections (search results, a title's characters/staff/reviews, activity feeds, forum comments) reject a page whose page × perPage exceeds ~5000 entries with an upstream error, so paging that deep fails rather than returning more results. | |
| sort | No | Sort order, most-significant key first (e.g. ["SCORE_DESC"] for highest-rated first, ["POPULARITY_DESC"] for most popular, ["TRENDING_DESC"] for what's hot right now). Defaults to relevance-ranked SEARCH_MATCH when a `term` is given; with no term and no explicit sort, results come back in AniList's own default order. Set an explicit sort for a term-less ranking/browse query (e.g. top-rated or most-popular). | |
| term | No | Free-text search term (matches title). Omit to only filter. | |
| type | Yes | Whether to search anime or manga. | |
| genres | No | Restrict to entries matching ALL of these genre names (see get_genres for valid names) — an unrecognized genre name doesn't error, it just filters out all results, same silent-mismatch behavior as `format_in`/`tag_in` below. | |
| onList | No | [Requires login] Restrict to (true) or exclude (false) entries already on the authenticated user's own list. Omit to ignore list status entirely. Confirmed live: silently no-ops (identical results for true/false/omitted) if not logged in, since there's no list to check against — same behavior as get_recommendations_for_media's `excludeInList`. | |
| season | No | Restrict to this airing season. Works alone — matches every year's occurrence of that season, NOT just the current year (unlike anilist.co's own season filter UI, which implicitly assumes the current year when you don't also pick one). Combine with `seasonYear` for one specific season+year. | |
| tag_in | No | Restrict to entries matching ALL of these exact tag names (see get_media_tags for valid names — unlike `genres`, tag names are case-sensitive and more specific, e.g. "Time Loop" or "Tragedy"). An unrecognized tag name doesn't error, it just silently matches nothing (same behavior as `genres`/`format_in` above, confirmed live). | |
| perPage | No | Results per page (max 25). | |
| format_in | No | Restrict to these formats. Only formats valid for the `type` you're searching match anything — e.g. NOVEL/ONE_SHOT with type: ANIME, or TV/OVA/ONA with type: MANGA, will just filter out all results, not error. | |
| source_in | No | Restrict to entries adapted from these source material types. | |
| status_in | No | Restrict to these release statuses. | |
| seasonYear | No | Restrict to this airing/release year (matches any season within it). Works alone or combined with `season` for one specific season+year — neither requires the other. | |
| endDate_lesser | No | Restrict to entries whose end date is on or before this date. | |
| endDate_greater | No | Restrict to entries whose end date is on or after this date. | |
| episodes_lesser | No | Restrict to entries with fewer episodes/chapters than this. | |
| episodes_greater | No | Restrict to entries with more episodes/chapters than this. | |
| startDate_lesser | No | Restrict to entries whose start date is on or before this date. | |
| popularity_lesser | No | Restrict to entries with fewer list-adds than this. | |
| startDate_greater | No | Restrict to entries whose start date is on or after this date. | |
| includeDescription | No | Also fetch each result's full synopsis (`description`). Kept off by default — with up to 25 results per call, always including it would burn tokens on text you may not need; use get_media for a single title's full synopsis instead. | |
| popularity_greater | No | Restrict to entries with more list-adds than this. | |
| averageScore_lesser | No | Restrict to entries with an average score strictly less than this (0-100). | |
| averageScore_greater | No | Restrict to entries with an average score strictly greater than this (0-100). |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and open-world, and the description adds substantial behavioral context: adult results are included by default unless sfw=true, silent no-op behavior for onList when not logged in, season matching every year rather than just current year, and upstream pagination failure at deep pages. These go well beyond the annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused paragraph that front-loads the core functionality, then adds essential caveats (NSFW inclusion, ID output, term-less browsing) without listing all 25 parameters. Every sentence contributes value and the structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 25 parameters, a rich output schema, and annotations, the description is remarkably complete. It covers primary usage modes, important edge cases (silent mismatches, login requirements), integration with other tools, and points to schema for further detail. No significant information gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter already has a detailed description. The tool description mainly references key parameters (sort, sfw) and relates them to use cases, but adds no new semantic detail beyond the schema's own parameter explanations. Thus baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly identifies the tool as searching AniList for anime/manga by title or filters, and distinguishes it from sibling search tools (search_character, search_staff, etc.) by specifying the resource type. It also differentiates from get_media by noting that this tool returns AniList IDs for use with other ID-based tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use term-less browsing by ranking vs. title search, and directs users to get_media for full synopses. Names alternative tools for genres (get_genres) and tags (get_media_tags), and explains the default sort behavior without a term. Also advises on includeDescription to avoid token bloat.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_staffSearch staffARead-only
Search AniList for staff members by name. Returns AniList IDs to use with get_staff. Each result's bio (description) is omitted unless you set includeDescription.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination. AniList's paginated connections (search results, a title's characters/staff/reviews, activity feeds, forum comments) reject a page whose page × perPage exceeds ~5000 entries with an upstream error, so paging that deep fails rather than returning more results. | |
| term | Yes | Staff member name (or part of it) to search for. | |
| perPage | No | Results per page (max 25). | |
| includeDescription | No | Also fetch each result's full bio (`description`). Kept off by default — a bio can run to several thousand characters, and always including it would burn tokens on text you may not need; use get_staff for a single entry's full bio instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnlyHint and openWorldHint, the description adds the behavioral detail that bios are omitted by default unless includeDescription is set, and that results are IDs intended for get_staff. This enriches the agent's model of the tool without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver the core purpose, return value, and a key behavioral caveat with zero redundancy. All information is front-loaded and every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return structures are documented elsewhere. The description covers purpose, key output, and the one non-obvious behavior (bio omission), making it adequate for an agent to invoke correctly without further context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 4 parameters at 100%, including detailed descriptions for includeDescription and pagination. The description's mention of bio omission mirrors the schema's includeDescription description, adding no new semantic information, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Search' plus resource 'staff members by name' clearly states the action and scope. It effectively distinguishes from get_staff by noting it returns AniList IDs for subsequent lookup, making its role in the workflow explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for finding staff IDs before calling get_staff, and explicitly recommends get_staff for a single entry's full bio via the includeDescription parameter note. However, it does not explicitly contrast with other search tools like search_character, so it falls short of a full when-not guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_studioSearch studiosARead-only
Search/browse AniList's animation/production studios by name, when you want to see multiple candidates rather than take the closest match — get_studio's own name param already does this same fuzzy search directly and resolves a partial name on its own. Returns AniList IDs to use with get_studio.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination. AniList's paginated connections (search results, a title's characters/staff/reviews, activity feeds, forum comments) reject a page whose page × perPage exceeds ~5000 entries with an upstream error, so paging that deep fails rather than returning more results. | |
| term | Yes | Studio name (or part of it) to search for. | |
| perPage | No | Results per page (max 25). |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint and openWorldHint annotations already present, the description adds useful behavioral context: it returns AniList IDs for later use with get_studio, and it is a fuzzy search. It does not contradict the annotations, though it does not go into pagination details (those live in the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose, and contains no filler. Every clause earns its place, including the sibling differentiation and return-value note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the full schema coverage, the presence of an output schema, and annotations for safety, the description covers all needed context: what the tool does, when to use it versus an alternative, and what it returns. No significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with term, page, and perPage all fully described. The description adds no extra parameter semantics beyond implying that 'by name' refers to the term parameter, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Search/browse AniList's animation/production studios by name', clearly identifying the action and resource. It also distinguishes from the sibling get_studio by noting that this tool returns multiple candidates rather than a single closest match, which is strong differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this tool 'when you want to see multiple candidates rather than take the closest match' and points out that get_studio's own name param already does the same fuzzy search and resolves partial names. This gives clear when-to-use and an explicit alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_threadSearch forum threadsARead-only
Search/browse AniList's forum threads by title/body text and/or restrict to one category. Returns AniList thread IDs (with title/category for context) to use with get_thread, get_thread_comments, post_thread, or post_thread_comment.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination. AniList's paginated connections (search results, a title's characters/staff/reviews, activity feeds, forum comments) reject a page whose page × perPage exceeds ~5000 entries with an upstream error, so paging that deep fails rather than returning more results. | |
| term | No | Free-text search term (matches thread title/body). Omit to just filter/browse. | |
| perPage | No | Results per page (max 25). | |
| categoryId | No | Restrict to this forum category ID. Not independently listable by any tool — resolve one from a thread you've already read (its `categories` field) or from a forum URL like anilist.co/forum/recent?category=<id>. A wrong or nonexistent ID doesn't error, it silently filters to an empty result — indistinguishable from 'no threads in this category.' | |
| mediaCategoryId | No | Restrict to threads tagged with this AniList anime/manga ID (from search_media/get_media). Not existence-checked: a nonexistent media ID doesn't error, it silently filters to an empty result — resolve the ID via search_media first if you need to confirm the title actually exists. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations declaring readOnlyHint=true and openWorldHint=true, the description doesn't contradict them and adds useful behavior beyond annotations: it mentions the return format (thread IDs with title/category) and the ability to browse by category without a term. This goes beyond the safety profile supplied by annotations, although it doesn't discuss pagination or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first states the core purpose, the second states the output and downstream usage. Every sentence earns its place with no redundancy, filler, or ambiguity. Perfectly front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of a detailed output schema and annotations, the description is complete: it explains what the tool does, what it returns, and how the results are meant to be consumed. It covers browsing and filtering, and the schema handles pagination and parameter specifics. No critical context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no param-level details beyond the schema; it only summarizes 'title/body text' (term) and 'restrict to one category' (categoryId). This is a light paraphrase, not additional semantic value, but it doesn't harm.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Search/browse') and resource ('AniList's forum threads'), with explicit scope ('by title/body text and/or restrict to one category'). It distinguishes from sibling tools by naming the exact thread-related tools it feeds, clarifying that it is the search entry point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear workflow context: 'Returns AniList thread IDs ... to use with get_thread, get_thread_comments, post_thread, or post_thread_comment.' This implies when to use it (to find threads) versus when to use other tools, though it doesn't explicitly state exclusions like 'if you already have a thread ID, use get_thread directly.' Still, the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_userSearch usersARead-only
Search AniList for users by username. Returns AniList user IDs to use with get_user_profile/get_full_user_info (profile), get_user_stats (statistics), get_user_list (their public list), or toggle_follow_user.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination. AniList's paginated connections (search results, a title's characters/staff/reviews, activity feeds, forum comments) reject a page whose page × perPage exceeds ~5000 entries with an upstream error, so paging that deep fails rather than returning more results. | |
| term | Yes | Username (or part of it) to search for. | |
| perPage | No | Results per page (max 25). |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that the tool returns user IDs for downstream operations, which is valuable behavioral context beyond the annotations. No contradictions detected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences, front-loaded with the core purpose and followed by usage context. Every word earns its place; no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward search tool with full schema coverage, a read-only annotation, and an output schema present, the description effectively covers what the tool does, what it returns, and how to use it. It doesn't need to restate pagination because the schema handles that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: all three parameters (page, term, perPage) have descriptions in the input schema. The description only reinforces that search is by username, adding no new parameter-level detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search') and resource ('AniList users'), clearly distinguishing it from sibling search tools like search_media or search_character. It also specifies the search key ('by username') and the purpose of the output (IDs for other user tools).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by stating that results are AniList user IDs intended for use with specific follow-up tools (profile, stats, list, follow). However, it does not explicitly name alternatives or state when not to use this tool, though the sibling list makes the distinction apparent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_anilist_redirectComplete AniList login with a pasted redirect URLA
Complete a login started with login_anilist by submitting the URL your browser was redirected to after clicking Approve (the one containing ?code=...). Use this when login didn't complete automatically — e.g. the server runs on a remote/headless host. A bare code string is also accepted.
| Name | Required | Description | Default |
|---|---|---|---|
| redirect_url | Yes | The full redirected URL (contains ?code=...), or just the code value. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false, so the description's burden is lower. It adds context about the login failure scenario but doesn't elaborate on idempotency or side effects. Value is moderate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the purpose and provide necessary details without extraneous information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (single parameter, output schema present), the description covers purpose, usage context, and parameter nuances sufficiently. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter 'redirect_url' is fully described in the schema, and the description adds extra meaning by clarifying that a bare code string is also accepted, going beyond the schema's description of 'full redirected URL'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool completes an AniList login by submitting a redirect URL, using specific verbs and resources. It distinguishes from the sibling tool 'login_anilist' by describing its role in the login flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool (when login didn't complete automatically, e.g., on remote/headless hosts), and mentions the prerequisite of having initiated login with 'login_anilist'. It also notes that a bare code string is accepted, providing clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle_favouriteFavourite/unfavourite an anime, manga, character, staff member, or studioA
[Requires login] Toggle an anime, manga, character, staff member, or studio in the authenticated user's AniList favourites. Calling it again on the same kind+id un-favourites it. The response is not scoped to just the toggled item: it returns the account's entire current favourites (id-only) across all 5 categories (anime/manga/characters/staff/studios), so expect a wide result even for a single toggle. Resolve id first via search_media/get_media (kind: ANIME/MANGA), search_character/get_character, search_staff/get_staff, or search_studio/get_studio, matching kind. Confirmed live: AniList does NOT validate that id actually belongs to the given kind — e.g. passing an anime's ID with kind: CHARACTER succeeds silently instead of erroring, favouriting a nonexistent character. Always resolve id from the tool matching kind rather than reusing an ID you already have on hand. Note: immediately re-checking with get_media/get_character/get_staff/get_studio's own isFavourite can briefly still show the pre-toggle value — a confirmed AniList-side read-after-write lag, not a bug in this call; this tool's own response already reflects the new favourites list correctly.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | AniList ID of that anime/manga/character/staff/studio. | |
| kind | Yes | Which kind of entity `id` refers to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| favourites | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only, non-idempotent, and non-destructive, which the description aligns with. It goes beyond by disclosing that the response returns the entire favourites list, that AniList does not validate kind-id pairing, and that there is a confirmed read-after-write lag. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence adds operational value: purpose, toggle behavior, response shape, id resolution, validation gap, and lag. It is front-loaded with the core purpose and follows with necessary caveats, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description covers login requirement, exact toggle semantics, response list shape, parameter resolution process, a serious API validation gap, and a data consistency caveat. With an output schema present, this is fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema already provides descriptions for both parameters, the description adds essential semantics: the id must be resolved from a tool matching the kind, and because AniList does not validate the match, incorrect pairings silently succeed. This is critical usage knowledge not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'toggle' and clearly identifies the resource: an anime, manga, character, staff member, or studio in the authenticated user's AniList favourites. It distinguishes this from sibling tools by focusing on the favourites toggle action, not list entries or user follows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit workflow: resolve the id via search_media/get_media, search_character/get_character, etc., based on kind. It also warns against reusing IDs and explains the toggle behavior (calling again un-favourites). The read-after-write lag note gives additional guidance for verification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle_follow_userFollow/unfollow a userA
[Requires login] Toggle following another AniList user from the authenticated user's account. Calling it again on the same user unfollows them.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | AniList numeric user ID to follow/unfollow — this mutation has no username form; resolve one via search_user or get_user_profile first. |
Output Schema
| Name | Required | Description |
|---|---|---|
| user | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations indicating a non-read-only, non-idempotent mutation, the description adds the login prerequisite and the toggle semantics (first call follows, second unfollows). This goes beyond the structured annotations and helps the agent predict the state-changing behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences deliver the essential info: login requirement, action, and repeat behavior. No filler or repetition, and it's front-loaded with the most critical constraint (login).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter mutation with an output schema present, the description covers all necessary context: auth requirement, precise action, and toggling idempotence. The parameter is fully documented in the schema, so nothing is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides a highly descriptive parameter note (numeric user ID, no username form, resolve via search_user/get_user_profile). Since schema coverage is 100%, the description doesn't need to add more, and it doesn't—this meets the baseline for schema-heavy documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Toggle following another AniList user') and the scope ('from the authenticated user's account'), which distinguishes it from sibling tools like toggle_favourite. The title also clarifies the follow/unfollow duality, reinforcing the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly notes the login requirement and explains the toggling behavior ('Calling it again on the same user unfollows them'), which tells users when to use it and what to expect. It doesn't name alternatives, but no other sibling tool provides follow functionality, so the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_list_entryUpdate an entry on your AniList listAIdempotent
[Requires login] Update an existing entry on the authenticated user's own AniList list by its list-entry ID (NOT the media ID — get it from get_user_list, or from add_list_entry's response). Only set the fields you want to change. The response echoes every field this tool can set, as AniList actually stored it — check it instead of assuming the write landed verbatim, especially for advancedScores and customLists, which AniList zeroes/replaces rather than merges.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | New free-text notes (per AniList's own schema, capped at 6000 characters). | |
| score | No | New score out of 10 (decimals allowed), always on this scale regardless of the account's configured scoreFormat (set via update_user) — no conversion needed. | |
| repeat | No | New rewatch/reread count (per AniList's own schema, capped at 1000). | |
| status | No | New list status. | |
| private | No | Hide/unhide this entry from your public list. | |
| priority | No | New list priority (higher = more important; per AniList's own schema, capped at 255). | |
| progress | No | New episodes watched / chapters read. | |
| startedAt | No | New start date. | |
| completedAt | No | New completion date. | |
| customLists | No | New set of custom lists for this entry — REPLACES this entry's full set of enabled lists, not merged: naming only a subset silently turns OFF every other list this entry was previously filed under (confirmed live for add_list_entry's identical field; this tool writes the same underlying value), it doesn't leave them alone. Include every list name you want this entry to stay tagged with, not just the one you're changing. Also, the list must already exist on the account (update_user's `animeListOptions`/`mangaListOptions` `customLists`) — naming one that doesn't exist yet is silently a no-op, not an error. | |
| listEntryId | Yes | The list ENTRY id to update (not the media id). | |
| advancedScores | No | New per-category scores, keyed and error-checked the same way as add_list_entry (errors if advanced scoring is disabled, or a key doesn't match a configured category). Unlike this tool's other fields, this one is NOT a true partial update: any configured category you omit is set to 0, not left at its previous value — pass every category if you're only changing one. Also stored positionally, not by name — same read-time reinterpretation risk as add_list_entry's `advancedScores` if the account's category order (update_user's `advancedScoring`) is later renamed/reordered. | |
| progressVolumes | No | New volumes read (manga only). | |
| hiddenFromStatusLists | No | Hide/unhide this entry from the public status-grouped list views (e.g. 'Watching') while still counting it in statistics — distinct from `private`, which hides the entry entirely. |
Output Schema
| Name | Required | Description |
|---|---|---|
| entry | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutation, but the description adds critical behavioral details: response echoes stored values, advancedScores and customLists are zeroed/replaced rather than merged, and login is required. This goes beyond the annotation flags to inform the agent of side effects and verification steps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core action, and every sentence delivers essential information (auth, ID distinction, partial update guidance, response verification). No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 14 params and nested objects, the description covers the key operational context: how to identify the entry, the partial-update model, special zeroing behavior, and the need to verify responses. Output schema exists, so return details are not needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The tool description adds crucial parameter behavior for advancedScores and customLists (zeroed/replaced, not merged), which is not obvious from the schema alone. This lifts the score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it updates an existing entry on the authenticated user's own AniList list by list-entry ID, explicitly distinguishing from media ID. It effectively contrasts with sibling tools like add_list_entry by specifying the exact action and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context: requires login, update existing entry, only set fields to change, and points to get_user_list/add_list_entry response to obtain the list-entry ID. It lacks explicit 'do not use for' exclusions, but the context and sibling names make usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_userUpdate your AniList account settingsAIdempotent
[Requires login] Update settings on the authenticated user's own AniList account (about text, preferred title language, adult-content visibility, score format, notification/messaging preferences, anime/manga list options). Only set the fields you want to change — most fields are a true partial update (see notificationOptions/disabledListActivity below for two confirmed exceptions, PLUS animeListOptions/mangaListOptions's nested customLists — a third: that one field's ARRAY VALUE is a full replace even though its sibling fields and the other list type merge normally).
| Name | Required | Description | Default |
|---|---|---|---|
| about | No | New profile 'about' text. | |
| rowOrder | No | Internal list-table row ordering key — reads back from `mediaListOptions.rowOrder` in the profile tools/this tool's own response. Confirmed live: AniList validates this server-side and rejects an unrecognized value with a clear error ("The selected row order is invalid.") rather than silently ignoring it — unlike `profileColor` below. | |
| timezone | No | Display timezone as an offset, in AniList's own documented "-?HH:MM" format (e.g. "09:00", "-05:00"). Confirmed live that AniList validates this server-side and rejects a malformed value with a clear error ("The timezone format is invalid.") — whether a leading "+" is also accepted wasn't tested live (this tool has no way to explicitly clear timezone back to unset, so a wrong guess here risked an unrevertable change); this regex follows AniList's own literal grammar, which mentions only an optional leading minus. | |
| scoreFormat | No | Preferred list score format (affects how scores DISPLAY on anilist.co only — add_list_entry/update_list_entry's `score` parameter always stays on a 0-10 scale regardless of this setting, so no conversion is needed on your end). | |
| donatorBadge | No | Custom donator badge text, up to 24 characters per AniList's own schema (only takes effect on a donator account). | |
| profileColor | No | Profile accent color (name or hex). Confirmed live: AniList silently ignores an unrecognized value instead of erroring — the account's existing color is left unchanged, with no error surfaced and no way to detect the value was rejected other than re-checking with get_authorized_user. | |
| titleLanguage | No | Preferred title display language. | |
| animeListOptions | No | New anime-list display/scoring options — only the fields you set are changed (confirmed live: this is a partial merge, unlike add_list_entry's advancedScores). | |
| mangaListOptions | No | New manga-list display/scoring options — same partial-merge behavior as `animeListOptions` above. | |
| activityMergeTime | No | Minutes within which consecutive list activity posts get merged into one. Per AniList's own schema: 0 = never merge, 20160+ (2 weeks) = always merge. | |
| staffNameLanguage | No | Preferred staff/character name display language. | |
| airingNotifications | No | Whether to notify about new episode airings for anime on your list. | |
| displayAdultContent | No | Whether to show adult content in search/browse. | |
| notificationOptions | No | ALL 20 notification types, every time — confirmed live this is a full replace, not a partial merge: AniList silently drops every type you don't list (not just resets it to default, removes it) with no error. Fetch the account's current list first (get_authorized_user's `options.notificationOptions`) and resend it in full with just your changes applied. | |
| disabledListActivity | No | ALL 6 list statuses, every time — confirmed live: AniList rejects this with a 400 error if any status is missing ("Incorrect number of disabled list activity options"), it's not a partial per-status update. Fetch the current list first (get_authorized_user's `options.disabledListActivity`) and resend it in full with just your changes applied. | |
| restrictMessagesToFollowing | No | Only allow message activity from users you follow. |
Output Schema
| Name | Required | Description |
|---|---|---|
| user | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the annotations by detailing login requirements, partial-update behavior, full-replace exceptions, server-side validation quirks (rowOrder, timezone, profileColor), and the dangerously surprising advancedScoring reordering hazard. It also warns about silent deletion of custom lists and unrevertable changes, providing crucial safety context that annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that front-loads the purpose and uses parentheticals for critical warnings. It is reasonably concise given the complexity, but the long sentence with nested clauses ('...PLUS ... a third...') could be more readable if restructured into bullets or shorter sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 16 parameters, nested objects, and no required parameters, the description covers all essential non-obvious behaviors: login scope, partial-update semantics, full-replace exceptions, and dangerous side effects. The output schema handles return values, and the description even flags experimental fields and validation failures, making it complete for safe usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage and highly detailed property descriptions, the schema already does heavy lifting. The tool description adds cross-cutting semantics like 'most fields are a true partial update' and highlights the three full-replace exceptions, which helps the agent understand parameter behavior at a glance, though much of this is also present in individual schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with '[Requires login] Update settings on the authenticated user's own AniList account' which clearly identifies the verb (update), resource (user account settings), and scope (own account). It lists the types of settings, distinguishing it from read-only sibling tools like get_authorized_user and get_user_profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: requires login, targets the authenticated user's own settings, and states the 'only set the fields you want to change' partial-update rule. It explicitly warns about non-partial exceptions (notificationOptions, disabledListActivity, customLists) and advises fetching current state first, but does not name alternative tools for when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
The set uses distinct resource prefixes (media, user, studio, thread, activity, list, etc.) and each tool's description explicitly contrasts it with nearest neighbors (e.g., get_user_activity vs get_user_recent_activity vs search_activity). A few convenience shortcuts overlap (get_studio's name search vs search_studio; get_full_user_info vs get_user_profile + get_user_stats) but are clearly cross-referenced.
All names are snake_case and follow a consistent get_/search_ prefix for reads. Mutation verbs are inconsistent across domains (post_ for activities/threads, add/update/remove for list entries, delete_ for activity/thread/comment, toggle_ for favourites/follow), though each is internally consistent per resource.
49 tools is well beyond the 25-tool threshold where tool sets become heavy. While the breadth reflects AniList's many domains, the count will force agents to spend significant effort choosing among many similarly-prefixed get_/search_ tools.
The surface covers CRUD for list entries, activities, threads/comments, plus search for media/users/characters/staff/studios, statistics, notifications, and auth. Minor gaps include no ability to like/unlike content, vote on recommendations, or submit media edits, but these are edge features.
Maintenance
Related MCP Connectors
Access and interact with anime and manga data seamlessly. Retrieve detailed information about your…
AniList MCP — wraps AniList GraphQL API (free, no auth)
Accurate anime-song (anison) database for AI-built playlists — export to Spotify/Apple/YT Music
Related MCP Servers
- AlicenseBqualityCmaintenanceAniList MCP server for accessing AniList API data4412385MIT
- AlicenseAqualityCmaintenanceA smart AniList integration for the Model Context Protocol that provides AI assistants with tools for searching media, managing watchlists, and analyzing user anime or manga tastes. It goes beyond basic API calls by offering personalized recommendations, taste comparisons, and natural language profile summaries.551413MIT
- FlicenseAqualityDmaintenanceEnables AI assistants to interact with MyAnimeList user accounts for list management, progress tracking, and personalized anime recommendations.11
- AlicenseAqualityAmaintenanceMCP server for MyAnimeList that enables searching anime/manga, getting details, rankings, seasons, characters, reviews, and user profiles without authentication, and managing personal anime/manga lists with authentication (token required).543852MIT
Appeared in Searches
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/Grinv/anilist-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server