ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Cherry Studio 测 FastMCP 时模型通道报错?TaoToken 这样改 Base URL

Cherry Studio 测 FastMCP 时模型通道报错?TaoToken 这样改 Base URL FastMCP 把 MySQL 操作封装成 MCP 工具后最让人纠结的不是 server.py 写得对不对而是 Cherry Studio 里模型通道先报错。你明明看到浏览器打开 http://127.0.0.1:9000/sse 能收到事件流server.py 也打印了 Uvicorn running可在 Cherry Studio 里添加 MCP 后工具列表要么空白要么对话时提示 401。这个问题的根因通常在模型服务商的 Base URL 上模型通道没有对准工具列表就不会正常加载。把模型通道切到统一 API 通道 TaoToken 后需要做的事其实只有一件——去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 拿 Key然后把 Cherry Studio 的 Base URL 填成 https://taotoken.net/api末尾不要带 /v1。本文按这个方向把整条链路重走一遍。1. FastMCP 报错最容易被误判的一层模型通道不是 server.py1.1 现象确认SSE 通MCP 显示已连接工具列表就是空的先复现一下场景。server.py 里写了mcp.run(transportsse)运行时终端输出Uvicorn running on http://0.0.0.0:9000浏览器访问http://127.0.0.1:9000/sse也能看到text/event-stream的响应内容。这说明 FastMCP 服务本身是活的MCP 服务的端口、SSE 事件流都正常。但回到 Cherry StudioMCP 管理面板里显示「已连接」对话时模型却不认识任何工具。你让模型执行add(3, 5)它只会回复一段文字而不是真的调用 FastMCP 暴露出的 add 工具。换一个更隐蔽的情况模型突然开始回答「我无法访问数据库」但 execute_sql 工具明明已经注册好了。这里的坑在于Cherry Studio 加载 MCP 工具列表不是只看 MCP 服务通不通而是需要「模型通道」和「MCP 服务」同时就绪。客户端要先把工具 schema 递给大模型模型才能决定调用哪个函数。如果模型通道返回 401 或 404工具 schema 根本到不了模型手里表现出来就是「工具列表空白」或「模型装傻」。1.2 先排查 Cherry Studio 的模型服务商再动 server.py遇到这种问题很多人的第一反应是回头改mcp.tool()装饰器下面的函数签名或者把 transport 从 sse 改成 stdio 再试一遍。实际上 FastMCP 侧的代码十有八九没问题真正写错的是 Cherry Studio 里「模型服务商」那一栏。Cherry Studio 把模型通道和 MCP 工具分成两套配置MCP 管理里填的是本地 FastMCP 服务的地址模型服务商里填的是大模型 API 的地址。MCP 地址错了工具列表加载不出来模型服务商地址错了整个对话都会报鉴权失败。这次要改的是后者把模型服务商指向 TaoToken 的统一 API 入口MCP 服务保持http://127.0.0.1:9000/sse不变。2. 准备 TaoToken Key拿一把能进 Cherry Studio 的 API Key2.1 到官网注册并创建 Key排障需要一把能正常对话的 API Key。打开 TaoToken 注册账号进入控制台创建 API Key。创建后复制下来的字符串就是 YOUR_API_KEY下一步填进 Cherry Studio 的模型服务商里。创建 Key 的时候不用纠结先买哪个套餐可以先建 Key、看模型广场里有哪些模型可用。模型 ID 以 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 模型广场当时列表为准不要凭印象填旧的官方模型名。2.2 记清两个地址的用途别混用TaoToken 有两个不同的地址各管一件事用途地址注册、创建 Key、看模型广场、看用量https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end填进 Cherry Studio、Claude Code、Codex 等工具的 Base URLhttps://taotoken.net/api「填进工具」的是第二个地址。很多 401 和 404 都是从这里开始的有人把官网首页地址填进 Base URL有人把api写成了带/v1的路径还有人顺手在末尾加了个斜杠。TaoToken 的接口地址就是https://taotoken.net/api末尾不需要/v1也不能把?utm_source...这类落地页参数带进去。3. Cherry Studio 模型服务商配置Base URL 填对工具列表才会出现3.1 新增自定义服务商的填写项打开 Cherry Studio 的设置页进入「模型服务商」管理手动新增一个供应商。Cherry Studio 的自定义供应商通常提供 OpenAI 与 Anthropic 两种协议类型按你实际选的模型来定关键是下面几个字段要填对配置项值服务商名称TaoToken自定义方便识别协议类型按模型选 OpenAI 兼容或 AnthropicBase URLhttps://taotoken.net/apiAPI KeyYOUR_API_KEY模型 ID以 TaoToken 模型广场当时列表为准3.2 保存后先做一次普通对话验证配置保存后不要立刻去测 MCP。先在 Cherry Studio 的对话页里切到刚配好的模型发一句「你好」之类的普通消息。这一步能快速区分问题边界普通对话就报 401问题在 Key 或 Base URLMCP 那边先不用管。普通对话能通但 MCP 工具列表是空的问题在 MCP 配置回到第 4 章检查 SSE 地址。普通对话能通MCP 工具也能加载但一调用就报错才需要回头看 server.py 里的函数实现。提示如果你之前在 Claude Code 里用ANTHROPIC_BASE_URL环境变量配通过那套环境变量对 Cherry Studio 不生效。Cherry Studio 是图形界面配置只认模型服务商里填的 Base URL 和 Keyshell 里 export 的变量它读不到。4. 回到 FastMCP 的 SSE 出口验证 add 和 execute_sql4.1 确认 server.py 以 SSE 方式启动FastMCP 默认的mcp.run()并不是 SSE 方式直接启动的话 Cherry Studio 的 SSE 客户端连不上。排障时建议用下面这个最小可跑版本确认端口、transport、工具注册都没问题from fastmcp import FastMCP from mysql.connector import connect from dotenv import load_dotenv import os mcp FastMCP(operateMysql, port9000) mcp.tool() def add(a: int, b: int) - int: Add two numbers return a b mcp.tool() def execute_sql(query: str) - list: Execute SQL query and return results load_dotenv() config { host: os.getenv(MYSQL_HOST, localhost), port: int(os.getenv(MYSQL_PORT, 3306)), user: os.getenv(MYSQL_USER), password: os.getenv(MYSQL_PASSWORD), database: os.getenv(MYSQL_DATABASE), } try: with connect(**config) as conn: with conn.cursor() as cursor: cursor.execute(query) if cursor.description: cols [d[0] for d in cursor.description] rows cursor.fetchall() result \n.join([,.join(cols)] [,.join(str(v) for v in row) for row in rows]) return [result] else: conn.commit() return [f影响行数: {cursor.rowcount}] except Exception as e: return [fSQL 执行出错: {e}] if __name__ __main__: mcp.run(transportsse)启动命令不变python server.py看到Uvicorn running on http://0.0.0.0:9000就说明 SSE 服务已经起来了。完整版的get_table_desc、get_lock_tables等工具可以继续往这个文件里加这里只保留排障用的两个。4.2 Cherry Studio 里添加 SSE 类型的 MCP回到 Cherry Studio 的 MCP 管理页面添加一个 MCP 服务器配置如下配置项值名称operateMysql类型SSEURLhttp://127.0.0.1:9000/sse注意两点类型必须选 SSE不是 stdioURL 末尾要带/sse不是http://127.0.0.1:9000。添加成功后MCP 卡片会显示「已连接」并且工具列表里能看到注册的两个工具。4.3 让模型实际调用工具配置完成后回到对话页让模型做两件事第一说「计算 3 加 5」观察模型是否调用 add 工具并返回 8。如果模型只是文字回复「3 加 5 等于 8」没有走工具调用说明工具列表没有正确加载。第二说「查看当前数据库里有哪些表」或「执行一下 SHOW TABLES」观察 execute_sql 工具是否被调用。这里的 SQL 是在你本地 MySQL 实例上执行的模型通道只负责把自然语言转成 SQL、把执行结果转回文本数据库连接只发生在 FastMCP 服务所在的那台机器上。不要把生产库的账号密码填进 .env先用测试库验证。5. 排障对照401、404、工具列表空白分别查哪里5.1 401 Unauthorized查 Key 与模型通道Cherry Studio 模型服务商保存后普通对话直接报 401优先怀疑三件事API Key 没复制完整中间漏了字符或者复制了旧 Key。Base URL 填成了https://taotoken.net而不是https://taotoken.net/api导致请求路径对不上。某个模型 ID 对应的鉴权状态异常可以先到 TaoToken 控制台 API Keys 确认 Key 是否有效再回 Cherry Studio 粘贴一次。5.2 404 Not Found查 Base URL 与模型 ID404 通常和路径或模型名有关Base URL 多写了/v1TaoToken 的接口地址是https://taotoken.net/api末尾没有/v1。有些客户端会提示「OpenAI 兼容地址以 /v1 结尾」但 TaoToken 的统一入口不需要这个后缀填了反而 404。模型 ID 抄错了模型 ID 以 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 模型广场当时列表为准。不要沿用 ChatGPT 或 Claude 官方文档里的旧 ID去模型广场复制当前可用的那个。5.3 工具列表空白但模型对话正常模型能正常聊天说明模型通道已经通了。此时工具列表空白问题基本在 MCP 这一侧MCP 类型选了 stdio但 FastMCP 跑的是 SSE两边协议不匹配。URL 写了http://127.0.0.1:9000漏了/sse后缀。FastMCP 服务没起来MCP 面板显示「未连接」。按顺序检查这三项工具列表一般都能出现。5.4 execute_sql 只在本地执行execute_sql 这个工具特殊在一些它真的会执行 SQL。排障时记得用测试库不要拿生产库试。让模型把 SQL 生成出来在本地 MySQL 客户端里执行再把报错信息贴回对话由模型帮你分析。这不只是安全习惯也是排查问题最快的方式区分是 SQL 写错了还是模型通道没配好。6. 跑通后在控制台对一下这次调用6.1 验证同一把 Key 在模型对话页也能用配置保存后先在 TaoToken 模型对话 里用同一把 Key 发一条测试消息确认模型 ID 和 Base URL 没填错。这一步能排除「Key 本身不可用」的情况。6.2 把这次调试的终点记下来FastMCP 的 server.py 一个字都不用改改的只是 Cherry Studio 里模型服务商的 Base URL从默认官方通道改到https://taotoken.net/api。若后续要把同一把 Key 用到更长周期的代码任务可以打开 Coding Plan 看套餐是否够用Key 在 控制台 API Keys 统一管理。如果你之前用的是 Claude Code环境变量对照见 接入文档。整条链路跑通后回到 Cherry Studio 把 add 和 execute_sql 各调用一次再去 TaoToken 控制台看这次调用有没有记上账。这一步确认完模型通道、MCP 服务、Key 三者的状态就都清楚了。以后再遇到「工具列表读不出来」先看模型服务商的 Base URL 是不是https://taotoken.net/api再决定要不要动 server.py。
返回列表