Recommends upsell items from a catalog based on category compatibility
This is a minimal Python library without MCP protocol implementation. The single tool 'recommend' has a basic description and parameter definitions visible in the code, but lacks critical elements required for production agent tooling. The tool is a pure Python class method with no MCP server scaffolding, schema is not formally declared in JSON Schema format, parameter descriptions are missing from the code, error handling is absent, and there is no evidence of MCP protocol compliance. This is a reference implementation or SDK, not an MCP server.
Recommends upsell items from a catalog based on category compatibility
No MCP server implementation detected. The repository contains only a Python client library (client.py) with a single UpsellRecommenderClient class method. There is no MCP protocol handler, tool registration via MCP, or server scaffolding (e.g., no SSE/HTTP endpoints, no MCP message handling).
Input parameters lack descriptions. The recommend() method signature in client.py shows cart_items and available_catalog as list[dict] with inline docstring fragments, but there are no formal parameter descriptions explaining what each field within the dicts should contain, expected ranges, or format constraints. LLMs cannot infer parameter meaning from type hints alone.
No formal JSON Schema provided. While the code shows input types (list[dict]), there is no explicit JSON Schema definition with properties, required fields, type declarations, or field-level descriptions. Input validation and schema documentation are missing.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 30 | 2026-07-28+ | v2 |
Output schema not documented. The recommend() method returns {'upsell_recommendations': recs} where recs is a list of dicts with product_id, name, price, and recommendation_score. The structure is inferred from code, not formally declared. LLMs cannot reliably plan downstream operations without explicit output schema documentation.
Tool name 'recommend' is vague and lacks an action verb at the start. Per naming conventions, tool names should start with clear action verbs (e.g., get_, create_, search_). 'recommend' could mean many things, 'get_upsell_recommendations' or 'suggest_complementary_products' would be clearer.
No error handling or recovery guidance. The recommend() method silently filters items and returns results without validating input format, handling missing fields (e.g., if 'id' or 'category' is absent), or providing error messages. Edge cases like empty cart_items or available_catalog are not handled.
No pagination or result limiting documented. The code returns up to 3 recommendations hardcoded (recs[:3]), but there is no parameter to control this limit, no documentation of the max results, and no pagination support. If the catalog grows, context bloat could occur without explicit limits documented in the tool schema.
No idempotency or side-effect guarantees. The tool description says 'Recommends upsell items from a catalog based on category compatibility' but does not state whether the operation is read-only, whether it modifies state, or whether repeated calls with the same input return the same output. The Risk field shows READ_ONLY, but this is not documented in the tool description itself.
No tool annotations present. The MCP spec (2026-07-28) supports tool annotations including readOnlyHint, destructiveHint, and idempotentHint. This tool is marked READ_ONLY but has no formal annotation in the schema to signal this to the LLM.