MCP server for dispatching lifecycle-based customer nudges across multiple channels (SMS, Push, Email) based on behavioral triggers and customer segments
This MCP server exhibits severe deficiencies across nearly all definition quality dimensions. The single tool 'execute_skill_action' has a reasonable name following verb_noun convention, but the implementation is fundamentally broken: the tool is defined only in the specification metadata (mcp_server.py prints a JSON list), not registered with actual MCP protocol handlers. The source code shows NO actual tool implementation, mcp_server.py is a stub that prints JSON and exits; client.py is a mock class unconnected to the MCP server; example_usage.py demonstrates the mock in isolation. There is no evidence of proper MCP tool registration, schema validation, error handling, or protocol compliance. The tool description is generic (79 chars) and lacks actionable guidance on parameters or constraints. Input parameters lack type validation, 'trigger_event' is an unconstrained free-form string despite accepting specific lifecycle events; 'discount_incentive_pct' has no range validation (0-100? unbounded?). Output schema is not documented anywhere, the mcp_server.py makes no reference to response structure. No error handling, no retry guidance, no permission checks, no rate limiting. The server appears to be a mock/placeholder implementation with zero actual MCP protocol integration.
Execute lifecycle nudge dispatch actions across omnichannel platforms
Tool is not actually registered with MCP protocol, mcp_server.py is a stub that prints hardcoded JSON and terminates. No RequestHandler, no tool invocation mechanism, no schema validation.
Input schema is incomplete and non-functional. 'trigger_event' parameter accepts any string, but documentation implies a constrained set of lifecycle events (e.g., CART_ABANDONED_TIER_1_VIP, SUBSCRIPTION_CHURN_RISK_INACTIVE_14D). No enum constraint; LLMs will hallucinate invalid values.
'discount_incentive_pct' parameter lacks numeric constraints (min/max). Is this 0-100? Percentage or decimal? Unbounded numbers allow LLMs to pass absurd values (e.g., -500%, 99999%).
No output schema documented. Tool description says it 'executes actions' but does not specify what the response structure is. client.py shows a mock response (nudge_dispatch_id, channels_dispatched, etc.), but mcp_server.py has no corresponding implementation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 30 | 2026-07-28+ | v2 |
Tool description (79 chars) is generic and lacks WHEN/WHY guidance. Does not answer: What exactly does this dispatch? To which channels? What are side effects? How long does it take? Can it be retried?
No error handling documented. Tool modifies user state (dispatches nudges across channels), yet provides no guidance on failure modes, retry eligibility, or recovery. This is a stateful operation that should flag irreversibility.
No permission or scope declarations. This tool accesses user email, sends across multiple channels (SMS, push, email), and modifies marketing lifecycle state. No documented requirement for 'write:marketing', 'write:sms', 'write:email', or user consent checks.
Tool name is overly long (execute_skill_action = 21 chars) and generic. 'execute_skill_action' does not clearly signal that this dispatches marketing lifecycle nudges. Better name: 'send_lifecycle_nudge' or 'dispatch_marketing_nudge'.