ARTICLE DETAIL

资讯详情

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

MCP(Model Context Protocol)完全指南:从入门到精通,搭建自己的MCP Server 并接入 TaoToken 统一 Key

MCP(Model Context Protocol)完全指南:从入门到精通,搭建自己的MCP Server 并接入 TaoToken 统一 Key 1. 为什么我要自己写一个 MCP ServerMCPModel Context Protocol模型上下文协议是 Anthropic 在 2024 年底推出的开放标准它做的事情说白了就一件把「AI 调用外部工具」这件事标准化。你可以把它理解成 AI 世界的 USB-C 接口——以前每个 AI 想连数据库、连 GitHub、连文件系统都得写一套专属适配代码换个模型全部重来有了 MCP你写一次 Server任何支持该协议的客户端都能直接调用。这篇面向的是想从零自建 MCP Server 的开发者。我会用一个「本地时间 汇率查询」的小 Server 做例子把 Python 版 Server 从建目录到跑通讲完然后重点落在很多人卡住的一步怎么让这个 Server 背后的模型调用走 TaoToken 的统一 Key/API 通道而不是每个客户端各配一份 Key。全程给你可复制的config.toml、settings.json骨架以及 CC Switch、Cline 的配置片段最后附上启动验证和几个我踩过的报错。适合谁会一点 Python、用过 Cline 或 Claude Code 这类客户端、想让自己的工具链统一管理模型 Key 的人。不需要你懂协议底层跟着敲就行。2. 前置准备TaoToken 统一 Key 与 MCP 的关系先把一个容易混淆的点讲清楚MCP Server 本身不负责调用大模型。它只负责「暴露工具」真正决定用哪个模型、走哪个 API 的是客户端Cline、Claude Code、CC Switch 这些。所以「接入 TaoToken 统一 Key」这件事发生在客户端配置层而不是 Server 代码里。TaoToken 在这里扮演的角色是统一入口你只需要在它那边拿一个 Key然后在各个客户端里把 base_url 指向同一个 API 地址就不用为 Cline 配一份、为 Claude Code 再配一份。官网在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 端点是 https://taotoken.net/api 这个不加 UTM配置里直接写。你需要提前准备两样东西一个 TaoToken 的 API Key在控制台的 API Keys 页面创建地址是 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite本地 Python 3.10 以上环境python3 --version确认一下注意Key 只创建一次就够后面所有客户端共用它。别把 Key 硬编码进 Server 源码客户端配置里引用环境变量更安全。3. 从零搭建一个可运行的 MCP Server3.1 建目录与装依赖我习惯把 Server 单独放一个目录虚拟环境隔离避免和系统 Python 打架。mkdir time-fx-mcp cd time-fx-mcp python3 -m venv venv source venv/bin/activate # Windows 用 venv\Scripts\activate pip install mcp[server] httpx pydantic装完确认一下mcp命令在不在python -c import mcp; print(mcp.__version__)能打印版本号就对了。3.2 写工具逻辑我拆成两个文件tools.py放具体逻辑server.py做注册入口。先写tools.py# tools.py import httpx from datetime import datetime, timezone, timedelta from pydantic import BaseModel, Field class FxInput(BaseModel): base: str Field(..., min_length3, max_length3, description基准货币如 USD) quote: str Field(..., min_length3, max_length3, description目标货币如 CNY) async def get_local_time(tz_offset: int 8) - str: tz timezone(timedelta(hourstz_offset)) return datetime.now(tz).strftime(%Y-%m-%d %H:%M:%S) async def get_fx_rate(params: FxInput) - str: url fhttps://api.exchangerate.host/latest?base{params.base}symbols{params.quote} async with httpx.AsyncClient(timeout10.0) as client: try: r await client.get(url) r.raise_for_status() data r.json() rate data[rates].get(params.quote) if rate is None: return f未找到 {params.base} 到 {params.quote} 的汇率 return f1 {params.base} {rate} {params.quote} except httpx.TimeoutException: return 汇率接口超时请稍后重试 except Exception as e: return f查询失败{type(e).__name__}3.3 注册到 Server 入口server.py用 FastMCP 把上面两个函数注册成工具# server.py from mcp.server.fastmcp import FastMCP from tools import get_local_time, get_fx_rate, FxInput mcp FastMCP(time_fx_mcp) mcp.tool(nameget_local_time, annotations{title: 获取本地时间, readOnlyHint: True}) async def tool_time(tz_offset: int 8) - str: 返回指定时区偏移的当前时间默认东八区。 return await get_local_time(tz_offset) mcp.tool(nameget_fx_rate, annotations{title: 查询汇率, readOnlyHint: True}) async def tool_fx(params: FxInput) - str: 查询两种货币之间的实时汇率参数为三字母货币代码。 return await get_fx_rate(params) if __name__ __main__: mcp.run()跑一下python server.py如果没报错、进程挂起等待输入说明 stdio 模式启动正常。想可视化调试就装 Inspectornpx modelcontextprotocol/inspector python server.py浏览器里能手动点工具看返回。4. 把 Server 接入 TaoToken 统一 Key这一步是全文重点。MCP Server 跑起来了但客户端还不知道怎么调它也不知道模型请求该发去哪。下面按客户端分别给配置。4.1 通用 config.toml 骨架如果你用的是支持 TOML 配置的客户端比如某些 CLI 工具骨架长这样[model] provider taotoken base_url https://taotoken.net/api api_key ${TAOTOKEN_API_KEY} model claude-sonnet-4-5 [mcp_servers.time_fx] command python args [/绝对路径/time-fx-mcp/server.py] env { PYTHONUNBUFFERED 1 }关键点base_url写https://taotoken.net/apiapi_key用环境变量引用别写死。args里必须是绝对路径相对路径在客户端拉起子进程时经常找不到文件。4.2 Cline 的 settings.json 片段Cline 走的是 JSON 配置在 MCP 设置里加{ mcpServers: { time_fx: { command: python, args: [/绝对路径/time-fx-mcp/server.py], env: { PYTHONUNBUFFERED: 1 } } } }模型侧在 Cline 的 API Provider 里选 OpenAI CompatibleBase URL 填https://taotoken.net/apiAPI Key 填你的 TaoToken Key模型名按控制台里可用的填。这样 Cline 的对话请求和 MCP 工具调用就都走统一通道了。4.3 CC Switch 配置片段CC Switch 用来在多个配置间切换它的配置本质也是指向同一套 base_url 和 Key。加一个 profile{ name: taotoken-unified, base_url: https://taotoken.net/api, api_key_env: TAOTOKEN_API_KEY, mcp: { time_fx: { command: python, args: [/绝对路径/time-fx-mcp/server.py] } } }切到这个 profile客户端就会用 TaoToken 的通道同时挂载你的本地 MCP Server。想长期跑编码和 Agent 任务的话可以了解下 Coding Plan地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。5. 验证请求与成功结果配置完别急着用先做三步验证。第一步确认环境变量生效。在终端echo $TAOTOKEN_API_KEY能打印出 Key 就对了。Windows 用echo %TAOTOKEN_API_KEY%。第二步单独测模型通道。用 curl 打一下curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d {model:claude-sonnet-4-5,messages:[{role:user,content:ping}]}返回里带choices字段就说明 Key 和 base_url 都对。想直接在网页里试模型可以用模型对话页面 https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 。第三步在客户端里问一句「现在东八区几点」如果 AI 调用了get_local_time并返回时间整条链路就通了。成功时你会看到工具调用记录里出现time_fx这个 Server 名以及工具返回的字符串。6. 本篇常见报错排查报错一ModuleNotFoundError: No module named mcp客户端拉起 Server 时用的 Python 不是你装依赖的那个。解决args里把python换成虚拟环境的绝对路径比如/绝对路径/time-fx-mcp/venv/bin/python。报错二spawn python ENOENT系统 PATH 里没有 python 命令或者客户端找不到。同样换成绝对路径Windows 下写venv\\Scripts\\python.exe。报错三工具列表为空Server 启动了但工具没注册上。检查mcp.tool装饰器是否在mcp.run()之前执行以及函数是不是 async。同步函数在某些版本里不会被正确识别。报错四模型请求 401Key 没读到或写错了。确认环境变量名和配置里引用的一致注意别把https://taotoken.net/api写成带/v1的重复路径。接入细节可以对照接入文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。报错五汇率工具返回超时外部汇率接口不稳定属于正常现象。把timeout调到 15 秒或者在工具里加一层缓存别每次调用都打真实接口。7. 下一步怎么走Server 跑通之后你可以把tools.py里的逻辑换成任何内部 API——查工单、读配置、发通知都行注册方式完全一样。真正省事的地方在于所有客户端共用同一个 TaoToken Key你新增一个 MCP Server只需要在配置里加一段mcpServers模型通道不用再动。Claude Code 这类工具如果走 Anthropic 兼容协议配置方式略有不同可以参考 https://taotoken.net/claudecode-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecode_anthropicutm_campaignrewrite 里的说明。先把今天这个时间汇率 Server 跑顺再往上叠你自己的业务工具是最稳的路径。
返回列表