1. 从 Claude Code 读不到 Google Home 状态说起:TaoToken Key 该放哪一层
如果你在 Claude Code 里挂了 Google Home MCP,然后问一句“客厅灯现在开着吗”,最常见的卡点不是 MCP 协议本身,而是两个 Key 放错了层:模型请求返回401 invalid x-api-key,或者 MCP 工具已经列出来,但 Claude 仍然读不到设备状态。Google 近期为 Google Home 推出 MCP 集成,让支持 MCP 的第三方智能体可以通过标准化协议访问和控制 Google Home 设备及事件历史;Claude 这类智能体负责推理和工具选择,真正读设备状态的动作由 Google Home MCP Server 完成。这里要先把模型层和设备层拆开。先在 TaoToken 官网(https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=claude_google_home_intro)拿 TaoToken Key,再把模型 Base URL 设为https://taotoken.net/api,之后再去配置 Google Home MCP 自己的授权。很多 csdn_ugc 场景下的排障记录都把这两件事混在一起:把 TaoToken Key 填进 MCP Server 环境变量,或者把 Google Home 的访问令牌填进ANTHROPIC_AUTH_TOKEN,结果不是模型 401,就是 MCP 工具报权限错误。
本文按“状态读取”视角来写:Claude 只读 Google Home 设备状态,不做生产库直连,不把家居控制命令写成自动执行脚本;设备列表和状态查询命令由你在本地执行,确认工具和参数后再交给 Claude 调用。最终你会得到三样可复现产物:一份状态查询配置、一组设备列表与状态查询命令、一张 Key 位置对照表。核心结论先放在前面:TaoToken Key 是给 Claude/Codex 这类模型客户端做推理调用的,放在 Claude Code 的settings.json/ANTHROPIC_*环境变量,或 Codex 的config.toml对应 provider 中;Google Home MCP Token 是给 MCP Server 访问 Google Home 设备用的,放在.mcp.json的mcpServers环境变量里。两者不能互换。
2. 先分清两个 Key:TaoToken Key 管推理,Google Home MCP Token 管设备
Claude 读 Google Home 状态时,一次完整链路通常是这样:
- 你在 Claude Code 中输入“查一下客厅灯的状态”。
- Claude Code 把请求发往模型服务,地址由
ANTHROPIC_BASE_URL决定。这里要指向 TaoToken 的 Base URL:https://taotoken.net/api。 - 模型服务校验 TaoToken Key。这个 Key 就是你在 TaoToken 官网创建的
YOUR_API_KEY。 - Claude 根据上下文选择 Google Home MCP 提供的工具。
- Claude Code 调用本地或远程的 Google Home MCP Server。
- MCP Server 使用自己的 Google Home 授权去读设备状态,返回 JSON 给 Claude。
- Claude 把 JSON 状态转成自然语言回答。这一步会消耗模型 Token,因为设备状态会进入上下文。
所以 Key 位置对照可以写成下面这张表:
| Key / 配置 | 作用 | 应放位置 | 占位符示例 | 常见错误 |
|---|---|---|---|---|
| TaoToken Key | 调用 Claude/Codex 等模型推理 | Claude Codesettings.json的 env、ANTHROPIC_AUTH_TOKEN、CC Switch 的 API Key 条目 | YOUR_API_KEY | 填进 Google Home MCP Server 的GOOGLE_HOME_ACCESS_TOKEN |
| TaoToken Base URL | 模型请求地址 | Claude CodeANTHROPIC_BASE_URL;Codexconfig.toml的 providerbase_url | https://taotoken.net/api | 给 MCP Server 当设备 API 地址 |
| Google Home MCP Token | MCP Server 访问 Google Home 设备与事件历史 | .mcp.json中mcpServers.google-home.env,具体变量名以 MCP Server 文档为准 | YOUR_GOOGLE_HOME_TOKEN | 填进ANTHROPIC_AUTH_TOKEN |
| 模型 ID | 指定 Claude/Codex 使用哪个模型 | Claude CodeANTHROPIC_MODEL;Codexmodel | YOUR_MODEL_ID | 写进 MCP 工具参数 |
| 设备 ID | 指定查哪个 Home 设备 | MCP 工具调用参数 | YOUR_DEVICE_ID | 写进全局环境变量导致串设备 |
注意,TaoToken Key 不是 Google Home 的 OAuth Token,Google Home MCP Token 也不是模型 Key。TaoToken 官网负责 TaoToken Key 的创建与管理,你可以从这里进入:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=claude_google_home_key 。拿到YOUR_API_KEY后,先只做一件事:确认 Claude Code 或 Codex 能通过https://taotoken.net/api正常请求模型。模型通道没通之前,不要急着调 MCP 工具,否则 401 会被误判成 Google Home 权限问题。
从 Token 消耗角度看,状态读取比设备控制更“隐蔽”。控制类操作通常只返回成功/失败,状态读取会把设备名称、房间、在线状态、OnOff、Brightness、Temperature、运行模式等字段塞进模型上下文。如果你一次性让 Claude 拉全屋设备列表,再逐个读状态,输入 Token 会迅速上升。更省 Token 的做法是:先用 MCP 工具列出设备,筛选出目标device_id,再只读取需要的 traits。Claude 只做最后归纳,不把全屋原始 JSON 反复带进每一轮对话。
3. Claude Code:settings.json 里 ANTHROPIC_* 怎么填 TaoToken
Claude Code 接入 TaoToken 时,推荐把模型层配置放在settings.json的env中。文件可以是用户级~/.claude/settings.json,也可以是项目级.claude/settings.json。示例:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "YOUR_MODEL_ID", "ANTHROPIC_SMALL_FAST_MODEL": "YOUR_FAST_MODEL_ID" } }这里有几个容易写错的点:
ANTHROPIC_BASE_URL使用https://taotoken.net/api,不要在后面随手拼/v1或加 UTM 参数。Base URL 是工具配置项,不是宣传链接。ANTHROPIC_AUTH_TOKEN填YOUR_API_KEY,这个 Key 来自 TaoToken 官网,不是 Google Home 的 Token。ANTHROPIC_MODEL/ANTHROPIC_SMALL_FAST_MODEL填你在 TaoToken 模型对话或文档中确认的模型 ID。不要凭记忆写一个不存在的名称。settings.json是 JSON,双引号、逗号都要合法。最后一项后面不要多逗号。- 不要把真实 Key 提交到 Git。项目级
settings.json如果要共享,只共享占位符。
如果你不想改文件,也可以临时用环境变量验证:
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="YOUR_API_KEY" export ANTHROPIC_MODEL="YOUR_MODEL_ID"然后启动 Claude Code,用一个最小请求确认模型通道:
claude -p "只回答 OK,不要解释"如果这里返回 401,优先检查三处:ANTHROPIC_AUTH_TOKEN是否复制了完整YOUR_API_KEY;ANTHROPIC_BASE_URL是否写成https://taotoken.net/api;环境变量是否被其他 shell 配置覆盖。可以用下面命令确认当前进程实际读到的值:
printf 'BASE=%s\nTOKEN=%s\nMODEL=%s\n' "$ANTHROPIC_BASE_URL" "$ANTHROPIC_AUTH_TOKEN" "$ANTHROPIC_MODEL"如果这里显示正确,Claude Code 仍然 401,再检查settings.json是否被更高优先级配置覆盖。Claude Code 会从多层级读取配置,项目级、用户级、环境变量之间可能有覆盖关系。先把模型通道跑通,再进入 MCP 配置。TaoToken 官网入口再放一次,方便你核对 Key 与模型:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=claude_google_home_settings 。
4. Google Home MCP 配置:Claude Code 怎么挂上设备状态工具
模型通道通了之后,下一步才是让 Claude Code 看见 Google Home MCP 工具。Claude Code 常见做法是使用项目根目录下的.mcp.json,或把mcpServers合并到对应配置中。示例:
{ "mcpServers": { "google-home": { "command": "YOUR_GOOGLE_HOME_MCP_COMMAND", "args": ["YOUR_GOOGLE_HOME_MCP_ARGS"], "env": { "GOOGLE_HOME_ACCESS_TOKEN": "YOUR_GOOGLE_HOME_TOKEN", "GOOGLE_HOME_PROJECT_ID": "YOUR_GOOGLE_HOME_PROJECT_ID" } } } }这段配置里,command和args必须来自你使用的 Google Home MCP Server 文档,不要自己编一个插件名或 API 名。不同实现的启动方式可能是本地二进制、npx、uvx、Docker,或者远程 SSE/HTTP 地址。本文只固化结构:mcpServers下的键名可以叫google-home,env里放 Google Home MCP 自己的授权变量。具体变量名以 MCP Server 文档为准,常见会叫GOOGLE_HOME_ACCESS_TOKEN或类似名称。关键点是:这里不要写ANTHROPIC_AUTH_TOKEN,也不要写 TaoToken 的YOUR_API_KEY。
配置完成后重启 Claude Code,用/mcp查看 MCP Server 是否连接成功。如果看到google-home,但工具列表为空,通常是 MCP Server 启动失败、授权未完成或工具未暴露。此时先在本地直接运行 MCP Server 命令,观察错误输出,而不是反复改 Claude 的模型 Key。
一个容易忽略的细节是工作目录。.mcp.json放在项目根目录时,Claude Code 从该项目启动才会读取;如果你从其他目录启动,可能看不到这个 MCP Server。可以在 Claude Code 中确认当前项目路径,再检查.mcp.json是否在预期位置。如果你使用 CC Switch 或多个项目切换,确保每个项目的 MCP 配置和模型配置不要串。
状态读取配置建议只暴露必要工具。比如你只需要读状态,就不需要在 Claude 的提示词里鼓励它调用控制类工具。可以在项目说明或会话开头加一句约束:
只使用 google-home MCP 的只读状态工具。不要执行设备控制、场景触发或删除类操作。读取状态后用 JSON 返回,不要补充无关解释。MCP Server 负责“能不能读”,Claude 负责“怎么问”和“怎么总结”。两者分开后,排障会清晰很多:模型 401 查 TaoToken Key 和 Base URL;MCP 无工具查.mcp.json和 Google Home 授权;状态为空查device_id、traits 和设备权限。
5. 设备列表与状态查询命令:从 tools/list 到 tools/call
要可复现地读 Google Home 状态,第一步不是直接问 Claude,而是先用 MCP 标准方法确认工具名和参数结构。可以用 MCP Inspector:
npx @modelcontextprotocol/inspector在 Inspector 中连接你的 Google Home MCP Server,先执行tools/list。你会看到该 Server 实际暴露的工具名,例如可能包含设备列表、设备状态、房间列表、事件历史等。不要假设工具名一定叫list_devices或get_state,以tools/list返回的 schema 为准。
如果你要在命令行里走 stdio JSON-RPC,可以用下面的方式列出工具:
printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' \ | YOUR_GOOGLE_HOME_MCP_COMMAND YOUR_GOOGLE_HOME_MCP_ARGS假设tools/list返回的设备列表工具名为YOUR_DEVICE_LIST_TOOL,则可以这样列出设备:
printf '%s\n' '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"YOUR_DEVICE_LIST_TOOL","arguments":{}}}' \ | YOUR_GOOGLE_HOME_MCP_COMMAND YOUR_GOOGLE_HOME_MCP_ARGS从返回结果里找到目标设备,例如客厅灯、温控器或传感器,记录YOUR_DEVICE_ID。然后查询状态:
printf '%s\n' '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"YOUR_DEVICE_STATE_TOOL","arguments":{"device_id":"YOUR_DEVICE_ID","traits":["OnOff","Brightness","Temperature"]}}}' \ | YOUR_GOOGLE_HOME_MCP_COMMAND YOUR_GOOGLE_HOME_MCP_ARGS如果 Server 的工具参数不是device_id和traits,以tools/list返回的 input schema 为准。这里的重点是流程:先tools/list,再tools/call,先把设备列表跑通,再查单个设备状态。这样你在 Claude Code 里提问时,Claude 选择的工具和参数才更稳定。
在 Claude Code 中,可以用一个受限提示词触发状态读取:
只使用 google-home MCP。先调用设备列表工具找到 device_id=YOUR_DEVICE_ID 的设备,再调用状态工具读取 OnOff、Brightness、Temperature。不要输出无关解释,只用 JSON 返回。如果 Claude 返回的状态字段和你看到的不一致,检查 MCP Server 是否做了字段裁剪、缓存或权限限制。Claude 本身不直接访问 Google Home,它只是根据 MCP 返回内容做推理。因此,MCP 返回空状态时,改模型参数没有用;应该回到 MCP Server 日志和 Google Home 授权。
从 Token 消耗角度,建议在 Claude Code 中要求“只返回 JSON”和“只读指定 traits”。全量设备列表可能包含大量房间、设备类型、在线状态和事件历史,这些都会进入上下文。你可以在本地先用tools/call过滤出YOUR_DEVICE_ID,再把精简结果交给 Claude。这样既降低延迟,也减少推理 Token 消耗。
6. Codex:config.toml 接 TaoToken,不要写 ANTHROPIC_*
Codex 和 Claude Code 的配置方式不同。Claude Code 用settings.json/ANTHROPIC_*,Codex 用config.toml。不要把ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN写进 Codex 的config.toml,那不会按预期生效。Codex 侧应使用 provider 配置。示例:
model = "YOUR_MODEL_ID" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "chat"然后设置环境变量:
export TAOTOKEN_API_KEY="YOUR_API_KEY"如果你在 Codex 中也要查看 Google Home 状态,思路仍然是 MCP 负责设备层,Codex 负责模型层。TaoToken Key 放在TAOTOKEN_API_KEY,Base URL 放在base_url,Google Home MCP Token 放在 MCP Server 自己的环境变量中。三套配置不要互相覆盖。
有人会把 Claude Code 的ANTHROPIC_*复制到 Codex 的config.toml,结果 Codex 不认识这些字段,或者启动时忽略它们。正确排查方式是看 Codex 实际使用的 provider 和env_key,再确认该环境变量是否指向YOUR_API_KEY。如果 Codex 报 401,先查TAOTOKEN_API_KEY,不要查ANTHROPIC_AUTH_TOKEN。
如果你同时使用 Claude Code 和 Codex,建议把通用部分单独记录:
- TaoToken Key:
YOUR_API_KEY - TaoToken Base URL:
https://taotoken.net/api - Claude Code:
ANTHROPIC_BASE_URL+ANTHROPIC_AUTH_TOKEN - Codex:
model_providers.taotoken.base_url+env_key = "TAOTOKEN_API_KEY" - Google Home MCP:
.mcp.json中的env - 设备 ID:只出现在 MCP 工具参数中
这样切换工具时不会把 Key 和 Base URL 放错位置。
7. CC Switch 三件套:供应商、Base URL、API Key 的映射
如果你用 CC Switch 管理多个模型供应商,最容易出问题的是“界面里改了,但实际配置文件没对齐”。可以把 CC Switch 三件套理解为:供应商配置、Base URL、API Key。对于 TaoToken,在 CC Switch 中应确认:
- 供应商名称:TaoToken。
- Base URL:
https://taotoken.net/api。 - API Key:
YOUR_API_KEY。 - 模型 ID:
YOUR_MODEL_ID,如果 CC Switch 的当前版本需要单独选择模型。
但这三件套写入不同客户端时,落地位置不同:
- 写入 Claude Code:最终映射到
settings.json的ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODEL。 - 写入 Codex:最终映射到
config.toml的model_provider、model_providers.taotoken.base_url、env_key。 - 写入 MCP 配置:不要写 TaoToken Key。MCP 配置里只放 Google Home MCP Server 的启动命令和它自己的授权变量。
CC Switch 适合多环境切换,但切换后要回到 Claude Code 或 Codex 中验证实际生效值。比如你切到 TaoToken 后,Claude Code 应该用https://taotoken.net/api;如果它还指向旧供应商,模型请求可能仍然失败。可以用前面提到的printf命令检查环境变量,或者查看settings.json和config.toml的实际内容。
另外,CC Switch 中的“复制配置”功能不要把 Claude Code 的ANTHROPIC_*整段复制到 Codex。Codex 只认config.toml的 provider 结构。反过来,也不要把 Codex 的env_key写进 Claude Code。两个客户端的模型层配置是平行的,不是通用的。TaoToken 官网可以用于统一查看 Key 和模型入口:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=claude_google_home_ccswitch 。
8. 排障清单与文末 CTA:从模型对话到 Claude Code 文档
最后给一份按症状排查的清单,避免把模型层和 MCP 层混在一起。
| 症状 | 优先检查 | 正确处理 |
|---|---|---|
Claude Code 报401 invalid x-api-key | ANTHROPIC_AUTH_TOKEN、ANTHROPIC_BASE_URL | Key 用YOUR_API_KEY,Base URL 用https://taotoken.net/api |
| Codex 报 401 | TAOTOKEN_API_KEY、config.toml的env_key | 不要把ANTHROPIC_*写进 Codex |
| Claude Code 看不到 google-home MCP | .mcp.json位置、MCP Server 命令、/mcp | 先本地运行 MCP Server 命令,确认启动成功 |
| MCP 工具列表为空 | MCP Server 授权、工具暴露配置 | 查 MCP Server 日志和 Google Home 授权 |
| 设备状态为空 | YOUR_DEVICE_ID、traits、设备权限 | 先用tools/list和tools/call本地确认 |
| 每次回答很慢或 Token 消耗高 | 全屋设备列表是否进入上下文 | 限定device_id和 traits,要求 JSON 输出 |
| 切换 CC Switch 后失效 | 实际配置文件是否更新 | 检查 Claude Code settings.json 或 Codex config.toml |
本文的可复现产物到这里就齐了:状态查询配置放在.mcp.json,设备列表命令从tools/list开始,状态查询用tools/call并限定device_id与 traits,TaoToken Key 放在 Claude Code 的ANTHROPIC_AUTH_TOKEN或 Codex 的TAOTOKEN_API_KEY,Google Home MCP Token 放在 MCP Server 自己的环境变量中。只要记住“TaoToken Key 管模型推理,Google Home MCP Token 管设备状态”,大部分 401 和工具无响应都能快速定位。
如果你还没有开始配置,建议按下面顺序走一遍:
- 模型对话:先确认
YOUR_MODEL_ID可用,打开 https://taotoken.net/models/detail/chat?utm_source=taotoken_aicg_blog_end&utm_content=claude_google_home_chat - Coding Plan:高频状态查询和 Claude Code 使用场景,查看 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=claude_google_home_plan
- 创建 Key:在控制台生成
YOUR_API_KEY,入口是 https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=claude_google_home_keys - Claude Code 文档:按官方文档把
settings.json、ANTHROPIC_*和 MCP 配置对齐,参考 https://taotoken.net/doc/ClaudeCodeAnthropic?utm_source=taotoken_aicg_blog_end&utm_content=claude_google_home_doc
先把模型通道跑通,再挂 Google Home MCP;先本地执行设备列表和状态查询,再让 Claude 做自然语言归纳。这样你既能读到 Home 设备状态,也能清楚知道每一个 Key 到底该放在哪里。