A skill/tool for joining cross-channel marketing data (DSP reports) with retail sales data to calculate blended ROAS and incremental lift metrics
This server exposes a single tool with significant definition gaps. The tool name violates verb-first naming conventions (should start with 'join_' or similar action verb, but 'join_marketing_retail_data' is acceptable). However, critical issues include: (1) Input parameters lack descriptions entirely, the schema shows object types but provides no guidance on expected structure, required fields, or data format; (2) No output schema documentation is visible, callers must infer the response structure from example_usage.py (total_blended_roas, incremental_lift_pct, data_join_confidence); (3) The tool description is 142 characters (within the 10-1024 range) but lacks critical context about prerequisites, expected input formats, and when to use this tool; (4) Parameters are typed as generic 'object' with no constraints, enums, or nested field documentation, LLMs cannot validate JSON structure or infer what fields are required in dsp_report_json or retail_sales_json; (5) No error handling documented, the implementation returns a hardcoded dict regardless of input validity, suggesting no input validation occurs; (6) The function signature and implementation are visible in client.py, confirming the tool exists, but the tool is NOT registered with an MCP server framework, no evidence of a ToolSchema registration, Initialize response, or CallTool handler.
Join marketing DSP report data with retail sales data to calculate cross-channel performance metrics including blended ROAS and incremental lift
Input parameters completely lack descriptions; 'dsp_report_json' and 'retail_sales_json' are typed as generic objects with no guidance on structure, required fields, or expected schema
No output schema documented; response structure (total_blended_roas, incremental_lift_pct, data_join_confidence) must be inferred from example code, not from tool metadata
Tool lacks error handling and validation; implementation returns hardcoded values regardless of input, with no recovery guidance or actionable error messages
Tool description (142 chars) is present but generic; does not explain prerequisites (e.g., 'dsp_report_json must include spend and impression data'), expected input format, or when to use this vs. alternative approaches
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 32 | 2026-07-28+ | v2 |
Input parameters are typed as unstructured objects; no enum constraints, pattern validation, or nested field documentation. LLMs cannot infer what fields are mandatory or valid
Server is not an MCP server; client.py defines a plain Python class, not an MCP-protocol implementation. No evidence of Initialize/ListTools/CallTool handlers, transport, or MCP framework integration.