loading…
Search for a command to run...
loading…
MCP server for the Zerochan anime image board API. Browse the global feed, search by tags, and retrieve full entry metadata — directly from any MCP-compatible A
MCP server for the Zerochan anime image board API. Browse the global feed, search by tags, and retrieve full entry metadata — directly from any MCP-compatible AI assistant.
A Python MCP server wrapping the read-only Zerochan anime image board API. Connect it to Claude Desktop, Cursor, or any MCP-compatible AI assistant to browse, search, and inspect one of the web's most comprehensively tagged anime image collections — directly from a conversation.
Built as a sister server to gelbooru-mcp.
Hatsune Miku, not hatsune_miku)gitgit clone https://github.com/citronlegacy/zerochan-mcp.git
cd zerochan-mcp
chmod +x setup.sh && ./setup.sh
Or without chmod:
bash setup.sh
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Zerochan requires a valid username in every request's User-Agent header. Unauthenticated requests are blocked.
export ZEROCHAN_USERNAME="YourZerochanUsername"
Your username is included in the User-Agent string as
zerochan-mcp - YourUsername, exactly as Zerochan's API requires. The server validates this on every call and returns a clear error message if it is missing — no silent failures.
# via the venv created by setup.sh:
.venv/bin/python server.py
# or with the venv activated:
source .venv/bin/activate
python server.py
Add the following to your claude_desktop_config.json:
{
"mcpServers": {
"zerochan-mcp": {
"command": "/absolute/path/to/zerochan-mcp/.venv/bin/python",
"args": ["/absolute/path/to/zerochan-mcp/server.py"],
"env": {
"ZEROCHAN_USERNAME": "YourZerochanUsername"
}
}
}
}
Configure according to your client's documentation:
/absolute/path/to/zerochan-mcp/.venv/bin/python/absolute/path/to/zerochan-mcp/server.pyZEROCHAN_USERNAME=YourZerochanUsernamenpx @modelcontextprotocol/inspector .venv/bin/python server.py
"Show me the 10 most recent images on Zerochan."
The LLM calls zerochan_browse with limit: 10, sort: "id" and returns a paginated Markdown table of the newest uploads — IDs, tags, dimensions, and direct links.
"What are the most popular images on Zerochan of all time?"
The LLM calls zerochan_browse with sort: "fav", time_range: "0" and returns the highest-favorited entries globally.
"Find me portrait-mode images of Hatsune Miku."
The LLM calls zerochan_search with tags: ["Hatsune Miku"], dimensions: "portrait". No tag normalization required — Zerochan's Title Case maps almost one-to-one with how people naturally write character names.
"Show me Rem from Re:Zero with an umbrella."
The LLM calls zerochan_search with tags: ["Rem", "Umbrella"]. Zerochan joins them as /Rem,Umbrella?json internally, returning only images tagged with both simultaneously.
"I only want images where Hatsune Miku is the actual primary subject, not just tagged."
The LLM calls zerochan_search with tags: ["Hatsune Miku"], strict: true. This filters to entries where Hatsune Miku is the primary tag, removing group shots and background appearances.
"Give me all the details on Zerochan entry 3793685 — tags, source, full image URL."
The LLM calls zerochan_get_entry with entry_id: 3793685 and returns a complete metadata card: every tag, full/medium/small image URLs, source, dimensions, favorites, and associated anime/game/manga categories.
"Search for Yotsuba images and give me the raw JSON."
The LLM calls zerochan_search with tags: ["Yotsuba"], response_format: "json" and returns the unprocessed Zerochan API payload ready for further processing.
| Tool | Description | Key Parameters |
|---|---|---|
zerochan_browse |
Browse the global Zerochan feed | page, limit, sort, time_range, dimensions, color |
zerochan_search |
Search entries by one or more tags | tags, strict, page, limit, sort, dimensions, color |
zerochan_get_entry |
Get full metadata for a single entry by ID | entry_id |
All tools accept response_format: "markdown" (default) or "json".
zerochan_browseBrowse all Zerochan entries with optional filtering and pagination. No tag required — queries the full global feed.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
page |
int | ❌ | 1 | Page number (starts at 1) |
limit |
int | ❌ | 20 | Results per page (1–250) |
sort |
enum | ❌ | id |
id = newest first, fav = most favorited |
time_range |
enum | ❌ | — | 0 = all time, 1 = last 7 000 entries, 2 = last 15 000 entries |
dimensions |
enum | ❌ | — | large, huge, landscape, portrait, square |
color |
str | ❌ | — | Dominant color name, e.g. blue, red, pink |
response_format |
enum | ❌ | markdown |
markdown or json |
Example response
### Zerochan Results from `Global Feed`
| ID | Tags | Dimensions | Favorites | Full Image |
|---|---|---|---|---|
| 4666171 | Female, Twin Tails, Flower, Hatsune Miku, Music (+33 more) | 1000×1500 | ? | View |
zerochan_searchSearch Zerochan entries by one or more tags. Tags use Zerochan's Title Case with spaces format.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
tags |
list[str] | ✅ | — | One or more tags, e.g. ["Hatsune Miku"] or ["Rem", "Umbrella"] |
strict |
bool | ❌ | false | Restrict to entries where the first tag is the primary tag (single-tag only) |
page |
int | ❌ | 1 | Page number |
limit |
int | ❌ | 20 | Results per page (1–250) |
sort |
enum | ❌ | id |
id = newest, fav = most favorited |
dimensions |
enum | ❌ | — | large, huge, landscape, portrait, square |
color |
str | ❌ | — | Dominant color filter |
response_format |
enum | ❌ | markdown |
markdown or json |
Tag format: Zerochan uses Title Case with spaces —
Hatsune Mikunothatsune_miku. Natural-language character names work verbatim in most cases.
Multi-tag:
tags: ["Hatsune Miku", "Flower"]→/Hatsune+Miku,Flower?json
Strict mode: Only works with a single tag. Silently ignored when multiple tags are provided.
zerochan_get_entryRetrieve complete metadata for a single Zerochan post by its numeric ID.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
entry_id |
int | ✅ | — | Numeric post ID, e.g. 3793685 (visible in the post URL) |
response_format |
enum | ❌ | markdown |
markdown or json |
Example response (markdown)
## Zerochan Entry #3793685
**Primary Tag:** Hatsune Miku
**Dimensions:** 1748 × 2480
**Favorites:** 42
**Source:** https://...
**Tags (28):** Hatsune Miku, VOCALOID, Female, Twin Tails, ...
**Full Image:** https://static.zerochan.net/...
**Medium Preview:** https://static.zerochan.net/...
Response schema (JSON)
{
"id": 3793685,
"primary": "Hatsune Miku",
"tags": ["Hatsune Miku", "VOCALOID", "Female", "..."],
"width": 1748,
"height": 2480,
"fav": 42,
"source": "https://...",
"full": "https://static.zerochan.net/...",
"medium": "https://static.zerochan.net/...",
"small": "https://static.zerochan.net/...",
"anime": "VOCALOID",
"manga": null,
"game": null
}
Hatsune Miku, Rem, Attack On Titan. Unlike Gelbooru/Danbooru, natural-language names map directly to Zerochan tags in most cases.["Rem", "Rain"], ["Naruto", "Ramen"]).zerochan_browse and zerochan_search return up to 250 results per call. Use page to paginate through up to 100 pages (20 000 entries) per tag.zerochan.net/3793685). Pass them to zerochan_get_entry to resolve full metadata.ZEROCHAN_USERNAME is not set
"env" block, or: export ZEROCHAN_USERNAME="YourUsername"Error 403 — Access denied
Error 429 — Rate limit
Error 404 — Not found
Strict mode returns fewer results than expected
Pull requests are welcome! If you find an API edge case not handled, a tag format inconsistency, or want to add a new filter, open an issue or PR.
git clone https://github.com/citronlegacy/zerochan-mcp.git
cd zerochan-mcp
bash setup.sh
source .venv/bin/activate
MIT License — see LICENSE for details.
This server is one piece of a planned MultiBoru federated image board MCP that will aggregate Gelbooru, Danbooru, and Zerochan queries in parallel with cross-site tag normalization.
| Site | Max Tags | Tag Format | Auth |
|---|---|---|---|
| Gelbooru | Many | snake_case |
Optional API key |
| Danbooru | 2 (free) / 6 (Gold) | snake_case |
Optional |
| Zerochan | Many | Title Case |
Username in User-Agent |
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"zerochan-mcp": {
"command": "npx",
"args": []
}
}
}