Integrations · Windsurf
Add RichAPI's hosted MCP server to Windsurf's mcp_config.json and Cascade can run a one-off enrichment job end to end: read the file, call the endpoint per row, write the output. Waterfall misses cost zero credits; everything else bills on a 2xx, so cap the row count before you start.
Last updated September 22, 2026
Create a RichAPI account at app.richapi.ai/signup and copy your API key.
25 free credits, no card.
Open Windsurf Settings → Cascade → MCP servers and edit the raw config, or edit ~/.codeium/windsurf/mcp_config.json directly.
Add the richapi server under mcpServers using the mcp-remote shim, exactly as in the Claude config.
Refresh the server list in Settings.
RichAPI's tools appear in Cascade's tool list; a failure here is almost always npx missing from the PATH Windsurf inherited.
Start with one row.
Ask Cascade for a single lookup, read the response, then tell it how many rows it may process.
Copy, paste, edit the brackets, run.
Why it matters
A list job that runs once does not deserve a pipeline. Cascade can read the file, loop the calls and write the output, which turns an afternoon of glue code into a paragraph, as long as you cap the loop before it spends credits you did not budget.
RichAPI runs a hosted MCP server. Connect it to Windsurf and Cascade can do the whole job rather than one step of it: open the file, call the endpoint for each row, and write the result back to disk. In a chat window you get an answer you then copy somewhere. In Cascade the output is a file in your workspace.
Create an account at `app.richapi.ai/signup` and copy your key. Windsurf keeps MCP servers in `~/.codeium/windsurf/mcp_config.json`. Reach it through Settings → Cascade → MCP servers, or edit the file. The shape is the `mcpServers` object you already know from [Claude](/integrations/claude): ```json { "mcpServers": { "richapi": { "command": "npx", "args": [ "mcp-remote", "https://mcp.richapi.ai/mcp", "--header", "x-api-key: ${RICHAPI_KEY}" ] } } } ``` Export `RICHAPI_KEY` in your environment before launching Windsurf, or put the literal key here and accept that it is sitting in a file in your home directory. Some Windsurf versions accept a remote server directly through a `serverUrl` field instead of a command. Where that works it is fewer moving parts; it has also changed between releases, so we are not printing it as the default. The shim works either way. Refresh the server list and the tools appear in Cascade. If they do not, it is almost always `npx`: Windsurf launched from the dock does not always inherit the PATH your shell has. We are not in Windsurf's MCP plugin store. There is no one-click install for this, just the config above.
The tools map one-to-one onto the REST endpoints: - `email_finder`, `email_verifier`, [`phone_finder`](/api/phone-finder) — the three waterfall endpoints, where a miss is free. - `enrich_company` and `enrich_profile` — LinkedIn URL in, not a domain. - `people_search` — filtered profiles, billed per result. - [`web_tech_stack`](/api/tech-stack-lookup) — what a domain runs. The pattern that pays for the setup is the filter-then-enrich job: > Read `prospects.csv`. Call `enrich_company` on the LinkedIn URLs, drop anything under 200 people, then run `email_finder` only on the survivors. Write the result to `prospects_enriched.csv` with a column for whether we were billed. Ordering the steps that way is the whole trick. Enriching first and filtering afterwards means you paid for every row you were about to throw away. Cascade will happily do it in either order, so say which one you want.
Cascade is autonomous by design, which is the feature and also the thing to be careful with. "Enrich this file" against a 4,000-row CSV is a 4,000-call instruction and it will not check in halfway. Every RichAPI tool is a read-only lookup. Nothing sends email, posts anything, or writes to a CRM, so a runaway loop costs credits rather than reputation. Still: put a row cap in the prompt, run the first batch, look at the output, then raise it. The 25 free credits are a good size for exactly this test.
Waterfall calls return an `execution_log` showing who ran and what each returned, plus a `billed` flag. Ask Cascade to keep that column in the output file and your misses stop being indistinguishable from bugs. We do not publish the provider roster, because it changes as providers are added and dropped. The per-call log is the honest version.
Prepaid credits, one pool shared with REST. Each tool above bills its published per-call rate; `people_search` bills per result, so any estimate needs a result count attached. Rate tiers are on [/pricing](/pricing); the [waterfall cost calculator](/tools/waterfall-cost-calculator) will price a list before you run it. On `email_finder`, `email_verifier` and `phone_finder`, a call that finds nothing costs zero. The providers ran and were paid; you were not charged. Everywhere else a 2xx bills, including an empty one.
We are the data layer. No prospecting UI, no sequencer, no CRM app. A job that has to run every Monday belongs in [n8n](/integrations/n8n), not in an editor session you have to remember to open, and a list a non-engineer needs to click through belongs in [Clay](/integrations/clay).
**Is this an official Windsurf integration?** No. Standard MCP server, standard client, and no plugin store listing. **Does Windsurf's config differ from Claude's?** Same `mcpServers` shape, different file: `~/.codeium/windsurf/mcp_config.json`. **Why is Cascade not showing the tools?** Refresh the MCP server list first. Then check that `npx` resolves in the environment Windsurf actually launched with. **Can I keep the tool list short?** Connect only what you use. A long tool list makes model tool-selection worse in any client, and this catalog is not small. **Same key from my code?** Yes. One key, one credit pool, `api.richapi.ai`.
25 free credits, no card. Connect the server, hand Cascade a 25-row file, and see what comes back before you point it at the real list. Other clients are on the [integrations hub](/integrations), starting with [Claude](/integrations/claude).