mcp-email-waterfall-orchestrator
LocalAbout mcp-email-waterfall-orchestrator
An MCP server for the Mamba Labs Work Email Waterfall actor on Apify. It searches for and verifies work email addresses using provider keys supplied by the operator, and reports which providers were used and their attributable spend.
Key features
- 01Searches work emails for contacts
- 02Verifies each returned address
- 03Accepts operator-owned provider keys
- 04Configurable provider and verifier order
- 05Reports provider attempts and spend
- 06Returns contact rows and run totals
Use cases
- 01Find work emails for a contact list
- 02Verify addresses before adding them to outreach
- 03Compare provider results and attributable costs
MCP support
Exposes the Apify actor as the `find_work_email` tool for MCP clients. The tool accepts contacts and provider configuration, then returns results and run totals.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y @mambalabsdev/mcp-email-waterfall-orchestratorAPIFY_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 |
|---|---|---|---|
| contacts | array | No | One object per person. Each may carry full_name, first_name, last_name, company_domain, company_name, linkedin_url and email. A single contact is an array of one. Omit it or pass an empty array and the run returns a summary row explaining that nothing was attempted and nothing was charged. |
| maxContacts | integer | No | Hard ceiling on how many contacts are processed. Leave empty for no ceiling. |
| providerKeys | object | No | YOUR own provider API keys, keyed by provider name. Validated for free before any paid call. A provider with no usable key is dropped and reported rather than failing the run. |
| providerOrder | array | No | Registry entry ids in the order you want them called. Leave empty for the actor's default order. |
| providerRates | object | No | Optional map of provider or provider.endpoint to YOUR cost per unit, for example {"findymail.search_name": 0.0198}. Supply it and the run reports dollars at your rate; leave it empty and it reports units only, because your plan tier is not knowable from here. |
| concurrencyHint | integer | No | Advisory only. Real pacing comes from each endpoint's own documented rate limits, which are multi-window and per endpoint, so this cannot exceed them. |
| maxProviderUnits | integer | No | Run-level cap on the provider credits this run may consume from YOUR accounts. When it is reached the remaining contacts are skipped with a reason rather than spent on. Strongly recommended. |
| verificationOrder | array | No | Verifier entry ids in order. Leave empty for the actor's default order. |
Details
From the project READMEWork Email Waterfall MCP Server
MCP server for the Mamba Labs Work Email Waterfall actor on Apify.
Give it contacts and your own provider API keys. It finds a work email for each, verifies it, and tells you exactly what each provider cost you.
Tool
find_work_email
Returns one flat row per contact, misses included, plus a summary row carrying the run totals: the address found, which provider found it, its position in the chain, every provider attempted, the verification verdict and its source, and the provider units spent.
Bring your own keys
This is the part that makes it different from a credit-based enrichment tool. Mamba Labs supplies no provider keys, never sees your credits, and never resells them. The run spends from your accounts at your negotiated rates, which is why maxProviderUnits exists and why you should set it.
The tradeoff is honest in both directions: you keep your own pricing and your own provider relationships, and you carry your own spend. What you get back is real attribution rather than a credit count, so you can see which provider actually earned its keep.
Give it providerRates and the run reports dollars at your rate. Leave it empty and it reports units only, because your plan tier is not knowable from here and guessing it would produce a confident wrong number.
What happens to a bad key
Nothing dramatic. Every key is validated for free before any paid call. A provider with no usable key is dropped from the chain and reported, rather than failing the run or silently burning attempts. With no keys at all the run still completes, explains which capabilities were unavailable, and charges nothing.
Verification is not an afterthought
Verification runs after each finder that returns an address, not once at the end, because providers do not agree on what "found" means. An address that one provider calls a hit and a verifier calls undeliverable is a miss, and you want to know that before it reaches a sequencer.
find_work_email
| Input | Type | Notes |
|---|---|---|
contacts | object[] | One object per person. Any of full_name, first_name, last_name, company_domain, company_name, linkedin_url, email. A single contact is an array of one. |
providerKeys | object | Your own keys, by provider name. Validated for free before any paid call. |
providerOrder | string[] | Registry entry ids in call order. Empty means the actor's default chain. |
verificationOrder | string[] | Verifier entry ids in order. Empty means the actor's default. |
maxContacts | integer | Hard ceiling on contacts processed. |
maxProviderUnits | integer | Run-level cap on provider credits spent from your accounts. Strongly recommended. |
providerRates | object | Map of provider or provider.endpoint to your cost per unit, so spend is reported in dollars. |
concurrencyHint | integer | Advisory. Real pacing comes from each endpoint's own multi-window rate limits. |
max_charge_usd | number | Optional cost cap in USD for this run. The actor stops before an item that could take its charges past this amount. |
More identifiers means a better chance of a hit. Keyed on a LinkedIn URL the top provider measured 13.7 percent against 9.3 percent on name plus domain, on the same 300 contacts in the same hour.
Setup
{
"mcpServers": {
"mamba-email-waterfall-orchestrator": {
"command": "npx",
"args": ["-y", "@mambalabsdev/mcp-email-waterfall-orchestrator"],
"env": { "APIFY_TOKEN": "your-apify-token" }
}
}
}
Get a token at console.apify.com/account/integrations. Each call spends from your own provider accounts and consumes Apify credits per contact submitted and per address found, on top of whatever your own provider keys spend.
Pricing
Price per event on the Apify FREE plan, from the live pricing record; paid Apify plans pay less per event.
| Event | Price (USD) |
|---|---|
Actor Start (apify-actor-start) | 0.00005 |
Email Search Submitted (email-search-submitted) | 0.003 |
Email Found (email-found) | 0.02 |
Also available
This tool is also exposed by the GTM Suite umbrella server, alongside the rest of the Mamba Labs GTM actors, if you would rather run one server than many.
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.