This server has two tools with critical definition gaps. Both tools lack parameter descriptions, have minimal tool descriptions (under 50 chars), and provide no output schema documentation. The get-book tool accepts an array parameter but does not describe what values are expected, their format, or constraints. The get-popular-book tool has no parameters documented at all. Error handling is present in code but generic ('failed to get book'). No structured output documentation exists, responses are JSON stringified text with no schema. Tools are read-only but lack explicit risk annotations in definitions.
按名字或类型查找书,参数为中文
查找本站热门的、最受欢迎的、最多人看的书
Tool descriptions are too short (under 20 chars when excluding Chinese; under 50 chars in English equivalent). At 10 - 1024 chars, descriptions must provide WHAT the tool does, WHEN to use it, and any prerequisites. Current descriptions in Chinese do not translate to actionable guidance for LLMs.
No parameter descriptions. The 'type' parameter in get-book is defined as an array of strings with no description of what each string should be, what format is expected (book titles? categories? ISBN codes?), or constraints. LLMs cannot infer parameter meaning from names alone.
No output schema documented. Tools return stringified JSON with no declared schema, making it impossible for LLMs to plan downstream calls or extract data reliably. The Book type is defined in lib/definitions.ts but not exposed in tool output documentation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 37 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 27 | - | v1 |
Generic error handling. Both tools return 'failed to get book' on any error, with no guidance on what went wrong, whether the call is retryable, or what the LLM should do next. Errors should be actionable per pattern:recovery-guide.
Pagination not exposed in tool interface. The get-book function accepts a currentPage parameter (defaulting to 1) and implements pagination (ITEMS_PER_PAGE = 7), but the MCP tool does not expose pagination controls. LLMs cannot request specific pages or know result count.
Parameter semantics ambiguous. The 'type' parameter is named suggestively but described as 'Array of Chinese book names or categories' without distinguishing when to pass names vs categories or whether both can coexist in the same array.
No schema constraints. The 'type' parameter is z.string().array() with no length bounds, no content validation (e.g., minimum query length), and no enum or pattern constraints to prevent invalid input like empty strings or extremely long queries.