· Sales data · 3 min read

Waterfall Enrichment in Claude Code with an MCP Server

Waterfall enrichment is how you get accurate, affordable B2B data. Which MCP servers run waterfalls, how to connect one to Claude Code, and how to change the provider order.

Summarize
›In this post · 5 sections
  1. Which MCP servers run waterfalls
  2. Set it up
  3. Run a waterfall
  4. Change the provider order
  5. From chat to something that keeps running

Waterfall enrichment is one of the core strategies for getting accurate, affordable B2B data: ask providers in order until one has the answer. Read "What Is Waterfall Enrichment?" to learn more about the idea.

Which MCP servers run waterfalls

Most enrichment MCP servers wrap one provider: Hunter, LeadMagic, Crustdata, Apollo. They're useful, but when the provider has no answer, the agent hits a dead end.

The solution is to add a B2B waterfall MCP server to your agent. A waterfall finds more than any single provider:

Work emails found from a LinkedIn URL: pipe0 waterfall 77.5%, Surfe 69.2%, Wiza 65.8%, Amplemarket 55.8%, Crustdata 50.8%, Prospeo 45.8%, LeadMagic 27.5%.

Waterfall MCP servers:

  • pipe0 has waterfall pipes for work emails, personal emails, mobile numbers, and company data, over providers like Wiza, Amplemarket, Crustdata, Surfe, Hunter, and LeadMagic, in an order you choose.
  • FullEnrich has an official MCP server over its email and phone waterfall.
  • Clay runs waterfalls inside Clay tables, so an agent can trigger them but not build them.
  • BetterContact runs an email and phone waterfall, but has no official MCP server; you'd connect it through a third party like Zapier.

Single-provider MCP servers, useful as one step in a chain:

  • Surfe has the highest coverage of any single provider above, with an official MCP server in beta.
  • Prospeo, LeadMagic, Crustdata, and Apollo all have official MCP servers.
  • Wiza and Hunter have no official MCP server, but both run inside pipe0's waterfalls.

For the wider picture, see the best MCP servers for GTM engineers.

Set it up

The example uses pipe0. Add the server from your terminal:

Claude Code
claude mcp add --transport http pipe0 https://api.pipe0.com/v1/mcp

Then run /mcp inside Claude Code, select pipe0, and choose Authenticate. A browser window opens for sign-in; there's no API key to paste.

Run a waterfall

Ask for what you need:

Prompt
Find work emails for these 8 LinkedIn profiles. Only keep emails that
pass validation.

The agent looks up the right pipe, person:workemail:profileurl:waterfall@1, and sends the profiles in one call. Before it spends anything, it asks you to confirm. Each person comes back with a work email or a clear "no result", which is an answer, not an error: every provider in the chain was asked and none had it. Misses cost nothing.

The same request works outside Claude Code too:

import { Pipe0 } from "@pipe0/client";

const pipe0 = new Pipe0({ apiKey: process.env.PIPE0_API_KEY });

const result = await pipe0.pipes.pipe({
  pipes: [
    {
      pipe_id: "person:workemail:profileurl:waterfall@1",
    },
  ],
  input: [
    {
      id: "1",
      profile_url: "https://www.linkedin.com/in/jane-doe",
    },
  ],
});
console.log(result);
import requests

response = requests.post(
    "https://api.pipe0.com/v1/pipes/run/sync",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "pipes": [
            {
                "pipe_id": "person:workemail:profileurl:waterfall@1",
            },
        ],
        "input": [
            {
                "id": "1",
                "profile_url": "https://www.linkedin.com/in/jane-doe",
            },
        ],
    },
)
print(response.json())
curl -X POST "https://api.pipe0.com/v1/pipes/run/sync" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "pipes": [
    {
      "pipe_id": "person:workemail:profileurl:waterfall@1"
    }
  ],
  "input": [
    {
      "id": "1",
      "profile_url": "https://www.linkedin.com/in/jane-doe"
    }
  ]
}'

Change the provider order

The waterfall's default order is Wiza, Amplemarket, Crustdata, then Surfe. If you trust a different provider for your market, say so:

Prompt
Run the same waterfall, but ask Amplemarket first and skip Wiza.

The agent passes a providers list in the pipe's config, and the server asks them in that order. Hunter, Findymail, and LeadMagic can join the chain too.

From chat to something that keeps running

A one-off run in chat is a good start. When the list matters, ask the agent to put it in a sheet, then to refresh it on a schedule. It's the same engine, so nothing gets rebuilt along the way. If you're new to the pipe0 MCP server, this walkthrough builds a full prospect list from one prompt.

Frequently asked questions

How do I set up waterfall enrichment in Claude Code?

Add an MCP server that runs waterfalls server-side. Run `claude mcp add --transport http pipe0 https://api.pipe0.com/v1/mcp`, run /mcp to sign in, and ask Claude Code for the data you need. The agent picks the best waterfall to fulfill your request.

Which MCP servers support waterfall enrichment?

Most enrichment MCP servers wrap a single provider. pipe0 and FullEnrich run waterfalls behind an official MCP server. Clay runs waterfalls inside Clay tables, and BetterContact has no official MCP server. Surfe, Prospeo, LeadMagic, Crustdata, and Apollo offer single-provider MCP servers.

Can I change the order of providers in the waterfall?

Yes, with pipe0. Each waterfall pipe takes a providers list in its config, so you can tell the agent which providers to ask and in what order, or drop one entirely.

Next-gen enrichment & search.

Build revenue systems that scale. For humans, agents, and apps. Replace tools like Clay, n8n, Hightouch, etc.

selectedRun
InputHDFind work email
NameWork email
Ada ByrneHa.byrne@acme.io
Leo CostaDl.costa@northbeam.co
Mia ChenRunning...
New empty row
Using pipe0 at work?