mal-mcp AGENTS.md

A project guide for a TypeScript MCP server that reads anime information from an unofficial MyAnimeList mirror and the official MyAnimeList API. MyAnimeList is a website and service for tracking anime and manga.

In plain words
What is it for?
Use it when changing anime search, rankings, seasonal releases, recommendations, details, statistics, personal lists, API clients, or access rules.
Why use it?
It explains which data sources and credentials each kind of operation uses, helping an agent avoid breaking authentication or API fallback behavior.

Instructions file for CodexOpenCode

Install

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.

agentmods
npx agentmods add instructions/grinv/mal-mcp/agents-md
Clone the repo
git clone --depth 1 https://github.com/Grinv/mal-mcp

Made for: Codex, OpenCode.

Per session 3,377 This file is loaded in full into every session.
When invoked 3,377 The same file — it is already loaded in full.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce 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

Measured 2d ago against content hash 8a175e597967, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

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.

AGENTS.md · 215 lines

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.

Read the full file on GitHub · 215 lines

Changes

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.

  1. 2d ago First seen · 215 lines · 3,377 tokens per session scan A 8a175e597967

Subscribe to this mod's changes

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.