windsurf-search-mcp
v0.1.1
Published
MCP server + CLI for Windsurf/Devin server-side web search (GetWebSearchResults)
Maintainers
Readme
windsurf-search-mcp
MCP server and CLI for Windsurf/Devin server-side web search
(GetWebSearchResults).
Zero runtime dependencies. Node.js >= 20.
This talks to Windsurf/Devin cloud endpoints with a personal session token. Use at your own risk; tokens expire and may violate the provider's terms if used outside the official client.
Install
npm i -g windsurf-search-mcp
# or without install:
npx -y -p windsurf-search-mcp windsurf-search --helpAuth (no secrets in config files)
Resolve order:
--api-key <token>WINDSURF_API_KEY(or legacyWINDSURFAPI_CODEIUM_API_KEY)- first existing key file:
~/.config/windsurf-search/api-key~/.windsurf-search/api-key~/.piwin/windsurf-api-key(compat)
Expected token shape: devin-session-token$...
# interactive (masked)
windsurf-search config set
# or non-interactive
windsurf-search config set 'devin-session-token$...'
windsurf-search config show
windsurf-search config testEmail/password login is also available (windsurf-search --login), but many
accounts are OAuth-only and will reject password login.
CLI
windsurf-search "tauri window drag region" --limit 5
# stdout JSON:
# { "hits": [ { "title", "url", "snippet", "source": "windsurf" } ] }Useful for agent hosts that spawn a custom CLI search source and parse JSON hits.
MCP server
Cursor / Claude Desktop / generic MCP host
{
"mcpServers": {
"windsurf-search": {
"command": "npx",
"args": ["-y", "windsurf-search-mcp"],
"env": {
"WINDSURF_API_KEY": "devin-session-token$..."
}
}
}
}Prefer putting the token in a key file and omitting env entirely:
{
"mcpServers": {
"windsurf-search": {
"command": "npx",
"args": ["-y", "windsurf-search-mcp"]
}
}
}Then:
windsurf-search config setExposed tool
web_search
| arg | type | required | notes |
|-----|------|----------|-------|
| query | string | yes | search query |
| limit | number | no | 1–10, default 5 |
| domain | string | no | optional domain filter |
| mode | number | no | optional upstream mode |
Returns MCP text content with JSON:
{ "hits": [ { "title": "...", "url": "...", "snippet": "...", "source": "windsurf" } ] }Development
node --test test/*.mjs # offline unit + protocol tests
RUN_LIVE_SEARCH=1 npm test # also hit live API if key is configuredSecurity notes
- Never commit real tokens.
- Session tokens expire; re-run
config setwhen searches return 401. config showonly prints a masked key.- This is not an official Windsurf/Devin product.
License
MIT
