Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add instructions/grinv/mal-mcp/agents-mdgit clone --depth 1 https://github.com/Grinv/mal-mcpWhat 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 | $0.03377 | $0.03377 |
| Opus 5 | $0.01688 | $0.01688 |
| Sonnet 5 | $0.00675 | $0.00675 |
| Haiku 4.5 | $0.00338 | $0.00338 |
Grade A, and why
mal-mcp AGENTS.md scanned grade A with 0 findings 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 2d 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.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 215 lines — stays where its author put it; the contents beside it link to each section on GitHub.
AGENTS.md
Single source of truth for working on this repository — for any model or
agent. CLAUDE.md only links here (@AGENTS.md); keep all shared guidance in
this file, not in CLAUDE.md. (For end-user/runtime docs, see README.md.)
Project shape
A TypeScript MCP server. Hybrid backend: read tools call the free Tenrai API
(no auth; an unofficial MyAnimeList mirror). Personal-list
tools call the official MyAnimeList API (user token). Eleven read tools
(search/top/seasonal/recommendations/details/anime statistics) additionally
fall back to the official API via just a Client ID — see ReadFallback in
clients/readFallback.ts and the rationale/scope in
docs/api-references.md before changing a client. docs/auth.md lays out what each
credential tier (none / Client ID / OAuth token) unlocks — read that before
changing auth-gating logic or docs that describe it.
Upstream API docs (rate limits, endpoints, OAuth, audit notes) are collected in docs/api-references.md — check there before changing a client.
src/
index.ts # bin entry — calls start()
server.ts # buildServer() + start(); registers everything
config.ts # env → validated Config (zod)
version.ts # VERSION/USER_AGENT string, kept in sync with package.json (version.test.ts)
lib/ # http, rateLimit, cache, tokenStore, oauthLogin, errors, logger,
# result, format(+formatOfficial for the fallback's response shaping)
# format.schemas.ts: Zod schemas mirroring every format.ts/formatOfficial.ts
# shaper, PLUS clients/mal.ts's trimList()/deleteMy*ListItem() outputs
# (myListSchema, deleteAnimeItemSchema, deleteMangaItemSchema — shaped/
# client-synthesized output, not raw upstream passthrough, so they live
# here rather than in mal.ts); each tool's outputSchema, AND (schema-first)
# the paired shaper itself calls schema.parse() on its own result before
# returning
clients/ # tenrai.ts (reads) + tenraiEnums.ts (every enum-shaped query param Tenrai
# accepts, as `as const` arrays — the single source of truth read.ts's
# z.enum(...) calls build from) + tenraiParams.ts (TenraiClient's param
# interfaces, split out once tenrai.ts grew too large to scan) +
# readFallback.ts (retry policy), mal.ts (personal-list CRUD — MyUserInfoSchema/
# MalListResponseSchema/ListStatusUpdateResponseSchema stay here as
# z.looseObject(), see below) + malEnums.ts (mal.ts's own enum arrays, same
# reasoning/pattern as tenraiEnums.ts, shared with tools/mylist.ts) +
# malAuth.ts (MalAuthManager: OAuth token refresh + the login_mal/
# submit_mal_redirect PKCE flow, composed into MalClient — split out because
# token lifecycle and personal-list CRUD are genuinely different concerns, not
# because of anime/manga: unlike tenrai.ts's split, there's no anime/manga axis
# here worth separating further, since #getMyList/#updateStatus/#deleteItem are
# correctly DRY, resource-parameterized helpers, not a merged-domain mistake),
# officialReads.ts (Client-ID-only public reads, the fallback's data source),
# httpClients.ts (shared HttpClient factory for the official API, +
# withThrottle(), the rate-limit wiring shared with tenrai.ts too, +
# formBody() form-encoder shared by mal.ts and malAuth.ts)
tools/ # read.ts, mylist.ts, login.ts (login_mal), guard.ts, spec.ts (defineTool/
# registerTools + ToolSpec — the per-tool registration abstraction all three
# register*Tools() callers flow through)
prompts.ts # registerPrompts(server, tenrai) — clients get threaded in as needed,
# e.g. for completable() autocomplete on recommend_similar's title
__tests__/ # node:test (*.test.ts) + helpers.ts
scripts/ # build-tests.mjs, run-tests.mjs, check-api.mjs, sync-version.mjs,
# preversion-check.mjs (npm version gate — see .agents/skills/release/SKILL.md),
# check-changelog-coverage.mjs (see docs-consistency-check skill),
# check-chainable-optional-fields.mjs (see tool-description-check skill)
.agents/skills/ # reusable agent workflows for this repo (e.g. live-audit/) —
# plain Markdown with a YAML frontmatter name/description,
# not tied to any one tool's orchestration features, per
# this file's agent-agnostic policy; same skill name/layout
# as this project's sibling MCP servers (tmdb-mcp,
# steam-games-mcp, anilist-mcp-server) — sync improvements
# both ways rather than letting them drift. Codex CLI and
# Gemini CLI read `.agents/skills` directly and Claude Code
# via the `.claude/skills` symlink, so every skill is picked
# up without duplicating content per client path.
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.
- 2d ago First seen · 215 lines · 3,377 tokens per session scan A 8a175e597967
mal-mcp AGENTS.md is an instructions file published in the GitHub repository Grinv/mal-mcp (2 stars, last pushed 8d ago), licensed MIT. It adds 3,377 tokens to every session, about $0.0169 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other instructions, from other repositories
anilist-mcp-server AGENTS.md
AGENTS.md instructions for Grinv/anilist-mcp-server, covering agents.md, project shape, why this server exists, commands and conventions.
anilist-mcp-server CLAUDE.md
Claude Code instructions for Grinv/anilist-mcp-server, a project described as: MCP server for the AniList GraphQL API — anime/manga search, details, and personal list management.
tmdb-mcp AGENTS.md
Instructions for Grinv/tmdb-mcp, covering agents.md, project shape, commands, conventions and testing the live/published server.
steam-games-mcp AGENTS.md
Instructions for Grinv/steam-games-mcp, covering agents.md, project shape, commands, conventions and testing the live/published server.
tmdb-mcp CLAUDE.md
Instructions for Grinv/tmdb-mcp, a project described as: MCP server for The Movie Database (TMDB) with IMDb/Rotten Tomatoes/Metacritic ratings via OMDb.
steam-games-mcp CLAUDE.md
Instructions for Grinv/steam-games-mcp, a project described as: MCP server for Steam: keyless store/catalog data (deals, tags, SteamOS/Deck/Frame compat) plus player profiles, libraries and achievements via the Steam Web API.