Predict return risk and generate proactive interventions to prevent returns.
This is a custom Python skill with 2 tools (predict, batch_predict) for return risk prediction. Both tools have reasonable descriptions and structured input schemas, but multiple critical gaps prevent a higher score. The server is not an MCP server at all, it's a Python SDK class with no MCP transport, no protocol bindings, and no remote accessibility. Tool schemas ARE visible in the code and reasonably well-defined (order, customer, product objects with typed fields). However, the server lacks MCP registration, tool annotations, error handling guidance, and protocol integration. Naming is verb-heavy (predict, batch_predict) which is good, but the definitions would need MCP wrapping to be production-grade. The input schemas use JSON Schema with nested objects and proper type declarations, which is a strength. Output schemas are inferred but not formally documented in the code.
Predict return risk for multiple orders in batch.
Predict return risk for an order.
No MCP transport or protocol binding, this is a bare Python SDK, not an MCP server. Cannot be deployed as a remote tool service.
Output schemas not documented in tool definitions. Callers cannot know what fields to expect in the return dict (risk_factors, interventions, days_to_act, etc.).
No error handling guidance. No validation of inputs (e.g., what if order_value is negative? What if satisfaction_score is >10?). No recovery suggestions for invalid data.
Parameter descriptions are minimal. 'order_value (float)' lacks context on valid range, units, or interpretation. 'shipping_days (int, actual vs. promised)' is cryptic, unclear if this is elapsed time or a delay delta.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
batch_predict returns results sorted by risk_score but offers no pagination or limit parameter. If called with 10,000 orders, it returns all 10,000 items unsorted by input order, making it hard to correlate results to requests.
No tool annotations (readOnlyHint, idempotentHint, etc.). Callers cannot determine whether predict() is safe to call multiple times with the same input or whether it has side effects.
Intervention text hardcoded as free-form strings (e.g., 'Send a personalized... guide'). No structured representation, making it hard for agents to execute or track which interventions were applied.