foolfuuka-mcp-server
Allows searching and retrieving historical 4chan posts from FoolFuuka archives (Desuarchive, 4plebs, b4k, archived.moe).
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@foolfuuka-mcp-serversearch archived posts for 'climate change' on /pol/ board"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
foolfuuka-mcp-server
MCP server for querying 4chan archives (Desuarchive, 4plebs, b4k, archived.moe) via the FoolFuuka API. Enables AI agents to search and retrieve historical archived posts through the Model Context Protocol.
Quick start
# Run directly (no install needed)
npx foolfuuka-mcp-server
# Or install globally
npm install -g foolfuuka-mcp-server
foolfuuka-mcp-serverAdd to your MCP client config (Claude Desktop, VS Code, etc.):
{
"mcpServers": {
"foolfuuka": {
"command": "npx",
"args": ["foolfuuka-mcp-server"]
}
}
}Related MCP server: Substreams Search MCP Server
Configuration
Environment variable | Default | Description |
|
| Root URL of a FoolFuuka archive |
|
| User-Agent header sent with API requests |
| none | Comma-separated board shortnames to display (e.g. |
Desuarchive works out of the box. For Cloudflare-protected archives (4plebs, archived.moe), you may need to run the server on a machine with the archive whitelisted, or use a different base URL.
Tools
search_archive
Full-text search across archived posts with filters.
Parameters: text, boards, subject, username, tripcode, capcode, filename, image, uid, country, deleted, ghost, filter, type, start, end, results, order, page
Returns a markdown table with Board, Thread, Post, Date, Author, Excerpt columns. OP posts are marked with (OP). Use single-board or multi-board mode depending on the boards parameter.
get_thread
Retrieve all posts in a thread.
Parameters: board, num, latest_doc_id (incremental), last_limit (default 100, pass 0 for all)
Returns the OP post and all replies in formatted markdown with author, timestamp, subject, content, and media attachments.
get_post
Retrieve a single post.
Parameters: board, num (supports _ suffix for ghost posts, e.g. "676_1")
Returns post details including author, date, board, thread number, subject, content, media (filename, dimensions, size), and image link when present.
list_boards
List available boards for the configured archive.
Parameters: none
Returns a markdown table of board shortnames and names, plus site name and search-enabled board count. The board list comes from FOOLFUUKA_BOARDS if set, otherwise a desuarchive-curated subset or API response depending on the archive. Boards not in the list still work for search and post lookups.
Examples
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_archive",
"arguments": { "boards": "a", "text": "kamiina botan", "page": 1 }
}
}Response (single-board):
## Search: "kamiina botan" on /a/
Found 25 of 330 matching posts (page 1 of 200, 25 per page)
| Board | Thread | Post | Date | Author | Excerpt |
|-------|--------|------|------|--------|---------|
| /a/ | #288811815 | #288821283 | 2026-06-20 | Anonymous | They say in /au/ that Japanese otakus don't like Kamiina Botan... |
| /a/ | #288749749 | #288763277 | 2026-06-17 | Anonymous | So uh... How about that erm, K-Kamiina Botan? |
| /a/ | #288735782 | #288744910 | 2026-06-16 | Anonymous | Kamiina Botan is the best romance anime of the decade. |
| /a/ | #288692733 | #288705032 | 2026-06-14 | Anonymous | Kamiina Botan the best yuri anime adaptation of all time... |{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get_thread",
"arguments": { "board": "a", "num": 288342508 }
}
}Response:
## Thread #288342508 on /a/
**OP** by Anonymous ā 2026-05-26 14:38:49 UTC
**Subject:** Marriagetoxin
> Best girl is here.
>
> Sorry Kinosaki.
š [SubsPlease] MARRIAGETOXIN - 08 (720p) [50718D73].mkv-2026-05-26-10h38m13s978.jpg (1280Ć720, 234 KB)
---
**#288342579** by Anonymous ā 2026-05-26 14:42:24 UTC
> why is Gero spending so much time with Mei on the weekend?
š [SubsPlease] MARRIAGETOXIN - 08 (720p) [50718D73].mkv-2026-05-26-10h42m06s075.jpg (1280Ć720, 244 KB)
---
**#288344069** by Anonymous ā 2026-05-26 16:06:53 UTC
> Genuinely best girl.
---
**#288345985** by Anonymous ā 2026-05-26 17:40:31 UTC
> >>288342508
> In a series of Best Girls, Hamster Lady is absolutely Best Best Girl.
>
> Her main 'attack' is putting on a Carnivale costume and dancing with hamsters!How it works
The server runs over stdio transport ā it reads JSON-RPC messages from stdin and writes responses to stdout. There is no HTTP server.
LLM <--MCP stdio--> foolfuuka-mcp-server <--HTTP--> FoolFuuka ArchiveAll responses are formatted as markdown rather than raw JSON, making them natural for LLMs to consume without extra parsing.
Rate limits
FoolFuuka archives enforce rate limits (e.g., ~5 requests/minute on 4plebs). The server respects Retry-After headers on 429 responses and surfaces the wait time to the caller.
Development
git clone https://github.com/dynmie/foolfuuka-mcp-server.git
cd foolfuuka-mcp-server
npm install
npm run build
npm testTests are written with Vitest and live in tests/.
License
MIT
Available Tools
4 toolsget_postA
Retrieve a single post from a 4chan archive by board and post number. Parameters: board (shortname), num (post number, can include _ suffix for ghost posts, e.g. "676_1"). Returns post details including author, date, board, thread number, subject, content, and media (filename, dimensions, size) with image link.
| Name | Required | Description | Default |
|---|---|---|---|
| num | Yes | Post number. Can include _ suffix for ghost posts, e.g. "676_1" | |
| board | Yes | Board shortname, e.g. "a" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses return fields (author, date, board, thread number, subject, content, media) and special num format for ghost posts. No annotations provided, so description carries full burden; it is adequate for a read retrieval tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose, second enumerates return fields. No redundant information, front-loaded with key info.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Describes return format adequately given no output schema. Could mention error handling (e.g., post not found) but overall sufficient for a simple retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds value by explaining board is shortname and num can include _ suffix for ghost posts. Provides context beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool retrieves a single post from a 4chan archive by board and post number. Distinguishes from siblings like get_thread (whole thread) and search_archive (search).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains use of board (shortname) and num (with ghost post suffix) parameters, implying when to use this tool. Does not explicitly state when not to use or contrast with siblings, but sibling names provide enough context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_threadA
Retrieve all posts in a thread from a 4chan archive. Parameters: board (shortname), num (thread OP post number), latest_doc_id (incremental fetch, returns only newer posts), last_limit (max posts to return, default 100, pass 0 for all). Returns formatted thread with OP and replies including author, timestamp, subject, content, and media attachments.
| Name | Required | Description | Default |
|---|---|---|---|
| num | Yes | Thread OP post number | |
| board | Yes | Board shortname, e.g. "a" | |
| last_limit | No | Only return the last N posts. Default 100. Pass 0 for all. | |
| latest_doc_id | No | For incremental fetch; returns only posts after this internal doc_id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses key behaviors: returns OP and replies with fields, supports incremental fetch, and last_limit behavior. However, it omits potential traits like rate limits or authentication, which are not critical for this read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences effectively cover purpose, parameters, and return format with no redundancy or irrelevant details. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 params, no output schema), the description fully explains what the tool does, its parameters, and the return structure, making it self-sufficient for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing baseline clarity. The description adds extra context (e.g., 'incremental fetch, returns only newer posts') that goes beyond schema descriptions, enhancing understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Retrieve all posts in a thread from a 4chan archive' with specific parameters and return format, clearly distinguishing it from sibling tools like search_archive, get_post, and list_boards.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains each parameter's purpose and usage (e.g., incremental fetch, last_limit default), but does not explicitly state when to use this tool versus alternatives. However, the purpose is clear enough for an agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_boardsA
List all available boards on the configured 4chan archive. No parameters required. Returns a markdown table with Board and Name columns, plus site name and search-enabled board count.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses behavior: no parameters, returns a markdown table with specific columns (Board, Name) plus site name and search-enabled board count. No mention of side effects, but none expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose: first sentence states action and resource, second sentence clarifies parameters and output format. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no parameters, the description is complete. Specifies output format (markdown table with columns), site name, and count. No output schema, so this description adequately covers what the agent needs to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. Description adds no parameter info because none are needed. Baseline for 0 parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all available boards on the configured 4chan archive', specifying the verb (list), resource (boards), and context (4chan archive). It distinguishes from siblings like search_archive, get_thread, and get_post which have different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'No parameters required', indicating when to use (simple list without input). Does not explicitly mention when not to use, but sibling tools (search, get thread/post) provide natural alternatives for different needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_archiveA
Full-text search across archived 4chan posts. Parameters: text (comment search), boards (dot-delimited, e.g. "a" or "adv.trv"), subject, username, tripcode, capcode, filename, image (MD5 hash), uid, country, deleted, ghost, filter (image/text), type (sticky/op/posts), start/end (YYYY-MM-DD), results (thread to group), order (asc/desc), page. Returns a markdown table with Board, Thread, Post, Date, Author, Excerpt columns.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | End date in YYYY-MM-DD format | |
| uid | No | 4chan Pass UID | |
| page | No | Page number (1-indexed, 25 posts per page) | |
| text | No | Comment text to search for | |
| type | No | sticky, op, or posts | |
| ghost | No | only or none | |
| image | No | Base64 MD5 hash of media | |
| order | No | asc or desc | desc |
| start | No | Start date in YYYY-MM-DD format | |
| boards | No | Dot-delimited board shortnames, e.g. "a" or "adv.trv". Omit to search all boards | |
| filter | No | image or text | |
| capcode | No | One of: user, mod, admin, dev, manager, founder | |
| country | No | 2-letter ISO 3166 country code | |
| deleted | No | deleted or not-deleted | |
| results | No | thread to group by thread, otherwise flat | |
| subject | No | OP subject line search | |
| filename | No | Original filename search | |
| tripcode | No | Tripcode match | |
| username | No | Poster name match |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fails to disclose behavioral traits beyond listing parameters and output format. It does not mention any side effects, authentication needs, rate limits, or important constraints, leaving agents with minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that lists parameters in a run-on sentence; it is not overly long but lacks structured formatting. It is adequate but not highly concise or well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (19 parameters, no output schema), the description provides sufficient context by listing parameters, their meanings, and the return format (markdown table). It is reasonably complete for an agent to understand usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all 19 parameters, so baseline is 3. The description adds meaningful extra context such as dot-delimited boards, date format, page indexing, and output columns, which enhances understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Full-text search across archived 4chan posts' with a specific verb and resource, and the sibling tools get_thread, get_post, and list_boards are distinct, so agents can differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for searching across posts, but does not explicitly state when to use this tool versus alternatives like get_thread or get_post, nor does it provide exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.3- First observed
get_post - First observed
get_thread - First observed
list_boards - First observed
search_archive
TDQS
Scored across 4 tools
Each tool serves a distinct purpose: global search, thread retrieval, single post retrieval, and board listing, with no functional overlap.
All tools follow a consistent verb_noun pattern (search_archive, get_thread, get_post, list_boards), making them predictable.
With only 4 tools, the set is minimal but well-scoped for a read-only archive viewer; slightly underpopulated but not insufficient.
Covers all basic read operations (search, thread, post, board list) for the domain; no obvious missing operations for the intended use case.
Related MCP Connectors
MCP server for AI dialogue using various LLM models via AceDataCloud
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
An MCP server that gives your AI access to the source code and docs of all public github repos
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for using various search tools like Tavily API. Planning to support various search tools (i.e. wiki search, searxng, etc)3MIT
- AlicenseAqualityBmaintenanceMCP server that lets AI agents search the substreams.dev package registry.166 npmMIT
- AlicenseBqualityAmaintenanceMCP server that exposes any Telegram-Archive instance to LLMs, enabling message search, chat browsing, and access to archived Telegram history.746 npm4GPL 3.0
- AlicenseNot gradedqualityCmaintenanceA MCP server for DuckDuckGo HTML search. Unlike other DuckDuckGo MCP servers, this one isn't just AI slop.ISC