FastMCP server exposing the operational surface of the Apollo.io REST API: Campaign health, Sequence management, Email message logs, Mailbox warmup/deliverability, People + organization search and enrichment, CRM contacts and credit usage tracking
Apollo MCP has 13 well-named tools with clear verb-noun patterns (apollo_campaign_health, apollo_sequence_enroll, apollo_people_search). All tools have descriptions (avg ~150 chars, within 10-1024 baseline). Input schemas are present and typed for all tools. However, output schemas are NOT documented, the code shows responses are returned as dicts but no structured schema is declared for LLM consumption. Parameter descriptions are present but often generic (e.g., 'Results per page (default 100)' lacks context on why pagination matters). Error handling returns structured dicts with 'error' keys but lacks recovery guidance (e.g., 'Try search_users() first'). No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (READ_ONLY vs WRITE). Composition is sound, tools chain well (search → enroll, get → pause/activate). Security: API key injected via env, SSRF hardening present, no secrets in params. Overall: solid operational coverage but missing LLM-facing polish (output schemas, error recovery hints, annotations).
Fetch account-level credit usage and subscription details. Returns current credit balance, monthly allocation, usage rate, and alerts if approaching limits.
Return campaign health digest across all sequences + mailboxes. Shows: today's sends per mailbox vs daily target, opens/replies/bounces per sequence, and flags A/B variant data. Designed to fit in <2k tokens.
List CRM contacts synced from Apollo. Returns contact records with CRM metadata and sync status.
Fetch mailbox warmup and deliverability status for all email accounts. Returns warmup score, daily send limits, open/reply rates, and health flags.
Search email message logs (sends, opens, replies, bounces, clicks). Supports filtering by date range, sequence, mailbox, and contact. Returns paginated results.
Search for organizations in Apollo's database. Supports filtering by company name, industry, location, employee count, and revenue. Returns paginated organization records.
Output schemas not documented. Code returns dicts but no structured schema is declared for LLM consumption. LLMs cannot plan downstream calls or extract fields without knowing response structure.
Error responses lack recovery guidance. Errors return {'error': 'message'} but do not suggest next steps (e.g., 'Try search_users() first' or 'Requires MASTER API key'). LLMs cannot self-correct without actionable hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
Enrich a single contact with Apollo's data. Accepts email or contact ID. Returns full profile including title, company, social links, and firmographic data.
Search for people in Apollo's database. Supports filtering by name, email, company, title, location, and other criteria. Returns paginated contact records with enrichment data.
Activate (resume) a paused sequence. Restarted sequences resume sending to enrolled contacts.
Enroll one or more contacts into a sequence. Accepts contact IDs or email addresses. Returns enrollment status and any errors.
Fetch a single sequence (emailer_campaign) by ID. Returns full campaign object including steps, templates, and schedule.
Pause a sequence (emailer_campaign). Paused sequences do not send new emails but retain their contacts.
List all emailer_campaigns (sequences). Returns name, id, active status, contact count, and A/B variant info.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Risk levels are documented in metadata but not exposed to LLM via tool schema. LLMs cannot distinguish safe reads from destructive writes without explicit hints.
Parameter descriptions are generic. 'Results per page (default 100)' and 'Max pages to fetch (default 10)' lack context on why pagination exists or when to adjust limits. LLMs cannot reason about pagination strategy.
No confirmation/dry-run for destructive operations. apollo_sequence_pause and apollo_sequence_activate modify state but lack a confirmation step. Agents can accidentally pause production sequences.