Public leaderboard

Public assessment

gavxm/ani-mcp (ani-mcp)

ani-mcp · v0.15.5 · scanned

What changed in the harness

Selection accuracy 94→94, token cost up 4%, unconfirmed writes 0%→0%.

Category breakdown

Where the score comes from.

Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.

01Safety

0.0 / 30

0.0 out of 30
02Legibility

21.8 / 30

21.8 out of 30
03Economics

10.8 / 20

10.8 out of 20
04Discoverability

14.0 / 20

14.0 out of 20

Highest-impact fix

Estimated gain +30 points

Add explicit identity and permission preflight tools

Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.

Description evidence

Defects and rewrites.

11 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.

Tool Defect types Suggested rewrite
anilist_export
no_return_description
Export a user's anime or manga list as CSV or JSON for backup or migration. Use when the user wants to download, back up, or transfer their list data. Returns the list entries serialized in the requested format (csv or json), ready to download or save.
anilist_whoami
no_return_description
Check which AniList account is authenticated and verify the token works. Use when the user wants to confirm their setup or debug auth issues. Returns the authenticated username and account details, confirming the token is valid.
anilist_rate
no_return_description
Score an anime or manga on your list. Use when the user wants to give or update a rating (0-10) on a title. Scores display in the user's preferred format (3/5/10/100-point). Use a score of 0 to remove the existing score. Requires ANILIST_TOKEN. Returns the updated list entry with its applied score and entry ID.
anilist_delete_from_list
no_return_description
Remove an entry from your anime or manga list. Pass either the list entry ID (from anilist_list) or the media ID of the title to remove. Requires ANILIST_TOKEN. Returns confirmation of the deletion, including the removed entry's ID.
anilist_undo
no_return_description
Undo the last write operation (update progress, add to list, rate, delete, or batch update). Restores the affected list entry to its previous state, for example when the user made a mistake or wants to revert a change. Requires ANILIST_TOKEN. Returns the restored list entry with its status, progress, and entry ID.
anilist_favourite
no_return_description
Toggle favourite on an anime, manga, character, staff member, or studio. Calling again on the same entity removes it from favourites. Requires ANILIST_TOKEN. Returns the entity's new favourite state (favourited or not).
anilist_activity
no_return_description
Post a text activity to your AniList feed. Use when the user wants to share a status update, thought, or message. Requires ANILIST_TOKEN. Returns the created activity's ID, author, and text.
anilist_batch_update
params_unexplained no_return_description
Apply a bulk action to multiple list entries that match the filter. Use when the user wants to move all low-scored titles to Dropped, add all planning titles to current, or bulk-change statuses. The filter object selects which entries to match (by status, minimum or maximum score, or unscored) and the action object specifies the change to apply (set a new status and/or score). Defaults to dry-run mode (preview only); set dryRun to false to execute. Requires ANILIST_TOKEN. Returns the matched entries with their status/score before and after, plus the number of entries affected.
anilist_group_pick
no_return_description
Find anime or manga for a group to watch together. Finds titles that appear on multiple users' planning lists (or, when source is COMPLETED, titles all users rated highly). Use when friends want to pick something everyone will enjoy. Returns recommended titles with the usernames who share each pick and the list the recommendation came from.
anilist_follow_suggestions
no_return_description
Find AniList users with similar taste from your following list. Ranks the people you follow by taste compatibility to highlight your best matches, compared over the selected media type (anime or manga). Requires ANILIST_TOKEN for following list access. Returns a ranked list of suggested usernames with their taste compatibility scores.
anilist_react
no_return_description
Like or reply to an AniList activity. Use when the user wants to interact with an activity from their feed. Requires ANILIST_TOKEN. The LIKE action toggles the like state on the activity; the REPLY action posts a reply using the text parameter (required when action is REPLY). Returns the updated activity with its like state and any posted reply.

Selection evidence

Confusable tool pairs.

21 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.

Tool A Tool B Confidence Why they collide
anilist_pick anilist_group_pick medium Both recommend what to watch and share the 'pick/watch' tokens. A task like 'what should we watch tonight' or 'pick something for my friends and me' could route to single-user anilist_pick instead of group_pick since the only differentiator is plural vs singular subject.
anilist_search anilist_staff_search medium Both are 'search by name' tools sharing anime/manga/search tokens. A user asking 'search for Makoto Shinkai' or 'find works by Miyazaki' targets staff, but generic phrasing like 'search for X' gives no cue whether X is an anime title or a person.
anilist_search anilist_studio_search low A query like 'search for MAPPA' or 'find Studio Ghibli anime' could be sent to generic title search (which even returns studios as fields), so the agent might not reach studio_search despite its clearer fit.
anilist_staff_search anilist_studio_search low Both take a proper-noun name query, and names like 'Bones' or 'Mappa' could be either a studio or a person; 'who is behind this anime' is ambiguous between staff and studio lookup.
anilist_seasonal anilist_seasonal_stats medium Both concern seasons and share the 'seasonal' token. 'What did I watch this season' could be answered with a seasonal title browser (anilist_seasonal) instead of the per-season stats tool, or vice versa.
anilist_seasonal anilist_seasonal_recap_card low 'Make a seasonal recap' strongly implies the card, but shorter phrasing like 'my seasonal recap' could route to browsing current-season anime instead of generating the user stats image.
anilist_staff anilist_staff_search medium Both are staff-focused and share staff/anime/manga tokens. 'Look up the staff' is ambiguous: it could mean credits for a specific title (anilist_staff) or a name-based staff lookup (anilist_staff_search), and the agent must infer which direction the user means.
anilist_stats anilist_seasonal_stats medium Both return user stats and share the 'stat' token. 'Show me my stats' defaults to overall stats, but a user wanting their per-season completion rates could be routed to the wrong one; the season dimension is an easy miss.
anilist_taste anilist_taste_card medium Same underlying data with identical input schema; the only difference is output format (text summary vs shareable PNG). 'Generate my taste profile' or 'show my taste' is genuinely ambiguous between the two.
anilist_wrapped anilist_wrapped_card medium Same year-in-review data, differing only in text summary vs card image output. 'Give me my wrapped' with no mention of an image could select the wrong member.
anilist_taste_card anilist_wrapped_card medium Both generate a shareable card image of a single user's stats and share nearly all tokens. A request like 'make me a shareable card of my anime' is ambiguous between a taste card and a year-in-review card.
anilist_taste_card anilist_compat_card low Both produce shareable card images; 'make a card about our tastes' could be misread as a single-user taste card even though compat requires two usernames.
anilist_compat_card anilist_wrapped_card low Members of the same card-image family; only the user count and content (comparison vs year review) differentiate them, and a vague 'generate a card' task could land on either.
anilist_taste_card anilist_seasonal_recap_card low Both are shareable card image generators of a single user's stats; 'generate a recap card' is ambiguous between taste profile and seasonal recap.
anilist_wrapped_card anilist_seasonal_recap_card medium Year-in-review and seasonal-recap cards are near-identical in purpose (recap card image). A request like 'my recap card for this year' is ambiguous between the two time spans.
anilist_compat_card anilist_seasonal_recap_card low Both generate card images of user stats; 'make a card showing our season' mixes comparison and seasonal framing and could route to either.
anilist_genres anilist_genre_list low Names differ by one token. 'What genres are available?' targets genre_list, but phrasing like 'show me the genres' could send the agent to the genre-browsing tool, which requires a genre argument and would fail.
anilist_activity anilist_feed medium anilist_activity POSTs to the feed while anilist_feed reads it. A read request like 'show my recent activity' matches the token 'activity' in the posting tool, risking accidentally publishing a post instead of fetching the feed.
anilist_add_to_list anilist_rate low Both mutate a list entry and share an anime/manga/list tokens; add_to_list even accepts an optional score. 'Put an 8 on this' could be routed to add_to_list instead of rate, and 'add to my list and score it' is ambiguous.
anilist_search anilist_characters medium A name like 'Naruto', 'Goku', or 'Levi' is both an anime/manga title and a character. 'Find Naruto' gives no cue which tool is correct, and both take a plain search query.
anilist_update_progress anilist_batch_update low Both are update tools sharing the 'update' token. A bulk-sounding request like 'update my progress' with no specific title could be routed to single-entry update_progress (which requires mediaId) instead of the batch tool, or vice versa.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard