Unified MCP server for B2B enrichment — Hunter.io email finding + Apollo.io company intelligence
Server provides 11 B2B enrichment tools with consistently strong naming, detailed descriptions aligned to user intent, and complete input schemas. All tools follow verb_noun naming convention (hunter_*, enrich_*, search_*, bulk_*). Descriptions are comprehensive (150-300 chars), include WHEN to use guidance, credit costs, and prerequisite information, matching the pattern:tool-description and pattern:command-tool baselines. Input schemas are fully typed with Pydantic Field annotations and constraints (enum, min/max, defaults). However, output schemas are NOT documented, only return type hints (dict) appear in docstrings without field documentation. No error handling guidance, no dry-run/confirmation patterns for destructive operations (even though these are read-only), and no examples of failure recovery in descriptions. Tool composition is excellent: each tool has single responsibility, and closely related tools (search_people vs search_companies) are appropriately distinct. Parameter naming is precise (reveal_personal_emails, reveal_phone_number) with type suffixes where appropriate. Batch variant (bulk_enrich_people) is offered. Risk classification present (all READ_ONLY). Per-tool scores range 65-80 due to output schema gaps and missing error guidance, averaging 72.
[Apollo] Enrich up to 10 people in a single API call. Best for: batch enrichment of a prospect list. Each person dict should have at minimum: first_name + last_name + domain (or organization_name) OR email. Costs 1 Apollo credit per successfully matched person. Returns enriched profiles or error details for each person.
[Apollo] Enrich a company's full profile given its domain. Best for: firmographic research on a target account, understanding company size, industry, funding stage, tech stack, and more. Costs 1 Apollo credit. Works on free Apollo plan. Returns: employee count, industry, funding stage & amounts, revenue range, tech stack, LinkedIn, Twitter, Facebook, and more.
[Apollo] Enrich a person's full B2B profile using name + domain, LinkedIn, or email. Best for: enriching a contact when you know their name and employer domain, or have their LinkedIn URL. Returns job title, seniority, work email, phone, company, and more. Costs 1 Apollo credit (8 if reveal_phone_number=True). Works on free plan.
[Apollo] Enrich a person's full B2B profile using only their email address. Best for: the most common lead-gen workflow — you have an email (e.g. from Hunter) and want the full profile: job title, seniority, LinkedIn, company, and phone. Fastest and most reliable Apollo enrichment path. Costs 1 Apollo credit. Works on free Apollo plan.
Output schemas not documented. Tools return generic 'dict' with no field-level documentation. LLMs cannot infer what fields to expect, complicating downstream planning and field extraction. Baseline requires 100% of A+ tools to have documented return types.
No error handling guidance or recovery instructions in descriptions. Tools return errors via HTTP but do not guide the LLM on what to do when a call fails, no retry logic, no fallback suggestions, no error classification (retryable vs user-fixable vs fatal).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
[Hunter] Return Hunter.io account info including remaining credits. Best for: checking how many finder and verifier credits remain before running a large enrichment batch. FREE — does not consume any credits. Returns plan name, monthly quota, requests used, and credits remaining.
[Hunter] Count how many email addresses Hunter has indexed for a domain. Best for: quickly checking data availability before spending credits on a full domain search. Run this first when exploring a new target company. FREE — does not consume any credits or quota. Returns total email count broken down by department and seniority.
[Hunter] Find the most likely work email address for a specific person. Best for: finding a contact email when you know the person's name and employer. Costs 1 Hunter finder credit. Returns the guessed email with a confidence score (0–100), sources, and verification status. A score above 70 is generally reliable for outreach.
[Hunter] Find all email addresses associated with a company domain. Best for: prospecting a whole company, building outreach lists, discovering team structure at a target account. Costs 1 Hunter request (monthly quota). Does NOT consume per-email credits. Returns emails with confidence scores, names, job titles, and LinkedIn URLs. Use hunter_count_emails first to gauge data availability for free.
[Hunter] Verify the deliverability of an email address. Best for: cleaning a lead list before sending outreach, validating emails found by other tools, reducing bounce rates. Costs 1 Hunter verification credit. Returns status: 'valid' | 'invalid' | 'accept_all' | 'webmail' | 'unknown', plus SMTP and MX record check details. Only send to 'valid' addresses.
[Apollo] Search Apollo's company database by keyword, location, and employee count. Best for: building a list of target accounts matching specific criteria. E.g. all Series B fintech companies in the EU with 20–100 employees. Requires Apollo Basic plan ($49/mo) or higher — returns 403 Forbidden on free tier. Does NOT consume credits. Does NOT return email addresses. Returns up to 10 companies per page (paginated).
[Apollo] Search Apollo's people database by title, location, seniority, and company size. Best for: finding new prospects matching specific criteria. E.g. all CTOs at 50–500 person companies in San Francisco. Requires Apollo Basic plan ($49/mo) or higher — returns 403 Forbidden on free tier. Does NOT consume credits. Does NOT return email addresses. Returns up to 10 people per page (paginated). Use pagination to iterate results.
Paginated results (search_people, search_companies) lack documentation of total count or next_cursor. Descriptions mention 'paginated' and 'per_page' but do not specify whether a total count is returned or how to determine if more results exist. LLMs cannot reliably iterate through large result sets.
No result limits documented in descriptions for search tools. search_people and search_companies default per_page=10 but do not state a hard cap. If API returns thousands of items on high-selectivity queries, LLM context could be exhausted. Baseline guidance: cap at 20 - 50 and explain in description.
Tool composition: enrich_person and enrich_person_by_email are near-duplicates with overlapping functionality. enrich_person accepts email as optional field but also accepts name+domain. enrich_person_by_email is optimized for email-only path. This creates ambiguity, LLMs may choose wrongly. Consider a single enrich_person tool with smart routing.