新闻详情

新闻详情

首页 / 资讯中心 / 详情

MCP协议概要与FastMCP示例:用TaoToken统一Key跑通第一个MCP Server

发布时间:2026/9/29 20:13:49来源:尧图网络
MCP协议概要与FastMCP示例:用TaoToken统一Key跑通第一个MCP Server
1. 从一次工具调用失败说起MCP 协议到底解决什么问题如果你最近在折腾大模型应用大概率听过 MCP 协议这个词。MCP 全称 Model Context Protocol是一套让大模型与外部工具、数据源对话的标准化协议。你可以把它理解成「AI 世界的 USB-C 接口」以前每接一个工具就要写一套胶水代码现在只要工具端实现了 MCP Server任何支持 MCP 的客户端都能直接调用不用为每个模型单独适配。它主要解决三件事第一工具描述标准化模型能自动读懂你的函数签名和注释第二调用过程标准化请求、响应、错误都有固定结构第三能力发现标准化客户端可以动态列出服务端有哪些工具、资源和提示词。适合谁适合想把本地脚本、内部 API、数据库查询封装成「模型可调用能力」的开发者也适合做 Agent 编排、IDE 插件、自动化工作流的人。FastMCP 是 Python 生态里上手最快的 MCP SDK目前已经迭代到 2.xAPI 变化较快网上不少教程还停留在旧版本照着抄经常报错。这篇就带你从零跑通一个最小 MCP Server并且用 TaoToken 的统一 Key 和 API 通道把模型调用这一环接上避免你在多个厂商 Key 之间来回切换。2. TaoToken 前置准备统一 Key 与 API 通道在写 Server 之前先把模型调用这条链路准备好。MCP Server 本身只负责暴露工具真正要「用模型」的时候还是得有一个稳定的 API 入口。TaoToken 的价值就在这里它提供统一的 Key 和统一的 API 通道你不需要为不同模型分别申请、分别配置一个 Key 就能在多个模型之间切换。你需要做两件事。第一去官网注册并拿到 API Key地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册后在控制台创建 Key。第二记住 API 基础地址是 https://taotoken.net/api 注意这个地址不带任何查询参数配置时直接填这个即可。创建 Key 的入口在控制台的 API Keys 页面https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。拿到 Key 之后先别急着写代码建议先去模型对话页面确认通道可用https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 。这一步能帮你排除「Key 没生效」这类低级问题省得后面在 MCP 里排查半天。注意Key 属于敏感信息不要硬编码进提交到 Git 的代码里建议用环境变量或.env文件管理。3. 可复制配置FastMCP Server 骨架与 TaoToken 接入先说环境。FastMCP 需要 Python 3.10 以上我用的是 3.12。如果你系统自带的 Python 版本太低可以用 pyenv 装一个高版本命令如下# 安装编译依赖Debian/Ubuntu 系 sudo apt install -y build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev curl libncursesw5-dev \ xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev # 安装 pyenv curl https://pyenv.run | bash # 按提示把环境变量写入 ~/.bashrc然后 source 生效 pyenv install 3.12 pyenv global 3.12装好 Python 后创建虚拟环境并安装依赖python -m venv venv source venv/bin/activate pip install fastmcp openai python-dotenvMCP 协议里有三种核心组件理解它们是用好 FastMCP 的关键。Tools 是模型可以主动调用的函数比如查天气、算数Resources 是模型可以读取的数据比如配置文件、文档内容Prompts 是预置的提示模板用来引导模型按固定格式回答。下面这个server.py把三种组件都覆盖了# server.py import os from dotenv import load_dotenv from fastmcp import FastMCP from openai import OpenAI load_dotenv() mcp FastMCP(My MCP Server) # 用 TaoToken 统一通道初始化模型客户端 llm OpenAI( api_keyos.getenv(TAOTOKEN_API_KEY), base_urlhttps://taotoken.net/api, ) mcp.tool def greet(name: str) - str: Send hello to my friend. return fHello, {name}! mcp.tool def add(a: int, b: int) - int: Add two integer numbers together. return a b mcp.tool def ask_llm(question: str) - str: Ask the LLM a question through TaoToken unified API. resp llm.chat.completions.create( modelgpt-4o-mini, messages[{role: user, content: question}], ) return resp.choices[0].message.content mcp.resource(resource://greeting) def get_greeting() - str: Provides a simple greeting message. return Hello from FastMCP Resources! mcp.resource(data://config) def get_config() - dict: Provides application configuration as JSON. return { theme: dark, version: 1.2.0, features: [tools, resources], } mcp.prompt def ask_about_topic(topic: str) - str: Generates a user message asking for an explanation of a topic. return fCan you please explain the concept of {topic}? if __name__ __main__: mcp.run(transporthttp, port8000)配套的.env文件只放一行TAOTOKEN_API_KEY你的Key这里有个细节值得说ask_llm这个工具把模型调用也封装成了 MCP 工具意味着客户端调用它时请求会经由 TaoToken 的统一通道转发到模型。这样你换模型只需要改model字段不用动 Key 和 base_url。4. 验证请求启动 Server 并跑通工具调用先启动服务端python server.py看到监听 8000 端口的日志就说明起来了。接着写客户端client.py# client.py import asyncio from fastmcp import Client client Client(http://localhost:8000/mcp) async def main(): async with client: await client.ping() tools await client.list_tools() resources await client.list_resources() prompts await client.list_prompts() result await client.call_tool(greet, {name: BaBa}) print(result) result await client.call_tool(add, {a: 3, b: 5}) print(result) result await client.call_tool(ask_llm, {question: 用一句话解释MCP协议}) print(result) content await client.read_resource(resource://greeting) print(content[0].text) messages await client.get_prompt(ask_about_topic, {topic: Python}) print(messages.messages) asyncio.run(main())运行python client.py预期输出里greet会返回Hello, BaBa!add返回8ask_llm返回模型生成的一句话解释资源读取返回Hello from FastMCP Resources!提示词渲染返回一条 role 为 user 的消息。如果你看到CallToolResult里is_errorFalse说明工具调用成功。list_tools的输出会包含每个工具的inputSchema这就是模型能自动理解参数的原因。5. 本篇常见错排查报错一ModuleNotFoundError: No module named fastmcp。多半是虚拟环境没激活或者 pip 装到了系统 Python。确认which python指向 venv 目录再重装。报错二连接http://localhost:8000/mcp被拒绝。检查 server 是否真的在跑以及mcp.run里的 port 和客户端地址是否一致。FastMCP 2.x 的 HTTP transport 路径默认带/mcp漏掉会 404。报错三ask_llm返回 401 或鉴权失败。这是 TaoToken Key 没读到。确认.env文件名正确、load_dotenv()在读取环境变量之前调用并且 Key 没有多余空格。可以先用模型对话页面验证 Key 本身可用。报错四工具描述为空模型不知道何时调用。FastMCP 靠函数 docstring 生成工具描述如果你把 docstring 删了模型就失去了判断依据。每个mcp.tool下面都保留一句清晰的说明。报错五Python 版本低于 3.10 导致语法错误。FastMCP 2.x 用到了新语法str | None这种写法在 3.9 会直接报错。用python --version确认版本。6. 下一步把 MCP 接进你的编码工作流跑通最小示例只是起点。真正提效的场景是把 MCP Server 接到日常编码和 Agent 流程里让模型能直接调用你的内部工具。如果你打算长期做编码类 Agent建议了解一下 Coding Plan它更适合持续性的开发任务https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。接入过程中遇到鉴权、通道配置问题可以对照接入文档排查https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。需要管理多个 Key 或查看用量控制台入口在这里https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。我自己的习惯是先把工具函数写清楚 docstring再考虑模型怎么调顺序反了会反复改描述。另外 FastMCP 迭代快遇到和教程对不上的 API优先看官方文档而不是博客能少走很多弯路。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

OpenHarmony下I2C排障实战:从示波器到设备树的五级调试法 2026/9/29 20:56:08

OpenHarmony下I2C排障实战:从示波器到设备树的五级调试法

1. I2C不是“接上线就能通”的黑盒子——OpenHarmony下必须重拾硬件思维I2C总线在OpenHarmony开发中,常被当成一个“配置好地址、调用read/write API就完事”的软件接口。但现实是:你写的驱动跑不通,设备树加载失败,i2c-tools扫不…

阅读更多 →
嵌入式分享#49:浅析8080,RGB,LVDS与MIPI显示接口 2026/9/29 20:56:08

嵌入式分享#49:浅析8080,RGB,LVDS与MIPI显示接口

嵌入式分享#49:浅析 8080、RGB、LVDS 与 MIPI 显示接口本文从接口定义、优缺点和传输信号类型三个维度,对常见嵌入式显示接口做一份工程化对比。一、显示系统的三个核心要素 嵌入式显示系统通常由三部分组成: Framebuffer:保存像素…

阅读更多 →
汽车电子软件面试必备:UDS诊断、OTA升级与CAN通信七大模块解析 2026/9/29 20:56:07

汽车电子软件面试必备:UDS诊断、OTA升级与CAN通信七大模块解析

开头引导手里攒了不少面试必问的素材,这是第三篇。上一篇聊完整体岗位画像,这一篇直接上硬货——把汽车电子软件开发岗最常考的UDS诊断、OTA升级、CAN通信等 7 大模块一次性理清楚。不管你是准备校招、社招,还是想系统梳理一遍自己的知识体系…

阅读更多 →
20260928每日一问:参数化建模和非参数化建模区别? 2026/9/29 20:56:07

20260928每日一问:参数化建模和非参数化建模区别?

“参数化建模”和“非参数化建模”是两种基础且截然不同的建模思路,其核心区别在于模型元素之间是否存在关联和依赖关系。这个概念在计算机辅助设计(CAD) 和统计学中都有应用,但具体含义不同。🎨 在CAD/3D建模领域在CA…

阅读更多 →
博客1_九个坑实录 2026/9/29 20:56:07

博客1_九个坑实录

手写 FASTA 解析器踩了 9 个坑:从 0 条记录到 3 条的完整调试实录本文是《手写 FASTA 解析器》系列第 1 篇我是生信方向研一新手,Python 零基础起步,研究方向是小鼠 VNTR(可变数目串联重复)变异分析。 为了搞懂序列文件是怎么被读进程序的,我从零手写了一个 FASTA 解析器 —— …

阅读更多 →
OpenHands 配 TaoToken:统一 Key 接入自动执行命令与网页浏览的 AI 编程工具 2026/9/29 20:55:48

OpenHands 配 TaoToken:统一 Key 接入自动执行命令与网页浏览的 AI 编程工具

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉