An MCP server for a bookstore e-commerce system with book exploration and shopping cart management tools. Integrates with Firebase for data persistence and OpenAI for an AI agent interface.
This server has significant definition quality gaps. Of 6 tools, one (additionTool) is completely undocumented. Tool names are inconsistent: most end with 'Tool' suffix which is redundant in an MCP context. Descriptions range from adequate (getBooksTool: 62 chars) to sparse (getCartCountTool: 59 chars). Most critically, tools with no input parameters (getBooksTool, getCartItemsTool, getCartCountTool) have empty schemas but acceptable descriptions. The addProductToCartTool shows good parameter-level documentation with nullable and positional constraints, but additionTool's source is completely absent, preventing evaluation. Error handling is present in all tools but generic ('Failed to X'). No parameter descriptions mention valid ranges, formats, or dependencies. Output schemas are not documented, callers cannot know what fields to expect from getBooksWithAuthors() or cartRepository.getBookVariants().
Adds a product to a user's or guest's cart. Automatically creates a cart if one doesn't exist.
Returns all book variants in the bookstore, optionally filtered by bookId
Returns all books in the bookstore, including author details
Returns the total count of items in the shopping cart
Returns the current items, quantities, and prices in the shopping cart
additionTool source file not provided; completely undocumented and unverifiable
Output schemas are not documented for any tool. Callers cannot know what fields to expect. E.g., does getBooksWithAuthors() return {id, title, author: {name, id}}? Does getBookVariants return pricing, stock, formats?
No pagination or result limit guidance. Tools return 'all' results (books, variants, cart items) without page/offset parameters or documented limits. LLM will not know when to expect truncation.
Tool names end with 'Tool' suffix (getBooksTool, addProductToCartTool, etc.). This is redundant in MCP context where tools are already registered as tools. Verb-noun pattern (getBooks, addProductToCart) is clearer and saves tokens.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 8 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 35 | - | v1 |
Error messages are generic ('Failed to fetch bookstore books'). Do not guide LLM on recovery actions. Should include: 'If bookstore is uninitialized, call seed:bookstore first.'
Parameter descriptions lack format/constraint info. E.g., bookId: 'Optional book ID to filter variants' does not specify format (UUID? numeric? alphanumeric?), min/max length, or example pattern.
Inconsistent cart identity model. getCartItemsTool and getCartCountTool accept no parameters but return cart state. Which cart? Current user's? Active guest session's? How does the server know which cart to return?