内容
# AniList MCP 服务器
AniList 的 [MCP](https://modelcontextprotocol.io) 服务器。
它与任何兼容 MCP 的客户端或代理(Claude Desktop/Code、Cursor、VS Code、Cline、Continue 等)配合使用 — 服务器采用标准 MCP stdio 协议。
## 功能
直接与 AniList 的公共 GraphQL API (`https://graphql.anilist.co`) 通信:
- **读取 — 无需凭证。** 搜索和浏览动漫/漫画、角色、工作人员、工作室;类型/标签;推荐;论坛帖子;活动动态;公开/非公开用户资料和列表。
- **您自己的 AniList 账户 — 需要一次性登录。** 管理您自己的动漫/漫画列表(添加/更新/删除条目)、收藏、关注、通知和发布/删除您自己的活动和帖子。
## 您需要(以及它能为您提供什么)
开始使用无需任何设置 — 您可以直接跳转到 [安装](#安装)。以下所有内容都是可选的:
| 您设置... | 您获得... |
| -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| _(无)_ | 搜索、详情、类型/标签、推荐、帖子、活动、公开资料/列表 — 立即生效。 |
| AniList **客户端 ID + 客户端密钥** ([2 分钟,免费 →](#连接您的anilist账户)),并运行一次 `login_anilist` | 上述所有功能,以及您**自己的 AniList 账户**:管理您的列表、收藏、关注、活动和帖子。 |
无需登录,个人/变更工具会以清晰的信息回复,告诉您如何获取 — 其他功能不受影响,依旧可用。
## 示例查询
连接后,只需用自然语言询问您的代理。
**无需凭证:**
```
"搜索动漫 Frieren 并显示其评分、类型和简介。"
"AniList 对 Steins;Gate 粉丝有哪些推荐?"
"显示今天的生日角色。"
"AniList 为动漫使用了哪些类型和标签?"
"显示用户 <username> 的公开资料和统计信息。"
"<username> 的 AniList 动漫列表中标记为正在观看的内容是什么?"
```
**使用您的 AniList 账户** (一次性 `login_anilist` 后;参见 [连接您的 AniList 账户](#连接您的anilist账户)):
```
"将 Frieren 添加到我的 AniList 计划观看列表中。"
"在我的 AniList 上将 Cowboy Bebop 设置为已完成,评分为 9。"
"关注用户 <username>。"
"在我的 AniList 活动动态中发布文本更新。"
"我的 AniList 未读通知是什么?"
```
## 工具
| 工具 | 认证 |
| ----------------------------------------------------------------------------------------------------- | ----- |
| `get_genres`, `get_media_tags`, `get_site_statistics`, `get_studio` | 无 |
| `get_media`, `get_media_statistics`, `get_media_characters`, `get_media_staff` | 无 |
| `get_media_reviews`, `get_media_relations`, `get_anime_schedule` | 无 |
| `get_character`, `get_staff`, `get_todays_birthdays` | 无 |
| `get_recommendation`, `get_recommendations_for_media` | 无 |
| `search_media`, `search_character`, `search_staff`, `search_studio`, `search_user`, `search_activity` | 无 |
| `get_thread`, `get_thread_comments` | 无 |
| `get_user_profile`, `get_user_stats`, `get_full_user_info`, `get_user_recent_activity` | 无 |
| `get_activity`, `get_user_activity` | 无 |
| `get_user_list` | 无 |
| `favourite` | token |
| `add_list_entry`, `update_list_entry`, `remove_list_entry` | token |
| `post_text_activity`, `post_message_activity`, `delete_activity` | token |
| `delete_thread` | token |
| `get_authorized_user`, `follow_user`, `update_user` | token |
| `get_notifications` | token |
| `login_anilist`, `submit_anilist_redirect` | 登录 |
`token` = 需要 AniList 登录(运行一次 `login_anilist`)。
## 提示
可重用的多步骤计划,您的客户端可以作为一键式流程提供:
`recommend_similar`, `seasonal_overview`, `hidden_gems`, `catch_up_activity`, `check_notifications`.
## 安装
### 作为 `.mcpb` 包(一键式,例如 Claude Desktop)
下载 [**`anilist-mcp-server.mcpb`**](https://github.com/Grinv/anilist-mcp-server/releases/latest/download/anilist-mcp-server.mcpb) (始终是最新版本)并用您的 MCP 客户端打开它。它提示输入可选的 AniList **客户端 ID** 和 **客户端密钥** — 设置它们并运行 `login_anilist` 工具以启用个人列表/社交工具(参见 [连接您的 AniList 账户](#连接您的anilist账户))。留空即可使用无需凭证的读取工具。
### 从源码
```sh
git clone https://github.com/Grinv/anilist-mcp-server
cd anilist-mcp-server
npm ci
npm run build
```
这会生成一个独立的 `dist/index.js`。将您的客户端指向它(参见下文)。
## 连接到 MCP 客户端
将服务器添加到客户端的 MCP 配置(Claude Desktop/Code、Cursor、VS Code、Cline、…):
```json
{
"mcpServers": {
"anilist": {
"command": "node",
"args": ["/绝对路径/to/anilist-mcp-server/dist/index.js"],
"env": {
"ANILIST_CLIENT_ID": "...",
"ANILIST_CLIENT_SECRET": "..."
}
}
}
}
```
或使用 Claude Code CLI:
```sh
claude mcp add anilist -e ANILIST_CLIENT_ID=... -e ANILIST_CLIENT_SECRET=... -- node /绝对路径/to/anilist-mcp-server/dist/index.js
```
`env` 块是**可选的** — 忽略它即可使用无需凭证的读取工具;个人/变更工具将返回清晰的错误,直到您登录。 要启用它们,请设置 `ANILIST_CLIENT_ID` + `ANILIST_CLIENT_SECRET` 并运行 **`login_anilist`** 工具一次(一次性浏览器授权;然后存储并重用令牌)。 服务器不读取 `.env` 文件,因此请通过此 `env` 块(或您的 shell 环境)传递配置。 参见 [docs/auth.md](docs/auth.md) 了解完整的登录演练和 [docs/clients.md](docs/clients.md) 了解更多客户端。
## 连接您的 AniList 账户
搜索/浏览工具**无需设置**即可使用。 要使用个人/变更工具,请授权您的账户一次。 这大约需要两分钟。
**步骤 1 — 注册 AniList 应用(1 分钟)。**
1. 前往 <https://anilist.co/settings/developer> 并点击 **创建新客户端**。
2. **名称:** 任意。
3. **重定向网址:** 请输入确切的
```
http://localhost:8082/callback
```
_(如果端口 8082 已被您的机器使用,请在此选择另一个端口并设置 `ANILIST_OAUTH_PORT` 为相同号码 — 参见 [配置](#配置)。_
4. 保存。 复制 **客户端 ID** 和 **客户端密钥**。
**步骤 2 — 将凭证提供给服务器。**
```json
"env": { "ANILIST_CLIENT_ID": "...", "ANILIST_CLIENT_SECRET": "..." }
```
重启服务器/客户端,以便它获取这些值。
**步骤 3 — 登录(一键式)。**
在您的助手运行 **`login_anilist`** 工具(或直接说 _"登录到 AniList"_)。 它会回复一个链接。 打开链接,登录到 AniList,然后点击 **批准**。
- **在本地运行** (Claude Desktop 或 Claude Code 在您自己的机器上):登录在您点击批准的那一刻**自动**完成。 通过 _"显示我的 AniList 资料"_ (`get_authorized_user`) 确认。
- **在远程/SSH/无头主机上运行:** 在您点击批准后,您的浏览器会进入一个无法加载的页面 — 这是预期的。 **复制浏览器地址栏中的完整地址** (它包含 `?code=…`)并提供给 **`submit_anilist_redirect`** 工具以完成。
就是这样。令牌存储在本地(`~/.config/anilist-mcp-server/tokens.json`,`0600`)。AniList 访问令牌大约一年内不会过期,并且没有刷新机制 — 您需要再次运行 `login_anilist`。
> **不喜欢交互式步骤?** 提前设置一个独立的 `ANILIST_ACCESS_TOKEN`。 参见 [docs/auth.md](docs/auth.md)。
## 配置
所有配置均通过环境变量完成,所有变量均为可选 — 无凭证的读取工具仍然有效。
| 变量 | 目的 |
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `ANILIST_CLIENT_ID` | 您的 AniList 应用的客户端 ID — 参见 [连接您的 AniList 账户](#连接您的anilist账户)。 |
| `ANILIST_CLIENT_SECRET` | 您的 AniList 应用的客户端密钥,与上述客户端 ID 配对。 |
| `ANILIST_ACCESS_TOKEN` | _高级,可选。_ 预先提供令牌,而不是运行 `login_anilist`。 参见 [docs/auth.md](docs/auth.md)。 |
| `ANILIST_TOKEN_STORE` | 覆盖登录令牌在磁盘上保存的位置(默认:您的操作系统的配置文件文件夹)。 |
| `ANILIST_OAUTH_PORT` | 仅当端口 `8082` 已被使用时需要 — 参见 [账户演练](#连接您的anilist账户) 的步骤 1。 |
| `LOG_LEVEL` | 服务器记录的内容:`debug` \| `info` \| `warn` \| `error` \| `silent` (默认 `info`)。 |
### 调整(很少需要)
| 变量 | 目的 |
| ----------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ANILIST_MIN_INTERVAL_MS` | AniList 调用之间的最小间隔(默认 `2100`,即约 30/分钟 — AniList 的 API 当前处于文档记录的降级状态;参见 [docs/api-references.md](docs/api-references.md))。设置为 `0` 以禁用客户端节流。 |
| `CACHE_TTL_MS` | 内存读取缓存的 TTL(默认 `300000` = 5 分钟)。 |
| `HTTP_TIMEOUT_MS`, `HTTP_RETRIES` | 每个请求的超时时间(默认 `15000`)和暂时失败的重试尝试次数(默认 `2`)。 |
| `ANILIST_GRAPHQL_URL`, `ANILIST_OAUTH_BASE_URL` | 覆盖上游基准 URL。 |
在您的 MCP 客户端配置的 `env` 块中提供这些(服务器**不**读取 `.env` 文件)。 参见 [docs/auth.md](docs/auth.md) 了解如何获取凭证, [docs/clients.md](docs/clients.md) 了解客户端配置片段。
## NSFW 内容
NSFW(成人)结果**不**默认过滤 — 服务器返回 AniList 提供的所有内容。 `search_media` 接受一个可选的 `sfw` 参数;设置 `sfw: true` 以排除成人条目。
## 开发
```sh
npm run build # 类型检查 + 捆绑到 dist/
npm test # node:test 套件(模拟,离线)
npm run test:coverage
npm run lint
npm run format
npm run check:api # AniList GraphQL 端点的实时健康检查
npm run inspector # 在 MCP 检查器下运行
```
运行时需要 Node ≥ 20。 参见 [AGENTS.md](AGENTS.md) 了解贡献者/代理指南,包括为什么存在此服务器以及它如何避免上游错误(该错误促使创建此服务器)。
## 更新
要接收新版本通知,请在 GitHub 上点击 **关注 → 版本**。
- **`.mcpb` 包:** 从 [版本页面](https://github.com/Grinv/anilist-mcp-server/releases) 下载新的 `anilist-mcp-server.mcpb` 并在您的客户端重新安装(它将替换旧版本)。
- **从源码:** `git pull && npm ci && npm run build`.
参见 [CHANGELOG](CHANGELOG.md) 了解每个版本的变化。
## 归属和条款
本项目是**非官方**的,与 AniList 无关,也未获得 AniList 的认可。 所有数据均来自公共 [AniList GraphQL API](https://docs.anilist.co);个人账户操作使用您自己的 AniList 账户和令牌。 使用受 [AniList 服务条款](https://anilist.co/terms) 的约束。
## 许可证
[MIT](LICENSE) © Grinv
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器