MCP server for interacting with the Smartlead API, allowing AI assistants to manage Smartlead campaigns through natural language
Server has 5 tools with complete input schemas and descriptions, but quality is inconsistent. Tool names follow verb_noun convention (list_, get_, create_, update_). Descriptions are present but generic, most lack context on WHEN to use the tool or what happens on failure. Parameters have types and descriptions, but lack constraints (enums, ranges, format specs). No output schemas documented. Error handling is minimal, no recovery guidance or error classification. Missing tool annotations (readOnlyHint, destructiveHint). Overall: functional but below production baseline.
Create Campaign This endpoint creates a campaign.
Get Campaign By Id This endpoint fetches a campaign based on its ID
List all Campaigns This endpoint fetches all the campaigns in your account
Update Campaign Schedule This endpoint updates a campaign's schedule
Update Campaign Settings This endpoint updates a campaign's settings
No output schemas documented. Tool descriptions include example JSON in docstrings, but LLMs cannot parse docstring examples reliably. Formalize output schemas in the tool registration.
Parameter descriptions lack constraints. 'timezone' accepts any string; should specify IANA format with examples (America/Los_Angeles). 'days_of_the_week' is an array of integers 0-6 but no enum constraint. 'start_hour' and 'end_hour' lack format spec (HH:MM). LLMs will hallucinate invalid values.
Descriptions are generic and lack WHEN/WHY context. 'List all Campaigns' and 'Get Campaign By Id' do not explain when to call list vs get, or what fields are returned. Descriptions should be 50-200 chars and answer: what does it do, when to use it, what does it return?
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | <=2025-11-25 | v2 |
No error handling guidance. Tools catch exceptions and call handle_api_error(), but error responses do not tell the LLM what to do next. Missing recovery hints like 'If campaign not found, call list_campaigns() to see available IDs.'
No tool annotations. create_campaign and update_* tools are destructive/write operations but lack destructiveHint=true. list_campaigns and get_campaign lack readOnlyHint=true. Annotations help agents reason about side effects.