MCPcopy Index your code
hub / github.com/dwgx/WindsurfAPI

github.com/dwgx/WindsurfAPI @v2.0.145

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.0.145 ↗ · + Follow
1,338 symbols 4,560 edges 175 files 30 documented · 2%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

给我点 Star 和 Follow 我就不管你了

Stars  Follow  ·  English

声明

没点 Star 和 Follow 的:严禁商业使用、转售、代部署、挂后台对外提供服务、包装成中转服务出售。 点了 Star 和 Follow 的:随便用,我睁一只眼闭一只眼。

代码本体按 MIT License 开源(见 LICENSE),上面这段是作者个人态度。


Windsurf(原 Codeium)的 AI 模型变成两套标准 API 同时兼容

  • POST /v1/chat/completionsOpenAI 兼容 任何 OpenAI SDK 直接用
  • POST /v1/messagesAnthropic 兼容 Claude Code / Cline / Cursor 直接连

100+ 模型:Claude 4.5/4.6/Opus 4.7 · GPT-5/5.1/5.2/5.4 全系 · Gemini 2.5/3.0/3.1 · Grok · Qwen · Kimi K2.x · GLM 4.7/5/5.1 · MiniMax · SWE 1.5/1.6 · Arena 等。零 npm 依赖 纯 Node.js。

它到底在干嘛

     ┌─────────────┐   /v1/chat/completions   ┌────────────┐
     │ OpenAI SDK  │ ──────────────────────→  │            │
     │ curl / 前端 │ ←──────────────────────  │            │
     └─────────────┘   OpenAI JSON + SSE      │ WindsurfAPI│
                                              │ Node.js    │      ┌──────────────┐       ┌─────────────────┐
     ┌─────────────┐   /v1/messages           │ (本服务)   │ gRPC │ Language     │ HTTPS │ Windsurf 云端   │
     │ Claude Code │ ──────────────────────→  │            │ ───→ │ Server (LS)  │ ────→ │ server.self-    │
     │ Cline       │ ←──────────────────────  │            │ ←─── │ (Windsurf    │ ←─── │ serve.windsurf  │
     │ Cursor      │   Anthropic SSE          │            │      │  binary)     │       │ .com            │
     └─────────────┘                          └────────────┘      └──────────────┘       └─────────────────┘
                                                    ↑
                                                账号池轮询
                                                速率限制隔离
                                                故障转移

它做了什么: 1. 一个 HTTP 服务(端口 3003)同时暴露 OpenAI 和 Anthropic 两套 API 2. 把请求翻译成 Windsurf 内部 gRPC 协议,通过本地 Language Server 发给 Windsurf 云 3. 维护账号池,自动轮询 + 速率限制 + 故障转移 4. 返回前把上游 Windsurf 身份剥掉,模型自称"我是 Claude Opus 4.6 由 Anthropic 开发"

Claude Code / Cline / Cursor 怎么用

模型本身不会操作文件 — 文件操作是 IDE Agent 客户端(Claude Code / Cline 等)在本地执行的:

 你 "帮我改 bug"                Claude Code                    WindsurfAPI               Windsurf Cloud
   │                                │                               │                          │
   │────────────────────────────→  │                               │                          │
   │                                │  POST /v1/messages            │                          │
   │                                │  messages + tools + system    │                          │
   │                                │ ─────────────────────────────→│ 打包成 Cascade 请求      │
   │                                │                               │ ──────────────────────→  │
   │                                │                               │                          │
   │                                │                               │               模型思考 → 返回
   │                                │                               │               tool_use(edit_file)
   │                                │                               │ ←──────────────────────  │
   │                                │ ←── Anthropic SSE ────────────│                          │
   │                                │   content_block=tool_use      │                          │
   │                                │                               │                          │
   │                                │ 本地执行 edit_file()          │                          │
   │                                │ (读写本地文件)                │                          │
   │                                │                               │                          │
   │                                │ 带 tool_result 再发一轮       │                          │
   │                                │ ─────────────────────────────→│ ──────────────────────→  │
   │                                │                                             ... (循环) ...
   │                                │                               │                          │
   │  ← 最终答案                    │                               │                          │

重点:WindsurfAPI 只负责传递 tool_use / tool_result,真正改文件的是客户端 CLI。

快速开始

一键部署

git clone https://github.com/dwgx/WindsurfAPI.git
cd WindsurfAPI
bash setup.sh          # 建目录 · 配权限 · 生成 .env
node src/index.js

Dashboard:http://你的IP:3003/dashboard

Docker 部署

cp .env.example .env

# 可选:提前把 language_server_linux_x64 放到 .docker-data/opt/windsurf/ 下
# 不放也行,容器首次启动时会自动下载到 /opt/windsurf/

docker compose up -d --build
docker compose logs -f

默认挂载:

  • ./.docker-data/data:持久化 accounts.jsonproxy.jsonstats.jsonruntime-config.jsonmodel-access.jsonlogs/
  • ./.docker-data/opt/windsurf:Language Server 二进制与数据目录
  • ./.docker-data/tmp/windsurf-workspace:临时工作区

如果想改持久化目录,可在 .env 里设置 DATA_DIR。Docker 默认已设为 /data

一键更新

部署过之后要拉最新修复,一条命令搞定:

cd ~/WindsurfAPI && bash update.sh

update.sh 做了:git pull → 通过 install-ls.sh 更新 LS binary → 停 PM2 → kill 3003 端口残留 → 重启 → 健康检查。

如果你用的是我们的公网实例(skiapi.dev 之类),不用管,我们已经推过了。

手动安装

git clone https://github.com/dwgx/WindsurfAPI.git
cd WindsurfAPI

# Language Server 二进制 —— 自动检测 Linux/macOS,一键下载 + chmod
bash install-ls.sh

# 默认安装路径:
#   Linux x64:          /opt/windsurf/language_server_linux_x64
#   Linux arm64:        /opt/windsurf/language_server_linux_arm
#   macOS Apple Silicon: $HOME/.windsurf/language_server_macos_arm
#   macOS Intel:        $HOME/.windsurf/language_server_macos_x64

# 如果想用本地已下好的 binary:
#   bash install-ls.sh /path/to/language_server_linux_x64
# 或者指定 URL:
#   bash install-ls.sh --url https://example.com/language_server_linux_x64

# ⚠️ 看不到 opus-4.7 / 其他新模型?
# Exafunction/codeium 公开 release 最新停在 v2.12.5(2026-01),不含 4.7。
# 要 4.7,把 Windsurf 桌面端本体里的 LS binary 拷过来:
#
#   macOS:   "$HOME/Library/Application Support/Windsurf/resources/app/extensions/windsurf/bin/language_server_macos_arm"
#   Linux:   "$HOME/.windsurf/bin/language_server_linux_x64"
#            或  /opt/Windsurf/resources/app/extensions/windsurf/bin/language_server_linux_x64
#   Windows: %APPDATA%\Windsurf\bin\language_server_windows_x64.exe
#
#   # 从本地桌面端装:
#   bash install-ls.sh /path/to/language_server_linux_x64
#
# LS binary 一换,/v1/models 立刻就能看到最新模型目录了(云端自动发现)。

cat > .env << 'EOF'
PORT=3003
API_KEY=
DEFAULT_MODEL=claude-4.5-sonnet-thinking
MAX_TOKENS=8192
LOG_LEVEL=info
LS_BINARY_PATH=/opt/windsurf/language_server_linux_x64
LS_DATA_DIR=/opt/windsurf/data
LS_PORT=42100
DASHBOARD_PASSWORD=
EOF

# macOS 本地部署时,使用 install-ls.sh 打印的 LS_BINARY_PATH,
# 并把 LS_DATA_DIR 设到用户可写目录,例如 /Users/you/.windsurf/data。

node src/index.js

加账号

服务跑起来之后要先加 Windsurf 账号才能用,三种方式:

方式 1 Dashboard 一键登录(推荐)

打开 http://你的IP:3003/dashboard → 登录取号 → 点 Google 登录GitHub 登录(OAuth 弹窗)或直接填邮箱密码。所有方式都会自动入池。

方式 2 Token(任何登录方式都能用)

windsurf.com/show-auth-token 复制 Token:

curl -X POST http://localhost:3003/auth/login \
  -H "Content-Type: application/json" \
  -d '{"token": "你的token"}'

方式 3 批量

curl -X POST http://localhost:3003/auth/login \
  -H "Content-Type: application/json" \
  -d '{"accounts": [{"token": "t1"}, {"token": "t2"}]}'

调用示例

OpenAI 格式(Python / JS / curl)

from openai import OpenAI
client = OpenAI(base_url="http://你的IP:3003/v1", api_key="你设的API_KEY")
r = client.chat.completions.create(
    model="claude-sonnet-4.6",
    messages=[{"role": "user", "content": "你好"}]
)
print(r.choices[0].message.content)

Anthropic 格式(Claude Code 直接连)

export ANTHROPIC_BASE_URL=http://你的IP:3003
export ANTHROPIC_API_KEY=你设的API_KEY
claude                # 正常用 Claude Code 即可
# 裸 curl 测试
curl http://localhost:3003/v1/messages \
  -H "Authorization: Bearer 你的key" \
  -H "anthropic-version: 2023-06-01" \
  -d '{"model":"claude-opus-4.6","max_tokens":100,"messages":[{"role":"user","content":"你好"}]}'

Cline / Cursor / Aider

在客户端配置里 Custom OpenAI Compatible: - Base URL: http://你的IP:3003/v1 - API Key: 你设的 API_KEY - Model: 任选我们支持的模型

Cursor 用户注意:Cursor 客户端白名单会拦截含 claude 的模型名(请求根本不到后端)。用以下别名绕过:

在 Cursor 填 实际模型
opus-4.6 claude-opus-4.6
opus-4.6-thinking claude-opus-4.6-thinking
opus-4.7 claude-opus-4-7-medium
sonnet-4.6 claude-sonnet-4.6
sonnet-4.5 claude-4.5-sonnet
haiku-4.5 claude-4.5-haiku
ws-opus claude-opus-4.6
ws-sonnet claude-sonnet-4.6

GPT / Gemini / DeepSeek 等不受 Cursor 白名单限制,直接填原名。

环境变量

变量 默认值 干嘛的
PORT 3003 服务端口
API_KEY 调 API 要带的密钥 留空就不验证
DATA_DIR 项目根目录 持久化 JSON 状态和 logs/ 的目录,Docker 推荐设成 /data
DEFAULT_MODEL claude-4.5-sonnet-thinking 不传 model 用哪个
MAX_TOKENS 8192 默认最大回复 token 数
LOG_LEVEL info debug / info / warn / error
LS_BINARY_PATH /opt/windsurf/language_server_linux_x64 LS 二进制位置
LS_DATA_DIR Linux: /opt/windsurf/data;macOS: ~/.windsurf/data 每个 proxy 独立的 LS 数据根目录
LS_PORT 42100 LS gRPC 端口
LS_MAX_INSTANCES 内存自适应,最多 20 LS 池最大实例数;2GB VPS 建议 2
LS_POOL_WAIT_MS 30000 LS 池满且全部 active 时,新 proxy LS 最多等待这么久再返回 LS_POOL_EXHAUSTED
LS_SPAWN_MIN_AVAILABLE_BYTES 700MB 新增非 default LS 前要求的可用内存水位;低于该值会排队/拒绝,避免 OOM
LS_MEMORY_GUARD 1 0 可关闭 LS 内存护栏(仅在你有外部 memory limit/监控时考虑)
LS_IDLE_TTL_MS 1200000 非 default LS 空闲超过该时间自动停止;0 关闭
LS_IDLE_SWEEP_MS 自动推导 LS 空闲回收扫描间隔
LS_PREWARM_DEFAULT 1 设为 0 可跳过启动时 default LS 预热,低内存/全 proxy 池改为首个真实请求再懒启动
LS_PREWARM_PROXIES 0 设为 1 才在启动时预热所有 proxy LS;默认按需启动。后台 scheduled probe / 预测 prewarm 只复用空闲常驻 LS,不会为了探测新开/等待/驱逐 LS
LS_PREWARM_ON_ACCOUNT_ADD 0 设为 1 才在 Dashboard/批量导入/OAuth 添加账号后立即预热对应 LS;默认避免批量录入打爆内存
WINDSURFAPI_NATIVE_TOOL_BRIDGE 仅用于 lab/远程执行灰度。all_mapped 仅在已 allowlist 的工具全部可映射时走 native bridge;1 为混合工具 partition 模式。不要把它当成本地 IDE 工具调用的通用修复
WINDSURFAPI_NATIVE_TOOL_BRIDGE_TOOLS Bash/shell_command/run_command 语义族 native bridge 工具 allowlist。默认只包含成熟的 Bash/run_command 路径;Read/Grep/Glob 和 WebSearch/WebFetch 必须显式加入 allowlist,再配合模型/账号/API key gate 小流量实测,仍不是生产默认
WINDSURFAPI_NATIVE_TOOL_BRIDGE_MODELS / PROVIDERS / ROUTES / CALLERS / ACCOUNTS / API_KEYS native bridge 灰度门。为空表示不限;设置后必须匹配才启用。ACCOUNTS 可填账号 id/email,API_KEYS 匹配调用方 API key 但不会把明文 key 传进 chat 逻辑
WINDSURFAPI_NATIVE_TOOL_BRIDGE_OFF 设为 1 强制关闭 native tool bridge,优先级高于上面的开关
WINDSURFAPI_SPECIAL_AGENT_BACKEND 可选 lab-only special-agent 后端。设为 devin-cli 后,swe-1.6 / swe-1.6-fast / adaptive / arena-* 不再走 direct Cascade,而是走 Devin CLI PoC;这不是普通 catalog 模型修复
DEVIN_CLI_PATH devin Devin CLI 可执行文件路径;Docker/macOS 都需要自己安装或挂载,不是基础镜像硬依赖
DEVIN_CLI_MODE print printdevin -p 保守模式;acp 为实验 ACP stdio 后端,使用账号池上游 Windsurf apiKey 认证,默认不全量启用
DEVIN_MAX_PROCS 1 Devin CLI 最大并发进程数,避免 special-agent 路径把内存打爆
DEVIN_CLI_USE_ACCOUNT_POOL 1 默认从 WindsurfAPI 账号池取一个账号并把 apiKey 注入 WINDSURF_API_KEY;设 0 表示 Devin CLI 自己管理登录态
DASHBOARD_PASSWORD 后台密码 留空不设密码
ALLOW_PRIVATE_PROXY_HOSTS 设为 1 允许在代理测试和登录时使用内网 IP(如 192.168.x.x10.x.x.x)。默认留空仅允许公网地址
CASCADE_REUSE_BY_CALLER 0 设为 1 启用 caller 级别回退复用。指纹未命中时,按 callerKey+model 回退到最近的 cascade。适合单用户 Claude Code 场景
CASCADE_POOL_MAX 500 对话池最大条目数。单用户场景设 15 即可,减少资源占用

Dashboard 功能面板

打开 http://你的IP:3003/dashboard

面板 功能
总览 运行状态 · 账号池 · LS 健康 · 成功率
登录取号 Google / GitHub OAuth 一键登录 · 邮箱密码登录 · 测试代理 按钮(实测出口 IP)
账号管理 加 / 删 / 停用 · 探测订阅等级 · 看余额 · 封禁模型黑名单
模型控制 全局模型黑白名单
代理配置 全局或单账号的 HTTP / SOCKS5 代理
日志 实时 SSE 串流 · 按级别筛 · 每条 turns=N chars=M 诊断多轮
统计分析 时间范围 6h / 24h / 72h · 账号维度 · p50 / p95 延迟
实验性 Cascade 对话复用 · 模型身份注入(每厂商可自定义 prompt)

支持的模型

主线 100+ 个静态模型 + Windsurf 雲端動態下發(mergeCloudModels 啟動時拉取最新)。完整列表查 GET /v1/models,或看 GitHub Pages 模型清单(同步生成於 src/models.js)。

Claude(Anthropic) — 21 个

claude-3.5-sonnet / 3.7-sonnet / thinking · claude-4-sonnet / opus / thinking · claude-4.1-opus · claude-4.5-haiku / sonnet / opus · claude-sonnet-4.6(含 1m / thinking / thinking-1m) · claude-opus-4.6 / thinking · claude-opus-4.7-medium

GPT(OpenAI) — 55 个

gpt-4o · gpt-4.1 · gpt-5 全系(含 medium / high / codex) · gpt-5.1 全系(base / low / medium / high + fast + codex 全 6 變體) · gpt-5.2 全系(none / low / medium / high / xhigh + fast + codex 全 5 變體) · gpt-5.4 全系(base / mini × low/medium/high/xhigh) · o3 全系(base / mini / pro) · o4-mini

Gemini(Google) — 9 个

gemini-2.5-pro / flash · gemini-3.0-pro / flash(minimal / low / medium / high 4 個 reasoning 等級) · gemini-3.1-pro(low / high)

开源 / 国产

Kimi: kimi-k2 / k2.5 / k2-6 · GLM: glm-4.7 / 5 / 5.1 · Qwen: qwen-3 · Grok: grok-3 / grok-3-mini-thinking / grok-code-fast-1 · MiniMax: minimax-m2.5

Windsurf 自家 + Arena

swe-1.5 / 1.5-fast / 1.6 / 1.6-fast · arena-fast · arena-smart

swe-1.6 / swe-1.6-fast / adaptive / arena-* 属于 special-agent 路径。direct Cascade 会报 unknow

Core symbols most depended-on inside this repo

push
called by 522
src/connect.js
getField
called by 293
src/proto.js
writeStringField
called by 189
src/proto.js
parseFields
called by 147
src/proto.js
writeMessageField
called by 133
src/proto.js
json
called by 115
src/dashboard/api.js
writeVarintField
called by 109
src/proto.js
error
called by 63
src/handlers/messages.js

Shape

Function 1,243
Method 71
Class 24

Languages

TypeScript100%
Python1%

Modules by API surface

src/handlers/chat.js99 symbols
src/auth.js93 symbols
src/langserver.js91 symbols
src/cascade-native-bridge.js86 symbols
src/handlers/responses.js56 symbols
src/proto-trace.js46 symbols
src/windsurf.js41 symbols
src/handlers/tool-emulation.js41 symbols
src/handlers/messages.js40 symbols
src/client.js39 symbols
scripts/native-bridge-smoke.mjs36 symbols
src/special-agent.js28 symbols

For agents

$ claude mcp add WindsurfAPI \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact