Exposes the MachFive Cold Email API as MCP tools for AI agents to generate hyper-personalized cold email sequences.
MachFive server demonstrates above-average definition quality with strong tool naming, comprehensive descriptions, and well-structured schemas. All 6 tools have verb-prefix names (list_, generate_, get_, export_) that clearly convey intent. Descriptions range from 180-450 chars, well within the optimal 10-1024 range and exceeding the 194-char baseline. All parameters have types and descriptions. Tool annotations are present. However, some output schemas are inferred rather than explicitly documented in the source code, and error handling messages could be more granular in guiding LLM recovery. The server demonstrates good composition with clear tool dependencies (list_campaigns → generate_sequence/generate_batch → get_list_status → export_list).
Download completed results from a list/batch job as CSV or JSON. Call this after get_list_status reports 'completed'. Returns the full result set including all generated emails, personalization details, and metadata for each lead.
Submit multiple leads for batch email generation (ASYNCHRONOUS). Returns immediately with a list_id. Poll get_list_status to check progress, then call export_list when complete. Much faster than generate_sequence for large lead lists because processing happens in parallel.
Generate a personalized cold email sequence for ONE lead. This is SYNCHRONOUS — the request takes 3-10 minutes because MachFive researches the prospect and crafts unique emails. Do NOT retry if it seems slow; wait for the response. You must have a campaign_id first. Call list_campaigns if you don't have one. If the request times out, use the returned list_id with get_list_status and export_list to recover results.
Poll a specific list/batch job until completed or failed. Returns current status, progress (completed/total), and metadata. Call this after generate_batch to wait for results. Once status is 'completed', call export_list to download emails.
Output schemas are not explicitly documented in tool docstrings. Descriptions mention return structure (e.g., 'Returns JSON array of campaigns with id, name, and created_at') but do not provide formal JSON Schema definitions that LLMs can parse to plan downstream tool calls.
Error handling returns unstructured error messages (e.g., '_error_message()' function wraps API responses as plain text). While human-readable, this does not categorize errors as retryable vs. fatal or provide explicit recovery guidance for the LLM.
generate_sequence and generate_batch accept 'approved_ctas' as a free-form comma-separated string. LLMs may hallucinate invalid CTA names. Should either validate against a known enum or return actionable error with valid options.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 66 | <=2025-11-25 | v2 |
List campaigns in the user's MachFive workspace. CALL THIS FIRST before generate_sequence or generate_batch — you need a campaign ID to generate emails. If the user hasn't specified a campaign, call this and ask them to pick one. Returns JSON array of campaigns with id, name, and created_at. Use the 'id' field as campaign_id in generate calls.
Browse all lead lists and batch jobs in the workspace, including their current status (completed, pending, failed). Useful for finding list_ids to monitor or export results from past runs.
generate_sequence description warns 'Do NOT retry if it seems slow; wait for the response' but does not explain how an LLM should know when a timeout error is expected vs. a real failure. Agents retry on timeouts by default, this needs explicit recovery guidance.
list_lists tool has minimal description ('Browse all lead lists and batch jobs in the workspace...'). Does not explain the difference between 'completed', 'pending', and 'failed' statuses or when to call it vs. get_list_status. Baseline for param descriptions is 72 chars; this is sparse.