Best MCP Servers for Windsurf in 2026
Firecrawl, Bright Data, Zyte, and Crawlora compared as Windsurf (now Devin Desktop) MCP servers — config, tool counts, and which fits which job.
Windsurf's own docs and third-party trackers both flag it as a strong pick for parallel multi-agent sessions, and its MCP support has been stable for a while — but nobody's published a Windsurf-specific buyer's guide for web-data MCP servers. This one compares what actually connects, with real config, not marketing copy.
Update, November 2, 2026: Windsurf is now Devin Desktop
This post was written in July 2026 under the Windsurf name. Devin's desktop changelog shows the rename landed in v3.0.12 on June 2, 2026 ("Windsurf is now Devin Desktop"), and most of what changed for MCP since then is on the Devin side. What the changelog and docs say, as of today:
- Two config layouts. Devin's docs describe MCP config for the default Devin Local agent as three files:
~/.config/devin/mcp_config.jsonfor you,.devin/mcp_config.jsonshared through version control, and.devin/mcp_config.local.json, gitignored, for personal keys. Servers in olderconfig.jsonfiles are migrated automatically. The remote-server field there isurl, with an optionaltransportofhttp(default) orsse, plusheaders, anddevin mcp add <name> <URL>writes it for you. Those pages do not mentionserverUrl,~/.codeium/windsurf/or Cascade, so the older block shown later in this post reflects how Windsurf-era builds read config and we have not confirmed it against a current Devin Desktop install. Open the MCP panel to see the path your build resolves. - Protocol revision. v3.10.67 (October 12, 2026) added support for connecting to MCP servers on the 2026-07-28 protocol revision. v3.10.23 (September 10) made MCP authorization open the provider directly, and v3.10.35 (September 24) let servers passed by an ACP client be used by the agent.
- Remote servers from Devin Cloud. The same v3.10.67 release has a private-preview path for Devin Desktop to reach remote MCP servers configured in Devin Cloud, limited to enterprise-level MCPs.
- Auth and approvals. Devin Local supports OAuth on stdio, Streamable HTTP and SSE servers, and by default asks for approval before calling any MCP tool. Enterprise admins manage registries and an allowlist under MCP & ACP in team settings.
For this comparison it changes two things. Zyte's hosted server and Crawlora's OAuth-capable hosted server are now easier to try, because OAuth sign-in is supported on every transport; and the key placement advice below (Authorization under headers) still holds, but the URL field name may be url, not serverUrl. None of the four vendors documents Devin Desktop by name yet; Firecrawl's and Crawlora's Windsurf instructions are the closest.
Windsurf's MCP config — and a real filename discrepancy
Windsurf reads MCP server definitions from a JSON file under ~/.codeium/windsurf/, root key mcpServers (the same shape as Claude Desktop). The filename itself is documented inconsistently across vendors: Firecrawl's own MCP repo instructs ./codeium/windsurf/model_config.json, while Crawlora's own repo and most third-party guides say mcp_config.json. This isn't a typo either side made up — it likely reflects Windsurf renaming the file at some point and docs going stale at different rates. Check what your installed Windsurf version actually reads (open its MCP settings panel, which shows the resolved config path) rather than trusting any single vendor's doc blindly.
What to evaluate, in Windsurf specifically
- Does the vendor document Windsurf by name, or are you pasting a Claude Desktop block and hoping the key names match? Windsurf's remote-server shape differs from other clients, and the config filename itself is documented inconsistently (see above).
- Header placement: Windsurf expects a bearer token under a headers object on remote servers. A config that puts Authorization at the top level, or uses another client's serverUrl convention, fails silently in the MCP panel.
- Generic crawl (any URL → markdown) versus structured platform data (named sites → JSON). Cascade sessions tend to do both: read a docs page, then look up a number on a known site.
- Tool count against Cascade's tool picker: 60 tools that mostly need a browser, or 4,232 that map one-to-one onto REST endpoints? Bright Data's groups= filter and Crawlora's per-endpoint tools both let you narrow what Cascade sees.
- Billing on failure: Cascade retries a failed tool call. Whether each failed attempt is billed changes the cost of a long session.
The contenders
| Tool | Format | Coverage | Config | Best for |
|---|---|---|---|---|
| Firecrawl MCP | MCP server | Scrape/crawl/search/extract any URL | mcpServers key, npx -y firecrawl-mcp, server name mcp-server-firecrawl per their own docs | Generic crawl-to-markdown for arbitrary sites |
| Bright Data | MCP server (32 tools) | 40+ named platforms + proxy/anti-bot infra | Same mcpServers shape, npx @brightdata/mcp or hosted mcp.brightdata.com/mcp?token=... | Anti-bot-hardened extraction at scale |
| Zyte | Hosted remote MCP server | Zyte API and Scrapy Cloud tools | https://mcp.zyte.com/v1/mcp; Windsurf undocumented | Zyte API users |
| Crawlora | MCP server | 4,232 tools across 497 platform groups | mcpServers key, https://mcp.crawlora.net/mcp, note the Authorization header goes under headers, not a top-level field | Structured JSON from named platforms, pay-on-success |
Firecrawl MCP: the vendor that documents Windsurf's filename its own way
Firecrawl's repo documents Windsurf directly, which is worth something in a client where most vendors do not. Its block names the server mcp-server-firecrawl, runs npx -y firecrawl-mcp with FIRECRAWL_API_KEY in env, and points at ./codeium/windsurf/model_config.json (the filename discrepancy covered above). It has no fixed platform catalog: any public page comes back as markdown, structured JSON or a full-site crawl. Choose it when Cascade's web calls are "read this page or repo into context", which is most of them in a coding session.
Bright Data: same shape as VS Code, with a hosted option
Bright Data uses the same JSON in Windsurf as in VS Code: a local npx @brightdata/mcp command with API_TOKEN in env, or the hosted mcp.brightdata.com/mcp?token=... URL if you would rather not run a process. Its 32-tool server covers named e-commerce, social, business and finance platforms plus its proxy and browser infrastructure, and the groups= filter keeps Cascade from being handed every tool at once. Choose it when anti-bot reliability on hard, named targets is the constraint.
Zyte: a hosted server now exists, Windsurf isn't documented
Update, October 5, 2026: Zyte launched a hosted MCP server on September 30, 2026 (https://mcp.zyte.com/v1/mcp), which this post first missed. Zyte's docs cover other clients, not Windsurf, so it is untested here. Check which config filename your Windsurf build reads (see above) before adding it. Tools and billing: see our Pi write-up.
Crawlora: the header goes under headers, and nothing runs locally
Crawlora's MCP server documents Windsurf directly: ~/.codeium/windsurf/mcp_config.json, mcpServers key, https://mcp.crawlora.net/mcp, with the API key as Authorization: Bearer <key> under a headers object. That last detail is the one people get wrong when adapting a block from a client that uses a serverUrl field or a top-level header, so copy the exact block rather than guessing:
{
"mcpServers": {
"crawlora": {
"serverUrl": "https://mcp.crawlora.net/mcp",
"headers": { "Authorization": "Bearer YOUR_CRAWLORA_API_KEY" }
}
}
}
No npx process to install or keep alive. The 4,232 tools map one-to-one onto documented REST endpoints across search, maps, e-commerce, social, finance, travel, jobs, media, app stores and reviews, return normalized JSON, and are billed only on success, with 2,000 free credits a month and no card. Choose it when Cascade needs a record from a named platform (a price, a ranking, a listing, a filing) rather than a page to read.
How to choose, by job
- "Read this page / these docs into context" → Firecrawl MCP, and accept the filename ambiguity.
- "Get me the data off this hard, named site, at volume" → Bright Data, local or hosted, with
groups=narrowing the tools. - "Give me the price / ranking / listing / filing from a known platform, as JSON, with nothing installed" → Crawlora MCP, header under
headers. - "I want Zyte's Scrapy-generation workflow" → Claude Code or GitHub Copilot for now, not Windsurf.
- Server shows as disconnected in the MCP panel → check the filename you edited and where the header sits before anything else; those two account for most Windsurf MCP failures.
Add structured web data to Windsurf
4,232 tools across 497 platform groups, one API key, billed only on success. 2,000 free credits a month, no card.
Sources
Related reading
- Best MCP Servers for Warp in 2026 · Best MCP Servers for JetBrains IDEs in 2026 — the same comparison, two more clients.
- Best MCP Servers for GitHub Copilot in 2026 — the same comparison, Copilot's config shape.
- Best Web Scraping MCP Servers & Skills for Claude Code in 2026.
- Crawlora vs Firecrawl · Crawlora vs Bright Data.
- Give your AI agent live web data with MCP.
Frequently asked questions
What's the best MCP server for web scraping with Windsurf?
Firecrawl MCP fits crawling or reading arbitrary websites. Bright Data is built for anti-bot-hardened extraction across 40+ named platforms. Crawlora fits when you want structured JSON from named platforms without maintaining a parser, billed only on success. Zyte launched an official hosted MCP server on September 30, 2026, but does not document Windsurf as a client.
Where does Windsurf read its MCP server config from?
A JSON file under ~/.codeium/windsurf/, root key mcpServers — the same shape as Claude Desktop. The exact filename is documented inconsistently across vendors (Firecrawl's own repo says model_config.json, most others say mcp_config.json), which likely reflects Windsurf renaming the file at some point. Check your installed Windsurf version's MCP settings panel for the resolved path rather than trusting one vendor's doc.
Does Zyte work with Windsurf?
Zyte launched an official hosted MCP server on September 30, 2026 (https://mcp.zyte.com/v1/mcp, account sign-in, billed at Zyte API rates with no separate MCP fee). Zyte's docs list Claude Code, Codex CLI, GitHub Copilot CLI, VS Code and claude.ai as supported clients, not Windsurf, so using it here is the generic remote-server path, which we have not tested. Access needs an organization with an active Zyte API or Scrapy Cloud plan.
How do I install Crawlora's MCP server for Windsurf?
Add an mcpServers block to your Windsurf config pointing at https://mcp.crawlora.net/mcp, with the API key under a headers.Authorization field (Bearer <key>) — this is a different shape than the serverUrl convention some other remote servers use, so copy the exact block from the docs rather than guessing the key names. Free tier is 2,000 credits/month, no card.
Is Windsurf the same as Devin Desktop?
Yes. Devin's desktop changelog lists v3.0.12 (June 2, 2026) as "Windsurf is now Devin Desktop". Its docs now describe MCP config for the default Devin Local agent as ~/.config/devin/mcp_config.json, .devin/mcp_config.json and .devin/mcp_config.local.json with a url field, while Windsurf-era guides use ~/.codeium/windsurf/mcp_config.json and serverUrl. Check which path your build resolves in its MCP panel.
