MCP server for discovering UCP merchants, browsing catalogs, and comparing products
Server has 4 well-named tools with complete Zod schemas and descriptions. All tools follow verb_noun naming (discover_merchant, search_products, get_product, compare_products). Descriptions are present and contextual (avg ~150 chars), exceeding the 10-char minimum. However, output schemas are not documented, responses are returned as plain text strings rather than structured objects, forcing LLMs to parse unstructured data. Parameter descriptions are good but lack explicit constraints (e.g., minPrice/maxPrice have no range bounds stated). Error handling returns text messages but does not categorize errors as retryable/user-fixable/fatal or provide recovery guidance. No tool annotations (readOnlyHint, idempotentHint) despite all tools being read-only.
Compare multiple products side-by-side across merchants. Shows pricing, availability, variants, and options for each product. Results are sorted by lowest price.
Discover a UCP-enabled merchant by fetching their /.well-known/ucp profile. Returns supported capabilities, services, and payment handlers. The merchant is registered for subsequent search and lookup operations.
Get full details for a specific product from a UCP merchant, including all variants, pricing, media, and availability.
Search for products across all discovered UCP merchants (or a specific one). Returns matching products with prices, availability, and merchant info. Requires at least one merchant to be discovered first.
Output schemas not documented. All tools return plain text strings instead of structured JSON objects. LLMs cannot parse results reliably or extract fields for downstream tool calls.
Numeric parameters (minPrice, maxPrice) lack explicit range constraints. Descriptions do not state min/max bounds, allowing LLMs to pass invalid values (negative prices, unreasonable limits).
Error handling returns generic text messages without recovery guidance. Errors are not categorized as retryable vs. fatal. LLMs cannot determine whether to retry, ask user, or abandon the operation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Tool annotations missing. All tools are read-only (no state modification), but readOnlyHint is not declared. Agents cannot infer safety properties without explicit annotations.
search_products lacks pagination support. No limit, offset, or cursor parameters. Large result sets will be truncated or cause context window exhaustion.