MCP server for AI-powered digital marketing platform with campaign creation, content generation, analytics, and optimization capabilities across Meta, Google, and TikTok platforms
The MCP server has significant quality gaps across naming, descriptions, schemas, and error handling. While tool names follow verb_noun conventions, most parameter descriptions are sparse or missing entirely. Schemas are present but incomplete, many parameters lack type definitions or meaningful constraints. Error handling is absent; no recovery guidance is visible. Critical security issues: the backend accepts credentials via environment variables but tool definitions do not declare scope or permission requirements. No audit logging or rate limiting visible. Composition is reasonable (tools are atomic), but output schemas are undocumented, and pagination is missing from list_campaigns. This server would not pass production code review.
Create a new advertising campaign with AI-generated content across Meta, Google, or TikTok platforms
Generate AI content (images, videos, or copy) using Hugging Face, Nano Banana, and other AI tools
Get ROI analytics and performance metrics for a campaign
List all active campaigns with their current status
AI-powered campaign optimization based on performance data
Parameter descriptions are sparse or missing. Many parameters in target_audience (age_range, interests, locations), generate_content (style, dimensions), and optimize_campaign lack actionable descriptions that explain what values are valid or expected format.
Output schemas are completely undocumented. The tools define inputs but nowhere in the visible source code are return types, response fields, or output structures documented. LLMs cannot plan downstream calls or extract required data.
No error handling or recovery guidance. No tool description indicates what can go wrong, what errors are retryable, or how to recover. A failed API call returns nothing actionable to the agent.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 38 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 49 | - | v1 |
Missing pagination on list_campaigns. Tool accepts platform and status filters but no limit, offset, or page parameters. Returns unbounded results, risking context window exhaustion and LLM reasoning degradation.
Ambiguous or missing parameter formats. The 'style' parameter in generate_content has no enum or description of valid values (e.g., 'realistic', 'cartoon', 'abstract'?). The 'dimensions' object lacks min/max constraints on width/height. LLMs will guess invalid values.
No scope or permission declarations. Tools that create campaigns, generate content, and optimize spend modify real ad accounts and potentially spend money, but the server does not declare what permissions they require (e.g., 'write:campaigns', 'write:billing'). Agents cannot enforce least-privilege.
Destructive operations lack confirmation. create_ad_campaign, generate_content, and optimize_campaign modify state and spend money but have no dry-run, confirmation, or preview mechanism. Agents cannot verify intent before execution.
Composite operations bundled into single tools. create_ad_campaign accepts a generate_content object, conflating campaign creation with content generation. This violates single responsibility. Agents cannot compose independently or handle partial failures (e.g., campaign created but content generation failed).
date_range in get_campaign_roi lacks examples and constraints. Are dates required? ISO 8601 format assumed but not stated. What happens if end < start? No guidance for LLMs.
No audit logging, rate limiting, or secret injection patterns visible. Backend accepts credentials via environment variables (dotenv) but tools do not enforce server-side secret injection, rate limits, or audit trails for sensitive operations.