b2b-enrichment-mcp
B2B Enrichment MCP
Unified MCP server combining Hunter.io email finding with Apollo company intelligence. One connection, two data sources, built for Claude and Cursor.

Lead generation workflows need two things: email addresses and company context. Most MCP servers handle one or the other. This one handles both — Hunter.io for finding and verifying emails, Apollo.io for firmographic data like headcount, funding, and tech stack. One server, one config, Claude orchestrates across both.
Tools
Hunter.io — email intelligence
🔍
hunter_find_emails_by_domain— get all emails at a company domain with names, titles, and confidence scores🎯
hunter_find_email— find the most likely email for a specific person by name + domain✅
hunter_verify_email— check whether an email is deliverable before sending📊
hunter_count_emails— count indexed emails for a domain (free, no credits)💳
hunter_check_account— view remaining Hunter credits (free)
Apollo.io — company & people intelligence
🏢
enrich_company— full firmographic profile: headcount, revenue, funding, tech stack, socials👤
enrich_person_by_email— complete B2B profile from a single email address🧑🤝🧑
bulk_enrich_people— enrich up to 10 contacts in one API call🔎
enrich_person— profile lookup by name + domain, LinkedIn URL, or email
search_peopleandsearch_companiesare also included but require an Apollo Basic plan ($49/mo).
Related MCP server: @louis030195/apollo-io-mcp
Free tier friendly
You can run real enrichment workflows without paying anything upfront:
Service | Free allowance |
Hunter.io | 50 requests/month + 50 verifications |
Apollo.io | Company enrichment — unlimited on free plan |
No credit card required to start. Both services have free tiers that cover the most common use cases.
Installation
Requires Python 3.11+
git clone https://github.com/Aleksey-Panf/b2b-enrichment-mcp.git
cd b2b-enrichment-mcp
python -m venv .venv
# Windows
.venv\Scripts\Activate.ps1
# macOS / Linux
source .venv/bin/activate
pip install -e .Copy the env template and add your keys:
cp .env.example .env# .env
HUNTER_API_KEY=your_hunter_key_here
APOLLO_API_KEY=your_apollo_key_hereGet your API keys:
Hunter.io → hunter.io/api-keys (free account, no card)
Apollo.io → Settings → Integrations → API Keys at app.apollo.io
Claude Desktop
Edit claude_desktop_config.json — on Windows at %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"b2b-enrichment": {
"command": "C:\\path\\to\\b2b-enrichment-mcp\\.venv\\Scripts\\python.exe",
"args": ["-m", "apollo_mcp.server"],
"env": {
"HUNTER_API_KEY": "your_hunter_key_here",
"APOLLO_API_KEY": "your_apollo_key_here"
}
}
}
}Restart Claude Desktop. The tools will appear automatically.
Cursor
Add to .cursor/mcp.json in your project root, or to global Cursor MCP settings:
{
"mcpServers": {
"b2b-enrichment": {
"command": "C:\\path\\to\\b2b-enrichment-mcp\\.venv\\Scripts\\python.exe",
"args": ["-m", "apollo_mcp.server"],
"env": {
"HUNTER_API_KEY": "your_hunter_key_here",
"APOLLO_API_KEY": "your_apollo_key_here"
}
}
}
}On macOS / Linux replace the command path with .venv/bin/python.
Example queries
Copy these into Claude or Cursor once the server is connected:
Find 10 emails of marketing directors at SaaS companies using Hunter.Tell me everything about stripe.com — headcount, funding, tech stack —
and find 5 contacts there.Verify whether john@acme.com is a valid email address.Get the full company profile for openai.com.I have a list of 8 people with names and company domains.
Enrich all of them for emails and job titles in one call.Roadmap
LinkedIn URL enrichment via Apollo (resolve profile → full contact)
Bulk domain search — run Hunter domain search across a list of domains
Export results to CSV directly from Claude
Webhook support for async enrichment on large lists
Contributing
PRs are welcome. Open an issue first for anything beyond small fixes.
git checkout -b feature/your-feature
# make changes
git commit -m "feat: describe your change"
git push origin feature/your-featureLicense
MIT
Built by @Aleksey-Panf — available for custom MCP and AI automation work.
Contact: @Aleksey_Ai14
Available Tools
11 toolsbulk_enrich_peopleA
[Apollo] Enrich up to 10 people in a single API call.
Best for: enriching a batch of contacts at once — faster than looping over enrich_person and uses the same total credits (1 per matched person). Works on free Apollo plan.
| Name | Required | Description | Default |
|---|---|---|---|
| people | Yes | List of people to enrich — maximum 10 per call. Each person needs: first_name + last_name + domain (or organization_name), OR just an email address. | |
| reveal_personal_emails | No | If True, attempt to return personal email addresses for all people. Requires a paid Apollo plan. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description is the sole source. Mentions batch limit and credit cost, but lacks disclosure on what enrichment entails or what happens on failure. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences plus a bullet point. Front-loaded with primary action and value. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple batch enrichment tool with good schema, the description is sufficient. Lacks output description but no output schema exists, so not required. Slightly above baseline for context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and schema descriptions are detailed. The description adds minimal extra value (e.g., credit info). Baseline 3 for full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'enrich' and the resource 'up to 10 people', and distinguishes itself from sibling tool 'enrich_person' by highlighting batching and same credit cost.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Best for: enriching a batch of contacts at once' and contrasts with 'enrich_person', also notes 'Works on free Apollo plan'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enrich_companyA
[Apollo] Enrich a company's full firmographic profile by domain.
Best for: company intelligence that Hunter doesn't provide — headcount, revenue range, funding stage, investors, tech stack, industry, and social links. Use this alongside Hunter email tools for a complete company + contacts picture. Costs 1 Apollo credit. Works on free Apollo plan. Returns: legal name, employee count, revenue range, industry, founding year, funding stage and total raised, tech stack, LinkedIn, Twitter, website. Examples: stripe.com, openai.com, notion.so, figma.com
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Company website domain, e.g. 'stripe.com' or 'openai.com'. Do not include 'https://' or 'www.'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses cost ('Costs 1 Apollo credit'), works on free plan, and lists return fields. Does not cover rate limits or authentication, but is sufficient for an enrichment tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with a clear opening, 'Best for', details, returns, and examples. Slightly verbose in returns list but still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description fully enumerates return values. Also covers cost, plan compatibility, and usage alongside other tools, making it complete for a simple enrichment tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has one parameter with description; description adds list of returned fields, usage context, and examples, enhancing meaning beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb 'Enrich' and resource 'company's full firmographic profile' by domain, clearly distinguishing it from sibling tools like enrich_person or Hunter email tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states it is 'Best for: company intelligence that Hunter doesn't provide' and recommends 'Use this alongside Hunter email tools', providing clear guidance on when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enrich_personA
[Apollo] Enrich a person's B2B profile by name and at least one identifier.
Best for: enriching a contact when you have name + employer but no email yet (consider using hunter_find_email first — it may be cheaper). Costs 1 Apollo credit normally; 8 credits with reveal_phone_number=True. Provide at least one of: domain, organization_name, email, or linkedin_url.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Known email to assist matching. If you only have an email, use enrich_person_by_email instead. | ||
| domain | No | Employer domain, e.g. 'stripe.com'. Strongly recommended — significantly improves match accuracy. | |
| last_name | Yes | Person's last name, e.g. 'Smith'. | |
| first_name | Yes | Person's first name, e.g. 'Jane'. | |
| linkedin_url | No | LinkedIn profile URL, e.g. 'https://linkedin.com/in/janesmith'. Can be used as the sole identifier. | |
| organization_name | No | Employer company name, e.g. 'Stripe'. Use domain instead when possible. | |
| reveal_phone_number | No | If True, attempt to return a direct phone number. Costs 8 credits instead of 1. Requires a paid Apollo plan. | |
| reveal_personal_emails | No | If True, attempt to return personal (non-work) email addresses. Requires a paid Apollo plan. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses credit costs (1 normal, 8 with phone), required identifiers, and that some options require a paid plan. However, it does not explicitly state whether the tool modifies data or is read-only, nor describe rate limits or error behavior. Still, it is fairly transparent about key behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three sentences plus a list) yet packs purpose, use case, cost, and identifier requirements. It is front-loaded with the core action and progressively adds details. Every sentence adds value, and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers cost, required identifiers, and suggests alternatives, it lacks a description of the return value (what fields are returned upon enrichment). With no output schema, this omission hurts completeness for an 8-parameter tool. It also does not mention failure scenarios (e.g., no match).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already has a detailed description (e.g., 'Strongly recommended — significantly improves match accuracy' for domain). The description adds context about requiring at least one identifier and cost implications, but the schema already handles meaning well. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool enriches a person's B2B profile by name and an identifier. It distinguishes itself from the sibling 'enrich_person_by_email' (for email-only) and suggests 'hunter_find_email' as a cheaper alternative. The verb 'enrich' plus resource 'person's B2B profile' is specific and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Best for: enriching a contact when you have name + employer but no email yet' and suggests considering 'hunter_find_email first'. It also notes cost differences for reveal_phone_number. This provides clear guidance on when to use this tool and when to consider alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enrich_person_by_emailA
[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.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Work or personal email address, e.g. 'jane@stripe.com'. | ||
| reveal_personal_emails | No | If True, also attempt to return personal (non-work) email addresses. Requires a paid Apollo plan. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses cost (1 credit), plan availability (free plan), and return data (job title, seniority, LinkedIn, company, phone). Does not mention failure modes or rate limits, but provides sufficient behavioral context for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences plus a line for best-for context. No redundant words. Front-loaded with purpose. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description explains return values (job title, seniority, LinkedIn, company, phone). Covers cost, plan, workflow context. Distinguishes from siblings. Complete for a simple enrichment tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The description adds workflow context (lead-gen) and plan requirements, but does not add new parameter-level details beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool enriches a person's full B2B profile using email. It specifies the resource (person), action (enrich), and scope (by email). It distinguishes from siblings like bulk_enrich_people and enrich_company by calling it the 'fastest and most reliable Apollo enrichment path'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear best-use scenario: having an email and wanting full profile. Implicitly recommends over alternatives by calling it 'fastest and most reliable'. Mentions cost and plan compatibility. Lacks explicit when-not-to-use or alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hunter_check_accountA
[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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool is free, does not consume credits, and returns specific fields (plan name, monthly quota, requests used, credits remaining). It does not explicitly state read-only behavior, but given the context, it's implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two short paragraphs, front-loaded with the main purpose. Every sentence is informative, covering purpose, best use case, cost, and output fields with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no input schema and no output schema, the description is complete. It explains what the tool does, when to use it, its cost, and what the output contains, fully preparing an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the schema covers everything. The description adds value by explaining the output contents, which is appropriate for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns Hunter.io account info including remaining credits, using a specific verb ('Return') and resource ('account info'). It effectively distinguishes from sibling tools that focus on enrichment/verification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Best for: checking how many finder and verifier credits remain before running a large enrichment batch,' providing clear guidance on when to use. It does not mention when not to use, but the context is clear given the sibling tools cover other purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hunter_count_emailsA
[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.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Company domain to count emails for, e.g. 'stripe.com'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description discloses it's free, returns count broken down by department and seniority, and implies no destructive action. Adequate transparency for a simple count tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and front-loaded: first sentence states action and resource. Subsequent lines add usage guidance and return info without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 1-param tool with no output schema or annotations, the description covers purpose, when to use, cost, and expected output. Fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter described. Description adds value by noting free usage and return structure, going beyond schema details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'Count' and resource 'email addresses indexed for a domain'. Clearly distinguishes from sibling tools like hunter_find_emails_by_domain which retrieve actual emails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Best for: quickly checking data availability before spending credits on a full domain search' and 'FREE — does not consume any credits or quota', guiding when to use and that it's cost-free.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hunter_find_emailA
[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.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Company domain where the person works, e.g. 'stripe.com'. | |
| last_name | Yes | Person's last name, e.g. 'Smith'. | |
| first_name | Yes | Person's first name, e.g. 'Jane'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description fully carries the burden of behavioral disclosure. It explains the cost (1 credit), the return format (guessed email with confidence score 0-100, sources, verification status), and provides a reliability threshold (score above 70). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four short, purposeful sentences with no wasted words. The purpose is front-loaded, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description explains the output structure, cost, and reliability guidance. The parameter set is simple and fully documented. The tool is complete for its intended use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already well-documented. The description adds no new parameter details beyond mentioning 'name and employer', which is already captured in schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds the most likely work email for a specific person, with a specific verb and resource. It distinguishes from siblings like 'hunter_find_emails_by_domain' which finds multiple emails for a domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Best for: finding a contact email when you know the person's name and employer,' providing clear context. It also mentions the cost (1 credit). However, it does not explicitly state when not to use it or name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hunter_find_emails_by_domainA
[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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max emails to return (1–100). | |
| domain | Yes | Company domain to search, e.g. 'stripe.com'. | |
| department | No | Filter by department. Comma-separated values accepted. Options: executive, it, finance, management, sales, legal, support, hr, marketing, communication, education, design, health, operations. | |
| email_type | No | 'personal' returns first.last@ style addresses only. 'generic' returns info@, hello@ etc. Omit for all types. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses cost (1 Hunter request), that it doesn't consume per-email credits, and describes return fields. However, it lacks details on rate limits or caching, but covers key behavioral aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five well-structured sentences with no waste. The opening sentence states the core action and resource. Each subsequent sentence adds distinct value: use cases, cost, return fields, and a precursor action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, and 0 annotations, the description sufficiently covers return values, cost, and best practices. It suggests using hunter_count_emails first, providing actionable context for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions. The description adds value by noting that department accepts comma-separated values and lists options. It also contextualizes email_type by explaining the returned address styles, exceeding schema detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the verb and resource: 'Find all email addresses associated with a company domain.' It lists return fields (confidence scores, names, job titles, LinkedIn URLs) and distinguishes from siblings like hunter_find_email (individual) and hunter_count_emails (gauge availability).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description opens with 'Best for: prospecting a whole company, building outreach lists, discovering team structure at a target account.' It also advises using hunter_count_emails first. While it doesn't state when not to use, it implies alternatives exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hunter_verify_emailA
[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.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email address to verify, e.g. 'jane@stripe.com'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool costs 1 Hunter verification credit, returns a status with values like 'valid' and 'invalid', and includes SMTP and MX record check details. This is transparent about the tool's behavior and output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with no wasted words. It front-loads the purpose, uses bullet points for clarity, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, no output schema, no annotations), the description covers the essential aspects: purpose, usage, cost, and return values. It is complete enough for an AI agent to understand when and how to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter fully described in the schema (email with example). The description adds no additional semantics beyond what the schema provides, but since schema coverage is 100%, baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Verify the deliverability of an email address.' It includes specific verb (verify) and resource (email address), and differentiates from sibling tools like hunter_find_email by focusing on deliverability status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage scenarios: 'Best for: cleaning a lead list before sending outreach, validating emails found by other tools, reducing bounce rates.' It also advises to only send to 'valid' addresses, giving clear context for when to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_companiesA
[Apollo] Search Apollo's company database by keyword, location, or headcount.
REQUIRES Apollo Basic plan ($49/mo) or higher — returns HTTP 403 on the free tier. Does NOT consume credits. Does NOT return email addresses. To get contacts from results, use hunter_find_emails_by_domain (Hunter) or enrich_company (Apollo) for firmographic details (1 credit each).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Result page number (1-based). | |
| keywords | No | Industry / keyword tags to filter by, e.g. ['SaaS', 'artificial intelligence']. | |
| locations | No | HQ locations to filter by, e.g. ['San Francisco, CA', 'Europe']. | |
| employee_ranges | No | Employee count ranges, e.g. ['1,10', '11,50', '51,200']. Use '10001,' for 10 001+ employees. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses key behaviors: requires Apollo Basic plan (returns 403 on free tier), does not consume credits, and does not return email addresses. This is sufficient for an AI agent to understand side effects and constraints, though it could mention pagination or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two paragraph-like sections: purpose then prerequisites/caveats. It front-loads the main action and uses line breaks for readability. Every sentence adds information, though the plan requirement could be integrated more seamlessly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description does not explain the structure of results (e.g., company objects, pagination meta). It covers prerequisites, non-consumption of credits, and what not to expect, but lacks details on return format or how to navigate results. This is a notable gap for an AI agent deciding whether to use this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description summarizes parameters as 'keyword, location, or headcount' but does not add deeper semantics beyond what the schema provides. The schema already describes each parameter with examples and ranges, so the description adds minimal value here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches Apollo's company database by keyword, location, or headcount. It uses specific verbs and resources, and distinguishes itself from sibling tools like enrich_company and hunter_find_emails_by_domain by noting what it does not do (return emails) and what alternatives exist.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool vs alternatives: 'Does NOT return email addresses. To get contacts from results, use hunter_find_emails_by_domain (Hunter) or enrich_company (Apollo) for firmographic details.' Also notes the prerequisite of an Apollo Basic plan, which helps the agent avoid 403 errors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_peopleA
[Apollo] Search Apollo's people database by title, location, or seniority.
REQUIRES Apollo Basic plan ($49/mo) or higher — returns HTTP 403 on the free tier. Does NOT consume credits. Does NOT return email addresses. To get emails for results, use hunter_find_email or enrich_person (1 credit each).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Result page number (1-based). | |
| person_titles | No | Job titles to filter by, e.g. ['CEO', 'Head of Marketing']. Omit to search all titles. | |
| employee_ranges | No | Filter by the person's company headcount, e.g. ['1,10', '11,50', '51,200']. Use '10001,' for 10 001+ employees. | |
| person_locations | No | Locations to filter by, e.g. ['New York, NY', 'United States']. Omit to search all locations. | |
| person_seniorities | No | Seniority levels to filter by, e.g. ['senior', 'manager', 'director', 'vp', 'c_suite']. Omit to include all levels. | |
| organization_keywords | No | Keyword tags for the person's organisation, e.g. ['SaaS', 'fintech']. Omit to search across all companies. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses subscription requirements, credit usage (none), and that emails are not returned. This is good but lacks details on pagination behavior or response structure. Still, it sufficiently informs the agent of key behaviors and limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences followed by a short paragraph of essential notes. Every sentence adds value (purpose, requirements, limitations, alternatives). No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters (all documented in schema), no output schema, and no annotations, the description covers prerequisites, credit consumption, email availability, and alternative tools. This is sufficient for an agent to understand when and how to use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with good descriptions for all 6 parameters. The description only adds a high-level mention of filters ('by title, location, or seniority'), which doesn't significantly enhance understanding beyond the schema. Hence a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'search' and the resource 'Apollo's people database' and mentions key filters (title, location, seniority). It distinguishes from sibling tools like search_companies and enrich_person by specifying it searches for people, not companies, and by not returning emails, which is a differentiator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the required plan (Apollo Basic or higher) to avoid 403 errors, clarifies that it does not consume credits, and notes that it does not return emails. It provides clear alternatives (hunter_find_email, enrich_person) for obtaining emails, giving the agent explicit guidance on when to use this tool and when to switch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
11 tool updates
v0.1.0- First observed
bulk_enrich_people - First observed
enrich_company - First observed
enrich_person - First observed
enrich_person_by_email - First observed
hunter_check_account - First observed
hunter_count_emails - First observed
hunter_find_email - First observed
hunter_find_emails_by_domain - First observed
hunter_verify_email - First observed
search_companies - First observed
search_people
TDQS
Each tool has a clearly distinct purpose: Apollo tools handle company/person enrichment in different ways, Hunter tools cover email finding, verification, and account info, and search tools are for prospecting. Even similar tools like enrich_person and enrich_person_by_email are differentiated by required inputs.
All tool names follow a consistent verb_noun pattern with underscores, e.g., enrich_company, hunter_find_email, search_people. This makes the API predictable and easy to navigate.
11 tools is a well-scoped number for a B2B enrichment server. It covers essential operations from both Apollo and Hunter without being excessive or leaving gaps.
The tool set provides full coverage for B2B enrichment workflows: company and person enrichment, email finding and verification, batch operations, and search. No obvious missing operations like update/delete are needed for this domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Remote MCP server to enrich company profiles with structured B2B data and confidence scores.
Hunter.io MCP — wraps the Hunter.io email finder & verification API (hunter.io)
Identity resolution MCP server for phone/email lookups across 31+ services. Global + India coverage.
MCP server for Tomba email finder, verification, and contact enrichment API
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server for Apollo.io B2B database enabling people and company search, enrichment, and insights through conversational interfaces.950719MIT
- AlicenseAqualityDmaintenanceMCP server for Apollo.io B2B sales intelligence API. Enables searching and enriching people and organizations via natural language.7274MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for the Apollo.io API that lets LLMs search and enrich people and company data.66MIT
- AlicenseAqualityDmaintenanceLead generation MCP server for AI agents. Find emails, verify contacts, enrich profiles, and search prospects using Hunter.io, Apollo.io, and Abstract API.819MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Aleksey-Panf/b2b-enrichment-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server