Public leaderboard

Public assessment

gavxm/ani-mcp (ani-mcp)

ani-mcp · v0.15.5 · scanned

What changed in the harness

Selection accuracy 98→98, token cost up 1%, 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.9 / 30

21.9 out of 30
03Economics

10.3 / 20

10.3 out of 20
04Discoverability

12.7 / 20

12.7 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.

12 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 exported list data as a CSV or JSON string (per the format parameter) containing titles, statuses, scores, and progress.
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 user's AniList username and ID, or an error if the token is missing or invalid.
anilist_rate
no_return_description
Score an anime or manga on your list. Use when the user wants to give a rating (0-10). Scores display in the user's preferred format (3/5/10/100-point). Use 0 to remove. Requires ANILIST_TOKEN. Returns the updated list entry's score and entry ID.
anilist_delete_from_list
no_return_description
Remove an entry from your anime or manga list. Pass either a list entry ID or a media ID. 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 previous state of the affected list entry. Requires ANILIST_TOKEN. Returns the restored entry's status, progress, and score after rollback.
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 resulting favourite state (favourited or unfavourited).
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 and posted text.
anilist_batch_update
params_unexplained no_return_description
Apply a bulk action to multiple list entries matching a 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 match (by status, score-below/above thresholds, or unscored state), and the action object defines what to change (a new status and/or score) on every matched entry. Defaults to dry-run mode (preview only, no changes applied) — set dryRun to false to execute. Requires ANILIST_TOKEN. Returns the matched entries with their current or newly applied status and score, depending on dryRun.
anilist_group_pick
no_return_description
Find anime or manga for a group to watch together. Finds titles on multiple users' planning lists (or highly rated by all). Use when friends want to pick something everyone will enjoy. Returns ranked picks showing how many of the group's lists each title appears on plus its score and genres.
anilist_shared_planning
no_return_description
Find titles on both users' planning lists. Use when two users want to see what they're both planning to watch or read. Returns the overlapping titles both users plan to watch, plus each user's unique planning titles.
anilist_follow_suggestions
no_return_description
Find AniList users with similar taste from your following list. Ranks people you follow by taste compatibility to highlight your best matches. Requires ANILIST_TOKEN for following list access. Returns a ranked list of followed users with their compatibility percentage and shared genres.
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. LIKE toggles the like state. Returns the resulting like state for LIKE, or the posted reply's ID and text for REPLY.

Selection evidence

Confusable tool pairs.

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

Tool A Tool B Confidence Why they collide
anilist_genres anilist_genre_list high Both surface genre info; 'show me genres' could hit either anilist_genres (browse top titles in a genre) or anilist_genre_list (list valid genre names) since names are nearly identical.
anilist_list anilist_genre_list low Share the 'list' token but serve very different purposes (user's anime list vs valid genre names); a well-formed request rarely conflates them, though truncated tool names could confuse a matcher.
anilist_pick anilist_group_pick medium 'What should we watch?' from a user implying friends could be routed to solo anilist_pick if the agent misses the multi-user cue, since both recommend from planning lists.
anilist_search anilist_staff_search low A query naming a person (director/VA) could ambiguously go to general search vs staff_search, though anilist_search is typed for media not people.
anilist_search anilist_studio_search low Searching 'MAPPA' could plausibly be tried in generic search before realizing anilist_studio_search is the dedicated tool, but descriptions clearly separate media vs studio queries.
anilist_seasonal anilist_seasonal_stats medium 'What's my seasonal record' vs 'what's airing this season' are easily confused since both are named seasonal and username vs season/year params overlap in a request like 'how did this season go for me'.
anilist_staff anilist_staff_search high Asking 'who voiced X in this show' vs 'search for voice actor X' both plausibly route to either tool since anilist_staff is per-title credits and anilist_staff_search is per-person works; overlapping VA/staff intent makes selection ambiguous.
anilist_stats anilist_seasonal_stats medium 'Show me my stats' is ambiguous between overall stats and seasonal pickup/completion stats; user may need to specify season vs overall to disambiguate.
anilist_taste anilist_taste_card high 'Show me my taste profile' vs 'make me a taste card image' differ only in output format (text vs shareable PNG), easily conflated by a natural request that doesn't specify image vs text.
anilist_wrapped anilist_wrapped_card high 'Give me my year in review' is ambiguous between the text wrapped summary and the shareable wrapped_card image; both trigger on identical year-recap phrasing.
anilist_mal_import anilist_kitsu_import medium If the user just says 'import my list and recommend anime' without specifying MAL or Kitsu, the agent must infer platform from subtle username hints, risking wrong tool choice.
anilist_taste_card anilist_wrapped_card medium Both generate shareable PNG cards summarizing genres/scores; 'make me a card about my anime' could ambiguously target taste profile vs year-in-review card if year isn't mentioned.
anilist_compat_card anilist_wrapped_card low Both are shareable card generators but compat_card explicitly requires two users, making confusion less likely except in vague 'make us a card' requests.
anilist_taste_card anilist_compat_card low Compat_card's required two-username schema distinguishes it from single-user taste_card, though both are 'shareable profile image' style tools.
anilist_add_to_list anilist_delete_from_list low Opposite actions (add vs remove) sharing list vocabulary; unlikely true confusion since intent verbs (add/start vs remove/delete) are distinct, but could occur in ambiguous 'update my list for X' phrasing.
anilist_genre_list anilist_add_to_list low Only shared token is 'list'; genre_list returns genre taxonomy while add_to_list mutates a user's list, unlikely to be confused by a real task.
anilist_genre_list anilist_delete_from_list low Only shared token is 'list'; functions are unrelated (genre taxonomy vs list entry deletion), minimal real ambiguity.
anilist_seasonal anilist_seasonal_recap_card medium 'Give me a recap of this season' could be routed to either browsing seasonal anime or generating the seasonal_recap_card image depending on whether user wants a personal recap vs airing list.
anilist_staff_search anilist_studio_search low Both are entity search tools with similar schemas, but 'staff/person' vs 'studio' queries are usually clearly distinguishable by named entity type.
anilist_update_progress anilist_batch_update low 'Update my progress' for a single show is clearly update_progress, while batch_update is for bulk filter-based changes; only vague 'update my list' phrasing risks confusion.
anilist_taste_card anilist_seasonal_recap_card low Both are shareable card generators but scoped differently (overall taste vs single season); a vague 'make me a card' request could misfire without season/taste context.
anilist_wrapped_card anilist_seasonal_recap_card medium 'Recap my year' vs 'recap my season' are similar phrasing patterns; a user recapping a partial year (a season) could trigger the wrong recap-card tool.
anilist_compat_card anilist_seasonal_recap_card low Compat_card strictly requires two users, making confusion with the single-user seasonal_recap_card unlikely in practice.
anilist_recommendations anilist_reviews low 'What do people think of X' (reviews) vs 'what's similar to X' (recommendations) are distinct intents, though both are community-driven info about a title.
anilist_details anilist_recommendations low anilist_details includes a recommendations section, so 'get recommendations for X' might ambiguously be satisfied by fetching full details instead of the dedicated recommendations tool.
anilist_activity anilist_feed medium 'Post to my feed' vs 'show my feed' could be confused since activity posts text to the feed while feed reads it; ambiguous phrasing like 'check my activity' could go either way.
anilist_add_to_list anilist_rate low add_to_list optionally takes a score, so 'rate this and add to my list' could plausibly be handled by either tool alone.
anilist_rate anilist_delete_from_list low Unrelated actions (scoring vs removing); minimal real-world confusion despite shared list vocabulary.
anilist_search anilist_characters low Searching a character name in generic search vs anilist_characters could occur if user doesn't clarify they mean a character rather than a title.
anilist_taste anilist_compare low 'Compare my taste' vs 'show my taste profile' differ in requiring two users for compare; ambiguity only in vague single-mention requests.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard