{
  "markdown": "# mcp-animenewsnetwork\n\n[![npm](https://img.shields.io/npm/v/mcp-animenewsnetwork.svg)](https://www.npmjs.com/package/mcp-animenewsnetwork)\n[![CI](https://github.com/smeet666/mcp-animenewsnetwork/actions/workflows/ci.yml/badge.svg)](https://github.com/smeet666/mcp-animenewsnetwork/actions/workflows/ci.yml)\n[![license](https://img.shields.io/npm/l/mcp-animenewsnetwork.svg)](./LICENSE)\n[![MCP Registry](https://img.shields.io/badge/MCP_Registry-listed-6E56CF)](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.smeet666/mcp-animenewsnetwork)\n[![Glama](https://glama.ai/mcp/servers/smeet666/mcp-animenewsnetwork/badges/score.svg)](https://glama.ai/mcp/servers/smeet666/mcp-animenewsnetwork)\n[![M8ven](https://m8ven.ai/badge/mcp/smeet666-mcp-animenewsnetwork-tjuof8?variant=verified)](https://m8ven.ai/mcp/smeet666-mcp-animenewsnetwork-tjuof8)\n[![LobeHub](https://lobehub.com/badge/mcp/smeet666-mcp-animenewsnetwork)](https://lobehub.com/mcp/smeet666-mcp-animenewsnetwork)\n[![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=animenewsnetwork&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIm1jcC1hbmltZW5ld3NuZXR3b3JrIl19)\n[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=animenewsnetwork&config=%7B%22name%22%3A%22animenewsnetwork%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22mcp-animenewsnetwork%22%5D%7D)\n\n<!-- m8ven-verify: 0bc9d48876faa24f4d509082ea05d5ba -->\n\n[Anime News Network](https://www.animenewsnetwork.com) has been covering anime\nand manga since 1998. It keeps an encyclopedia of the works themselves, with the\ncast and staff credited on each, the episodes, the releases, the opening and\nending themes and the readers' ratings, and it runs a news wire alongside it,\nwith separate editions for the United States, the United Kingdom and Australia.\n\nThis server connects a chat client to both. You can search the encyclopedia for\nan anime or a manga, read one entry with its credits and its details, list what\nwas recently added or browse the encyclopedia alphabetically, and read the news\nwire. It needs no API key and no account.\n\n_[Version française](#mcp-animenewsnetwork-français)_\n\n---\n\n## Install\n\n**One-click install**\n\n[![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=animenewsnetwork&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIm1jcC1hbmltZW5ld3NuZXR3b3JrIl19)\n[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=animenewsnetwork&config=%7B%22name%22%3A%22animenewsnetwork%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22mcp-animenewsnetwork%22%5D%7D)\n\n**Claude Code**\n\n```bash\nclaude mcp add animenewsnetwork -- npx -y mcp-animenewsnetwork\n```\n\n**Claude Desktop, Cursor, and any client using the standard config format**\n\n```json\n{\n  \"mcpServers\": {\n    \"animenewsnetwork\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"mcp-animenewsnetwork\"]\n    }\n  }\n}\n```\n\nNode 24 or later is required, and no environment variable has to be set.\n\n### With Docker\n\n```json\n{\n  \"mcpServers\": {\n    \"animenewsnetwork\": {\n      \"command\": \"docker\",\n      \"args\": [\"run\", \"-i\", \"--rm\", \"ghcr.io/smeet666/mcp-animenewsnetwork:3.0.0\"]\n    }\n  }\n}\n```\n\n`-i` keeps stdin open, which is where the protocol travels, and `-t` is left out\nbecause a TTY rewrites the stream. The container needs outbound HTTPS to\n`cdn.animenewsnetwork.com` and `www.animenewsnetwork.com`, and nothing else: no\nvolume, no port, no credential.\n\n### Bundle, without npm\n\nDownload `mcp-animenewsnetwork-2.0.1.mcpb` from\n[the latest release](https://github.com/smeet666/mcp-animenewsnetwork/releases/latest)\nand open it. A client that supports MCP bundles installs it on its own, with no\nnpm and no configuration file to edit. The bundle carries its dependencies, so\nnothing is fetched at install time.\n\n## What you can ask\n\n- \"What does the encyclopedia have on Cowboy Bebop?\"\n- \"Who voiced Spike, and in which languages?\"\n- \"What anime were added to the encyclopedia recently?\"\n- \"What is the anime news today?\"\n- \"How did readers rate that series?\"\n\nThe ordinary path runs from a search to an entry: a row carries an `id` and a\n`kind`, and `get_title` takes both together.\n\n## Tools\n\n| Tool            | What it does                                                          |\n| --------------- | --------------------------------------------------------------------- |\n| `search_titles` | Finds anime and manga by title in the encyclopedia.                   |\n| `get_title`     | Reads one entry, its credits and its details.                         |\n| `list_recent`   | Lists what was recently added, or browses the encyclopedia by letter. |\n| `get_news`      | Reads the news wire.                                                  |\n\nAn entry is addressed by its `id` together with its `kind`, since the\nencyclopedia numbers anime and manga separately.\n\n### `search_titles`\n\nFinds anime and manga by title.\n\n| Argument | Type                                       | Required | What it does                    |\n| -------- | ------------------------------------------ | -------- | ------------------------------- |\n| `query`  | string, at least 1 character               | yes      | A title, or part of one.        |\n| `kind`   | `anime`, `manga` or `both`, default `both` | no       | Which part of the encyclopedia. |\n| `limit`  | integer, 1 to 50, default `10`             | no       | Rows to serve.                  |\n\n**In return:** rows carrying `id` and `kind`, which `get_title` takes together;\n`name`; `type`, reading TV, movie, OAV, ONA, special, manga or novel;\n`precision`; `vintage`, the original release date or range as published; and\n`source_url`. A field the entry leaves empty is `null`.\n\n### `get_title`\n\nReads one entry. The heavier parts are asked for rather than served by default.\n\n| Argument    | Type                                                                                                         | Required | What it does                           |\n| ----------- | ------------------------------------------------------------------------------------------------------------ | -------- | -------------------------------------- |\n| `id`        | integer, 1 or more                                                                                           | yes      | The encyclopedia id.                   |\n| `kind`      | `anime` or `manga`                                                                                           | yes      | Which lookup the id belongs to.        |\n| `sections`  | array of `basic`, `cast`, `staff`, `episodes`, `releases`, `related`, `news`, `reviews`, default `[\"basic\"]` | no       | Which parts to return.                 |\n| `max_chars` | integer, 200 to 20000, default `4000`                                                                        | no       | How much of the plot summary to serve. |\n| `offset`    | integer, 0 or more, default `0`                                                                              | no       | Where to resume the plot summary.      |\n\n**In return:** `title`, the entry a search row carries, which comes back\nwhatever was asked for so that any answer can be cited. Asking for `basic` adds\n`alt_titles`, `genres`, `themes`, `episode_count`, `running_time`,\n`objectionable_content`, `official_websites`, `picture_url`, `opening_themes`\nand `ending_themes`.\n`ratings` carries the readers' `votes`, `weighted_score` and `bayesian_score`,\neach `null` where the encyclopedia computed none. `plot_summary` is served a\nslice at a time, described by `total_chars`, `returned_chars`, `offset`,\n`next_offset` and `truncated`. A cast entry names the `role`, the `person` and\nthe `lang` they performed in.\n\n### `list_recent`\n\nLists what was recently added to the encyclopedia, or browses it by first letter.\n\n| Argument      | Type                                                     | Required | What it does                          |\n| ------------- | -------------------------------------------------------- | -------- | ------------------------------------- |\n| `kind`        | `anime`, `manga`, `person` or `company`, default `anime` | no       | What to list.                         |\n| `starts_with` | a single character                                       | no       | Browse the entries beginning with it. |\n| `limit`       | integer, 1 to 50, default `20`                           | no       | Rows to serve.                        |\n| `offset`      | integer, 0 or more, default `0`                          | no       | Rows to skip, for paging.             |\n\n**In return:** `rows`, each carrying `id`, `kind`, `name`, `type`, `precision`,\n`vintage`, `date_added` and `source_url`, any of which the report may leave\nempty. `mode` says whether the answer was read as `recent` or as `browse`, since\npassing `starts_with` changes the question being asked, and `next_offset`\ncontinues.\n\n### `get_news`\n\nReads the news wire.\n\n| Argument   | Type                                      | Required | What it does                        |\n| ---------- | ----------------------------------------- | -------- | ----------------------------------- |\n| `feed`     | `all`, `news` or `reviews`, default `all` | no       | Which feed to read.                 |\n| `edition`  | `us`, `uk` or `au`, default `us`          | no       | Which edition.                      |\n| `category` | string                                    | no       | Keep the stories carrying this tag. |\n| `limit`    | integer, 1 to 100, default `20`           | no       | Stories to serve.                   |\n\n**In return:** `items`, each with its `title`, `link`, `summary`, `categories`\nholding every tag the feed carries on the story, and `published_at` as an ISO\ntimestamp when the feed's date could be read.\n`total_available` counts the stories the feed held, which is a fixed feed length\nrather than the size of the archive.\n\n## Configuration\n\nEvery variable is optional. Set them in the `env` block of your client config.\n\n| Variable                | Default              | What it does                                                                          |\n| ----------------------- | -------------------- | ------------------------------------------------------------------------------------- |\n| `ANN_USER_AGENT`        | the project identity | Names your application to the service, with an address where a person can be reached. |\n| `ANN_MIN_INTERVAL_MS`   | `1100`               | Gap between two requests, from 1000 to 60000.                                         |\n| `ANN_TIMEOUT_MS`        | `15000`              | Deadline for one request, from 1000 to 120000.                                        |\n| `ANN_MAX_RETRIES`       | `3`                  | Attempts after a transient failure, from 0 to 10.                                     |\n| `ANN_CACHE_TTL_MS`      | `3600000`            | How long an encyclopedia entry stays in memory, from 0 to 86400000.                   |\n| `ANN_NEWS_CACHE_TTL_MS` | `300000`             | How long a news feed stays in memory, from 0 to 86400000.                             |\n| `ANN_CACHE_MAX_ENTRIES` | `200`                | Answers held in memory at once, from 0 to 10000.                                      |\n| `ANN_LOG_LEVEL`         | `error`              | `silent`, `error`, `info` or `debug`, written to stderr.                              |\n\nThe news wire publishes several times an hour where the encyclopedia changes\nrarely, so the two are held for different lengths of time. A value outside its\nrange falls back to the default, and the reason is written to stderr.\n\n## Errors\n\nEvery failure carries one of six codes, a message, and where it helps a hint\nnaming the next move.\n\n| Code            | What happened                                           | What to do                                                                                                  |\n| --------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |\n| `not_found`     | The service answered, and holds no such entry.          | Check the id and the kind with `search_titles`.                                                             |\n| `invalid_input` | The arguments were refused before any request went out. | Read the message, which names the argument.                                                                 |\n| `rate_limited`  | The service asked this client to slow down.             | Wait the number of seconds the hint names and call again with the same arguments. The entry is still there. |\n| `parse_failure` | The answer arrived in a shape this client cannot read.  | Report it at [the issue tracker](https://github.com/smeet666/mcp-animenewsnetwork/issues).                  |\n| `network_error` | The request did not complete.                           | Try again shortly.                                                                                          |\n| `timeout`       | The request passed its deadline.                        | Raise `ANN_TIMEOUT_MS`, or ask for fewer rows.                                                              |\n\n## As a library\n\nThe layer reading the service is published on its own, with its pacing, its cache\nand its errors, and with no protocol attached.\n\n```ts\nimport { AnnClient } from \"mcp-animenewsnetwork/client\";\n\nconst client = new AnnClient();\nconst { data, cached } = await client.getTitle(\"anime\", 1);\nconsole.log(data.name, cached);\n```\n\nEach read answers `{ data, cached }`, and throws an error carrying one of the six\ncodes. The floor between two requests holds here as well.\n\n## Pacing and attribution\n\nRequests go out one at a time with at least 1.1 seconds between them, and the\nfloor of one second holds however the server is configured. The `User-Agent`\nalways ends with the project identity and an address where a person can be\nreached.\n\nEvery result carries the address of the encyclopedia page or of the article. The\nencyclopedia and the news are the work of Anime News Network and its\ncontributors, and attribution is what the service asks for in return.\n\nThis MCP server is an unofficial project, with no affiliation to Anime News\nNetwork.\n\n## Privacy\n\nThis server collects nothing about you and sends nothing to its author. It runs\non your machine, contacts `cdn.animenewsnetwork.com` and\n`www.animenewsnetwork.com` and nothing else, holds its answers in memory while it\nruns, and writes nothing to disk. [PRIVACY.md](PRIVACY.md) states what a request\ncarries and which settings change any of it.\n\n## Development\n\n```bash\nnpm install\nnpm run build:fixtures\nnpm test\nnpm run check\n```\n\nTests run against generated fixtures and make no network request. The live suite,\n`npm run test:live`, makes one request per route and runs nightly against the\nservice itself.\n\n## Contributing\n\nBugs, questions and ideas belong in\n[the issue tracker](https://github.com/smeet666/mcp-animenewsnetwork/issues).\nPull requests are welcome; opening an issue first helps agree on the shape of the\nchange. See [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## License\n\nMIT, see [LICENSE](LICENSE). The encyclopedia and the news belong to Anime News\nNetwork and its contributors.\n\n---\n\n<a name=\"mcp-animenewsnetwork-français\"></a>\n\n# mcp-animenewsnetwork (français)\n\n_[English version](#mcp-animenewsnetwork)_\n\n[Anime News Network](https://www.animenewsnetwork.com) couvre l'anime et le manga\ndepuis 1998. Le site tient une encyclopédie des œuvres elles-mêmes, avec les\ninterprètes et l'équipe créditée sur chacune, les épisodes, les parutions, les\ngénériques de début et de fin et les notes de ses lecteurs, et il fait tourner à\ncôté un fil d'actualité, avec des éditions distinctes pour les États-Unis, le\nRoyaume-Uni et l'Australie.\n\nCe serveur relie un client de conversation aux deux. On peut chercher un anime ou\nun manga dans l'encyclopédie, lire une fiche avec ses crédits et ses détails,\nlister ce qui vient d'être ajouté ou parcourir l'encyclopédie par lettre, et lire\nle fil d'actualité. Aucune clé d'API, aucun compte.\n\n## Installation\n\n**Installation en un clic**\n\n[![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=animenewsnetwork&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIm1jcC1hbmltZW5ld3NuZXR3b3JrIl19)\n[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect/mcp/install?name=animenewsnetwork&config=%7B%22name%22%3A%22animenewsnetwork%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22mcp-animenewsnetwork%22%5D%7D)\n\n**Claude Code**\n\n```bash\nclaude mcp add animenewsnetwork -- npx -y mcp-animenewsnetwork\n```\n\n**Claude Desktop, Cursor, et tout client au format de configuration standard**\n\n```json\n{\n  \"mcpServers\": {\n    \"animenewsnetwork\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"mcp-animenewsnetwork\"]\n    }\n  }\n}\n```\n\nNode 24 ou plus récent est nécessaire, et aucune variable d'environnement n'est à\nrenseigner.\n\n### Avec Docker\n\n```json\n{\n  \"mcpServers\": {\n    \"animenewsnetwork\": {\n      \"command\": \"docker\",\n      \"args\": [\"run\", \"-i\", \"--rm\", \"ghcr.io/smeet666/mcp-animenewsnetwork:3.0.0\"]\n    }\n  }\n}\n```\n\n`-i` garde l'entrée standard ouverte, qui est le canal du protocole, et `-t` est\nomis parce qu'un TTY réécrit le flux. Le conteneur a besoin d'un accès HTTPS\nsortant vers `cdn.animenewsnetwork.com` et `www.animenewsnetwork.com`, et de rien\nd'autre : aucun volume, aucun port, aucun identifiant.\n\n### Bundle, sans npm\n\nTéléchargez `mcp-animenewsnetwork-2.0.1.mcpb` depuis\n[la dernière publication](https://github.com/smeet666/mcp-animenewsnetwork/releases/latest)\net ouvrez-le. Un client qui gère les bundles MCP l'installe seul, sans npm et\nsans fichier de configuration à modifier. Le bundle emporte ses dépendances, donc\nrien n'est téléchargé à l'installation.\n\n## Ce qu'on peut demander\n\n- « Qu'est-ce que l'encyclopédie a sur Cowboy Bebop ? »\n- « Qui a doublé Spike, et dans quelles langues ? »\n- « Quels animes ont été ajoutés récemment à l'encyclopédie ? »\n- « Quelle est l'actualité anime du jour ? »\n- « Comment les lecteurs ont-ils noté cette série ? »\n\nLe chemin ordinaire va d'une recherche à une fiche : une ligne porte un `id` et\nun `kind`, et `get_title` reprend les deux ensemble.\n\n## Les outils\n\n| Outil           | Ce qu'il fait                                                       |\n| --------------- | ------------------------------------------------------------------- |\n| `search_titles` | Trouve des animes et des mangas par leur titre dans l'encyclopédie. |\n| `get_title`     | Lit une fiche, ses crédits et ses détails.                          |\n| `list_recent`   | Liste les ajouts récents, ou parcourt l'encyclopédie par lettre.    |\n| `get_news`      | Lit le fil d'actualité.                                             |\n\nUne fiche s'adresse par son `id` accompagné de son `kind`, l'encyclopédie\nnumérotant les animes et les mangas séparément.\n\n### `search_titles`\n\nTrouve des animes et des mangas par leur titre.\n\n| Argument | Type                                      | Requis | Ce qu'il fait                |\n| -------- | ----------------------------------------- | ------ | ---------------------------- |\n| `query`  | chaîne, au moins 1 caractère              | oui    | Un titre, ou une partie.     |\n| `kind`   | `anime`, `manga` ou `both`, défaut `both` | non    | La partie de l'encyclopédie. |\n| `limit`  | entier, 1 à 50, défaut `10`               | non    | Lignes à servir.             |\n\n**En retour :** des lignes portant `id` et `kind`, que `get_title` reprend\nensemble ; `name` ; `type`, valant TV, movie, OAV, ONA, special, manga ou\nnovel ; `precision` ; `vintage`, la date ou la période de parution telle que\npubliée ; et `source_url`. Un champ que la fiche laisse vide vaut `null`.\n\n### `get_title`\n\nLit une fiche. Les parties lourdes se demandent au lieu d'être servies par\ndéfaut.\n\n| Argument    | Type                                                                                                          | Requis | Ce qu'il fait                   |\n| ----------- | ------------------------------------------------------------------------------------------------------------- | ------ | ------------------------------- |\n| `id`        | entier, 1 ou plus                                                                                             | oui    | L'identifiant encyclopédique.   |\n| `kind`      | `anime` ou `manga`                                                                                            | oui    | Le registre dont l'id relève.   |\n| `sections`  | tableau de `basic`, `cast`, `staff`, `episodes`, `releases`, `related`, `news`, `reviews`, défaut `[\"basic\"]` | non    | Les parties à rendre.           |\n| `max_chars` | entier, 200 à 20000, défaut `4000`                                                                            | non    | La longueur de résumé à servir. |\n| `offset`    | entier, 0 ou plus, défaut `0`                                                                                 | non    | Où reprendre le résumé.         |\n\n**En retour :** `title`, la fiche que porte une ligne de recherche, qui revient\nquelle que soit la demande pour que toute réponse puisse être citée. Demander\n`basic` y ajoute `alt_titles`, `genres`, `themes`, `episode_count`,\n`running_time`, `objectionable_content`, `official_websites`, `picture_url`,\n`opening_themes` et `ending_themes`.\n`ratings` porte les `votes` des lecteurs, le `weighted_score` et le\n`bayesian_score`, chacun `null` là où l'encyclopédie n'en a calculé aucun.\n`plot_summary` est servi par tranches, décrites par `total_chars`,\n`returned_chars`, `offset`, `next_offset` et `truncated`. Une entrée de\ndistribution nomme le `role`, la `person` et la langue `lang` dans laquelle elle\na joué.\n\n### `list_recent`\n\nListe les ajouts récents à l'encyclopédie, ou la parcourt par première lettre.\n\n| Argument      | Type                                                    | Requis | Ce qu'il fait                           |\n| ------------- | ------------------------------------------------------- | ------ | --------------------------------------- |\n| `kind`        | `anime`, `manga`, `person` ou `company`, défaut `anime` | non    | Ce qu'il faut lister.                   |\n| `starts_with` | un seul caractère                                       | non    | Parcourt les fiches commençant par lui. |\n| `limit`       | entier, 1 à 50, défaut `20`                             | non    | Lignes à servir.                        |\n| `offset`      | entier, 0 ou plus, défaut `0`                           | non    | Lignes à sauter, pour paginer.          |\n\n**En retour :** `rows`, chacune portant `id`, `kind`, `name`, `type`,\n`precision`, `vintage`, `date_added` et `source_url`, que le rapport peut laisser\nvides. `mode` dit si la réponse a été lue en `recent` ou en `browse`, passer\n`starts_with` changeant la question posée, et `next_offset` poursuit.\n\n### `get_news`\n\nLit le fil d'actualité.\n\n| Argument   | Type                                     | Requis | Ce qu'il fait                                     |\n| ---------- | ---------------------------------------- | ------ | ------------------------------------------------- |\n| `feed`     | `all`, `news` ou `reviews`, défaut `all` | non    | Le fil à lire.                                    |\n| `edition`  | `us`, `uk` ou `au`, défaut `us`          | non    | L'édition.                                        |\n| `category` | chaîne                                   | non    | Ne garder que les sujets portant cette étiquette. |\n| `limit`    | entier, 1 à 100, défaut `20`             | non    | Sujets à servir.                                  |\n\n**En retour :** `items`, chacun avec son `title`, `link`, `summary`, ses\n`categories` portant chaque étiquette que le fil pose sur le sujet, et\n`published_at` en horodatage ISO quand la date du fil a pu être lue.\n`total_available` compte les sujets que le fil contenait, ce qui est une longueur\nde fil fixe et non la taille des archives.\n\n## Configuration\n\nChaque variable est facultative. Elles se posent dans le bloc `env` de la\nconfiguration du client.\n\n| Variable                | Défaut               | Ce qu'elle fait                                                                      |\n| ----------------------- | -------------------- | ------------------------------------------------------------------------------------ |\n| `ANN_USER_AGENT`        | l'identité du projet | Nomme votre application auprès du service, avec une adresse où joindre une personne. |\n| `ANN_MIN_INTERVAL_MS`   | `1100`               | Écart entre deux requêtes, de 1000 à 60000.                                          |\n| `ANN_TIMEOUT_MS`        | `15000`              | Délai d'une requête, de 1000 à 120000.                                               |\n| `ANN_MAX_RETRIES`       | `3`                  | Tentatives après un échec passager, de 0 à 10.                                       |\n| `ANN_CACHE_TTL_MS`      | `3600000`            | Durée pendant laquelle une fiche reste en mémoire, de 0 à 86400000.                  |\n| `ANN_NEWS_CACHE_TTL_MS` | `300000`             | Durée pendant laquelle un fil reste en mémoire, de 0 à 86400000.                     |\n| `ANN_CACHE_MAX_ENTRIES` | `200`                | Réponses gardées en mémoire à la fois, de 0 à 10000.                                 |\n| `ANN_LOG_LEVEL`         | `error`              | `silent`, `error`, `info` ou `debug`, écrit sur la sortie d'erreur.                  |\n\nLe fil d'actualité publie plusieurs fois par heure là où l'encyclopédie change\nrarement, donc les deux sont gardés des durées différentes. Une valeur hors de sa\nplage retombe sur le défaut, et la raison est écrite sur la sortie d'erreur.\n\n## Erreurs\n\nChaque échec porte un des six codes, un message, et quand cela aide une\nindication du geste suivant.\n\n| Code            | Ce qui s'est passé                                   | Que faire                                                                                        |\n| --------------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------ |\n| `not_found`     | Le service a répondu, et n'a pas cette fiche.        | Vérifiez l'identifiant et le type avec `search_titles`.                                          |\n| `invalid_input` | Les arguments ont été refusés avant toute requête.   | Lisez le message, qui nomme l'argument.                                                          |\n| `rate_limited`  | Le service demande à ce client de ralentir.          | Attendez les secondes indiquées et rappelez avec les mêmes arguments. La fiche est toujours là.  |\n| `parse_failure` | La réponse est arrivée dans une forme illisible ici. | Signalez-le sur [le suivi d'incidents](https://github.com/smeet666/mcp-animenewsnetwork/issues). |\n| `network_error` | La requête n'a pas abouti.                           | Réessayez sous peu.                                                                              |\n| `timeout`       | La requête a dépassé son délai.                      | Augmentez `ANN_TIMEOUT_MS`, ou demandez moins de lignes.                                         |\n\n## Comme bibliothèque\n\nLa couche qui lit le service est publiée seule, avec son rythme, son cache et ses\nerreurs, sans protocole attaché.\n\n```ts\nimport { AnnClient } from \"mcp-animenewsnetwork/client\";\n\nconst client = new AnnClient();\nconst { data, cached } = await client.getTitle(\"anime\", 1);\nconsole.log(data.name, cached);\n```\n\nChaque lecture répond `{ data, cached }`, et lève une erreur portant un des six\ncodes. Le plancher entre deux requêtes tient également ici.\n\n## Rythme et attribution\n\nLes requêtes partent une à une avec au moins 1,1 seconde entre elles, et le\nplancher d'une seconde tient quelle que soit la configuration. Le `User-Agent` se\ntermine toujours par l'identité du projet et une adresse où joindre une personne.\n\nChaque résultat porte l'adresse de la page encyclopédique ou de l'article.\nL'encyclopédie et l'actualité sont l'œuvre d'Anime News Network et de ses\ncontributeurs, et l'attribution est ce que le service demande en retour.\n\nCe MCP est un projet non officiel, sans affiliation à Anime News Network.\n\n## Confidentialité\n\nCe serveur ne collecte rien sur vous et n'envoie rien à son auteur. Il tourne sur\nvotre machine, ne joint que `cdn.animenewsnetwork.com` et\n`www.animenewsnetwork.com`, garde ses réponses en mémoire le temps qu'il tourne,\net n'écrit rien sur le disque. [PRIVACY.md](PRIVACY.md) dit ce qu'une requête\nemporte et quels réglages changent cela.\n\n## Développement\n\n```bash\nnpm install\nnpm run build:fixtures\nnpm test\nnpm run check\n```\n\nLes tests s'exécutent sur des fixtures engendrées et n'émettent aucune requête.\nLa suite en direct, `npm run test:live`, émet une requête par route et tourne\nchaque nuit contre le service lui-même.\n\n## Contribuer\n\nLes anomalies, les questions et les idées ont leur place dans\n[le suivi d'incidents](https://github.com/smeet666/mcp-animenewsnetwork/issues).\nLes propositions de modification sont bienvenues ; ouvrir un ticket d'abord aide\nà s'accorder sur la forme du changement. Voir [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## Licence\n\nMIT, voir [LICENSE](LICENSE). L'encyclopédie et l'actualité appartiennent à Anime\nNews Network et à ses contributeurs.\n",
  "bytes": 29968,
  "sha": "499302b3fd4f31e3d5a0aa8e9230c83abb0dfe322e16ec4bdb7f1335c745c268",
  "repo_slug": "smeet666/mcp-animenewsnetwork",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_smeet666_mcp_animenewsnetwork_cc0e91bb/readme"
}