About mcp-people-finder
An MCP server that wraps the Mamba Labs People Finder & Email Verifier Apify actor to find company contacts by role, seniority, and department. It returns structured records with optional business-email discovery and verification.
Key features
- 01Search by domain, company name, or LinkedIn URL
- 02Filter by title, seniority, department, and country
- 03Discover and verify business emails
- 04Optionally check current job position
- 05Batch company searches
Use cases
- 01Building a role-specific prospect list
- 02Mapping departments at target companies
- 03Finding and checking business email addresses
MCP support
Exposes the `find_people_and_emails` tool to MCP clients. It passes search and filtering inputs to the Apify actor and returns the actor’s output.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y @mambalabsdev/mcp-people-finderAPIFY_TOKENSecretApify API token from https://console.apify.com/account/integrationsLocal servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
1Saved tool list · updated 2w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| domain | string | No | Bare domain without https:// or trailing slash. Example: stripe.com |
| domains | array | No | Optional list of bare domains. Takes precedence over the single domain field. Each domain is searched independently and every output row echoes its source domain. |
| batchSize | integer | No | How many companies to search concurrently in batch mode. Default 5, maximum 10. Default: 5. |
| countries | array | No | ISO 3166-1 alpha-2 codes. Filters to people located in these countries. Example: US, GB, NL |
| jobTitles | array | No | Case-insensitive substring match against the person's current title. Any match qualifies. Leave empty for no title filter. Example: VP Sales, Head of Growth |
| seniority | array | No | Filter to these normalized seniority levels. Leave empty for all. |
| skipCache | boolean | No | Results are cached for 7 days and reused on repeat lookups. Set true to force a fresh search. Default: false. |
| serpApiKey | string | No | Serper.dev API key. Unlocks the search layer, which is the highest-coverage source of LinkedIn profile URLs. Without it this actor falls back to company website parsing only, which returns far fewer people. Get a key at https://serper.dev. You are billed by Serper for searches; this actor does not mark them up. |
| departments | array | No | Filter to these normalized departments. Leave empty for all. |
| reoonApiKey | string | No | Primary email verification. Returns deliverability status for each discovered address. Get a key at https://emailverifier.reoon.com. Billed to you by Reoon. |
| targetCount | integer | No | Maximum people to return per company. Billing is per person actually returned, so a lower number is a hard cost cap. Default: 5. |
| claudeApiKey | string | No | Optional. Only used to classify job titles that the built-in rule table cannot place into a seniority and department. One batched call per run, never per person. Leave empty to leave those two fields null on the affected rows. |
| company_name | string | No | Used when no domain is available, or as a disambiguation hint alongside a domain. |
| verifyEmails | boolean | No | Check deliverability of each email found, escalating catch-all domains to a second provider for a definitive answer. Requires a Reoon and/or BounceBan key. Default: true. |
| icypeasApiKey | string | No | Optional. Only used for the licensed-database fallback layer, which runs when the company website and public search results do not yield enough people. Leave empty to skip that layer entirely; the run still succeeds and reports any shortfall in the summary. |
| includeEmails | boolean | No | Discover a business email for each person found, using your Icypeas and/or Prospeo keys. Billed only when an email is actually returned. Turn off to build an org map cheaply. Default: true. |
| prospeoApiKey | string | No | Second provider in the email waterfall. Used only for people the first provider could not resolve. Get a key at https://prospeo.io. Billed to you by Prospeo; this actor does not mark it up. |
| verifyPosition | boolean | No | Check that the person still holds the returned title at the target company, and report the reasoning. Reduces bounced outreach to people who have moved on. Default: false. |
| bounceBanApiKey | string | No | Catch-all resolution. Used only when the primary verifier returns catch-all or risky, to determine whether that specific mailbox exists. Get a key at https://bounceban.com. Billed to you by BounceBan. |
| excludeJobTitles | array | No | Case-insensitive substring match. A person matching any of these is dropped even if they matched an include. Example: intern, assistant, former |
| linkedin_company_url | string | No | Example: https://www.linkedin.com/company/stripe. Skips internal company resolution when provided. |
| suppressLinkedInUrls | array | No | LinkedIn profile URLs to exclude from results. Use to suppress already-contacted prospects or honor data subject removal requests. |
Details
From the project READMEPeople Finder & Email Verifier MCP Server
MCP server for the Mamba Labs People Finder & Email Verifier actor on Apify.
Give it a company domain, name or LinkedIn URL and it returns the people at that company who match your role, seniority and department filters, each as a structured contact record with an optional verified business email.
Install
npx -y @mambalabsdev/mcp-people-finder
Claude Desktop
{
"mcpServers": {
"mamba-people-finder": {
"command": "npx",
"args": ["-y", "@mambalabsdev/mcp-people-finder"],
"env": { "APIFY_TOKEN": "your-apify-token" }
}
}
}
Get an Apify token at console.apify.com/account/integrations.
Tool
find_people_and_emails
Give it a company domain, name or LinkedIn URL and it returns the people at that company who match your role, seniority and department filters, each as a structured contact record with an optional verified business email.
| Input | Type | Required | Notes |
|---|---|---|---|
domain | string | no | Bare domain without https:// or trailing slash. Example: stripe.com |
company_name | string | no | Used when no domain is available, or as a disambiguation hint alongside a domain. |
linkedin_company_url | string | no | Example: https://www.linkedin.com/company/stripe. Skips internal company resolution when provided. |
domains | array | no | Optional list of bare domains. Takes precedence over the single domain field. Each domain is searched independently and every output row echoes its source domain. |
targetCount | integer | no | Maximum people to return per company. Billing is per person actually returned, so a lower number is a hard cost cap. Default: 5. |
jobTitles | array | no | Case-insensitive substring match against the person's current title. Any match qualifies. Leave empty for no title filter. Example: VP Sales, Head of Growth |
excludeJobTitles | array | no | Case-insensitive substring match. A person matching any of these is dropped even if they matched an include. Example: intern, assistant, former |
seniority | array | no | Filter to these normalized seniority levels. Leave empty for all. |
departments | array | no | Filter to these normalized departments. Leave empty for all. |
countries | array | no | ISO 3166-1 alpha-2 codes. Filters to people located in these countries. Example: US, GB, NL |
includeEmails | boolean | no | Discover a business email for each person found, using your Icypeas and/or Prospeo keys. Billed only when an email is actually returned. Turn off to build an org map cheaply. Default: true. |
verifyEmails | boolean | no | Check deliverability of each email found, escalating catch-all domains to a second provider for a definitive answer. Requires a Reoon and/or BounceBan key. Default: true. |
verifyPosition | boolean | no | Check that the person still holds the returned title at the target company, and report the reasoning. Reduces bounced outreach to people who have moved on. Default: false. |
suppressLinkedInUrls | array | no | LinkedIn profile URLs to exclude from results. Use to suppress already-contacted prospects or honor data subject removal requests. |
batchSize | integer | no | How many companies to search concurrently in batch mode. Default 5, maximum 10. Default: 5. |
skipCache | boolean | no | Results are cached for 7 days and reused on repeat lookups. Set true to force a fresh search. Default: false. |
serpApiKey | string | no | Serper.dev API key. Unlocks the search layer, which is the highest-coverage source of LinkedIn profile URLs. Without it this actor falls back to company website parsing only, which returns far fewer people. Get a key at https://serper.dev. You are billed by Serper for searches; this actor does not mark them up. |
prospeoApiKey | string | no | Second provider in the email waterfall. Used only for people the first provider could not resolve. Get a key at https://prospeo.io. Billed to you by Prospeo; this actor does not mark it up. |
reoonApiKey | string | no | Primary email verification. Returns deliverability status for each discovered address. Get a key at https://emailverifier.reoon.com. Billed to you by Reoon. |
bounceBanApiKey | string | no | Catch-all resolution. Used only when the primary verifier returns catch-all or risky, to determine whether that specific mailbox exists. Get a key at https://bounceban.com. Billed to you by BounceBan. |
icypeasApiKey | string | no | Optional. Only used for the licensed-database fallback layer, which runs when the company website and public search results do not yield enough people. Leave empty to skip that layer entirely; the run still succeeds and reports any shortfall in the summary. |
claudeApiKey | string | no | Optional. Only used to classify job titles that the built-in rule table cannot place into a seniority and department. One batched call per run, never per person. Leave empty to leave those two fields null on the affected rows. |
max_charge_usd | number | no | Optional spending cap for this call, in USD. The actor stops before any charge that would take the run past this amount and keeps every row already charged. |
Billing
You are charged per company searched, per person found, per email found, per email verified, per position verified and per SERP query, plus a small actor start fee. A lower targetCount is a hard cost cap.
Prices from the live pricing record, read 2026-10-16:
| Event | Price per event (USD) | Fires when |
|---|---|---|
apify-actor-start | $0.00005 | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). |
company-searched | $0.02 on the Free plan, down to $0.017 on higher Apify plans | Charged per company domain processed through the cascade |
person-found | $0.02 on the Free plan, down to $0.017 on higher Apify plans | Charged per person returned in the final dataset |
email-found | $0.04 on the Free plan, down to $0.034 on higher Apify plans | Charged when an email is discovered via Icypeas or Prospeo |
email-verified | $0.015 on the Free plan, down to $0.01275 on higher Apify plans | Charged when an email is verified through Reoon or BounceBan |
position-verified | $0.015 on the Free plan, down to $0.01275 on higher Apify plans | Charged when a title is verified via AI classification |
serp-query | $0.003 on the Free plan, down to $0.00255 on higher Apify plans | Charged per search engine query sent through the caller's API key |
The current price is on the actor's Apify page. Running this server consumes Apify credits.
What this server does and does not do
It is a thin client for the Apify actor. It passes your input through and returns the actor's output unchanged. Every behavior described above lives in the actor, not here.
Errors are surfaced, never swallowed. An invalid input, an invalid token, an exhausted balance, a timeout, or a run that returns anything other than a dataset all come back as an explicit tool error rather than as an empty result.
Source
The actor is on the Apify Store. This wrapper is MIT licensed.
Built by Mamba Labs
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.