ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

FastAPI MCP 快速入门教程:用 TaoToken 统一 Key 打通本地工具链

FastAPI MCP 快速入门教程:用 TaoToken 统一 Key 打通本地工具链 1. 为什么本地工具链需要一个统一的 Key如果你最近在折腾 AI 助手接入本地能力大概率会同时遇到两个词FastAPI 和 MCP。FastAPI 负责把你写好的 Python 函数暴露成 HTTP 接口MCPModel Context Protocol则负责把这些接口包装成 AI 助手能理解的「工具」。两者拼在一起你就能让 AI 直接调用你本机的业务逻辑比如查数据库、读文件、调内部服务。问题出在「接入」这一步。很多刚接触的朋友会卡在三个地方一是每个模型供应商都要单独配一套 Key 和 Base URL本地调试时来回切换很烦二是 MCP 的配置文件格式不统一config.toml和settings.json到底谁管谁容易搞混三是第一次请求跑不通报错信息又很抽象不知道是网络问题、鉴权问题还是协议问题。这篇教程面向的就是这个场景你刚装好 FastAPI想快速把本地工具通过 MCP 暴露出去同时希望用一个统一的 Key 通道来管理模型调用。我会给出可以直接复制的config.toml与settings.json骨架演示如何用 TaoToken 统一 Key 完成一次最小请求并附上验证步骤和常见报错排查清单。目标很明确十分钟内跑通你的第一个 MCP 调用。TaoToken 在这里扮演的角色是「统一入口」。你不需要为每个模型单独申请 Key、单独记 Base URL而是通过一个 API 通道https://taotoken.net/api来分发请求。对本地开发来说这意味着你的 MCP 配置里只需要维护一份凭证换模型时改个模型名就行不用动其他结构。2. 环境准备与 TaoToken 前置配置2.1 初始化 FastAPI MCP 项目我习惯用uv来管理 Python 环境速度快、依赖干净。如果你还没装可以先装一下然后按下面的步骤初始化uv init fastapi-mcp-quickstart cd fastapi-mcp-quickstart uv venv source .venv/bin/activate # Linux/Mac # Windows 下用.venv\Scripts\activate uv add fastapi-mcp装完之后项目结构大概是这样fastapi-mcp-quickstart/ ├── .venv/ ├── .gitignore ├── .python-version ├── README.md ├── main.py ├── pyproject.toml └── uv.lockfastapi-mcp这个库的核心能力是把一个已有的 FastAPI 应用自动转换成 MCP 服务器。你不需要手写 MCP 协议里的 JSON-RPC 细节只要给每个路由加上operation_id它就会变成一个可被 AI 调用的工具。2.2 拿到 TaoToken 的 Key 和 API 地址在写代码之前先把凭证准备好。打开 TaoToken 的控制台创建一个 API Key。这个 Key 就是你后面所有模型调用的统一凭证。控制台入口https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteAPI Key 管理https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteAPI 的基础地址是https://taotoken.net/api注意这个地址后面不加任何 UTM 参数直接作为 Base URL 使用。Key 建议放在环境变量里不要硬编码进代码export TAOTOKEN_API_KEY你的Key注意本地开发时环境变量只在当前终端会话生效。如果你换了终端窗口记得重新 export或者写进.env文件用python-dotenv加载。2.3 理解 config.toml 与 settings.json 的分工MCP 生态里有两类配置文件新手最容易搞混文件作用典型位置config.toml定义 MCP 服务器如何启动、用什么命令、传什么参数客户端如 Claude Desktop的配置目录settings.json定义模型通道、API Key、Base URL 等运行时设置项目根目录或用户配置目录简单说config.toml管「怎么把 MCP 服务器跑起来」settings.json管「跑起来之后调模型走哪个通道」。两者配合才能让 AI 助手既发现你的工具又能通过统一 Key 调用模型。3. 可复制的配置骨架3.1 编写 main.py 暴露 MCP 工具先写一个最小的 FastAPI 应用暴露两个工具一个返回用户信息一个做简单的加法。这样后面验证时能直观看到工具列表。from fastapi import FastAPI from fastapi_mcp import FastApiMCP app FastAPI() app.get(/, operation_idget_user_info) async def read_user(): return {user_id: u_1001, name: local_dev} app.get(/add, operation_idadd_numbers) async def add_numbers(a: int, b: int): return {result: a b} mcp FastApiMCP(app) mcp.mount() if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000)这里的关键点是operation_id。MCP 客户端会用它作为工具名所以起名要语义清晰别用func1、test这种。mcp.mount()默认会把 MCP 端点挂在/mcp路径下。3.2 config.toml 骨架这个文件通常放在 MCP 客户端的配置目录里。以常见的桌面客户端为例结构如下[mcp_servers.fastapi_local] command uv args [run, main.py] cwd /absolute/path/to/fastapi-mcp-quickstart env { TAOTOKEN_API_KEY 你的Key } [mcp_servers.fastapi_local.transport] type http url http://127.0.0.1:8000/mcp几个容易踩坑的地方cwd必须是绝对路径相对路径在某些客户端里会解析失败env里传的 Key 会注入到子进程这样main.py里就能读到transport段声明用 HTTP 方式连接本地 MCP 服务。3.3 settings.json 骨架这个文件放在项目根目录用来统一模型通道{ model_provider: { base_url: https://taotoken.net/api, api_key_env: TAOTOKEN_API_KEY, default_model: claude-sonnet-4-20250514 }, mcp: { server_url: http://127.0.0.1:8000/mcp, timeout_seconds: 30 } }base_url指向 TaoToken 的 API 通道api_key_env告诉程序从哪个环境变量读 Key这样你就不用把 Key 写死在 JSON 里。default_model可以按需替换成你实际要用的模型名。提示如果你用的是 Claude Code 这类编码工具配置方式略有不同可以参考 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 里的接入说明核心思路是一样的Base URL 用https://taotoken.net/apiKey 用同一个。4. 启动服务并验证请求4.1 启动 FastAPI MCP 服务器在项目目录下运行uv run main.py或者用 uvicorn 带热重载uvicorn main:app --host 0.0.0.0 --port 8000 --reload启动成功后你会看到类似Uvicorn running on http://0.0.0.0:8000的输出。此时 MCP 端点位于http://127.0.0.1:8000/mcp。4.2 用 MCP Inspector 验证工具列表打开一个新的终端窗口运行npx modelcontextprotocol/inspector然后在 Inspector 界面里连接地址填http://localhost:8000/mcp导航到 Tools 区域点击 List Tools你应该能看到get_user_info和add_numbers两个工具选中add_numbers填入a3、b5点击 Run Tool返回结果应该是{result: 8}这一步验证的是 MCP 协议层是否通了。如果工具列表为空说明operation_id没生效或者路由没注册上。4.3 用 curl 验证 TaoToken 通道MCP 层通了之后再单独验证模型通道。用 curl 发一个最小请求curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: claude-sonnet-4-20250514, messages: [{role: user, content: ping}], max_tokens: 16 }如果返回里有choices字段和正常的文本内容说明 Key 和 Base URL 都配对了。这一步和 MCP 是解耦的分开验证能快速定位问题出在哪一层。4.4 端到端跑一次工具调用两层都通了之后在支持 MCP 的客户端里把config.toml配好重启客户端。然后对 AI 助手说「帮我调用 add_numbers计算 12 加 30」。正常情况下助手会调用你本地的 FastAPI 工具返回 42。如果你更习惯在对话界面里直接测试模型通道可以打开 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 做一次快速对话验证确认 Key 可用后再回到本地工具链调试。5. 常见报错排查清单5.1 连接被拒绝Connection refused现象Inspector 或客户端提示无法连接http://127.0.0.1:8000/mcp。排查顺序先确认uv run main.py还在前台运行没被 CtrlC 掉再确认端口没被占用用lsof -i :8000查一下最后检查config.toml里的url是不是写成了0.0.0.0客户端连接应该用127.0.0.1或localhost。5.2 工具列表为空现象Inspector 能连上但 List Tools 返回空数组。最常见的原因是路由函数没加operation_id或者加了但mcp.mount()在路由注册之前就执行了。确保mcp FastApiMCP(app)和mcp.mount()放在所有app.get之后。另一个可能是路径冲突MCP 默认挂载在/mcp别让你的业务路由也占用这个前缀。5.3 401 鉴权失败现象curl 请求 TaoToken 返回 401 或invalid api key。先确认环境变量真的导进去了用echo $TAOTOKEN_API_KEY检查再确认请求头格式是Bearer加空格加 Key少个空格也会失败最后检查 Key 有没有被复制时带上换行符用echo -n重新导出一次。5.4 模型名不存在model not found现象请求返回 404 或提示模型不可用。TaoToken 的模型名要和实际支持的列表对齐。如果你不确定当前有哪些模型可用去控制台或文档里查一下别凭记忆写。settings.json里的default_model和 curl 里的model字段必须一致。5.5 MCP 超时现象工具调用卡住最后报 timeout。本地 FastAPI 如果某个路由里有阻塞操作比如同步的数据库查询会拖慢整个 MCP 响应。把耗时逻辑改成异步或者在settings.json里把timeout_seconds调大。另外确认config.toml里的cwd是绝对路径路径不对会导致子进程启动失败表现也是超时。6. 下一步把统一 Key 用在长期编码场景跑通最小请求之后你可能会想把这个模式用到日常编码里。比如让 AI 助手通过 MCP 调用你本地的代码检索工具、测试运行器同时所有模型请求都走 TaoToken 的统一通道。这种长期编码和 Agent 场景用 Coding Plan 会更顺手配置一次就能持续用不用每次手动 export Key。Coding Plan 入口https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite接入文档含 Claude Code 等工具配置https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite如果你在配置过程中遇到工具列表刷不出来、或者 Key 通道报错优先去 API Keys 页面确认 Key 状态再对照接入文档检查 Base URL 有没有多写斜杠。本地开发最怕的就是配置漂移把config.toml和settings.json纳入版本管理换机器时直接复制能省掉大量重复排查的时间。
返回列表