1. 本地 MCP Server 开发与 Cline 接入:从 uv 初始化到 settings.json 跑通
MCP Server 是当前 AI 编码工具生态里最值得动手的一环。简单说,它就是一个跑在你本机的小服务,通过标准输入输出(stdio)把自定义工具暴露给 Cline、Claude Desktop 这类客户端调用。你可以把它理解成给 AI 装了一个“本地插件接口”:AI 负责决策,你的 Python 脚本负责真正执行加法、查数据库、读文件这些动作。适合谁?适合已经用 Cline 写代码、想让 AI 调用自己业务逻辑的开发者,尤其是那些不想把内部工具暴露到公网、只想本地跑通链路的场景。
这篇聚焦一个具体目标:用 uv 初始化一个 stdio 模式的 MCP Server,用 Inspector 验证工具能被调用,最后在 Cline 的cline_mcp_settings.json里写入可复制骨架,并通过 TaoToken 统一 Key 的 API 通道完成模型侧调用。整条链路一次跑通,不绕弯。
我试过把 MCP Server 当成普通脚本直接python mymcp.py跑,结果 Cline 那边一直连不上,后来才发现 stdio 模式必须由客户端拉起进程,手动跑等于占着管道。踩过的坑先放这里,下面按步骤来。
2. TaoToken 前置准备:统一 Key 与 API 通道
在动 Cline 配置之前,先把模型侧的通道准备好。Cline 本身是个客户端,它需要调用大模型来完成推理,而 MCP Server 只是被调用的工具端。两者是分开的:模型走 API,工具走 stdio。TaoToken 在这里的角色是提供统一的 API 入口和 Key,让你不用在 Cline 里分别填多个厂商的地址。
你需要拿到三样东西,后面配置里会反复出现:
第一是 Base URL,指向https://taotoken.net/api。注意这个地址不带任何查询参数,直接作为 OpenAI 兼容接口的根路径使用。
第二是 API Key,在控制台的 API Keys 页面创建。创建后复制出来,形如sk-开头的一串字符。这个 Key 同时用于 Cline 的模型调用,也可以用于其他兼容 OpenAI 协议的工具,做到一处 Key 多处复用。
第三是 Model ID,也就是你要调用的具体模型标识。在模型对话页面可以查看当前可用的模型列表,选一个适合编码的即可。
把这三样记下来,或者先放到一个临时文本里。下面配置 Cline 时会直接填入。如果你还没创建 Key,可以先去 API Keys 页面生成一个;想先确认模型能不能正常对话,可以在模型对话页面发一条测试消息,确认通道通畅再往下走。
这里要强调一点:TaoToken 提供的是标准 API 通道,Cline 通过它调用模型,MCP Server 通过 stdio 被 Cline 调用,两条链路互不干扰。很多人第一次配的时候会把 MCP 的 command 写成 API 地址,那是错的,MCP 的 command 必须是本地可执行程序,比如 uv。
3. 可复制配置:uv 初始化 + settings.json 骨架
先做本地 Server。安装 uv 用 pip 即可:
pip3 install uv然后初始化项目并装依赖。注意在虚拟环境里装包要用 uv,不要混用 pip:
uv init mymcp cd mymcp uv venv source .venv/bin/activate uv add "mcp[cli]"创建服务脚本mymcp.py,写一个最简单的加法工具:
from mcp.server.fastmcp import FastMCP mcp = FastMCP("Demo") @mcp.tool() def add(a: int, b: int) -> int: """Add two numbers""" return a + b if __name__ == "__main__": mcp.run(transport='stdio')这里FastMCP("Demo")里的 Demo 就是 Server 名字,Cline 里看到的工具会挂在这个名字下。transport='stdio'是关键,别改成别的。
接下来是 Cline 的配置。打开 Cline 的 MCP 配置入口,编辑cline_mcp_settings.json,写入下面这段骨架。注意把--directory后面的路径换成你自己的项目绝对路径:
{ "mcpServers": { "mymcp": { "command": "uv", "args": [ "--directory", "/Users/xxx/xxxx/xxx/mymcp", "run", "mymcp.py" ], "disabled": false, "autoApprove": [] } } }这段 JSON 里三件套要对应清楚:command是uv,args里通过--directory指定项目路径再run mymcp.py,disabled为 false 表示启用。Cline 启动时会用这个命令拉起你的 Server 进程,通过 stdio 通信。配置保存后,如果 Cline 界面上的绿点亮起,说明进程被成功拉起。
同时,Cline 的模型侧配置里填入 TaoToken 的三件套:Base URL 填https://taotoken.net/api,API Key 填你创建的那串,Model ID 填你选定的模型。这样模型调用走 TaoToken,工具调用走本地 stdio,两条链路都齐了。
4. 验证请求:Inspector 调试与 Cline 实际调用
配置写完别急着在 Cline 里试,先用官方 Inspector 把 Server 本身验证一遍。回到项目目录,确保虚拟环境已激活,然后执行:
mcp dev mymcp.py运行后会输出一个本地地址,通常是http://localhost:5173。浏览器打开它,就能看到 Inspector 界面。在 Tools 标签下找到add工具,填入两个整数,比如a=3, b=5,点击调用。如果返回8,说明 Server 逻辑和 stdio 传输都正常。
这一步的意义在于把问题分层:Inspector 通了,说明 Server 没问题;如果 Cline 那边不通,问题就在 Cline 配置或路径上。反过来,Inspector 都不通,先别碰 Cline。
Inspector 验证通过后,回到 Cline。在对话里让它调用mymcp的add工具,比如输入“用 mymcp 的 add 工具算一下 12 加 30”。Cline 会先通过 TaoToken 的 API 请求模型,模型返回工具调用意图,Cline 再通过 stdio 把参数传给本地 Server,拿到结果后回填给模型。整个过程你能在 Cline 的工具调用记录里看到add被触发,返回42。
如果绿点亮了但调用没反应,先看 Cline 的日志里有没有uv相关报错。常见的是路径写错,--directory指向的目录里没有mymcp.py,或者虚拟环境没建好导致uv run找不到依赖。
5. 本篇常见错排查:401、local proxy failed、reading choices
配这条链路,报错基本集中在几个固定位置。下面按真实遇到的顺序列。
401 Unauthorized:这个几乎都出在模型侧,不是 MCP 侧。检查 Cline 里填的 API Key 是否完整、有没有多余空格,Base URL 是否是https://taotoken.net/api。如果 Key 刚创建还没生效,等几秒再试。另外确认 Model ID 拼写正确,填了一个不存在的模型也会返回鉴权类错误。
local proxy failed:这个报错通常出现在 Cline 尝试连接模型 API 时网络层没走通。先确认 Base URL 没有多写路径,比如误写成https://taotoken.net/api/v1之外的东西。TaoToken 的 API 根路径就是/api,Cline 会自己拼接后续路径。如果本机有其它网络工具干扰,先关掉再试。
reading choices 相关报错:这类错误说明请求发出去了,但返回结构不是预期的 OpenAI 格式。常见原因是 Model ID 填错,或者请求被中间层改写。回到模型对话页面确认该模型可用,再核对 Cline 里的模型名。
OAuth 相关报错:如果你在 Cline 里选了需要 OAuth 的登录方式而不是 API Key,会走到这条错。本篇用的是 Key 方式,确保 Cline 的 Provider 选择的是 OpenAI 兼容 / API Key 模式,不要选 OAuth 登录。
MCP 侧绿点不亮:先手动在终端跑一遍uv --directory /你的路径 run mymcp.py,看能不能启动。如果终端报No module named mcp,说明虚拟环境没激活或依赖没装,重新source .venv/bin/activate再uv add "mcp[cli]"。如果终端能跑但 Cline 不亮,检查 JSON 里路径的斜杠和引号,JSON 不允许尾随逗号。
工具调用返回空:Inspector 里能调通但 Cline 里调不通,多半是 Server 名字对不上。Cline 里引用的工具名是mymcp加工具名,确认FastMCP("Demo")和 JSON 里的 key 没有混淆。名字只是标识,但引用时要一致。
排障的核心思路是分层:模型侧报错看 Key 和 Base URL,工具侧报错看路径和依赖,两边都通但结果不对看名字和参数类型。
6. 语义一致 CTA:把这条链路固化成日常工具
链路跑通之后,建议把cline_mcp_settings.json里的这段骨架保留下来,以后新增 MCP Server 直接复制改路径和文件名即可。uv 的好处是依赖隔离干净,每个 Server 一个虚拟环境,不会互相污染。
如果你还想继续扩展,可以在mymcp.py里加更多@mcp.tool()函数,比如读本地文件、查 SQLite、调内部 HTTP 接口。每加一个工具,Inspector 里刷新就能看到,Cline 侧重新加载配置即可识别。模型侧继续用 TaoToken 的统一 Key,不用为每个工具单独配通道。
需要创建新的 API Key 或查看模型列表,可以从 API Keys 页面和模型对话页面进入。接入文档里有更完整的参数说明,遇到协议细节可以对照查阅。长期做编码和 Agent 场景的话,Coding Plan 页面有更系统的用法说明,适合把这条本地链路沉淀成固定工作流。
最后留一个实用习惯:每次改完mymcp.py,先在 Inspector 里跑一遍再回 Cline,能省掉大量“到底是哪层错了”的排查时间。