调试 FastMCP 天气工具卡住,把 Codex 的模型通道接入 TaoToken
FastMCP 三行代码就能把get_weather注册成 MCP 工具,但真正让新手卡住的往往不是工具本身,而是 AI 客户端怎么连上模型。本文从接入配置视角出发,把 Codex 的模型通道切到 TaoToken(官网:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=),让 Codex 对话里能直接调用 FastMCP 暴露的get_weather,解决“MCP Server 写好却连不上模型”的痛点。
一、原问题与场景:FastMCP 跑起来了,Codex 却调不到工具
很多人的 FastMCP 起步是这样的:
from fastmcp import FastMCP mcp = FastMCP("Weather Service") @mcp.tool() def get_weather(city: str) -> str: """查询指定城市的天气""" return f"{city}晴,30°C" mcp.run()本地python weather_server.py一跑,日志显示 server 已启动,工具列表里也能看到get_weather。但切到 Codex 客户端,输入“帮我查一下上海天气”,模型要么答非所问,要么直接说没有可用工具。问题不在 FastMCP,而在 Codex 的模型通道没有正确指向一个能承载工具调用的后端。
Codex 的模型通道由config.toml里的 provider 决定。默认配置指向官方端点,一旦网络或额度受限,工具调用链路就会断在“模型请求”这一步——MCP Server 明明活着,模型却收不到工具描述,自然也不会发起call_tool。把 Codex 的 Base URL 换成 TaoToken 的https://taotoken.net/api,模型请求先走通,FastMCP 的工具才有机会被真正调用。
二、TaoToken 前置:拿 Key、认端点、分清两套地址
在改 Codex 配置之前,先把三件事做完。
第一,创建 API Key。打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,注册后在控制台生成一个 Key,形如YOUR_API_KEY。这个 Key 是 Codex 访问模型的凭证,不要写进 FastMCP 的代码里,两者职责不同:FastMCP 负责暴露工具,TaoToken 负责提供模型通道。
第二,记住两个地址的区别。官网入口是https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=,用于注册、看文档、管理 Key;API 端点是https://taotoken.net/api,只作为 Codex 的 Base URL 使用,不要加 UTM 参数。很多新手把带查询参数的官网地址填进config.toml,结果请求 404,就是没分清这两者。
第三,确认模型 ID。在模型对话页面或接入文档里能看到当前可用的模型标识,Codex 的model字段要填这个 ID,而不是随手写gpt-4之类的猜测值。Key、Base URL、Model ID 三者对齐,模型通道才算配好。
三、可复制配置:Codex 的 config.toml 怎么写
Codex 的配置集中在config.toml。下面是一份可直接复制的最小配置,把占位符替换成你自己的值即可:
model = "MODEL_ID" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "chat"配套设置环境变量,避免 Key 硬编码进配置文件:
export TAOTOKEN_API_KEY="YOUR_API_KEY"Windows PowerShell 用:
$env:TAOTOKEN_API_KEY="YOUR_API_KEY"几点说明。base_url必须是https://taotoken.net/api,结尾不要多加/v1或斜杠,否则容易拼出错误路径。env_key的名字要和实际环境变量一致,Codex 启动时会去读它。wire_api按接入文档的说明填写,不同客户端版本字段名可能略有差异,以文档为准。
如果你同时用 Claude Code,配置位置不同,改的是settings.json里的ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY,不要和 Codex 的config.toml混在一起。两套客户端各管各的配置文件,这是新手最容易串的地方。
四、验证请求与成功结果:从模型通道到工具调用
配置改完,先验证模型通道本身是否通。重启 Codex,发一条不带工具的普通消息,比如“你好,简单介绍一下你自己”。如果模型正常回复,说明 Base URL 和 Key 已经生效;如果报 401,是 Key 问题;报 404,多半是 Base URL 写错。
通道通了之后,再验证 FastMCP 工具是否被识别。保持weather_server.py运行,在 Codex 里输入“帮我查一下上海天气”。成功的表现是:模型先输出一段工具调用意图,随后返回类似“上海晴,30°C”的结果,这个字符串正是get_weather的返回值。此时链路完整——Codex 通过 TaoToken 拿到模型响应,模型根据 FastMCP 注册的工具描述发起调用,FastMCP 执行函数并把结果回传。
如果模型回复“我没有查询天气的工具”,说明工具列表没有传到模型侧。检查 FastMCP 是否真的在运行、Codex 是否配置了连接该 MCP Server、以及工具描述是否为空。工具描述为空时,模型看不到get_weather的用途,自然不会调用。
五、本篇常见错排查
错误一:Base URL 带了 UTM 参数。把https://taotoken.net/?utm_source=...填进config.toml,请求会打到官网首页而不是 API。正确值是https://taotoken.net/api。
错误二:Key 写进代码而不是环境变量。有人把YOUR_API_KEY直接写进 FastMCP 脚本,结果 Codex 读不到。Key 属于 Codex 的模型通道配置,放在环境变量或config.toml引用的变量里。
错误三:模型 ID 猜着填。model字段必须是接入文档里列出的真实 ID,填错会返回模型不存在。去模型对话页面确认当前可用 ID。
错误四:FastMCP 没启动就测工具。Codex 报“工具不可用”时,先确认weather_server.py进程还在。MCP Server 是独立进程,关掉终端它就停了。
错误五:Claude Code 和 Codex 配置混用。Claude Code 改settings.json的ANTHROPIC_*,Codex 改config.toml,两者不通用。改错文件等于没改。
错误六:环境变量没生效。export只在当前终端会话有效,换一个终端或重启 IDE 就丢了。要持久化就写进 shell 配置文件,或在启动脚本里设置。
排查顺序建议:先确认模型通道(普通对话能否回复),再确认工具注册(工具列表是否可见),最后确认调用链路(模型是否发起call_tool)。逐层定位,比一次性改一堆配置高效得多。
六、语义一致 CTA
接入配置和排障相关的操作,集中在 API Keys 和接入文档两处:先到 https://taotoken.net/api-keys 生成或管理 Key,再对照 https://taotoken.net/doc 里的 Codex 配置说明逐字段核对。模型是否可用、ID 是否正确,可以直接在模型对话页面验证。如果你打算长期用 Codex 跑编码和 Agent 任务,Coding Plan 更适合持续调用场景,避免频繁手动换 Key。把 FastMCP 的工具能力和 TaoToken 的模型通道接上之后,get_weather只是起点,后面可以继续把数据库查询、内部 API 封装成工具,让 Codex 在对话里直接调用。