MCP server for searching and browsing Douban (Chinese media database) - books, movies, and group topics
Server defines 7 tools with basic schemas using Zod and descriptions. All tools have names starting with action verbs (search, list, get, browse) and descriptions present. However, descriptions are generic (10-40 chars, well below the 50-200 char LLM-optimized baseline). Parameter descriptions exist but lack detail on constraints, formats, and dependencies. No output schemas documented. Error handling is minimal, most tools only validate required params but don't guide recovery. No tool annotations (readOnlyHint, destructiveHint). The 'browse' tool has a side effect (opens browser) but lacks a confirmation pattern. Overall structure is present but lacks production-grade polish.
open default browser and browse douban book detail
get group topic detail
list book reviews
list group topics
list movie reviews
search books from douban, either by ISBN or by query
search movies from douban by query
Descriptions are too short (10-40 chars) and lack LLM-optimized context. Baseline is 50-200 chars. Examples: 'list book reviews' (18 chars), 'get group topic detail' (21 chars). LLMs cannot determine when to select these tools vs similar ones.
No output schemas documented. Tools return json2md tables or markdown text, but LLMs don't know the structure of returned fields (title, rating, id, etc.). This forces LLMs to parse unstructured output, wasting tokens and increasing hallucination risk.
Parameter descriptions lack constraint details. 'query string, e.g. "python"' does not specify length limits, character restrictions, or when to use ISBN vs query. LLMs cannot validate inputs before calling.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 44 | 2026-07-28+ | v2 |
browse tool opens a browser as a side effect but lacks confirmation or dry-run pattern. Agents may invoke this unintentionally. No warning that this is a destructive/interactive operation.
Error messages are minimal. Most tools only check if required params are present, then throw generic McpError. No guidance on what to do next (e.g., 'Try search_books() first to find a valid ID'). No recovery hints.