MCP Server for searching and comparing ebook prices across TW bookstores
Three tools with clear verb-noun naming (list_, search_, get_). All have descriptions (avg 95 chars, within baseline 34-392). Input schemas present with Zod validation. However, output schemas are undocumented, responses are JSON-stringified without field documentation. Parameter descriptions are adequate but lack format constraints (e.g., no regex for search keywords, no enum for bookstore IDs). Error handling returns user-facing messages but lacks recovery guidance or error classification. No tool annotations (readOnlyHint, idempotentHint). Missing pagination support on search_ebooks despite potentially large result sets.
Retrieve a past search result by its ID
List all supported ebook bookstores in Taiwan with their online status
Search for ebooks across Taiwan bookstores and compare prices. Returns results from multiple bookstores.
Output schemas undocumented. Tools return JSON.stringify(data) without field documentation. LLMs cannot plan downstream operations or extract specific fields reliably.
No pagination support on search_ebooks. Tool accepts maxResultsPerBookstore but no offset/limit/cursor. Large result sets risk context window exhaustion.
Error responses lack recovery guidance. Errors return user-facing messages but do not classify as retryable/user-fixable/fatal or suggest next steps (e.g., 'Try list_bookstores() first').
No tool annotations. Tools lack readOnlyHint, destructiveHint, or idempotentHint. LLMs cannot infer safety properties or retry behavior.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Parameter constraints missing. 'keywords' accepts any string; 'bookstores' array has no enum of valid IDs; 'maxResultsPerBookstore' lacks min/max bounds. LLMs may pass invalid values.