Skip to main content
Glama
nochinsky

anilist

by nochinsky

AniList MCP server

CI

Manage your AniList anime and manga library through a standard MCP server. Works with compatible AI harnesses independently of the model provider. Local stdio is the default; no hosted service, plugin registration or database is needed.

Install and connect

Requires Node.js 22.19+. Install the compiled GitHub release with npm:

npm install --global https://github.com/nochinsky/anilist-manager-mcp/releases/download/v1.0.0/anilist-manager-mcp-1.0.0.tgz
anilist-mcp setup

Paste your AniList access token at the hidden prompt. Setup verifies it against your AniList profile and saves it outside the project. It never modifies your library. On Windows the token is encrypted with DPAPI; on macOS/Linux it is stored in an owner-only file. You can alternatively provide ANILIST_ACCESS_TOKEN using your harness's private environment settings.

Choose your installed harness:

# Codex
anilist-mcp connect codex

# Claude Code
anilist-mcp connect claude

# Pi coding agent (current version with built-in MCP)
anilist-mcp connect pi

Each command registers the local server named anilist using the actual installed Node and server paths. It uses that harness's official mcp add command and its user-level configuration. If an anilist entry already exists, the harness may replace it or ask you to resolve it. Restart/reload the harness, enable its MCP tools, and ask: “Use AniList to show my profile and currently watching list.”

The harness starts the server for you. No extra running terminal, tunnel or second login is needed. All three harnesses must be installed separately; this package does not install or change your model provider.

If the command is not found after global installation, reopen your terminal and check your npm global bin directory is on PATH.

Other install options

Install directly from the tagged GitHub source (requires Git and allows the build hook):

npm install --global github:nochinsky/anilist-manager-mcp#v1.0.0

Or develop from a checkout:

git clone https://github.com/nochinsky/anilist-manager-mcp.git
cd anilist-manager-mcp
npm ci
npm run setup
npm run build
node dist/cli.js connect codex

Publishing to the npm registry is optional. The release archive and GitHub install already work with npm. This project has not been published to the registry; do not use npx anilist-manager-mcp expecting a registry release.

Related MCP server: mal-mcp

Manual harness configuration

If you prefer editing configuration yourself, these commands print snippets containing this installation's exact paths, with no tokens:

anilist-mcp config codex
anilist-mcp config claude
anilist-mcp config pi
anilist-mcp config json

Harness

Where to put the generated settings

Check the connection

Codex

Merge the generated TOML into ~/.codex/config.toml

codex mcp list, then /mcp in a new session

Claude Code

Merge the generated mcpServers entry into private user configuration (~/.claude.json), preserving other entries; using connect claude is easier

claude mcp get anilist, then /mcp

Pi

Merge the generated mcpServers entry into ~/.pi/agent/mcp.json

pi mcp list, then /mcp or /reload

Other stdio MCP client

Its local MCP settings; use the JSON entry's command and args

The client's tool-discovery view

~ means your home directory. The config generator handles Windows paths and spaces. It registers node directly so npm banners cannot contaminate the MCP protocol. The current Pi built-in MCP requires no adapter; older Pi versions should be upgraded or connected through a separately installed MCP adapter.

Official setup references: Codex, Claude Code, Pi.

Tools

Read

Write

get_my_anilist_profile

add_anime_to_list

get_my_anime_list

add_manga_to_list

get_my_manga_list

update_anime_progress

get_currently_watching

update_manga_progress

search_anime

update_anime_status

search_manga

update_anime_score

get_anime_details

update_manga_score

get_manga_details

update_list_entry

get_my_anime_statistics

remove_list_entry

bulk_update_entries

update_list_entry also handles manga status, volume progress, repeat count, priority, privacy and notes. It sends only the fields explicitly requested. Add refuses an existing entry. Update/delete verify the authenticated owner's existing entry and media ID.

Examples:

  • “Find the different Fullmetal Alchemist versions before adding one.”

  • “Add this verified anime ID to planning.”

  • “Set my anime progress to five episodes.”

  • “Set this manga to paused and show the updated entry.”

  • “Read all pages of my library and ratings, then recommend five anime I haven't watched.”

  • “Preview deleting this entry, including the score, progress and notes that would be removed.”

Recommendations are produced by your connected LLM using library, statistics and search results. The server does not call another model API or require a model-provider API key of its own.

Changes and confirmation

Ordinary requested single-entry additions/updates execute directly. Set dry_run: true to validate and preview any write without executing it.

Deletion, bulk updates, progress reductions, dropping an entry, clearing an existing score, replacing existing notes and making a private entry public require a preview and confirmation:

  1. The first tool call returns the exact preview and confirmation_id, with no write.

  2. The agent shows it and asks you to confirm inside the harness.

  3. After your confirmation it repeats the identical arguments with confirmation_id and confirmed: true.

The trusted harness/agent obtains the real human confirmation. The server validates the preview, ownership and current entry, expires previews after ten minutes and permits only one use. Configure the harness's tool approval controls as desired; write annotations are included. There is no browser confirmation page in local stdio mode.

Input rules

  • Status: CURRENT, PLANNING, COMPLETED, PAUSED, DROPPED, REPEATING.

  • Use verified AniList media IDs, not MyAnimeList or list-entry IDs. Write selectors accept exactly one of media_id/title. Ambiguous titles return candidates for you to choose.

  • Progress is an absolute episode/chapter count, never a delta. Manga volumes are separate. Known totals are checked.

  • Scores use your profile's actual POINT_100, POINT_10_DECIMAL, POINT_10, POINT_5 or POINT_3 format. Zero clears a score; conversions are never guessed.

  • Follow hasNextPage to fetch complete lists. Page size is at most 50; AniList's Page depth limit is 5000 entries. Narrow the status/search filter if needed and do not describe an incomplete fetch as the full library.

  • Bulk updates support up to five existing entries with separate explicit patches. They are sequential, not atomic, and stop at the first failure with completed/failed/skipped results.

  • A network failure may leave a write's result unknown. Read the affected entry before retrying. Mutations are never automatically retried. AniList may apply its own server-side save behavior.

Tokens and security

Your token stays in the local server process and is sent only to AniList using an Authorization header. It is never returned as a tool result or written into generated host configuration. Do not paste tokens into conversations or command arguments.

Saved credentials live outside the repository:

  • Windows: %LOCALAPPDATA%\AniListManagerMCP\credentials.dpapi (DPAPI CurrentUser).

  • macOS/Linux: ~/.config/anilist-manager-mcp/credentials.secrets.json (file 0600, directory 0700; not OS encryption).

ANILIST_ACCESS_TOKEN overrides the saved token. Set it using your harness's secret/environment UI rather than sharing a token-bearing config file. If that explicit token fails, the server never silently falls back to another account. Expired/revoked tokens return REAUTH_REQUIRED: replace the token using setup or the environment and reconnect the harness.

An AniList application client ID/client secret is different from an account access token. If you need to obtain a token through your own OAuth application instead of importing one, source-checkout commands npm run setup:oauth and npm run auth implement the authorization-code flow and loopback callback. AniList does not support refresh tokens.

Local stdio exposes no network listener. Access is controlled by your OS account and trusted harness. The optional authenticated HTTP transport is separate and keeps its own OAuth and browser approval protections. This is a personal, single-account server.

Requests are serialized with at least 2.1 seconds between starts for AniList's documented temporary 30/minute rate limit, and Retry-After/reset headers are honored. Full-library reads can take time. Raw upstream errors, token-bearing headers and request payloads are never logged.

Verification

# Installed release: real MCP process plus all nine read tools against your account
anilist-mcp smoke

# No token required: verify real MCP startup and discovery of all 19 tools
anilist-mcp smoke --discovery-only

Smoke checks never write to AniList and return a nonzero exit status on failure. They do not print actual account data or access tokens.

From a checkout:

npm run check
npm test
npm run test:package
npm run inspector

The suite blocks external requests and tests all tools, OAuth/HTTP protections, token import, vault storage, validation, confirmations and partial failures. A real stdio subprocess uses a test-only mocked AniList endpoint. The package check installs the actual release tarball in a clean directory with lifecycle scripts disabled, then verifies CLI/configuration and real MCP discovery. CI runs Node 22/24 on Windows, Linux and macOS.

Live public anime/manga searches and details have been checked successfully. Automated writes use mocks. Real personal-account reads and writes require each user's token; no live account mutations were made during development. Host setup commands follow official documentation; no claim is made that every LLM or harness version has been tested.

See release maintenance for packaging and optional future npm publication. The project uses TypeScript, native fetch, Zod and the official @modelcontextprotocol/sdk 1.x package. License: MIT.

Available Tools

19 tools
add_anime_to_listadd anime to listA
Destructive

Add verified anime only if no entry exists. Explicit status required; optional fields use the account's score format. Existing entries are never overwritten by add. Executes ordinary requested single-entry changes directly. Destructive/bulk changes return a preview; ask the user to confirm, then repeat with confirmation_id and confirmed:true. Set dry_run:true to preview any change. Omitted fields are preserved.

NameRequiredDescriptionDefault
scoreNo
titleNoResolves only if the search returns exactly one result. Otherwise returns candidates; ask the user to choose a media_id.
statusYes
dry_runNoValidate and preview requested changes without executing them.
media_idNoVerified AniList media ID, not MyAnimeList ID or list-entry ID. Prefer this after search.
progressNo
confirmedNoLocal stdio only: true after the human explicitly confirmed the displayed destructive/bulk preview in the harness. Ignored by HTTP browser approval.
confirmation_idNoID from this exact write preview after explicit human approval. Never fabricate approval.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With destructiveHint=true and idempotentHint=false already declared, the description adds substantial context beyond annotations: non-overwrite semantics, that omitted fields are preserved, that score follows the account's format, and the full preview/confirmation handshake including 'Never fabricate approval' on confirmation_id. It also reconciles the destructive hint with the direct-execution path for ordinary single-entry adds.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core constraint, then the execution/confirmation model, then the dry_run escape hatch. Dense and largely waste-free, though the dry_run sentence slightly overlaps the schema's own dry_run description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter destructive write tool with no output schema, the definition covers safety, confirmation, and field-preservation behavior. It stops short of stating auth requirements or what happens when neither media_id nor a unique title resolution is supplied beyond what the schema already notes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 63%, and the description compensates on the highest-risk fields: status is mandatory, score uses the account's format (beyond the raw 0-100 bound in the schema), and confirmed/confirmation_id are bound to the described preview flow. Remaining params (progress, media_id, title) are left to schema descriptions, which do cover them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Add anime') and immediately narrows scope with 'only if no entry exists' and 'Existing entries are never overwritten by add.' That negative clause implicitly draws the boundary against update_list_entry/update_anime_status, so an agent can tell add from update without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to-use mechanics: explicit status required, dry_run:true to preview, and the confirm-then-repeat-with-confirmation_id loop for destructive/bulk changes. It never names the specific sibling to use instead when an entry already exists, so the alternative is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_manga_to_listadd manga to listA
Destructive

Add verified manga only if no entry exists. Explicit status required; optional fields use the account's score format. Existing entries are never overwritten by add. Executes ordinary requested single-entry changes directly. Destructive/bulk changes return a preview; ask the user to confirm, then repeat with confirmation_id and confirmed:true. Set dry_run:true to preview any change. Omitted fields are preserved.

NameRequiredDescriptionDefault
scoreNo
titleNoResolves only if the search returns exactly one result. Otherwise returns candidates; ask the user to choose a media_id.
statusYes
dry_runNoValidate and preview requested changes without executing them.
media_idNoVerified AniList media ID, not MyAnimeList ID or list-entry ID. Prefer this after search.
progressNo
confirmedNoLocal stdio only: true after the human explicitly confirmed the displayed destructive/bulk preview in the harness. Ignored by HTTP browser approval.
confirmation_idNoID from this exact write preview after explicit human approval. Never fabricate approval.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the destructiveHint=true annotation: never overwrites existing entries, preview/confirmation_id/confirmed flow, and dry_run previewing. The claim that ordinary single-entry changes execute directly is slightly in tension with a blanket destructive hint, and there is mild redundancy with the schema's confirmed/confirmation_id descriptions, keeping it below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core constraint (add only, no overwrite), then the safety flow. Dense but each sentence carries operational meaning; the confirmation sentences are somewhat long and restate schema parameter descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, 8 parameters, and a mutation of a user's list — the description covers the safety-critical pieces (preview, confirmation, dry_run, non-overwrite, required status). It stops short of describing what a preview result looks like or what the title-resolution failure path returns beyond the schema note.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 63% schema coverage, the description compensates by stating that status is mandatory, that score follows the account's format, and that omitted fields are preserved (an important semantic not in the schema). confirmed/confirmation_id/dry_run guidance duplicates schema text rather than adding to it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Add verified manga only if no entry exists" names a specific verb and resource, and the 'no entry exists' clause plus 'Existing entries are never overwritten by add' clearly delineates it from add_anime_to_list and update_list_entry. An agent can pick this tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear when-to-use conditions (verified manga, no existing entry, status required) and an explicit branch for destructive/bulk changes with a confirm-then-retry procedure. It does not explicitly name update_list_entry as the alternative for existing entries, so routing is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulk_update_entriesbulk update entriesA
Destructive

Update 1–5 existing entries, each with explicit media ID, media type and requested patch. All are checked before confirmation. After human approval, revalidates and writes sequentially, stops at first failure and reports completed/failed/skipped entries. Not an atomic transaction. Executes ordinary requested single-entry changes directly. Destructive/bulk changes return a preview; ask the user to confirm, then repeat with confirmation_id and confirmed:true. Set dry_run:true to preview any change. Omitted fields are preserved.

NameRequiredDescriptionDefault
dry_runNoValidate and preview requested changes without executing them.
entriesYes
confirmedNoLocal stdio only: true after the human explicitly confirmed the displayed destructive/bulk preview in the harness. Ignored by HTTP browser approval.
confirmation_idNoID from this exact write preview after explicit human approval. Never fabricate approval.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructiveHint=true annotation: discloses pre-write validation, post-approval revalidation, sequential writes, stop-at-first-failure, per-entry completed/failed/skipped reporting, and explicitly states it is 'Not an atomic transaction' — a critical partial-failure property an agent could not infer otherwise.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Six dense sentences, front-loaded with what is updated and followed by execution semantics and the approval flow. Every sentence carries information, though the confirmation/dry_run guidance is packed tightly enough to warrant a single careful read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, no-output-schema bulk write, the description covers everything an agent needs: entry cap, validation ordering, non-atomicity, failure reporting shape ('completed/failed/skipped'), the approval gate, and the preview escape hatch. Return-value ambiguity is resolved inline despite the missing output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, so most parameter meaning is already structured; the description still adds real value by explaining the preview→confirmation_id→confirmed:true handshake and the PATCH-like rule that 'Omitted fields are preserved.' It does not elaborate on the entries array contents beyond media ID/type/patch, which the schema already covers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with explicit scope: 'Update 1–5 existing entries, each with explicit media ID, media type and requested patch.' The '1–5' bound and 'bulk' framing separate it from single-entry siblings like update_list_entry, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete workflow routing: ordinary single-entry changes execute directly, destructive/bulk changes return a preview requiring user confirmation and a repeat call with confirmation_id and confirmed:true, and dry_run previews anything. It never names sibling tools as alternatives and 'executes ordinary requested single-entry changes directly' is ambiguous against update_list_entry, which keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_anime_detailsget anime detailsA
Read-onlyIdempotent

Verify an AniList anime ID; read episodes, genres, description, existing entry and community recommendations. Recommendations are candidates: check library membership before suggesting.

NameRequiredDescriptionDefault
media_idYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, openWorld, non-destructive, so the safety bar is low. The description adds real behavioral context beyond that: that the response bundles in the user's existing list entry and community recommendations, and a caution about treating recommendations as candidates rather than facts.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and the return contents, followed by the recommendation caveat. The field list is slightly dense but nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the work of naming what comes back (episodes, genres, description, entry, recommendations). The main omission is error behavior for an invalid or unknown media_id, which matters for a verify-style lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and 0% schema description coverage, so the description must carry the load. It does identify media_id as an AniList anime ID, which is the key semantic, but adds no format, range, or validity detail (e.g., positive integer, what happens on an unknown ID).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (verify/read) and resource (an AnimeList anime), and enumerates the fields returned: episodes, genres, description, existing entry, recommendations. It implicitly distinguishes itself from search_anime by framing the input as an existing AniList ID to verify, but never names the sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Verify an AniList anime ID' implies you must already have an ID (i.e., use search_anime first), but this is left to inference. The one explicit guideline, that recommendations are candidates and library membership should be checked first, is genuinely useful but only covers post-call handling, not when to choose this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_currently_watchingget currently watchingA
Read-onlyIdempotent

Read a paginated anime list. CURRENT is watching; set include_repeating=true to also return the separate REPEATING page for rewatches. Follow both pageInfo values.

NameRequiredDescriptionDefault
pageNo
per_pageNo
include_repeatingNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this a safe, idempotent, non-destructive read with openWorldHint, so the description's job is lighter. It adds genuinely useful behavioral context — that the result set is split into separate CURRENT and REPEATING pages, each with its own pageInfo, and that both must be followed. It does not disclose auth requirements or maximum page limits, keeping this at an adequate rather than rich level.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no waste; the pagination caveat and the include_repeating instruction are front-loaded after the one-line purpose. Every sentence adds decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter read tool with no output schema, the description covers the critical operating detail — split pagination with two pageInfo cursors — that an agent would otherwise get wrong. The main remaining gap is silent page/per_page parameters, but overall an agent could call this correctly from the description plus schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden, and it does explain the semantically tricky parameter (include_repeating) with its default-off behavior and what it adds. However, page and per_page are never mentioned, and their non-obvious constraints (per_page caps at 50, page at 10000) go undiscussed. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Read a paginated anime list' scoped to the CURRENT watching status, which distinguishes it from the broader get_my_anime_list sibling. It doesn't explicitly name that sibling as the alternative, but the status scoping is clear enough for an agent to tell the tools apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the status scoping: use this when you want currently-watching entries, not completed/planned. The include_repeating flag is given a condition ('to also return the separate REPEATING page for rewatches'), but the description never names an explicit alternative for other statuses, so the when-not guidance is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_manga_detailsget manga detailsA
Read-onlyIdempotent

Verify an AniList manga ID; read chapter/volume counts, genres, existing entry and community recommendations.

NameRequiredDescriptionDefault
media_idYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the description's added value is in disclosing the payload: chapter/volume counts, genres, the caller's existing entry, and community recommendations — the last two hint at user-scoped data and external aggregation. It omits what happens for an unknown/private ID, which matters given the word "verify".

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with a semicolon-delimited payload list; every clause carries information an agent can act on, and there is no boilerplate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description is the only signal about return contents and it does list them adequately. However, for an openWorld read that can fail on invalid IDs or touch user-scoped data, it gives no error or auth context, so it is adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter has 0% schema description coverage, so the description must carry it, and "AniList manga ID" does constrain the opaque integer to a specific ID namespace. It does not say where to source that ID (search_manga) or that it must be a manga rather than an anime ID, leaving a small but real gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: it names the AniList manga ID and enumerates what is read (chapter/volume counts, genres, existing entry, recommendations). That separates it from get_anime_details and the list-mutation siblings. It falls short of 5 only because sibling differentiation is implicit rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Verify an AniList manga ID" implies the use case (resolving/validating an ID before calling add_manga_to_list or update_manga_progress), but the agent must infer that. There is no explicit when-to-use, no statement that search_manga should be used first to obtain an ID, and no exclusion of any sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_anilist_profileget my anilist profileA
Read-onlyIdempotent

Get the connected owner, AniList user ID, profile URL and scoreFormat. Read before score changes; never assume a 10-point scale.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and openWorld, so the safety profile is covered. The description adds one genuinely useful behavioral fact beyond that: the account's scale is not necessarily 10-point, so callers must not hardcode. It says nothing about what happens if no AniList account is connected (error vs null), which is the main unknown for an auth-adjacent tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with what is returned, then the usage constraint. Every clause carries information; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully enumerates the four returned fields, which is the right burden to carry. The only gap is failure behavior when no owner is connected, though for a trivial zero-argument read that is a minor omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate and the 4 baseline applies. No parameter guidance is needed or missing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Get') plus resource ('the connected owner... AniList profile') and it enumerates exactly what comes back: owner, AniList user ID, profile URL, scoreFormat. It doesn't name or contrast a sibling (e.g. get_my_anime_statistics), so the differentiation is only implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete trigger — read this before any score change — and an explicit warning not to assume a 10-point scale, which is real decision guidance. It stops short of naming the alternative tools (update_anime_score / update_manga_score) it gates.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_anime_listget my anime listA
Read-onlyIdempotent

Read one page of the owner anime library, including status, score, episodes, genres and notes. Follow pageInfo.hasNextPage until false for complete analysis and unwatched recommendations.

NameRequiredDescriptionDefault
pageNo
statusNo
per_pageNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations handle safety constraints like readOnlyHint, destructiveHint, and idempotency. The description adds critical behavioral context by defining the required iterative workflow for full data retrieval, thereby significantly enhancing utility 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The two sentences are perfectly structured, with the first defining the core function and the second detailing the critical operational behavior (pagination). Every part of the definition is necessary and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of an output schema, the description is highly complete. It not only tells the agent what data it will receive but also how to manage the entire dataset using the pagination mechanism.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, requiring the description to carry the weight. It specifies the high-value data fields returned (status, score, episodes, genres), which informs the agent about the semantics of the data retrieved via the parameters, meeting the minimum viable standard for low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the function (Read one page of the owner anime library), the specific data contained (status, score, episodes, genres, and notes), and distinguishes this list retrieval from detailed lookup tools like get_anime_details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a complete operational guideline by instructing the agent to follow the pagination mechanism ('Follow pageInfo.hasNextPage until false'). This defines the intended usage pattern for comprehensive library analysis, which is crucial for an iterative list-fetching tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_anime_statisticsget my anime statisticsA
Read-onlyIdempotent

Read anime totals, mean score, formats, statuses, genres and tags to infer preferences. Combine with all pages of the anime library to recommend unseen titles and explain why each fits.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already establish that this is a read-only, idempotent, non-destructive, open-world operation. The description adds the data domains and recommendation-oriented purpose, but it does not clarify return structure, aggregation scope, or edge cases; with rich annotations, this is useful but still moderate transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences: the first front-loads what data is read, and the second explains the intended combined use. There is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only statistics tool with no output schema, the description is largely complete: it enumerates the stat categories and states how to use them with the library. It could still specify whether statistics cover all-time or all statuses, but the core operational context is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description does not need to explain input semantics, and it correctly focuses on what the tool reads and how to combine it with another tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Read') and names the exact aggregate data returned: totals, mean score, formats, statuses, genres, and tags. It implicitly distinguishes itself from list-oriented siblings by emphasizing statistics and later saying to combine with the anime library pages, though it does not name an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear use case: infer preferences and combine with all pages of the anime library to recommend unseen titles. This helps an agent understand it is not a replacement for the library listing tool, but it stops short of explicit when-not-to-use guidance or naming the sibling to use for entries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_manga_listget my manga listA
Read-onlyIdempotent

Read one page of the owner manga library, including chapter/volume progress, scores and genres. Follow hasNextPage for the complete library.

NameRequiredDescriptionDefault
pageNo
statusNo
per_pageNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already establish read-only, idempotent, open-world, and non-destructive behavior. The description adds useful behavioral context by saying it returns one page and that callers should follow hasNextPage, and it lists returned fields such as chapter/volume progress, scores, and genres. It does not cover auth or rate limits, but the annotation coverage lowers the burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no wasted language. The core purpose is front-loaded, and the pagination instruction follows immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description helpfully names returned fields and pagination behavior. However, it leaves the undocumented status and per_page parameters unexplained, so it is only minimally complete for a tool with three parameters at 0% schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it only hints at the page parameter through 'one page' and 'hasNextPage.' It does not explain the status filter or its enum values, nor per_page, its default, or its maximum.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: reading one page of the owner's manga library, including progress, scores, and genres. This clearly distinguishes it from search_manga and from get_my_anime_list, though it does not explicitly name any sibling tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'owner manga library' and the pagination instruction 'Follow hasNextPage for the complete library.' However, there is no explicit guidance on when to choose this over search_manga or get_manga_details, nor any stated exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_list_entryremove list entryA
Destructive

Permanently delete the connected owner list entry, including score, progress and notes; the anime/manga itself is not deleted. Always require explicit human approval of the exact preview. Executes ordinary requested single-entry changes directly. Destructive/bulk changes return a preview; ask the user to confirm, then repeat with confirmation_id and confirmed:true. Set dry_run:true to preview any change. Omitted fields are preserved.

NameRequiredDescriptionDefault
typeYes
titleNoResolves only if the search returns exactly one result. Otherwise returns candidates; ask the user to choose a media_id.
dry_runNoValidate and preview requested changes without executing them.
media_idNoVerified AniList media ID, not MyAnimeList ID or list-entry ID. Prefer this after search.
confirmedNoLocal stdio only: true after the human explicitly confirmed the displayed destructive/bulk preview in the harness. Ignored by HTTP browser approval.
confirmation_idNoID from this exact write preview after explicit human approval. Never fabricate approval.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, and the description goes meaningfully beyond them: it names exactly what is destroyed (score, progress, notes), confirms the media record survives, and documents the mandatory preview/confirmation handshake and the fact that omitted fields are preserved. That is the extra context an agent needs before invoking a destructive tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five short sentences, front-loaded with the destructive scope before the procedural detail. Every sentence carries information, though the "ordinary requested single-entry changes" clause adds a slightly confusing distinction rather than clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter destructive tool with rich annotations and no output schema, the description covers impact, approval flow and preview mechanics well. The one residual gap is that it never resolves whether a single-entry delete counts as "ordinary" (executed directly) or "destructive" (preview required), leaving the agent to infer when confirmation is mandatory.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 83%, so the bar is a baseline 3; the description nonetheless explains the dry_run preview behavior and the confirmed/confirmation_id retry protocol, which the schema only labels tersely. It does not clarify the title-vs-media_id selection path, but the schema covers that inline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Permanently delete the connected owner list entry") and immediately scopes what is not affected ("the anime/manga itself is not deleted"). This clearly separates it from update_list_entry, update_anime_score and the other mutation siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete workflow: always require explicit human approval of the exact preview, use dry_run:true to preview, and re-issue with confirmation_id plus confirmed:true after approval. The only weakness is ambiguity between "executes ordinary requested single-entry changes directly" and "destructive changes return a preview" — a single-entry removal arguably falls in both buckets, and no sibling alternative is named for bulk removals.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_animesearch animeA
Read-onlyIdempotent

Search anime candidates by title or browse by genre/year/popularity. Returns verified AniList IDs and current list entries. For recommendations first analyze the complete library, then exclude watched/current/repeating/dropped titles; never silently choose an ambiguous title.

NameRequiredDescriptionDefault
pageNo
sortNo
yearNo
genreNo
queryNo
per_pageNo
include_adultNo
exclude_media_idsNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare read-only, idempotent, open-world, non-destructive behavior. Beyond that, the description adds useful context about returning verified AniList IDs and current list entries, and warns against silently choosing ambiguous titles; pagination and rate-limit behavior remain unmentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no wasted language: purpose first, return values second, and recommendation workflow third. The most important routing and ambiguity constraints are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's purpose, return content at a high level, and recommendation workflow, but with eight parameters at 0% schema coverage and no output schema, more detail on pagination, adult-content filtering, and return shape would be needed for full completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It usefully maps title, genre, year, popularity, and exclusion of watched/current/repeating/dropped titles to relevant parameters, but it leaves page, per_page, include_adult, and sort enum values unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource, names the search modes (title, genre, year, popularity), and clarifies that results are candidate anime rather than detail records. This distinguishes it from sibling tools like get_anime_details and search_manga without requiring schema inspection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear recommendation workflow: analyze the complete library first, then exclude watched/current/repeating/dropped titles. It does not explicitly name alternatives such as get_anime_details or search_manga, but the usage context is strong enough for an agent to know when this search tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_mangasearch mangaB
Read-onlyIdempotent

Search manga candidates or browse by genre/year. Returns IDs, chapter/volume counts and current list entries. Present ambiguous matches for the user to choose.

NameRequiredDescriptionDefault
pageNo
sortNo
yearNo
genreNo
queryNo
per_pageNo
include_adultNo
exclude_media_idsNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds return-field information and a disambiguation instruction, which is genuine added value. It stays silent on pagination behavior (page/per_page defaults), adult-content filtering, and result-size limits, so it is helpful but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core capability, followed by return contents and the one workflow rule. No filler and nothing repeated from the name or title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description does cover the key return fields, which is the most important gap filled. But with 8 undocumented parameters, no required-parameter guidance, and no mention of pagination or adult filtering, an agent still has to guess at invocation details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 8 parameters, so the description must carry the burden. It only surfaces genre, year and an implied query string; sort, page, per_page, include_adult and exclude_media_ids are entirely unexplained, including their defaults and filtering semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search manga candidates') and names the two modes: query search vs browsing by genre/year. It also discloses what comes back (IDs, chapter/volume counts, current list entries). It does not explicitly distinguish itself from get_manga_details, but 'candidates' implies the pre-detail discovery step.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The line 'Present ambiguous matches for the user to choose' gives a useful workflow rule, and 'browse by genre/year' implies when the filter mode applies. However, there is no explicit guidance on when to call this vs get_manga_details, nor on combining query with genre/year, nor on when to page through results.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_anime_progressupdate anime progressA
Destructive

Set absolute episodes watched on an existing anime entry. Checks known totals. Does not request status, score, dates or other field changes. Executes ordinary requested single-entry changes directly. Destructive/bulk changes return a preview; ask the user to confirm, then repeat with confirmation_id and confirmed:true. Set dry_run:true to preview any change. Omitted fields are preserved.

NameRequiredDescriptionDefault
titleNoResolves only if the search returns exactly one result. Otherwise returns candidates; ask the user to choose a media_id.
dry_runNoValidate and preview requested changes without executing them.
media_idNoVerified AniList media ID, not MyAnimeList ID or list-entry ID. Prefer this after search.
progressYes
confirmedNoLocal stdio only: true after the human explicitly confirmed the displayed destructive/bulk preview in the harness. Ignored by HTTP browser approval.
confirmation_idNoID from this exact write preview after explicit human approval. Never fabricate approval.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations (destructiveHint=true, idempotentHint=false) by explaining the two-phase write: ordinary single-entry changes execute directly, destructive/bulk changes return a preview that requires confirmation_id plus confirmed:true. It also discloses that omitted fields are preserved and that totals are validated, which is exactly the mutation-safety context annotations can't express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Seven short, front-loaded sentences that each carry information. Minor redundancy between the preview sentence and 'Set dry_run:true to preview any change', and the 'Destructive/bulk' phrasing is slightly odd for a single-entry tool when bulk_update_entries is a sibling.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-param mutation with no output schema, the description covers the execution model, the confirmation gate, dry-run, and field preservation — everything needed to call it safely. Only the failure mode when progress exceeds known totals is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 83%, so most params are already documented, but the undocumented `progress` is compensated by 'Set absolute episodes watched' and 'Checks known totals'. The dry_run and confirmation flow is reinforced in prose beyond the schema descriptions; only the interaction between progress and episode totals (error vs clamp) remains unstated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Set absolute episodes watched on an existing anime entry') and pins down the key semantic — absolute set, not increment — which is exactly what distinguishes it from update_manga_progress and bulk_update_entries in the sibling list. An agent can route to it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly excludes other field changes ('Does not request status, score, dates or other field changes'), which implicitly routes to update_anime_score/update_anime_status, and lays out the preview→confirm→repeat workflow. It stops short of naming those siblings explicitly, so the routing is inferential rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_anime_scoreupdate anime scoreA
Destructive

Set an existing anime entry score using the owner's scoreFormat (POINT_100, POINT_10_DECIMAL, POINT_10, POINT_5 or POINT_3); zero clears. No automatic score conversion. Executes ordinary requested single-entry changes directly. Destructive/bulk changes return a preview; ask the user to confirm, then repeat with confirmation_id and confirmed:true. Set dry_run:true to preview any change. Omitted fields are preserved.

NameRequiredDescriptionDefault
scoreYes
titleNoResolves only if the search returns exactly one result. Otherwise returns candidates; ask the user to choose a media_id.
dry_runNoValidate and preview requested changes without executing them.
media_idNoVerified AniList media ID, not MyAnimeList ID or list-entry ID. Prefer this after search.
confirmedNoLocal stdio only: true after the human explicitly confirmed the displayed destructive/bulk preview in the harness. Ignored by HTTP browser approval.
confirmation_idNoID from this exact write preview after explicit human approval. Never fabricate approval.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive, non-idempotent, open-world; the description adds the important operational detail they cannot: no automatic score conversion between formats, zero clears the score, omitted fields are preserved, and the preview-then-confirm handshake for destructive writes. That is the extra context a mutating tool needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, front-loaded with the score-format rule that an agent most needs. Slightly information-packed (format scales, confirmation flow, dry_run, field preservation in one block) but nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive single-field mutation with no output schema and 6 parameters, the description covers value semantics, preview/confirm workflow, and preservation of untouched fields. It stops short of stating auth/scope requirements or what the preview response contains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 83%, so most parameters are already documented, but the required 'score' field has no schema description and the prose compensates with scale/format semantics and zero-clears behavior. It does not explain how 'title' resolution interacts with 'media_id' beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Set an existing anime entry score') and pins down the value semantics (scoreFormat scales, zero clears). It does not explicitly route away from the generic sibling update_list_entry or toward update_manga_score, but the anime-score scope is unambiguous from the sentence itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear operating rule: ordinary single-entry changes execute directly, destructive/bulk changes return a preview that must be confirmed and repeated with confirmation_id/confirmed:true, and dry_run previews anything. What is missing is explicit guidance on when to prefer this over update_anime_progress, update_anime_status, or update_list_entry.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_anime_statusupdate anime statusA
Destructive

Set only the existing anime entry status: CURRENT, PLANNING, COMPLETED, PAUSED, DROPPED or REPEATING. Episode progress is not inferred. Executes ordinary requested single-entry changes directly. Destructive/bulk changes return a preview; ask the user to confirm, then repeat with confirmation_id and confirmed:true. Set dry_run:true to preview any change. Omitted fields are preserved.

NameRequiredDescriptionDefault
titleNoResolves only if the search returns exactly one result. Otherwise returns candidates; ask the user to choose a media_id.
statusYes
dry_runNoValidate and preview requested changes without executing them.
media_idNoVerified AniList media ID, not MyAnimeList ID or list-entry ID. Prefer this after search.
confirmedNoLocal stdio only: true after the human explicitly confirmed the displayed destructive/bulk preview in the harness. Ignored by HTTP browser approval.
confirmation_idNoID from this exact write preview after explicit human approval. Never fabricate approval.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, yet the description adds substantial context the annotations cannot: the preview-then-confirm protocol, 'Never fabricate approval' semantics, dry_run behavior, and 'Omitted fields are preserved'. Minor tension remains: annotations flag every call as destructive while the description says ordinary single-entry changes execute directly, so the agent may be unsure whether a simple status change also needs the confirm round-trip.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and the constraint that progress is untouched, then the confirm workflow. The six-value enum recital duplicates the schema enum and is the one sentence that doesn't fully earn its space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the hard parts for a 6-parameter mutation tool: preview/confirmation, dry-run, and field preservation, with no output schema to explain. It still doesn't describe what the success response or the preview payload contains, leaving the agent to guess what it hands back after the confirmed retry.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 83%, so the schema already explains title resolution, media_id, dry_run, confirmed and confirmation_id; the description mainly repeats the status enum and adds the 'category' meaning (status only, no progress). The valuable addition is linking confirmation_id to 'this exact write preview', but that workflow is largely for the bulk path rather than the required status parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Set ... the existing anime entry status') and enumerates the allowed values, making clear it touches status only. The clause 'Episode progress is not inferred' plus 'existing anime entry' distinguishes it from update_anime_progress, update_anime_score, and add_anime_to_list without opening their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational routing: ordinary single-entry changes execute directly, destructive/bulk changes return a preview that must be repeated with confirmation_id and confirmed:true, and dry_run:true previews anything. It does not explicitly name the sibling tools (update_anime_progress / update_anime_score / update_list_entry) as alternatives, so the agent must infer the boundary from 'only ... status'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_list_entryupdate list entryA
Destructive

Patch an existing anime or manga entry by verified media ID or unambiguous title. Supports status (including manga), score, absolute progress/volumes, repeat, priority, privacy and notes. Only patch fields explicitly requested. Executes ordinary requested single-entry changes directly. Destructive/bulk changes return a preview; ask the user to confirm, then repeat with confirmation_id and confirmed:true. Set dry_run:true to preview any change. Omitted fields are preserved.

NameRequiredDescriptionDefault
typeYes
titleNoResolves only if the search returns exactly one result. Otherwise returns candidates; ask the user to choose a media_id.
changesYes
dry_runNoValidate and preview requested changes without executing them.
media_idNoVerified AniList media ID, not MyAnimeList ID or list-entry ID. Prefer this after search.
confirmedNoLocal stdio only: true after the human explicitly confirmed the displayed destructive/bulk preview in the harness. Ignored by HTTP browser approval.
confirmation_idNoID from this exact write preview after explicit human approval. Never fabricate approval.

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=false, but the description adds the crucial nuance that ordinary single-entry changes execute directly while only destructive/bulk changes return a preview requiring confirmation_id + confirmed:true. It also discloses that omitted fields are preserved and that dry_run validates without executing — context the annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and target, then the field list, then the confirmation workflow — a sensible order with little waste. "Only patch fields explicitly requested" and "Omitted fields are preserved" restate the same guarantee from two angles, a minor redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter nested mutation tool with no output schema, the description covers execution vs. preview behavior, dry-run validation, field preservation, and the title-resolution caveat. It leaves the shape of the preview response and any auth/rate-limit constraints unstated, which is a modest remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 71%, and the description reinforces the semantics that matter most: progress/volumes are absolute rather than deltas, and only explicitly requested fields are patched. It also frames the confirmation_id/confirmed pairing as a workflow rather than two bare fields, adding meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("Patch an existing anime or manga entry") and enumerates the patchable fields, which separates it from add_anime_to_list and remove_list_entry. It does not, however, distinguish itself from the specialized siblings update_anime_progress, update_anime_score, and update_anime_status, so the agent must infer that this is the general-purpose path.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear procedural rule for the preview/confirm flow and for dry_run, which is genuinely useful. But it never says when to choose this tool over the narrower update_* siblings or bulk_update_entries, leaving the main routing decision to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_manga_progressupdate manga progressA
Destructive

Set absolute chapters read on an existing manga entry. Checks known totals. Does not request status, score, dates or other field changes. Executes ordinary requested single-entry changes directly. Destructive/bulk changes return a preview; ask the user to confirm, then repeat with confirmation_id and confirmed:true. Set dry_run:true to preview any change. Omitted fields are preserved.

NameRequiredDescriptionDefault
titleNoResolves only if the search returns exactly one result. Otherwise returns candidates; ask the user to choose a media_id.
dry_runNoValidate and preview requested changes without executing them.
media_idNoVerified AniList media ID, not MyAnimeList ID or list-entry ID. Prefer this after search.
progressYes
confirmedNoLocal stdio only: true after the human explicitly confirmed the displayed destructive/bulk preview in the harness. Ignored by HTTP browser approval.
confirmation_idNoID from this exact write preview after explicit human approval. Never fabricate approval.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and openWorldHint=true, but the description adds substantial context on top: the preview/confirm gating flow, dry_run semantics, and that omitted fields are preserved. It stops short of saying what happens when progress exceeds the known total (beyond 'Checks known totals') or what is returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then the exclusions, then the confirmation flow, then the dry_run escape hatch and the preservation rule. Sentences are tight and every one carries information, though the telegraphic style makes a couple of clauses ('Executes ordinary requested single-entry changes directly') slightly compressed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no output schema, this covers the key agent-relevant unknowns: how to preview, how confirmation is obtained, and that unmentioned fields are untouched. Return shape and over-total validation behavior are the remaining gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high (83%), yet the description still adds real meaning: 'absolute' clarifies that progress is a set value rather than a delta (the schema leaves progress undocumented), and it explains the confirmed/confirmation_id round trip. It does not clarify title-vs-media_id resolution in prose, though the schema covers that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb, resource and scope: 'Set absolute chapters read on an existing manga entry.' It also excludes out-of-scope behavior ('Does not request status, score, dates or other field changes'), which cleanly separates it from update_manga_score, update_anime_progress and update_list_entry without opening their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear context for the ordinary path ('Executes ordinary requested single-entry changes directly') and an explicit procedure for the destructive/bulk path: preview, ask user, repeat with confirmation_id and confirmed:true. It does not explicitly name update_list_entry as the alternative for multi-field edits, so it falls short of a full when/when-not routing statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_manga_scoreupdate manga scoreA
Destructive

Set an existing manga entry score using the owner's scoreFormat (POINT_100, POINT_10_DECIMAL, POINT_10, POINT_5 or POINT_3); zero clears. No automatic score conversion. Executes ordinary requested single-entry changes directly. Destructive/bulk changes return a preview; ask the user to confirm, then repeat with confirmation_id and confirmed:true. Set dry_run:true to preview any change. Omitted fields are preserved.

NameRequiredDescriptionDefault
scoreYes
titleNoResolves only if the search returns exactly one result. Otherwise returns candidates; ask the user to choose a media_id.
dry_runNoValidate and preview requested changes without executing them.
media_idNoVerified AniList media ID, not MyAnimeList ID or list-entry ID. Prefer this after search.
confirmedNoLocal stdio only: true after the human explicitly confirmed the displayed destructive/bulk preview in the harness. Ignored by HTTP browser approval.
confirmation_idNoID from this exact write preview after explicit human approval. Never fabricate approval.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and idempotentHint=false, and the description adds substantial context beyond that: ordinary single-entry edits execute directly while destructive/bulk changes return a preview, the confirmation_id/confirmed:true repeat protocol, dry_run previewing, and that omitted fields are preserved. That is exactly the write-safety detail the annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and score semantics, then the safety protocol. Dense but nearly every clause carries unique information; the middle sentence ("Executes ordinary requested single-entry changes directly") is the only slightly awkward construction, and the confirmation sentences run long.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive 6-parameter write tool with no output schema, the description covers mutation semantics, preservation of omitted fields, previewing, and the human-approval workflow. It stops short of describing what the preview response contains or how to interpret the returned candidates when title resolution is ambiguous, though the title parameter's own schema text covers part of that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 83%, so the baseline is 3, but the description adds real meaning the schema lacks: score is interpreted against the owner's scoreFormat enum of five scales, zero clears the score, and no conversion is performed. dry_run and the confirmation protocol are also explained in prose, not just in field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Set an existing manga entry score") and immediately names the domain constraint (owner's scoreFormat with the five concrete formats). An agent can distinguish this from update_anime_score and update_list_entry by the resource alone, without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational guidance: zero clears, no automatic conversion, dry_run for previewing, and the preview-then-confirm loop for destructive/bulk changes. It does not explicitly route the agent to siblings (e.g. use update_list_entry for status or progress), so a small inference gap remains.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 19 tool updatesv1.0.0
    • First observedadd_anime_to_list
    • First observedadd_manga_to_list
    • First observedbulk_update_entries
    • First observedget_anime_details
    • First observedget_currently_watching
    • First observedget_manga_details
    • First observedget_my_anilist_profile
    • First observedget_my_anime_list
    • First observedget_my_anime_statistics
    • First observedget_my_manga_list
    • First observedremove_list_entry
    • First observedsearch_anime
    • First observedsearch_manga
    • First observedupdate_anime_progress
    • First observedupdate_anime_score
    • First observedupdate_anime_status
    • First observedupdate_list_entry
    • First observedupdate_manga_progress
    • First observedupdate_manga_score

TDQS

A3.7/5.0

Scored across 19 tools

Disambiguation3/5

Most tools split cleanly along resource+action lines, but update_list_entry overlaps heavily with the specialized update_anime_progress/score/status and update_manga_progress/score tools, leaving an agent unsure which to pick for a single-field change. get_my_anime_list and get_currently_watching also overlap, though descriptions differentiate them reasonably.

Naming Consistency4/5

Almost all tools follow a consistent snake_case verb_noun pattern (search_, get_, add_, update_, remove_). Minor deviations exist: get_currently_watching lacks a noun, and the generic entry tools use 'entry/entries' instead of the _to_list phrasing used elsewhere.

Tool Count3/5

At 19 tools this is on the heavy side, largely due to the symmetric anime/manga duplication plus focused per-field update tools. The surface is justifiable for full list management, but the generic update_list_entry makes several specialized tools feel redundant rather than earning their place.

Completeness4/5

Coverage is strong: search, details, profile, paginated list reads, statistics, add/update/remove, generic patching, and bulk updates all exist, so an agent can complete core lifecycle workflows. Minor gaps include no manga statistics equivalent and no dedicated note/privacy-only tool (though update_list_entry handles those).

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers