MCP server for accessing a Bookshop API with public catalog browsing and OAuth 2.0-authenticated personalized book lists and profiles
Three tools with minimal parameter schemas and inconsistent description quality. No tools document output schemas. No error handling guidance. No tool annotations. Naming is clear (verb_noun pattern), but parameter documentation is absent.
Get your personalized book list via OAuth 2.0. Opens the Bookshop sign-in page in your browser — you log in there. Your credentials never pass through Claude. After you approve, this tool fetches only the books you have access to. Named users to try: alice (password: alice123) or bob (password: bob123)
Get your profile (who am I) via OAuth 2.0. Opens the Bookshop sign-in page in your browser — credentials never pass through Claude.
List all books in the public catalog (no login required).
All tools have empty input schemas (Input: {}). No parameter descriptions exist. This prevents LLMs from understanding what inputs are valid or required.
No output schemas documented. LLMs cannot plan downstream calls or extract required fields. list_books returns list[dict], get_my_books returns dict with nested structure, get_my_profile returns dict, all undocumented.
get_my_books description includes test credentials (alice/bob passwords) and implementation details (OAuth flow mechanics). LLMs may reuse example credentials literally.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
No error handling guidance. OAuth flow can timeout (120s), state mismatch can occur, HTTP calls can fail. Tools return raw dicts on error (e.g., {"error": "..."}) with no recovery hints.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All three tools are read-only and idempotent, but this is not declared in the tool definition. Per current spec (2026-07-28), tool annotations enable better agent planning.