Juniper outdoor gear commerce platform — onX reference implementation with full UCP integration. Provides tools for browsing product catalog, managing inventory, creating and fulfilling orders, and handling returns.
Juniper Commerce defines 12 tools with complete JSON Schema input parameters and descriptions. Naming follows verb_noun convention (get_*, create_*, update_*, cancel_*, fulfill_*). All tools have descriptions (avg ~120 chars). However, output schemas are not documented, LLMs cannot predict response structure for chaining. Parameter descriptions lack constraint details (enums, ranges, formats). Error handling and recovery guidance are absent. No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Missing dependency hints (e.g., 'call get_product_variants before get_inventory'). Schemas are present but lack required field declarations in several tools.
Cancel an existing order with an optional reason.
Initiate a return/RMA for an order with line items and reason.
Create a new sales order with customer details, line items (SKUs + quantities), and shipping address.
Ship an order by creating a fulfillment with carrier and tracking number.
Look up customer records by email or type (individual, wholesale).
Track fulfillment status, shipping carrier, and tracking numbers for an order.
Output schemas not documented. LLMs cannot predict response structure, breaking tool chaining. E.g., get_products returns product IDs but create_sales_order needs SKUs, unclear if get_products returns SKUs or if get_product_variants is mandatory.
Missing tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe reads from irreversible writes. E.g., cancel_order and create_return lack destructiveHint; get_* tools lack readOnlyHint.
Parameter descriptions lack constraint details. 'status' in get_orders lists enum values in description text, not as JSON Schema enum. 'limit' parameters have no min/max bounds. LLMs may pass invalid values (e.g., limit=-1 or status='unknown').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Check real-time stock levels by SKU and warehouse. Requires a SKU code from get_product_variants.
Retrieve sales orders. Can filter by status or customer ID.
Get SKU-level variants for a product, including size, color, price, and SKU codes. ALWAYS call this after get_products when you need to check inventory or find specific SKUs.
Search and browse the Juniper Commerce product catalog. Returns products with name, description, price, categories, tags, and image URLs.
Query return/RMA records, optionally filtered by order ID.
Update an existing order — change status, add a note, update shipping address, or add custom fields.
Missing dependency hints and recovery guidance. get_product_variants description says 'ALWAYS call this after get_products' but get_products does not indicate it returns incomplete data. No error handling guidance (e.g., 'If SKU not found, try search_products').
Required fields not declared in all schemas. create_sales_order declares required=['customer','lineItems','shippingAddress'] but update_order and cancel_order do not declare required=['orderId']. Inconsistent schema rigor.