MCP server that computes campaign earned media value and econometric ROI metrics
Single tool 'execute_skill_action' has a basic schema with three numeric parameters (impressions_delivered, engagements_count, total_spend_usd), but critical quality issues severely limit production readiness. The tool description is generic and lacks actionable guidance about when to use it, what it returns, or how to interpret results. No output schema is documented, the code shows a client returning computed fields like 'earned_media_value_emv_usd', 'emv_multiplier_factor', and 'brand_lift_statistical_significance_pct', but the MCP server definition does not expose this structure to the LLM. Parameters have type information but lack constraint ranges (e.g., min/max for impressions and spend), and descriptions are minimal. The tool does not follow verb_noun naming (should be 'calculate_emv_roi' or 'synthesize_econometric_roi'). Error handling is absent, no guidance on invalid inputs, timeout behavior, or recovery paths. The server implementation in mcp_server.py is a stub that prints JSON status but does not actually implement the MCP protocol specification (no proper request/response handling, no tool invocation mechanism). This appears to be a proof-of-concept or skeleton, not a functional MCP server.
Execute earned media value and econometric ROI synthesis calculations
Tool name does not follow verb_noun pattern. 'execute_skill_action' is vague and generic. Should be 'calculate_emv_roi', 'synthesize_econometric_roi', or similar to convey the specific computation.
Tool description is 76 characters and lacks context. Does not explain WHEN to use it, WHAT it computes, or HOW to interpret the output. Missing guidance on prerequisites (e.g., must impressions_delivered be actual delivered impressions or estimated?). Description must be 100-300 chars with clear action-oriented language.
Output schema is not documented in the tool definition. The mcp_server.py exposes no structured return type. Code shows a client returning 6 fields (econometric_report_id, earned_media_value_emv_usd, emv_multiplier_factor, blended_customer_acquisition_cost_cac_usd, brand_lift_statistical_significance_pct, executive_roi_dashboard_url), but the MCP tool does not declare these in a schema. LLMs cannot plan downstream uses or extract results without knowing what fields to expect.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 30 | 2026-07-28+ | v2 |
Parameter descriptions lack constraint information. 'impressions_delivered' and 'engagements_count' are integers with no min/max bounds stated. 'total_spend_usd' is a number with no precision or range guidance. LLMs may pass nonsensical values (negative numbers, zero, absurdly large values). Should specify: impressions_delivered ≥ 1, engagements_count ≥ 0, total_spend_usd > 0.
No error handling or recovery guidance. Tool definition does not document what happens on invalid input, timeouts, or failures. LLMs have no actionable error classification to determine retry vs. user-fixable vs. fatal.
mcp_server.py is a non-functional stub. It prints a hardcoded JSON response and does not implement the MCP protocol. No tool invocation mechanism, no request/response handling, no schema validation. This is not a real MCP server implementation.