A tool for parsing and analyzing competitor ad creatives to extract pitch hooks and counter-copy strategies
This server has critical foundational deficiencies. The single tool 'parse_ad' lacks a proper input schema definition in the provided source code, contains a vague and generic description, has no documented output schema, no error handling guidance, and no parameter descriptions. The implementation is a trivial stub returning hardcoded mock data rather than actual parsing logic. The server appears to be a demonstration or incomplete prototype rather than a production-ready MCP tool.
Parses competitor ad copy to extract pitch hooks and counter copy strategies
Input schema not visible in source code. Tool parameters 'ad_copy_sample' and 'ad_platform' are mentioned in the evaluation context but no explicit JSON Schema definition is shown in client.py or supporting files. Per HARD SCORING RULES, schema score MUST be 0 when not visible.
Description is generic and under 20 characters effectively (without context, it reads 'Parses competitor ad copy...' but provides no WHEN to use, no prerequisites, and no guidance on how the output should be used downstream). Per HARD SCORING RULES, description score CANNOT exceed 40 for descriptions under 20 chars of meaningful content.
Output schema not documented. The tool returns {'pitch_hook': '...', 'counter_copy': '...'} but this structure is inferred from the mock implementation, not declared in a schema. LLMs cannot plan downstream tool calls without knowing what fields to expect. Pattern baseline: 100% of A+ tools have documented return types.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 18 | 2026-07-28+ | v2 |
Parameters lack descriptions. 'ad_copy_sample' and 'ad_platform' have no per-parameter documentation explaining constraints, format, or valid values for ad_platform (e.g., is 'Meta' the only valid value, or are 'Facebook', 'Instagram' also accepted?).
No error handling or recovery guidance. The tool has no documented behavior for invalid inputs (e.g., empty ad_copy_sample, unknown ad_platform). LLMs receive no guidance on what to do if parsing fails. Pattern baseline: error responses must tell the LLM what to do next.
Tool name 'parse_ad' is weakly specific. Does it extract copy only, or does it classify, segment, or score ads as well? Better names: 'extract_ad_hooks' or 'analyze_ad_copy_strategy'. Current name invites ambiguity.
Implementation is a hardcoded stub. The client.py returns {'pitch_hook': 'discount appeal', 'counter_copy': 'Focus on premium benefits'} regardless of input. This is a mock placeholder, not functional parsing logic. For evaluation purposes, the tool receives low scores for real-world usability.
No enum constraint on 'ad_platform' parameter. The description mentions 'Meta', 'Google', 'LinkedIn' as examples, but does not formalize them as an enum. Free-form strings invite hallucinated values from LLMs. Per pattern:constrained-input, declare known sets as enums.