1. 从零跑通 Compose Multiplatform 的真实卡点Composables CLI 是 Composables 在 7 月 7 日随 MCP server 一起发布的命令行工具专门用来创建和管理 Compose Multiplatform 项目。它能做四件事init新建工程、add module给已有 Gradle 工程加模块、docs在终端查 Composables UI 文档、mcp install给 Android Studio、Codex、Cursor 这类客户端装 MCP。适合谁适合想用一套 Kotlin 代码同时出 Android、JVM 桌面、iOS、Wasm 的团队也适合已经在写 Compose 但每次建工程都要手动配 Gradle、配依赖、配多平台 target 的人。我自己的痛点很具体Compose Multiplatform 的settings.gradle.kts、build.gradle.kts、gradle/libs.versions.toml三件套每次都要抄抄完还要对版本Android Studio 里跑起来之前Kotlin 版本、AGP 版本、Compose 编译器版本三者对不上就报错。Composables CLI 把这一层收进 wizardinit出来的工程直接带 Composables UI、Spotless 和基础 Gradle 配置。但工程建好只是第一步真正让项目“能持续写下去”的是模型通道——代码补全、Agent 改代码、MCP 查文档都要调模型。这篇就把两件事接在一起用 Composables CLI 建工程用 TaoToken 统一 Key/API 通道最后在 Android Studio 里完整构建验证一次。2. TaoToken 前置把 Key 和 API 通道先备好TaoToken 在这里的角色是统一入口一个 Key、一个 API 地址兼容 Anthropic 风格的调用方式Android Studio 里的 AI 助手、Codex、Cursor、Claude Code 都能指向它。官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 根地址是 https://taotoken.net/api 这个不加 UTM。你需要提前拿到两样东西一个 API Key在控制台里创建形如sk-...只显示一次复制到本地密码管理器。确认 API 根地址https://taotoken.net/api后面所有配置里的 base_url 都填它。创建 Key 的入口在控制台的 API Keys 页面https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。如果你还没决定用哪个模型可以先在模型对话页试一下https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。长期写代码、跑 Agent 的话Coding Plan 更划算https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。注意Key 不要写进settings.gradle.kts或任何会提交到 Git 的文件。统一放本地环境变量或~/.config下的私有配置工程里只引用变量名。3. 可复制配置CLI 命令清单 settings.json / config.toml 骨架3.1 安装 Composables CLI安装方式很普通全局 npm 包npm install -g composables-cli装完主命令是composables四个入口init、add、docs、mcp。先确认版本和帮助composables --version composables --help3.2 创建工程交互式与一次性参数交互式 wizard 会问项目目录、包名、应用名、目标平台composables init给 Agent 用的时候建议把参数一次传全避免卡在交互输入里。下面这条在my-app目录创建工程包名com.example.app应用名My App目标平台 Android、JVM、iOS、Wasmcomposables init my-app \ --package com.example.app \ --app-name My App \ --targets android,jvm,ios,wasm--targets只接受逗号分隔的android,jvm,ios,wasm。想先跑 Android 和桌面收窄成两个composables init compose-demo \ --package com.example.composedemo \ --app-name Compose Demo \ --targets android,jvm3.3 给已有 Gradle 工程加模块add要在 Gradle 根目录执行。交互式composables add module非交互写法加一个 app 模块composables add module chatApp \ --type app \ --package com.example.chat \ --app-name Chat \ --targets android,jvm,ios,wasm只加 UI library把--type改成library并且不需要--app-namecomposables add module chatUi \ --type library \ --package com.example.chat.ui \ --targets android,jvm,ios,wasm3.4 依赖方式直接依赖 vs 复制源码新项目由 CLI 生成时Composables UI 已经接好。已有工程手动接入有两种方式。第一种直接加完整 UI 依赖implementation(com.composables:ui:0.2.0)第二种是复制组件源码时只加它们依赖的基础库implementation(com.composables:composeunstyled:2.7.0) implementation(com.composables:compose-interaction-capabilities:1.1.0)两种方式对项目管理的影响不一样。直接依赖com.composables:ui升级跟着库版本走复制组件源码代码进自己仓库后续修改和冲突要自己处理。Android 项目里我更倾向先用 Gradle dependency等某个组件确实需要改内部行为再考虑复制源码。比如只想调一个 Button 的视觉 token用主题解决要改焦点、键盘行为、语义树这类内部逻辑复制源码才有意义。3.5 MCP 接入Android Studio 与常见客户端MCP 文档里列的客户端比较多android-studio、antigravity、claude、codex、cursor、firebender、opencode、zed。Android Studio 的安装命令composables mcp install --client android-studio装完打开 Android Studio进入Settings Tools AI MCP Servers在 JSON View 里打开Enable MCP Servers。这个入口对应的是 Gemini in Android Studio 的 MCP 配置。Codexcomposables mcp install --client codexClaude、Cursor、OpenCode、Zed 同形式composables mcp install --client claude composables mcp install --client cursor composables mcp install --client opencode composables mcp install --client zedMCP server 有两种用法。支持 streamable HTTP transport 的客户端可以直接配这个 endpointhttps://composables.com/mcp如果客户端需要执行本地项目动作比如创建项目或添加模块就走 stdiocomposables mcp start正常情况下不用手动跑mcp start。composables mcp install写完配置后MCP 客户端会在需要时启动它。3.6 settings.json 骨架MCP 客户端侧以 Cursor / Claude 这类读 JSON 配置的客户端为例settings.json里 MCP 段落大致长这样。把YOUR_TAOTOKEN_KEY换成你自己的 Key不要提交到仓库{ mcpServers: { composables: { command: composables, args: [mcp, start], env: { TAOTOKEN_API_KEY: YOUR_TAOTOKEN_KEY, TAOTOKEN_BASE_URL: https://taotoken.net/api } } } }Android Studio 的 MCP JSON View 里结构类似只是外层键名按它自己的规范来。composables mcp install --client android-studio会自动写好你只需要确认Enable MCP Servers是打开的。3.7 config.toml 骨架Codex / Claude Code 侧Codex、Claude Code 这类用 TOML 的客户端配置放在~/.codex/config.toml或对应目录。骨架如下model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY [mcp_servers.composables] command composables args [mcp, start]env_key指向环境变量名Key 本体放 shell 里export TAOTOKEN_API_KEYsk-你的KeyClaude Code 的接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有 Anthropic 风格的具体字段说明。Claude Code 专用入口https://taotoken.net/claude-code?utm_sourcetaotoken_aicg_blog_endutm_contentclaude_codeutm_campaignrewrite 。4. 验证请求一次完整构建 一次模型调用4.1 构建验证工程建好后先确认 Gradle 能跑通。进入工程目录cd my-app ./gradlew tasks看到assembleDebug、jvmRun这类任务说明 Gradle 配置正常。跑 Android 构建./gradlew :composeApp:assembleDebug跑桌面端./gradlew :composeApp:run如果--targets里带了ios在 macOS 上可以跑./gradlew :composeApp:iosSimulatorArm64Test构建成功的标志是BUILD SUCCESSFUL产物在composeApp/build/outputs/apk/debug/下。这一步过了说明 CLI 生成的 Gradle 骨架、Composables UI 依赖、Spotless 配置都是通的。4.2 模型通道验证用 curl 直接打 TaoToken 的 API确认 Key 和地址没问题curl https://taotoken.net/api/v1/messages \ -H x-api-key: $TAOTOKEN_API_KEY \ -H anthropic-version: 2023-06-01 \ -H content-type: application/json \ -d { model: claude-sonnet-4-20250514, max_tokens: 128, messages: [ {role: user, content: 用一句话说明 Compose Multiplatform 的 target 是什么} ] }返回里有content数组和usage字段说明通道通了。这一步过了再把 Key 填进 Android Studio 的 AI 设置或 Codex 的config.tomlMCP 客户端就能在需要时调模型。4.3 Android Studio 里的验证流程打开 Android StudioFile Open选my-app目录。等 Gradle Sync 完成确认Settings Tools AI MCP Servers里Enable MCP Servers已打开composablesserver 状态是 running。在 Gemini in Android Studio 的对话里问一句“列出当前工程的 Compose target”如果 MCP 接对了它会读到build.gradle.kts里的 target 配置。跑一次Run composeApp模拟器起来后界面正常渲染。5. 本篇常见错排查5.1composables: command not foundnpm 全局 bin 目录不在 PATH 里。查一下npm config get prefix把prefix/bin加进 PATH重开终端再试。5.2init卡在交互输入Agent 或 CI 里跑init没传参数wizard 等输入。把--package、--app-name、--targets一次传全或者用--yes类标志以composables init --help实际输出为准。5.3 Gradle Sync 报 Kotlin / AGP 版本不匹配CLI 生成的libs.versions.toml里版本是配套的手动改过就会冲突。先git diff看改了什么回退到生成时的版本再逐个升。Compose 编译器版本必须和 Kotlin 版本对应这个不能随便跳。5.4 MCP server 在 Android Studio 里显示 not running先确认composables在 PATH 里能被 Android Studio 找到。Android Studio 启动时的环境变量可能和终端不一样用绝对路径最稳{ mcpServers: { composables: { command: /usr/local/bin/composables, args: [mcp, start] } } }路径用which composables查。5.5 API 返回 401Key 没读到或写错了。确认TAOTOKEN_API_KEY在当前 shell 里echo $TAOTOKEN_API_KEY如果为空export一下或者写进~/.zshrc/~/.bashrc。注意config.toml里env_key写的是变量名不是 Key 本体。5.6--targets传了不支持的平台只接受android,jvm,ios,wasm四个。传了desktop或web会报错换成jvm和wasm。5.7 复制源码后编译冲突com.composables:ui和composeunstyled同时存在时类会重复。二选一要么用完整 UI 依赖要么复制源码只留基础库。检查build.gradle.kts的 dependencies 块删掉多余那条。6. 把通道固定下来后面就顺了Composables CLI 主要解决四件事init建 Compose Multiplatform 项目add module给 Gradle 工程加模块docs在终端查 Composables UI 文档mcp install给 Agent 接入同一份文档。工程侧它把 Gradle 骨架收进 wizard模型侧 TaoToken 把 Key 和 API 地址收成一个入口。两边都固定下来之后新建一个多平台项目到跑通构建中间不需要再翻文档对版本。如果你卡在 MCP 接入或 Key 配置先看 API Keys 和接入文档https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 、https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。想先验证模型通不通去模型对话页https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。长期用 Agent 写 Compose 代码Coding Plan 更合适https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。