Borrowing it
Nothing to install: this file belongs to Grinv/anilist-mcp-server. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/Grinv/anilist-mcp-server/main/.agents/skills/fixture-accuracy-check/SKILL.mdgit clone --depth 1 https://github.com/Grinv/anilist-mcp-serverWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/grinv/anilist-mcp-server/fixture-accuracy-check)<a href="https://agentmods.dev/skills/grinv/anilist-mcp-server/fixture-accuracy-check"><img src="https://agentmods.dev/badge/skills/grinv/anilist-mcp-server/fixture-accuracy-check/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/grinv/anilist-mcp-server/fixture-accuracy-check"><img src="https://agentmods.dev/badge/skills/grinv/anilist-mcp-server/fixture-accuracy-check.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00048 | $0.01102 |
| Opus 5 | $0.00024 | $0.00551 |
| Sonnet 5 | $0.00010 | $0.00220 |
| Haiku 4.5 | $0.00005 | $0.00110 |
Grade A, and why
fixture-accuracy-check scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 8d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
available, hit the real endpoint once (curl against How it starts
The opening of the file, as written. The whole thing — 79 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Testing conventions
src/__tests__/*.test.ts mocks fetch and feeds it canned JSON fixtures (see
helpers.ts's mockFetch/jsonResponse/installFetch, and anilist.test.ts/
graphql.test.ts for the patterns). These fixtures are hand-written, which
makes it easy to accidentally encode what the code expects instead of what
AniList's GraphQL API actually returns — a test built that way stays green
even when it's exercising a bug.
The rule
A fixture must mirror the real response shape for that exact query: only the
fields AniList actually sends for that selection, in the shape it actually
sends them (including null for fields the account/media doesn't have — don't
just omit them). Don't add a field because a client module reads it, and
don't reuse a fixture from a similar-looking query — check the actual GraphQL
selection you're mocking.
AniList-specific shapes worth getting right
- The nested validation-error envelope. A GraphQL validation failure comes
back as
{errors: [{message: "Validation failed", validation: {field: ["reason"]}}]}— not a flatmessage. A fixture (or a fix) that only checkserrors[0].messagewill miss real per-field detail; seedescribeGraphQLError()insrc/lib/graphql.tsand its test coverage for the shape to mirror. scorevsscoreRaw.SaveMediaListEntry'sscorefield is format-dependent (POINT_10, POINT_100, ...);scoreRawis always a literal 0-100 integer regardless of the account's scoring format. A fixture that returnsscorewhen the mutation variables sentscoreRaw(or vice versa) will pass a naive assertion while hiding a real conversion bug — seesaveListEntry's tests inanilist.test.ts.advancedScoresis positional. The account's advanced-scoring categories (User.mediaListOptions.animeList.advancedScoring/.mangaList.advancedScoring) determine array order forSaveMediaListEntry'sadvancedScoresargument — a fixture with the categories in a different order than the account actually has configured would validate the wrong thing; seeorderAdvancedScores's tests.Pagecan only carry one list field per query (seedocs/api-references.md's Pagination section for why) — a fixture combiningPage.mediaandPage.charactersin one response would never occur for real. That rule is aboutPage's own sub-selection only; combiningPagewith an unrelated aliased root field in the same request (e.g.getSchedule/getUserActivity'sexists:Media(id:$id){id}check next toschedule:Page(...)) is a different, valid pattern — mirror both fields' real response shape in that fixture.- A fixture testing a defensive/not-yet-observed code path must say so.
Some guards (
assertFound()on a query AniList hasn't been observed returningnullfor) exist as insurance against upstream behavior changing, not because the null response has been seen live — seegetUserProfile/getUserStats/getFullUserInfoinuser.ts. A fixture exercising that branch (e.g. mocking{data: {User: null}}) is testing the guard, not AniList's current live behavior, and must say so in a comment right above the mock — otherwise it silently violates the rule above with no signal to a future reader that the shape is hypothetical rather than confirmed.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 8d ago First seen · 79 lines · 48 tokens per session scan A 0f4f6ece70d1
fixture-accuracy-check is a skill published in the GitHub repository Grinv/anilist-mcp-server (1 stars, last pushed 15d ago), licensed MIT. It adds 48 tokens to every session and 1,102 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
api-testing
Testing patterns for MCP tool/resource handlers using createMockContext and Vitest. Covers mock context options, handler testing, McpError assertions, format testing, Vitest config setup, and test isolation conventions.
field-test
Exercise tools, resources, and prompts against a live HTTP server via MCP JSON-RPC over curl. Starts the server, surfaces the catalog, runs real and adversarial inputs, and produces a tight report with concrete findings and numbered follow-up options. Use after adding or modifying definitions, or when the user asks to…
add-test
Scaffold a test file for an existing tool, resource, or service. Use when the user asks to add tests, improve coverage, or when a definition exists without a matching test file.
live-audit
Audit steam-games-mcp — build/test/lint gate, live MCP tool edge-case sweep (input validation, SteamID64/vanity/appid edge cases, key-gating), and source-level code review. Use when asked to test/audit the published or just-fixed steam-games-mcp package, hunt for bugs/edge cases, or repeat "the same kind of testing as…
prompt-check
Live-test every MCP Prompt in src/tools/prompts.ts through the real MCP protocol (not a static read) across every argument combination. Use when a prompt is added or its argument-handling logic changes, or as part of a live-audit pass.
verify-cli
Run smoke tests against the mpak CLI to verify all commands work correctly before publishing a new release.