ccswitch://v1/import

深链接生成器

生成 CC Switch 的导入链接:用户点一下,就能把供应商、MCP、提示词或 Skill 仓库导入 CC Switch。也可以把收到的链接贴进解析器,看看里面写了什么。

  • 本页按 CC Switch v4.0.10 的规则生成链接。apiFormat、iconUrl 参数和 app=pi 需要 v4.0.10 及以上:更早的版本会忽略 apiFormat(一律用应用的默认格式)和 iconUrl,并拒绝导入 Pi 供应商。
  • 「导入后立即切换 / 添加 / 启用」由用户在确认框里的开关决定,链接里的 enabled 只是开关的初始值,一般不用写。
  • 完整说明见 站长深链接接入指南。示例里的域名和 Key 都是假的,导入后无法实际使用。

生成器

填好表单生成链接。点「在 CC Switch 中打开」可以在本机直接试导入。

基本信息

Claude Desktop、MiniMax Code 的供应商暂不支持深链接导入
必填。地址和 API Key 也必须给出,写在 URL 参数或配置文件里都行。
填写方式
URL 参数:地址、Key 直接写在链接里。配置文件:放一份 Base64 编码的 JSON 或 TOML,适合要带额外设置的情况。

连接

Anthropic 格式在 Claude Code 里不带 /v1,OpenAI 两种格式一般带 /v1;OpenCode、OpenClaw、Hermes、Pi 以在该应用里实测能通的写法为准。
导入后加为自定义端点

模型

Claude Code 三档模型。中转站提供的是原版 Claude 模型时全部留空,Claude Code 会用自带的模型列表;只有 DeepSeek、Kimi 这类非原生模型才需要写上。

ANTHROPIC_DEFAULT_HAIKU_MODEL
ANTHROPIC_DEFAULT_SONNET_MODEL
ANTHROPIC_DEFAULT_OPUS_MODEL

展示与确认

CC Switch 内置的图标名,只能是小写字母、数字和 . _ -
内置图标里没有你的品牌时用。下载失败退回上面的内置图标

iconUrl 要求:https、域名(不能是 IP)、默认端口;公开可访问(不带 Cookie 和 Referer);5 秒内下完、不超过 256 KB;Content-Type 是 PNG、JPEG、WebP 或 SVG 且与文件一致。建议用方形图。

确认框里有「导入后立即切换 / 添加到应用配置」开关,用户可以改。Claude Code、Codex、Gemini CLI、Grok Build 默认关闭;OpenCode、OpenClaw、Hermes、Pi 默认打开。

用量查询 可选

带上查询脚本,导入后供应商卡片上会直接显示余额。写法见下方用量查询脚本示例。

查询脚本
占位符:{{baseUrl}} {{apiKey}} {{accessToken}} {{userId}}
0 表示不自动查询
脚本里的请求必须与它同源

解析器

贴一条 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"
  }
}
URL 参数:apiKey=sk-test-key123
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"
    };
  }
})
假设接口返回 {"balance": 12.5},卡片显示剩余 12.5 USD。{{baseUrl}} 是供应商地址原样,地址带 /v1 时拼出来也带。
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 || "查询失败") };
  }
})
500000 是 NewAPI 默认的额度换算比例,改过的话按自己的值写。系统访问令牌的权限比 API Key 大,只在用户本人登录后生成的链接里放。
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;
  },
})
Codex、Grok Build 的供应商地址带 /v1,Claude Code 的不带,脚本先去掉末尾的 /v1 再拼接,所以各个应用通用,也不用写 usageBaseUrl。响应里还有 rate_limits(5 小时 / 1 天 / 7 天窗口)和 subscription(日 / 周 / 月限额),想在卡片上分行显示,可以让 extractor 返回数组。

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": {}
        }
      }
    }
已存在同 ID 的服务器:只给它勾上新的应用,不覆盖配置内容。导入即写入客户端配置文件,enabled 参数目前不起作用。

提示词示例

和 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 都是假的,只用来演示格式。