MCP server for AI-powered email newsletter and drip sequence generation, A/B testing, and email metrics analysis
Four tools with complete Zod schemas and descriptions. Naming follows verb_noun pattern (write_*, analyze_*). Descriptions are substantive (150-250 chars), exceeding the 10-char minimum. All parameters have type definitions and descriptions. However, output schemas are undocumented (tools return generic {content: [{type: 'text', text}]} without specifying the structure of the text field). Error handling is absent, no guidance on what happens if the LLM API fails, rate limits, or returns malformed output. No idempotency hints or confirmation patterns for write operations. Parameter constraints are well-defined (enums, min/max), but no guidance on retryability or side effects.
Generate A/B test variants for email subject lines. Creates high-contrast variants with predicted open rate differences.
Analyze email marketing metrics and get actionable recommendations to improve open rates, click rates, and conversions.
Write a complete email drip sequence (welcome series, onboarding, nurture). Generates all emails with subjects and timing.
Write a full email newsletter issue — intro, main content, and CTA. Styled for your audience and brand.
Output schemas undocumented. All tools return {content: [{type: 'text', text}]} but the structure and format of the text field is not specified. LLMs cannot plan downstream parsing or extraction.
No error handling or recovery guidance. If Groq API fails, rate-limits, or returns invalid output, the tool returns a raw error. LLMs receive no actionable next steps.
Write operations lack idempotency or confirmation patterns. Agents may retry write_newsletter or write_drip_sequence on transient failures, generating duplicate content.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot infer which tools are safe to retry or have side effects.
Parameter descriptions lack format/constraint details. E.g., 'open_rate' accepts a number but does not specify range (0-100?), precision (decimal places?), or units (percentage vs. decimal).