跑 Google Home MCP 的 Agent,为何要备 TaoToken Key
2026/9/18 3:06:35 网站建设 项目流程

1. 从一次 MCP 工具调用变慢说起:Token 账本记在模型侧

Google Home MCP server 挂进 Claude Code 之后,第一次查设备状态很顺;第二次让它「和昨天同一时段对比」,响应从 3 秒拖到 20 秒——上一轮的原始 JSON 全堆在上下文里,模型每轮都要重读。这就是 agent 的真实运行成本。我的做法:先在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=google-home-mcp-intro 拿一个 TaoToken Key,再把模型 Base URL 设成 https://taotoken.net/api ,让每次 tool call 背后的推理都走同一条可计量、可对照的通道。

很多人跑通 Google Home MCP 之后的第一反应是「怎么这么费」,然后开始怀疑协议、怀疑 server、怀疑模型。其实都不是。MCP 只负责把能力标准化地暴露出来,真正消耗 Token 的是 Host 里那一层层上下文:工具描述每轮重发、tool result 原样回灌、多轮调用不断叠加。你没法通过换一个 MCP server 解决这件事,只能从推理出口这一侧把它变得可见、可算、可控。

下面把整条链路拆开讲:Google Home MCP 的调用结构、TaoToken Key 与 Base URL 的落地方式、Claude Code 与 Codex 两套配置的区别、以及一份可以照着填的 Token 消耗对照表。所有命令都在本地执行,配置里的敏感字段一律用占位符。

2. Google Home MCP 的调用链:Token 到底烧在哪一层

先明确一件事:MCP(Model Context Protocol)是模型与外部能力之间的协议层,它不是模型本身。Google Home 开放 MCP 集成,等于把「设备列表、设备状态、事件历史」这些家庭侧能力包装成了标准服务,任何支持 MCP 的 Host 都能用统一接口去访问——Claude 系列客户端、Google Antigravity,以及其他实现了 MCP 客户端的 agent 运行时,都在这个范围内。

链路结构大致是这样:

Host(Claude Code / 桌面客户端 / Antigravity ...) └── MCP Client(Host 内置,负责协议握手与工具调用) └── MCP Server(Google Home MCP) └── Google Home 设备 / 事件历史

模型推理发生在最上面那一层,也就是 Host 内部。MCP Server 只做一件事:把设备数据以 JSON-RPC 结果返回,它本身不消耗模型 Token。真正让账单涨起来的是下面三件事。

第一,工具描述(tool schema)的固定注入。每一轮请求,客户端都要把当前可用工具的 name、description、inputSchema 塞进上下文。Google Home 侧暴露的工具越细,这块固定开销越大,而且它是每轮都发的——哪怕这一轮模型根本不打算调工具。

第二,tool result 的原样回灌。设备列表、事件历史天然是大 JSON。一次「查询最近两小时事件」返回的结构化数据可能几百行,它会被原封不动放进对话历史,下一轮请求时再整体重发一次。这是成本曲线陡增的主要来源。

第三,多轮 tool call 的累积。agent 的典型行为路径是「列设备 → 选设备 → 查状态 → 查历史 → 汇总」,五轮下来,前四轮的返回值全都还躺在上下文里。MCP 规范里除了 tools 还有 resources 和 prompts 两类原语,如果 Host 把设备清单以 resource 形式挂载,语义上更干净,但只要它进入上下文,计量方式是一样的。

把这三项叠在一起,就是「跑通容易、跑久很贵」的真正原因。它不是 MCP 协议的锅,是上下文工程和推理供应商计量方式共同决定的。

所以问题就变成:你得知道每一次推理请求花在哪、花了多少,并且能按项目、按 agent 分开看。这正是把 Base URL 指向 TaoToken 的理由——不是为了绕开什么,而是让 agent 的推理出口统一、可查、能分账。

3. 三步拿到 Key,并把 Base URL 切过来

3.1 拿 Key

打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=google-home-mcp-signup ,注册登录后进控制台。建议按项目建 Key,比如google-home-agent-devgoogle-home-agent-prod分开,后面看用量时不用靠猜是哪次实验跑出来的。

创建入口在这里:https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=google-home-mcp-keys

拿到之后先别写进任何代码文件,用环境变量过渡:

export TAOTOKEN_API_KEY="YOUR_API_KEY"

3.2 记下 Base URL

统一是https://taotoken.net/api。注意这个地址不带任何 query 参数,它就是接口根路径,不要自己再拼/v1之类的后缀。

3.3 先探活,再动客户端配置

改 Claude Code 或 Codex 之前,先确认 Key 和链路是通的:

curl -sS https://taotoken.net/api/models \ -H "Authorization: Bearer YOUR_API_KEY" \ | head -c 400

能返回模型列表,说明这一层没问题,再去改配置文件。这一步能省掉后面 80% 的「到底是 Key 错了还是配置错了」的排查时间。

4. Claude Code:settings.json 管推理,.mcp.json 管 MCP Server

Claude Code 有两条互相独立的配置线,很多人会搞混:

  • 模型推理出口:走ANTHROPIC_*环境变量或settings.jsonenv段;
  • MCP Server 挂载:走.mcp.jsonclaude mcp add命令。

它们互不影响,可以分开改、分开验证。

4.1 settings.json 配置推理出口

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "claude-sonnet-4-5", "ANTHROPIC_SMALL_FAST_MODEL": "claude-haiku-4-5" } }

三个要点:

  1. ANTHROPIC_AUTH_TOKEN填的是 TaoToken 的 Key。
  2. ANTHROPIC_SMALL_FAST_MODEL单独指定一个小模型。agent 里大量「要不要调用工具、调哪个」的路由判断可以交给它,这部分请求数量多、单次便宜,成本能压下来一截。
  3. 如果你习惯用 shell 环境变量而不是 JSON,先清旧值再 export,避免两处冲突:
unset ANTHROPIC_BASE_URL ANTHROPIC_AUTH_TOKEN export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="YOUR_API_KEY" export ANTHROPIC_MODEL="claude-sonnet-4-5" export ANTHROPIC_SMALL_FAST_MODEL="claude-haiku-4-5"

4.2 挂载 Google Home MCP Server

.mcp.json声明式配置,放在项目根目录:

{ "mcpServers": { "google-home": { "command": "<Google Home MCP Server 启动命令>", "args": ["<按官方文档填写>"], "env": { "GOOGLE_HOME_MCP_CONFIG": "${HOME}/.config/google-home-mcp/config.json" } } } }

或者用命令行注册:

claude mcp add google-home -- <Google Home MCP Server 启动命令> <参数...> claude mcp list

claude mcp list里能看到google-home处于 connected,说明 Host 侧握手成功。至于它具体暴露了哪些工具,直接在会话里让模型列一次就行,客户端背后走的是标准 JSON-RPC:

{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}

看到工具清单之后,再决定哪些设备、哪些历史查询真的需要让 agent 碰。这里必须强调:MCP Server 的启动命令、参数、认证方式以 Google 官方和对应 server 仓库的说明为准,上面我用占位符标出来了,不要照抄。

5. Codex 是另一套:config.toml,别把 ANTHROPIC_* 抄过去

这是最常见的配置事故:把 Claude Code 的ANTHROPIC_*变量复制到 Codex 上,结果 Codex 完全不认。Codex 走的是自己的config.toml加 provider 抽象,两套东西不通用。

~/.codex/config.toml

model = "gpt-5-codex" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "responses"

环境变量只需要一个:

export TAOTOKEN_API_KEY="YOUR_API_KEY"

几个容易踩的点:

  • base_url直接写https://taotoken.net/api,不要自己拼路径。
  • env_key填的是变量名,不是 Key 本身,别把明文 Key 写进 toml。
  • wire_api的取值按你本地 Codex 版本的说明来;不确定就先按默认走,能通就行。
  • 如果同一台机器上 Claude Code 和 Codex 都要用,把 Key 收敛到同一个环境变量,用量才对得上账。

6. CC Switch 三件套:一份 Key,两个 Host 来回切

同时在 Claude Code 和 Codex 之间切换的人,最烦的是改配置。CC Switch 这类工具的思路就是「一套档案管多份文件」,我习惯叫它三件套:

文件归属管什么
settings.jsonClaude Code推理出口(ANTHROPIC_*
.mcp.jsonClaude CodeMCP Server 清单
config.tomlCodexmodel_provider/base_url/env_key

切换供应商时只改「指向 TaoToken」的那一份档案,三份文件里的 base_url 全写https://taotoken.net/api,Key 统一引用TAOTOKEN_API_KEY。这样两个 Host 的用量会归到同一把 Key 上,做成本对照时不用来回对账。

目录可以这样组织:

~/.cc-switch/ ├── profiles/ │ ├── taotoken-claude/ │ │ ├── settings.json │ │ └── .mcp.json │ └── taotoken-codex/ │ └── config.toml └── active -> profiles/taotoken-claude

切换时把对应目录软链到目标位置即可(Windows 上找等价方案)。核心原则只有两条:Key 只有一处,Base URL 只有一处。任何需要你在三个文件里反复粘贴 Key 的方案,最后都会出错。

7. MCP 调用验证:从最小闭环开始

配置完别急着上复杂任务,先跑一个最小闭环,把变量逐个隔离。

第一步,确认 server 挂上了:

claude mcp list

第二步,让模型列一次工具清单。在会话里发一条只读指令,例如「列出当前可用的 Google Home 工具,不要调用任何工具」。这一步只验证 tool schema 注入是否正常,几乎不产生额外消耗。

第三步,发一条最小真实调用。例如「列出我家里所有设备的名字」。这条会触发一次 tool call,返回值通常不大,适合用来确认端到端链路。

第四步,发一条重一点的。例如「查询某个设备最近 30 分钟的事件历史」。这条是 Token 消耗的大头,跑完立刻去控制台看用量,和第三步做对比,你就能直观感受到 tool result 体积带来的差异。

如果你在脚本里手工调 MCP,JSON-RPC 的形状是固定的:

# 仅作协议示意,实际调用由 Host 发起 echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"<tool_name>","arguments":{"<arg>":"<value>"}}}' \ | <your-mcp-client-transport>

这里必须补一句安全约束:Google Home MCP 暴露的是家庭设备与事件历史,属于个人侧数据。不要把 agent 的 MCP 配置指向公司生产数据库、内部 API 网关或任何线上核心系统,也不要给 agent 开批量写权限。测试阶段一律只读,命令全部在本地执行。

8. Token 消耗记录对照:把「贵不贵」变成一张表

光说「省 Token」没有意义,得有对照。下面这张表是我跑 Google Home MCP agent 时用的记录模板,每跑一个任务记一行:

任务tool call 轮数输入 Token输出 Token缓存命中备注
列设备名1部分只读
单设备 30 分钟事件2部分JSON 中等
单设备 24 小时事件2原始记录很长
24 小时 + 昨日对比5很大上下文累积明显

记录的三个来源:

  1. TaoToken 控制台的用量页面,看 Key 维度和模型维度的总量;
  2. 本地会话日志(Claude Code 会保存 transcript),按 tool call 数量粗算轮次;
  3. 自己写的小 wrapper,在请求前后打时间戳和计数,落到 CSV。

用环境变量把口径固定下来:

export AGENT_PROFILE="google-home-mcp" export TAOTOKEN_BASE_URL="https://taotoken.net/api" export TAOTOKEN_API_KEY="YOUR_API_KEY" export AGENT_LOG_DIR="$HOME/.agent-logs/google-home" mkdir -p "$AGENT_LOG_DIR"

一个极简的本地记录脚本,跑完任务手动追加一行:

# append_usage.py —— 纯本地写 CSV,不发起任何网络请求 import csv, os, datetime path = os.path.join(os.environ["AGENT_LOG_DIR"], "usage.csv") row = { "ts": datetime.datetime.now().isoformat(timespec="seconds"), "profile": os.environ.get("AGENT_PROFILE", "default"), "task": input("task name: "), "tool_rounds": input("tool call rounds: "), "in_tokens": input("input tokens: "), "out_tokens": input("output tokens: "), } new = not os.path.exists(path) with open(path, "a", newline="", encoding="utf-8") as f: w = csv.DictWriter(f, fieldnames=list(row.keys())) if new: w.writeheader() w.writerow(row) print("logged ->", path)

拿到数据之后,优化方向其实很清楚:

  • 砍 tool result 体积:事件历史别全量回灌,只保留时间、设备、状态变更这几个字段,其余在调用侧裁掉。
  • 分页代替全量:24 小时拆成 6 个 4 小时窗口,每窗口查完立即摘要,不让原始 JSON 长期留在上下文里。
  • 模型分层:路由判断用ANTHROPIC_SMALL_FAST_MODEL指的小模型,最终汇总再交大模型。
  • 减少轮次:在系统提示里明确写「一次尽量合并同类设备查询」,避免一个设备一轮。
  • 稳定工具描述:tool schema 越稳定,缓存命中越友好;频繁改工具名称或描述反而会让缓存失效。

你会发现这些优化和「用哪家供应商」是正交的。但前提是——你得先有一个能看清用量的出口,才谈得上优化。这也是为什么建议把 agent 的模型出口统一到https://taotoken.net/api这类可控入口上,而不是每个 Host 各连一处、各算各的账。

9. 排障清单:接入 Google Home MCP 常见的五个坑

  1. 401 / invalid api keyANTHROPIC_AUTH_TOKENTAOTOKEN_API_KEY没生效。先echo出来看有没有被旧值覆盖,再确认 Base URL 是https://taotoken.net/api
  2. MCP Server 显示 disconnected:多半是启动命令写错、依赖缺失,或者路径里有空格没转义。用绝对路径重试一次。
  3. 模型完全不调用工具:tool schema 没注入成功,或者系统提示里禁止了工具调用。先用「列出可用工具」验证。
  4. 响应被截断:事件历史返回太长,超出单次上下文预算。做字段裁剪或分页,而不是一味换大模型。
  5. 改了配置没反应settings.json和 shell 环境变量同时存在时,以哪边为准取决于启动方式。最稳的做法是只保留一处。

10. 小结:MCP 让能力标准化,Key 让成本可计量

Google Home 开放 MCP 集成这件事,真正改变的是「接入方式」——设备状态和事件历史变成了一套标准协议下的能力,任何支持 MCP 的 agent 都能按同一套方式去用。但协议标准化不等于成本标准化。每一次工具调用背后,模型都要重新读一遍工具描述和上一轮的返回值,这部分开销完全取决于你在哪里做推理、用什么模型、上下文怎么组织。

所以建议是固定的:先在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=google-home-mcp-signup 拿到 TaoToken Key,把 Claude Code 的ANTHROPIC_BASE_URL、Codex 的model_providers.base_url都指向https://taotoken.net/api,然后用一张 Token 对照表把 agent 的每一轮开销记下来。跑上一周,你会很清楚哪些任务值得让 agent 做、哪些任务直接写个脚本更划算。

下一步可以直接从这里开始:

  • 先试模型对话,确认 Key 和模型可用:https://taotoken.net/models/detail/chat?utm_source=taotoken_aicg_blog_end&utm_content=google-home-mcp-chat
  • 想让 agent 长期常驻,看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=google-home-mcp-plan
  • 创建项目专用 Key:https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=google-home-mcp-keys
  • Claude Code 的完整配置说明:https://taotoken.net/doc/ClaudeCodeAnthropic?utm_source=taotoken_aicg_blog_end&utm_content=google-home-mcp-doc

把 Key 和 Base URL 这两件事先定下来,剩下的就是调上下文、攒经验。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询