news 2026/9/26 15:11:40

零基础 MCP 初体验说明书:用 Python+FastAPI 搭一个能被 Cline 调用的本地工具服务,并配 TaoToken 统一 Key

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
零基础 MCP 初体验说明书:用 Python+FastAPI 搭一个能被 Cline 调用的本地工具服务,并配 TaoToken 统一 Key

1. 零基础也能跑通的 MCP 本地工具服务

MCP(Model Context Protocol)说白了就是给大模型装一个「标准插座」:模型不用关心你的工具是 Python 写的还是 Go 写的,只要按协议暴露能力,它就能调用。这篇要带你从零搭一个能被 Cline 调用的本地工具服务,技术栈是 Python + FastAPI + uvicorn + pydantic,最后在 Cline 的 settings.json 里接入 TaoToken 统一 Key,让整条调用链真正跑起来。

适合谁看:写过一点 Python、听说过 MCP 但没动手、想让 AI 编辑器调用自己本地接口的人。全程不需要你懂协议细节,我会把可复制的骨架、配置片段、验证动作一条条列出来,你照着敲就能看到结果。

整条链路是这样的:Cline 作为 MCP 客户端,读取 settings.json 里的服务配置,启动你本地的 FastAPI 服务,通过 stdio 或 HTTP 把工具列表告诉模型;模型决定调用哪个工具后,请求打到你的 FastAPI 接口,接口返回 JSON,模型再组织成人话回复你。理解这条链路,后面每一步就都有位置感了。

2. 前置准备:TaoToken 统一 Key 与 API 通道

在写代码之前,先把「模型侧」的通道准备好。Cline 本身只是个客户端,它需要一个大模型来驱动,这里用 TaoToken 的统一 Key 来打通,好处是一个 Key 走通对话、编码、Agent 多种场景,不用在多个平台之间来回切。

你需要做两件事:注册并拿到 API Key,然后记住两个地址。官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 基地址是 https://taotoken.net/api (这个不加 UTM)。拿到 Key 后先别急着填,后面配置 Cline 时会用到。

提示:Key 属于敏感信息,建议放在环境变量或本地配置文件里,不要直接提交到 Git 仓库。Cline 的 settings.json 如果放在项目目录,记得加进 .gitignore。

如果你还没创建 Key,可以进控制台 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite 生成;想先看看模型对话效果,也可以直接在 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 里试几句,确认通道是通的,再回来搭本地服务。

3. 可复制配置:FastAPI 工具服务骨架

3.1 环境与依赖

先建目录、建虚拟环境,把依赖钉在 requirements.txt 里。版本不用完全一致,但建议 Python 3.10 以上。

mkdir mcp-local-tool && cd mcp-local-tool python -m venv .venv # Windows .venv\Scripts\activate # Mac/Linux source .venv/bin/activate
fastapi==0.110.0 uvicorn==0.29.0 pydantic==2.6.4 httpx==0.27.0
pip install -r requirements.txt

3.2 FastAPI 服务骨架

下面这个 server.py 是一个最小可用工具服务,暴露两个接口:一个查当前时间,一个做加法。别小看这两个,它们足够验证「模型 → MCP → 本地接口」整条链路。

from fastapi import FastAPI from pydantic import BaseModel from datetime import datetime app = FastAPI(title="MCP Local Tool Server") class AddRequest(BaseModel): a: float b: float class AddResponse(BaseModel): result: float @app.get("/tools") def list_tools(): return { "tools": [ {"name": "get_current_time", "description": "获取当前本地时间"}, {"name": "add_numbers", "description": "计算两个数字之和"}, ] } @app.get("/tools/get_current_time") def get_current_time(): return {"time": datetime.now().isoformat()} @app.post("/tools/add_numbers", response_model=AddResponse) def add_numbers(req: AddRequest): return AddResponse(result=req.a + req.b)

启动命令:

uvicorn server:app --host 127.0.0.1 --port 8000 --reload

看到Uvicorn running on http://127.0.0.1:8000就说明服务起来了。这里用 pydantic 做请求体校验,参数类型不对会直接返回 422,省得你在接口里手写一堆 if。

3.3 Cline settings.json 配置片段

Cline 的 MCP 配置在 settings.json 里,找到mcpServers字段,加入你的本地服务。下面这段是 HTTP 方式的写法,把 URL 指向你刚启动的 FastAPI:

{ "mcpServers": { "local-tool": { "url": "http://127.0.0.1:8000", "disabled": false, "autoApprove": ["get_current_time", "add_numbers"] } } }

同时在 Cline 的模型配置里填入 TaoToken 的通道信息,API Base 用 https://taotoken.net/api ,Key 填你控制台生成的那串。这样模型请求走 TaoToken,工具请求走本地 FastAPI,两条线互不干扰。

注意:如果你的 Cline 版本要求 stdio 方式,需要额外写一个 stdio 适配脚本,把 HTTP 接口包一层。新手先用 HTTP 方式验证,跑通后再考虑 stdio。

4. 验证请求:逐条确认调用链

服务起来、配置填好后,按下面顺序逐条验证,每一步都有明确的预期结果,哪一步不对就停在那排查。

第一步,直接 curl 工具列表,确认服务本身没问题:

curl http://127.0.0.1:8000/tools

预期返回包含get_current_time和add_numbers的 JSON。如果这里就失败,说明 FastAPI 没起来或端口被占。

第二步,测加法接口,确认 pydantic 校验和返回结构:

curl -X POST http://127.0.0.1:8000/tools/add_numbers \ -H "Content-Type: application/json" \ -d '{"a": 3, "b": 4}'

预期返回{"result":7.0}。如果返回 422,检查字段名和类型是否对得上。

第三步,回到 Cline,在对话里问一句「现在几点了」,观察它是否触发get_current_time工具调用。正常情况你会看到 Cline 显示工具调用过程,然后返回一个时间。这一步成功,说明整条链路通了。

第四步,问「帮我算一下 12.5 加 7.3」,确认模型能选中add_numbers并传对参数。到这里,一个能被 Cline 调用的本地工具服务就完整跑通了。

5. 本篇常见错排查

服务启动报端口占用:8000 被别的进程占了,换--port 8001,同时把 settings.json 里的 URL 一起改掉,两边必须一致。

Cline 里看不到工具:先确认 settings.json 的 JSON 格式没写错,多一个逗号都会导致整个配置失效。再看disabled是不是 true,以及 Cline 是否需要重启才加载新配置。

调用返回 422:pydantic 校验没过。检查请求体字段名、类型,数字别传成字符串。用 curl 单独测接口能快速定位是服务问题还是模型传参问题。

模型不调用工具:确认模型通道是通的,可以在模型对话里先聊两句验证 Key 有效。另外工具描述写清楚一点,模型更容易判断什么时候该调用。

改了代码没生效:uvicorn 加了--reload会自动重载,但如果是改 settings.json,需要重启 Cline 或重新加载 MCP 配置。

6. 把 Key 和工具链固定下来

跑通一次之后,建议把常用配置固化:TaoToken 的 Key 放进环境变量,FastAPI 服务写个启动脚本,settings.json 纳入版本管理但排除敏感字段。这样下次开新项目,复制粘贴就能复用。

如果你后面要做长期编码或 Agent 类任务,可以了解下 Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ,配合本地 MCP 工具服务,模型能调用的能力会越来越顺手。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,Key 管理在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite ,需要的时候直接去对应页面操作就行。

真正踩过的坑是:一开始我把工具描述写得太笼统,模型经常选错工具,后来把 description 改成「获取当前本地时间,返回 ISO 格式字符串」这种具体描述,命中率立刻上来了。工具描述不是写给人看的注释,是写给模型看的说明书,值得多花两分钟。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 15:10:51

认识MCP Function Calling AI Agent:用TaoToken统一Key跑通三件套

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/26 15:10:37

新视野大学英语第四版电子资源深度解析与教学适配指南

1. 这份资料到底解决了什么真实痛点?“新视野大学英语读写教程第一册电子版教材习题答案课文翻译(第四版)”——光看标题,很多人第一反应是:“不就是一套PDF合集吗?网上一搜一大把。”但我在高校英语教学一…

作者头像 李华
网站建设 2026/9/26 15:10:06

通讯+CRM一体化实战:拆解DeskcommCRM如何打通客服数据孤岛

上个月我去一家做企业软件的公司聊客服流程优化,售后主管给我看了个场景:客服小妹桌面上同时开着CRM、企业微信、邮件客户端和一份Excel订单表,客户问完发票问物流,她先切到Excel查单号,再回邮件翻附件,最后…

作者头像 李华
网站建设 2026/9/26 15:07:34

让GUI Agent从失败中学习:EvoSkill-GUI技能库构建指南

GUI Agent 这个赛道最近非常热闹,但你只要真的在项目里跑过一版,大概率会遇到同一个让人头疼的场景:模型明明已经理解了页面的结构,却在最后一步自信地点击了旁边的广告横幅,或者弹窗一变就彻底不知所措。你把它当段子…

作者头像 李华
网站建设 2026/9/26 15:07:09

5G组网仿真避坑指南:Option3X与Option2配置实战

简介:这份资源面向职业院校5G组网与运维赛项的备赛师生,以及希望系统掌握5G网络建设流程的通信运维学习者,围绕NSA与SA两种组网架构的部署与优化展开。内容立足3GPP R15标准,结合IUV-5G全网部署与优化教学仿真系统,覆盖…

作者头像 李华