Calculates bundling discounts against product cost bases to output final profit ratios.
This MCP server has severe definition quality gaps. The single tool 'simulate_roi' has a reasonable name but lacks critical description depth, parameter validation guidance, and output schema documentation. The tool description (97 chars) is minimally adequate but fails to explain WHEN to use this tool, what prerequisites exist, or how it differs from similar pricing/discount tools. Input parameters lack type information in the schema (cart_items is 'list[dict]' with no field-level schema), and the discount_pct parameter has a trivial default (0.0) with no constraint documentation. The output schema is completely undocumented, the tool returns a dict with keys like 'gross_revenue', 'total_cost', 'net_profit', 'profit_margin_pct', 'roi_ratio', but no schema is provided to the MCP client, forcing the LLM to infer field names and types. No error handling guidance exists, what happens if cart_items is empty, malformed, or contains negative values? The code performs no input validation and would silently return division-by-zero protection (max(1.0, total_cost)) without documenting this behavior. Security-wise, the tool accepts arbitrary dict structures without sanitization. The tool is marked READ_ONLY, which is correct, but no tool annotations (readOnlyHint, idempotentHint) are present in the schema. This server appears to be a simple Python SDK wrapper with no actual MCP server implementation visible, the transport is UNKNOWN and no MCP protocol code (request/response handling, tool registration, schema validation) is shown.
Calculates bundling discounts against product cost bases to output final profit ratios.
No MCP server implementation visible. Source shows only a Python SDK client class, not an MCP server exposing tools via the MCP protocol. No tool registration, request/response handling, or schema serialization to the MCP spec.
Output schema completely undocumented. The tool returns a dict with 5 fields (gross_revenue, total_cost, net_profit, profit_margin_pct, roi_ratio) but provides no schema to the LLM. LLM must infer field names and types from code inspection.
Input parameter schema lacks field-level type definitions. 'cart_items' is typed as 'list[dict]' but does not specify the required fields within each dict (price, cost, quantity) or their types. LLM cannot validate input structure.
No error handling or recovery guidance. Code silently handles empty carts, zero costs, and missing fields via defaults and max() fallbacks, but does not document these behaviors or guide the LLM on expected failure modes.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 28 | 2026-07-28+ | v2 |
Parameter description for 'discount_pct' is trivial (16 chars: 'Discount percentage to apply'). Does not explain valid range (0 - 100?), precision (decimal places?), or behavior when negative. Default of 0.0 is reasonable but constraint is undocumented.
Tool description (97 chars) is too brief and lacks context. Does not explain WHEN to use this tool (what business problem does it solve?), how it differs from other ROI calculators, or what assumptions it makes (e.g., linear discounting, no tax, no shipping).
No input validation or sanitization. Code assumes cart_items contains dicts with 'price', 'cost', 'quantity' keys and uses .get() with defaults, masking bad data. No check for negative prices, negative costs, or non-numeric quantities. LLM receives no guidance on valid ranges.
Tool annotations missing. No readOnlyHint, idempotentHint, or destructiveHint in schema, even though the tool is marked READ_ONLY and is clearly idempotent. LLM cannot determine from the schema that this tool is safe to retry.