生成器
填好表单生成链接。点「在 CC Switch 中打开」可以在本机直接试导入。
供应商
MCP
提示词
Skill 仓库
基本信息
应用
Claude Code
Codex
Gemini CLI
Grok Build
OpenCode
OpenClaw
Hermes
Pi
Claude Desktop、MiniMax Code 的供应商暂不支持深链接导入
接口格式 apiFormat
供应商名称
必填。地址和 API Key 也必须给出,写在 URL 参数或配置文件里都行。
填写方式
URL 参数:地址、Key 直接写在链接里。配置文件:放一份 Base64 编码的 JSON 或 TOML,适合要带额外设置的情况。
连接
配置文件(JSON)
生成时自动 Base64 编码
认证信息(JSON)
包含 API Key 的认证信息对象
Codex 配置文件 (TOML)
config.toml 的原始内容。只收选中的那张 [model_providers.<id>] 表和顶层的模型相关字段
用 URL 参数覆盖配置文件里的 Key 和地址。留空就完全用配置文件;两边都有时以 URL 参数为准。
模型
Claude Code 三档模型。中转站提供的是原版 Claude 模型时全部留空,Claude Code 会用自带的模型列表;只有 DeepSeek、Kimi 这类非原生模型才需要写上。
展示与确认
图标 可选
CC Switch 内置的图标名,只能是小写字母、数字和 . _ -
自己的图标 iconUrl
内置图标里没有你的品牌时用。下载失败退回上面的内置图标
iconUrl 要求:https、域名(不能是 IP)、默认端口;公开可访问(不带 Cookie 和 Referer);5 秒内下完、不超过 256 KB;Content-Type 是 PNG、JPEG、WebP 或 SVG 且与文件一致。建议用方形图。
确认框开关的初始值 enabled
不指定(推荐,按应用默认)
打开
关闭
确认框里有「导入后立即切换 / 添加到应用配置」开关,用户可以改。Claude Code、Codex、Gemini CLI、Grok Build 默认关闭;OpenCode、OpenClaw、Hermes、Pi 默认打开。
备注 可选
用量查询 可选
带上查询脚本,导入后供应商卡片上会直接显示余额。写法见下方用量查询脚本示例 。
解析器
贴一条 ccswitch:// 链接,查看它会导入什么。会被 CC Switch 拒绝或忽略的参数会标出来。
Base64 编解码 生成器会自动编码;手动检查链接里的配置时再用
按 UTF-8 编码,中文没问题。编码结果可以直接放进链接的 config 或 content 参数(生成器会自动做这一步);解码用来检查链接里的配置对不对。
供应商示例
每条都能直接点开试导入。链接都按规则做过 URL 转义,可以照着改。
Claude Code
完整 JSON 配置(非原生模型)
通过 Base64 编码的 JSON 配置导入。中转站提供的是原版 Claude 模型时,模型字段全部留空即可;只有 DeepSeek、Kimi 这类非原生模型才需要像这样写上四档模型。
必需 resource=provider app=claude name,地址和 Key(URL 参数或 config 里)
可选 config(Base64 JSON)configFormat=json
解码后的 config
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "sk-test-key123",
"ANTHROPIC_BASE_URL": "https://api.example.com",
"ANTHROPIC_MODEL": "example-chat",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "example-fast",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "example-chat",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "example-pro"
}
}
Claude Code
配置文件 + URL 参数覆盖
配置文件放地址和额外的环境变量,Key 用 URL 参数给出。两边都有时以 URL 参数为准。
必需 name config
可选 apiKey(覆盖配置文件里的值)
解码后的 config
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.example.com",
"API_TIMEOUT_MS": "600000"
}
}
Codex
附带 config.toml
Codex 的 config 是 {"auth": {...}, "config": "<config.toml 原文>"}。CC Switch 只收选中的那张 [model_providers.<id>] 表和顶层的模型相关字段,导入后表名统一改成 custom。
必需 name config
可选 configFormat=json(也可以用 configFormat=toml 直接放 config.toml 原文)
auth
{
"OPENAI_API_KEY": "sk-test-key123"
}
config(TOML)
model_provider = "example"
model = "example-coder"
[model_providers.example]
name = "Example AI"
base_url = "https://api.example.com/v1"
wire_api = "responses"
Gemini CLI
Gemini 配置
Gemini 的 config 是扁平的键值对,只读 GEMINI_API_KEY、GOOGLE_GEMINI_BASE_URL、GEMINI_MODEL 三个键。
必需 name config
可选 configFormat=json
解码后的 config
{
"GEMINI_API_KEY": "AIzaSy-test-key123",
"GOOGLE_GEMINI_BASE_URL": "https://api.example.com"
}
OpenCode
用 apiFormat 声明 Anthropic 格式
OpenCode、OpenClaw、Hermes、Pi 自己支持多种接口格式,apiFormat 会换算成它们配置里的协议字段,客户端直接用这种格式请求接口。不写时用 OpenAI Chat Completions。
必需 name endpoint apiKey
可选 apiFormat model(OpenCode / OpenClaw / Hermes 不写就没有可选的模型)
链接参数
app=opencode
endpoint=https://api.example.com/v1
apiFormat=anthropic → OpenCode 的 npm = @ai-sdk/anthropic
model=example-chat
需要 v4.0.10 及以上。更早的版本会忽略 apiFormat,按 Chat Completions 导入。
Pi
Pi 供应商(必须写模型)
Pi 的供应商节点必须带模型,链接里没写 model 会被拒绝。apiFormat 换算成 Pi 的 api 字段。
必需 name endpoint apiKey model
可选 apiFormat
链接参数
app=pi
endpoint=https://api.example.com/v1
apiFormat=openai_chat → Pi 的 api = openai-completions
model=example-chat
需要 v4.0.10 及以上,更早的版本会拒绝导入。
Claude Code
带上自己的图标
内置图标里没有你的品牌时,用 iconUrl 给一个图片地址。确认框一打开就下载,导入后作为卡片图标;下载失败时退回 icon,没写 icon 就显示名称首字母。这条示例借用 CC Switch 自己的图标。
必需 name endpoint apiKey
可选 iconUrl icon(下载失败时的退路)
链接参数
iconUrl=https://raw.githubusercontent.com/farion1231/cc-switch/main/src-tauri/icons/128x128.png
需要 v4.0.10 及以上,更早的版本会忽略 iconUrl。图片会被重新画成 96×96 的 PNG 存进 CC Switch,之后不再访问这个地址。
用量查询脚本示例
让用户导入后,直接在供应商卡片上看到余额。
脚本是一段 JavaScript 表达式,返回 { request, extractor }:request 描述发什么请求,extractor(response) 从响应 JSON 里取数。请求由 CC Switch 代发,脚本本身没有网络能力。
占位符:{{apiKey}}(usageApiKey,没给时用供应商 Key)、{{baseUrl}}(usageBaseUrl,没给时用供应商地址)、{{accessToken}}、{{userId}}。
每次只发一个请求,必须是 HTTPS,且与 {{baseUrl}} 同源 ;响应必须是 JSON。余额接口在另一个域名时,用 usageBaseUrl 指过去。
extractor 返回对象或对象数组,字段都可选:remaining、used、total(数字)、unit、planName、extra(字符串)、isValid(布尔)、invalidMessage(字符串)。数字字段如果接口返回的是字符串,要先用 Number() 转。
带了 usageScript 就默认启用(v4.0.10 起);要兼容更早的版本,同时写上 usageEnabled=true。usageAutoInterval 是自动查询间隔(分钟),别设得太短。
Claude Code
通用余额接口
用 API Key 查余额。按你的接口改 url 和 extractor 里的字段名即可。Key 失效时返回 isValid: false,卡片会显示失效原因。
必需 usageScript(Base64,推荐 URL-safe 写法)
可选 usageEnabled usageApiKey usageBaseUrl usageAutoInterval
查询脚本(链接里是它的 Base64)
({
request: {
url: "{{baseUrl}}/user/balance",
method: "GET",
headers: {
"Authorization": "Bearer {{apiKey}}"
}
},
extractor: function (response) {
if (response.error) {
return { isValid: false, invalidMessage: String(response.error.message || response.error) };
}
return {
remaining: Number(response.balance),
unit: "USD"
};
}
})
Codex
NewAPI / OneAPI 系的站
这类站的余额接口用系统访问令牌和用户 ID,不用 API Key。供应商地址带 /v1,余额接口在根路径下,所以用 usageBaseUrl 指向根地址。
必需 usageScript usageAccessToken usageUserId
可选 usageBaseUrl(这里是 https://api.example.com)usageAutoInterval(这里是 30)
查询脚本(链接里是它的 Base64)
({
request: {
url: "{{baseUrl}}/api/user/self",
method: "GET",
headers: {
"Authorization": "Bearer {{accessToken}}",
"New-Api-User": "{{userId}}"
}
},
extractor: function (response) {
if (response.success && response.data) {
return {
planName: response.data.group,
remaining: response.data.quota / 500000,
used: response.data.used_quota / 500000,
unit: "USD"
};
}
return { isValid: false, invalidMessage: String(response.message || "查询失败") };
}
})
Claude Code
Sub2API 系的站
Sub2API 自带给 CC Switch 用的 /v1/usage 接口,用 API Key 认证,不需要访问令牌。钱包余额、订阅分组、Key 单独设的额度三种情况都返回 remaining,脚本按原样取出来。
必需 usageScript
可选 usageAutoInterval(这里是 30)
查询脚本(链接里是它的 Base64)
({
request: {
url: "{{baseUrl}}".replace(/\/+$/, "").replace(/\/v1$/, "") + "/v1/usage",
method: "GET",
headers: {
"Authorization": "Bearer {{apiKey}}",
"User-Agent": "cc-switch/1.0"
}
},
extractor: function (response) {
var quota = response.quota || {};
var result = {
isValid: response.isValid !== false,
unit: response.unit || quota.unit || "USD"
};
if (typeof response.planName === "string") result.planName = response.planName;
if (typeof response.remaining === "number" && response.remaining >= 0) {
result.remaining = response.remaining;
}
if (quota.limit > 0) {
result.used = quota.used;
result.total = quota.limit;
}
if (!result.isValid) {
result.invalidMessage = response.status
? String(response.status)
: "查询失败";
}
return result;
},
})
MCP 示例 和 API 服务关系不大,顺带分发配套工具时再看
MCP
一次导入多个 MCP 服务器
导入 Context7 和 Sequential-thinking 两个服务器,并在 Claude Code 和 Codex 里启用。
必需 resource=mcp apps config(Base64)
apps claude、codex、gemini、grokbuild、opencode、hermes、pi、mcode(openclaw 会被忽略)
解码后的 config
{
"mcpServers": {
"context7": {
"command": "npx",
"args": ["-y", "@upstash/context7-mcp"],
"env": {}
},
"sequential-thinking": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sequential-thinking"],
"env": {}
}
}
}
提示词示例 和 API 服务关系不大,顺带分发配套工具时再看
Claude Code
代码审查专家
为 Claude Code 导入一条提示词。确认框里有「导入后立即启用」开关,默认关闭;用户打开后会替换当前的提示词文件(如 CLAUDE.md)。
必需 resource=prompt app name content(Base64 Markdown)
可选 description enabled(开关的初始值,一般不要写)
解码后的 content
# 代码审查专家
你是一位有经验的代码审查员。审查代码时,先指出会导致错误的问题,再给出修改建议。
Skill 仓库示例 和 API 服务关系不大,顺带分发配套工具时再看
Skills
添加 Skill 仓库
把一个 GitHub 公开仓库加进 Skill 仓库列表。添加的是仓库,用户还要在 Skills 管理界面自己选择安装哪些 Skill。
必需 resource=skill repo(owner/name)
可选 branch(默认 main)
链接参数
repo=example/claude-skills
branch=main
常见问题
怎么做成我网站上的按钮
链接里有用户的 Key,不要直接写进按钮的 href。用户点击时,前端向你的后端要这个用户的链接,拿到后用 location.href = link 跳转;按钮旁写一句「点了没反应?先安装 CC Switch」并附上下载地址。一条链接只导入到一个应用,同时支持 Claude Code、Codex 等几个应用时,每个应用放一个按钮。后端接口和前端按钮的完整代码见 站长接入指南 。
点了没反应
第一次点击时浏览器会询问是否打开 CC Switch,选「允许」或「打开」。macOS 上如果仍然打不开,到「系统设置 → 隐私与安全性」里允许 CC Switch。
导入时会发生什么
CC Switch 弹出确认框,API Key 打码显示。「导入后立即切换 / 添加 / 启用」由用户在确认框里的开关决定,链接只给初始值。
导入之后
可以在 CC Switch 里随时编辑或删除导入的内容。
iconUrl 的图标没显示
CC Switch 下载失败时不报错,直接退回内置图标或名称首字母。常见原因:地址要登录或开了防盗链、响应头 Content-Type 写成了 application/octet-stream、图片超过 256 KB、域名解析到内网地址。用 curl -I 看一下响应头,或者在 CC Switch 的日志里搜 Skipped deep link icon。
示例能直接用吗
不能。示例里的域名和 Key 都是假的,只用来演示格式。