This server has 3 tools with basic descriptions and Zod schemas, but significant quality gaps prevent a higher score. Tool naming is reasonable (verb_noun convention followed), but descriptions are thin and lack depth. Parameter schemas are present with Zod definitions and descriptions, which is good. However, output schemas are undocumented, error handling is minimal, and critical production patterns are missing. The server reads external 4chan APIs but lacks pagination support despite returning unbounded thread/post lists, lacks per-item error handling, and provides no guidance for LLM recovery on failure. Composition is clean (three separate tools), but the tools lack idempotency hints and destructive/readonly semantic markers. No toolAnnotations (readOnlyHint, etc.) despite all tools being read-only.
Fetch list of 4chan boards
Fetch posts from a 4chan thread
Fetch threads from a 4chan board
No output schema documentation. Tool definitions in index.ts show return statements with text/content format, but no formal schema defining the structure LLMs should expect. This forces LLMs to infer field names and types, increasing hallucination risk.
No pagination support. fetchThreads and fetchPosts return unbounded lists from 4cdn API. If a board has 50+ threads or a thread has 100+ posts, results can exceed context limits. API supports pagination; tools do not expose page/limit parameters or document result counts.
Minimal error handling and no recovery guidance. API calls throw generic Error objects (see api.ts lines 19, 25, 32). If a thread is deleted or a board is invalid, the error message has no actionable next steps for the LLM (e.g., 'Try searching for similar board names' or 'Board may be archived').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 57 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 33 | - | v1 |
Missing tool annotations. All three tools are read-only (as specified in Risk: READ_ONLY), but the server does not declare readOnlyHint in tool definitions. This forces LLMs to infer safety from descriptions, increasing error likelihood.
Tool descriptions are thin. 'Fetch list of 4chan boards' (3 words) does not explain WHEN to call this (e.g., 'Call first to discover available boards'), WHAT it returns, or any prerequisites.
Parameter 'board' accepts any string, but 4chan boards are a fixed set. Should be an enum (e.g., 'g', 'b', 'pol', 'v', etc.) or a discovery pattern. Free-form strings invite hallucinated values like 'board: xyz' which will fail silently at runtime.
No idempotency semantics. 4chan is a read-only API, so all tools are naturally idempotent, but this is not declared. LLMs do not know whether it is safe to retry on transient network failure without risk of duplicate side effects. Add idempotentHint annotations.