☰
什么是MCP以及如何快速入门使用MCP:用uv+Python搭建Stdio服务并接入TaoToken
2026/9/26 3:24:31 网站建设 项目流程

1. 从一次“工具调用失败”说起:MCP 到底解决什么问题

如果你最近在折腾 LLM 应用,大概率遇到过这种场景:想让模型查一下数据库、算个复杂公式、调一下公司内部接口,结果发现每个模型厂商、每个客户端都有自己的“函数调用”格式,换一个 Host 就得重写一遍适配层。MCP(Model Context Protocol,模型上下文协议)就是冲着这个痛点来的——它把“大模型调用外部工具”这件事标准化了,你可以把它理解成专为 LLM 交互设计的 Web API 规范。

MCP 的核心价值在于统一了大模型调用工具的方法,为【大模型】与【外部数据和工具】的【无缝集成】提供了标准化协议和平台。一个 MCP Server 通常暴露三类能力:Resources 负责把数据加载进模型上下文,类似 GET 端点;Tools 负责执行代码或产生副作用,类似 POST 端点;Prompts 则是可复用的交互模板。Host 是客户端软件(比如 Cursor、Cherry Studio),Server 是各种工具提供的 MCP 接口,每个 Server 对应 Host 里的一个 Client 做一对一通信。

传输机制上,目前主流有三种:Stdio 通过本地进程间通信,客户端以子进程形式启动服务器,双方用 stdin/stdout 交换 JSON-RPC 消息,每条消息以换行符分隔;SSE 基于 HTTP 长连接,需要 /sse 和 /messages 两个端点,正在逐步淘汰;Streamable HTTP 是官方推荐的替代方案,完全基于标准 HTTP,所有消息走 /message 端点,服务器可按需把普通请求升级为 SSE 流。对初次接触的 Python 开发者来说,Stdio 是最容易上手、也最适合本地隐私数据处理的入口,本文就带你用 uv + Python 从零搭一个 Stdio MCP Server,并接入 TaoToken 完成模型侧联调。

2. 前置准备:uv 环境与 TaoToken 统一 Key 通道

在写代码之前,先把两件事准备好:Python 项目环境和模型调用通道。环境这块我强烈建议用 uv,它比 pip + venv 快得多,而且能自动管理 Python 版本和依赖锁定,对 MCP 这种需要频繁试错的场景特别友好。

TaoToken 在这里扮演的角色是“统一 Key / API 通道”。你不需要为每个模型厂商单独申请 Key、单独记 Base URL,而是通过一个统一的 API 入口去调用不同模型,这对 MCP 联调阶段特别省事——Server 写好后,换模型只改一个配置项。你需要先去控制台创建一个 API Key,地址是 https://taotoken.net/api-keys ,创建完记得复制保存,后面配置里要用。API 的基础地址是 https://taotoken.net/api ,注意这个地址不带任何查询参数,直接作为 base_url 使用。

如果你还没注册,可以先从官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 进去了解整体能力。整个前置准备大概五分钟:装 uv、建项目、拿 Key,然后就可以进入编码环节了。

3. 可复制配置:用 uv 初始化项目并编写 Stdio Server

先建目录并初始化。打开终端,执行下面这几条命令,uv 会自动帮你把项目骨架和虚拟环境都准备好:

mkdir myMCPServer && cd myMCPServer uv init . uv add "mcp[cli]"

uv init .会在当前目录生成 pyproject.toml 和基础结构,uv add "mcp[cli]"把 MCP 官方 SDK 加进依赖。生成的 pyproject.toml 大致长这样,你可以直接对照检查:

[project] name = "mymcpserver" version = "0.1.0" description = "A demo MCP server" requires-python = ">=3.10" dependencies = [ "mcp[cli]", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build"

接下来把 main.py 改成我们的 Server 骨架。这里用 FastMCP 是最省心的写法,它把协议细节都封装好了,你只需要关心工具函数本身:

# main.py from mcp.server.fastmcp import FastMCP # 创建 MCP Server 实例,名字会显示在客户端里 mcp = FastMCP("Demo") @mcp.tool() def add(a: int, b: int) -> int: """Add two numbers""" return a + b @mcp.tool() def square(a: int) -> int: """square one numbers""" return a * a # 动态 greeting 资源,通过 greeting://{name} 访问 @mcp.resource("greeting://{name}") def get_greeting(name: str) -> str: """Get a personalized greeting""" return f"Hello, {name}!" if __name__ == "__main__": mcp.run()

注意@mcp.tool()装饰的函数,docstring 会被当作工具描述暴露给模型,所以写清楚一点,模型才知道什么时候该调用它。@mcp.resource则用于把数据以 URI 形式暴露出去,客户端可以按需读取。

4. 启动与验证:mcp dev 调试 + TaoToken 联调请求

启动调试模式前,确认你的 Node 版本满足要求:^20.17.0 || >=22.9.0,因为 MCP Inspector 依赖它。然后运行:

mcp dev main.py

启动成功后终端会打印一个 Inspector 的访问链接,点进去,在 Connection 面板选择 Stdio,确认能连上。连上后你就能在 Tools 标签页看到 add 和 square 两个工具,在 Resources 里看到 greeting 资源。这一步是纯本地验证,不涉及任何模型调用,先把协议层跑通。

协议通了之后,接 TaoToken 做模型侧联调。核心是把 base_url 指向 https://taotoken.net/api ,api_key 用你在控制台创建的那把。下面是一个最小调用示例,用 OpenAI 兼容的 SDK 风格演示:

from openai import OpenAI client = OpenAI( base_url="https://taotoken.net/api", api_key="你的_TaoToken_API_Key", ) resp = client.chat.completions.create( model="claude-sonnet-4-5", messages=[ {"role": "user", "content": "帮我算一下 12 加 30 等于多少"} ], ) print(resp.choices[0].message.content)

如果你用的是支持 MCP 的 Host(比如 Cherry Studio),配置里把 Server 指向你的 main.py 即可,command 填 uv 的绝对路径,args 填["run", "--with", "mcp", "mcp", "run", "/你的路径/myMCPServer/main.py"]。配置成功后,在对话里问“12 加 30 等于多少”,模型会调用 add 工具;问“9 的平方”,会调用 square。但如果你问“2 的立方”,模型不会调用工具,因为我们的 Server 里根本没提供求立方的方法——这恰好验证了工具调用是严格按 Server 暴露的能力来的,不是模型瞎编。

想快速验证模型对话效果,也可以直接用模型对话页面 https://taotoken.net/models 试一下,确认 Key 和通道都正常。

5. 本篇常见报错排查

报错一:mcp: command not found。说明依赖没装进当前环境。确认你在项目目录下执行,并且用uv run mcp dev main.py而不是裸mcp dev main.py,让 uv 从项目环境里找命令。

报错二:Inspector 连不上,Connection 一直转圈。九成是 Node 版本不对。执行node -v检查,低于 20.17 就升级。另外确认 main.py 里mcp.run()没有被其他代码阻塞。

报错三:模型不调用工具。先看工具 docstring 是否清晰,模型靠它判断用途;再看 Host 里 Server 是否显示为已连接、工具列表是否加载出来。如果工具列表是空的,说明 Server 启动就失败了,回到上一步用 Inspector 单独验证。

报错四:TaoToken 调用返回 401。检查 api_key 是否复制完整、有没有多余空格;确认 base_url 是https://taotoken.net/api,不要自己拼/v1之类的后缀。如果还是不行,去控制台重新生成一把 Key 试试。

报错五:Stdio 消息解析失败。多半是你在 stdout 里打印了调试信息。Stdio 模式下 stdout 是协议通道,任何print都会污染 JSON-RPC 消息。调试信息请走 stderr,或者用 logging 写到文件。

6. 下一步:把 MCP 接进你的真实工作流

Server 跑通只是起点。接下来你可以把真实的业务逻辑塞进@mcp.tool()里,比如查内部数据库、调公司 API、做文件处理。模型侧继续走 TaoToken 的统一通道,换模型、加并发都不用改 Server 代码。如果你打算长期做编码类或 Agent 类项目,可以了解一下 Coding Plan https://taotoken.net/coding-plan ,它在长会话和工具调用场景下更省心。接入文档在 https://taotoken.net/doc ,遇到协议细节可以对照查。整个链路的核心就一句话:Server 负责暴露能力,TaoToken 负责统一模型通道,两边解耦,你只管把工具写好。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询