Windsurf MCP Tools: Connect Your AI Coding Agent to 10,000+ Tools
The thing that makes Windsurf different from other AI editors is that Cascade is already watching. Open a file, and it's reading it. Switch to a terminal, and it sees the output. Hit a linter error, and it's noticed before you have. You don't explain context to Cascade — it's already there.
But that awareness stops at the boundary of your machine. Cascade sees your Stripe integration code but not your Stripe data. It sees your HubSpot sync logic but not your actual contacts. It can tell you there's a bug in your webhook handler but not whether that bug is hitting customers right now.
We wanted Cascade's contextual awareness to extend past the filesystem. Not just "read the code" but "read the code, check the live data, and fix both at once."

Setup
Three commands in the Windsurf terminal:
pip install mcpbundles
mcpbundles connect my_workspace
mcpbundles init
That gives Cascade access to 10,000+ tools across 500+ providers. Your team authenticates services once in the MCPBundles dashboard, and every Windsurf session picks it up.
The 100-Tool Limit and Why the CLI Matters
Windsurf has a hard limit: 100 tools active at once in Cascade's MCP panel. If you connect multiple bundles through mcp_config.json, you'll hit this fast. Our workspace has 1,600+ tools across 50 bundles — that's 16x the limit.
The CLI sidesteps this entirely. Instead of loading all tools at startup, Cascade discovers them at runtime. It runs mcpbundles tools --bundle stripe when it needs Stripe, mcpbundles search "invoice" when it's looking for something specific. Tools are called on demand, never loaded into the panel. No limit.
This is the main reason we use the CLI in Windsurf instead of native MCP config. The native approach works fine if you have one or two bundles with under 100 tools total. Beyond that, the CLI is the only practical path.
Where Cascade's Awareness Changes the Game
We use MCP tools in Claude Code and Cursor too. They work. But in Windsurf, the results feed into Cascade's real-time awareness in a way that changes what you can ask for.
Example: building from real API shapes. We were building an analytics dashboard and asked Cascade to pull our top 10 pages from Google Search Console, get PostHog funnel data for each page, and generate a React component to display it. Cascade called both APIs, saw the actual response payloads, and generated TypeScript types that matched the real field names and nesting — nullable fields, date formats, nested objects, all of it. The React component rendered actual data shapes on the first try. No hallucinated types, no "TODO: replace with real data."
In Claude Code, you'd get the API data back as text and then ask it to write the component. In Windsurf, Cascade already has the data in its context window alongside the file it's editing. The API response and the code are in the same awareness.
Example: debugging with live data. We had a subscription renewal bug — some customers were getting double-charged. Cascade was already looking at the webhook handler code. We asked it to query our database for subscriptions with status = 'past_due' and check Stripe for the corresponding PaymentIntents. It found the timing issue in the code (race condition in the idempotency check) and identified the 3 customers affected and generated a SQL fix to correct their subscription records — all in the same conversation, because it could see the code, the database state, and the Stripe data simultaneously.
Example: the "continue" pattern. Cascade maxes out at 20 tool calls per prompt. For big workflows, you hit continue (or enable auto-continue in settings). We run a weekly audit that pulls Stripe subscription data, cross-references with our database, checks HubSpot for the account stages of any mismatches, and writes a report. That's 40+ tool calls. We type the prompt, let auto-continue handle it, and come back to a finished markdown report. Each continue costs a prompt credit, so it's not free — but it replaces an hour of manual dashboard-hopping.
Three Ways to Connect MCP Tools
Windsurf gives you three paths:
1. MCPBundles CLI (what we use)
Best for multi-service workflows. No tool limit. Cross-service scripting via exec. Works everywhere.
mcpbundles exec "
invoices = await list_invoices(bundle='stripe', status='past_due')
for inv in invoices['data']:
contact = await search_contacts(bundle='hubspot-crm', query=inv['customer_email'])
print(inv['customer_email'], inv['amount_due']/100, contact.get('total', 0), 'HubSpot records')
"
2. Windsurf's Built-in MCP Marketplace
Click the MCPs icon in the top-right of the Cascade panel (or Settings > Cascade > MCP Servers). Official servers from GitHub, Slack, and others show up with a blue checkmark. One-click install. Good for single servers you want fast.
3. Manual mcp_config.json
Edit ~/.codeium/windsurf/mcp_config.json directly:
{
"mcpServers": {
"mcpbundles": {
"serverUrl": "https://mcp.mcpbundles.com/bundle/YOUR-BUNDLE-SLUG"
}
}
}
Note: Windsurf uses serverUrl (not url like Cursor). Supports stdio, Streamable HTTP, and SSE transports. MCPBundles uses Streamable HTTP — no local process needed.
Get your bundle URL from the MCPBundles dashboard. Quit Windsurf completely and reopen after any config change — just closing the window doesn't reload MCP servers.
Getting Started
pip install mcpbundles
mcpbundles connect my_workspace
mcpbundles init
Browse services at mcpbundles.com/providers. Same CLI works in Claude Code, Cursor, and anything else with a terminal. Full setup details in the Windsurf integration guide.
FAQ
How do I add MCP tools to Windsurf?
Fastest: pip install mcpbundles && mcpbundles init in the terminal. Or add a server to ~/.codeium/windsurf/mcp_config.json, or use Windsurf's built-in MCP Marketplace. Restart Windsurf after config changes.
What about the 100-tool limit?
The CLI bypasses it — tools are discovered at runtime instead of loaded at startup. If you only need a few tools from one bundle, native config or the marketplace is fine. For larger workspaces, use the CLI.
Does the CLI work in other editors?
Same CLI in Cursor, Claude Code, Codex, or any agent with terminal access.