乐于分享
好东西不私藏

5分钟搞懂MCP:AI世界的USB-C接口,附FastMCP源码

5分钟搞懂MCP:AI世界的USB-C接口,附FastMCP源码

5 分钟,让你彻底搞懂 MCP 到底是什么、和 Function Call 有啥区别,还能带走一段能跑的代码。

你有没有这种感觉:ChatGPT、Claude 这些 AI 越来越聪明,但你让它帮你干点实事——查个天气、读个文件、下个订单,它就只会"建议你这样做",然后甩给你一段代码让你自己跑。

AI 长了个超级大脑,却没有手脚。

更扎心的是,就算你硬着头皮给 AI 接工具,也会发现:每个工具的接口都不一样,接一个写一遍代码,接十个写十遍。就像家里电器一堆,遥控器也一堆,找个台都得翻半天。

直到 2024 年 11 月,Anthropic 开源了一个东西,一次性把这些破事全解决了——它叫 MCP

一、MCP 是什么?AI 世界的 USB-C 接口

MCP,全称 Model Context Protocol,模型上下文协议。

名字很唬人,本质就一句话:给 AI 定一个统一的"插头标准"

你可以把它理解成 AI 世界的 USB-C 接口。以前每个电器一种充电线,现在不管是手机、平板还是耳机,一根线全搞定。MCP 干的就是这件事——不管什么工具、什么数据源,只要符合这个标准,AI 拿来就能用,不用再为每个工具单独写对接代码。

在典型的 AI Agent 架构里,大模型是"大脑",外部数据源和工具是"手脚",而 MCP 就是连接大脑和手脚的那套"神经系统"。它规定了一套通用的交互方式,让 AI Agent 能以统一格式请求信息,跨多个工具调用时还能保持上下文记忆,不会断片。

MCP 采用的是 主机-客户端-服务器 三层架构:

  • 主机(Host):就是 AI 应用本身,比如 Claude Desktop、Cursor。它负责管理客户端、控制权限、聚合上下文。
  • 客户端(Client):主机派出的"驻外大使",和服务器一对一通信,负责协议转换和安全校验。
  • 服务器(Server):各个工具的能力提供方,比如天气查询、文件读取、数据库操作,每个都封装成标准模块。

一次完整流程是这样的:服务器把能力"包装"成标准工具 → 主机启动时读取工具清单 → 你给 AI 下指令 → 大模型判断该调哪个工具 → 客户端执行调用 → 拿到结果返回模型继续推理。

整个过程对你来说是无感的,你就像在跟一个正常人聊天,背后 AI 已经在调用各种工具帮你干活了。

二、MCP、Function Call、API 到底啥区别?

这是很多人搞混的地方。先说结论:它们不是取代关系,是上下游协作关系

用一个点外卖的例子,一下就通透了:

1. 你(user):我饿了,想吃比萨,美团饿了么都行2. 你妈(assistant):你上美团点个外卖吧3. 你(tool call):好,我用美团点一个 [一顿操作]4. 你(tool result):点完了

Function Call 是第 2 步——由大模型决定"用哪个工具",它规范化了工具选择的输入输出格式,但并不真的去调用工具。

MCP 是第 3 步——真正调用工具并返回结果的过程,它把这个过程标准化了。

一个负责决策用啥,一个负责执行和返回。一个在模型层,一个在协议层。

那 MCP 和传统 API 又啥关系?很多人觉得它俩对等,其实 MCP 是个更大的概念。API 是某个服务商提供的私有接口,部署在云上、要鉴权、要收费;而 MCP 是一套开放标准,工具开发者按这个标准封装好,发到 npm、pip、Docker Hub 上,别人拿来即用,还能部署在本地电脑上。

形象点说:MCP 是个多功能读卡器,API 是各种接口的存储卡。读卡器给所有存储卡套了一层标准外壳,让任何电脑都能自由读取。

一张表看清三者核心差异:

对比维度
Function Call
传统 API
MCP
提出者
OpenAI
各服务商
Anthropic(开放标准)
本质
模型层能力
私有接口
协议层标准
平台绑定
仅 OpenAI 系
单一服务商
跨平台,模型无关
工具发现
静态定义
手动对接
运行时动态发现
复用性
每个项目重写
各写各的
一次开发,处处可用
部署方式
托管在厂商服务器
云主机
本地或远程都行

一句话:Function Call 决定"用哪个工具",API 是"工具本身",MCP 是"调用工具的统一协议"。

三、上手就跑:用 FastMCP 写一个天气查询服务

概念讲完了,来点能跑的代码。

Python 里写 MCP 服务器很便捷的方式,是用官方 SDK 内置的 FastMCP。你写一个普通的 Python 函数,加上装饰器,框架自动帮你生成参数校验、JSON Schema 和工具描述——不用手写一行协议代码。

先装依赖:

pip install "mcp[cli]"

然后新建一个 weather_server.py

from mcp.server.fastmcp import FastMCP# 1. 创建 MCP 服务器,名字会显示在客户端工具列表里mcp = FastMCP("Weather Service")# 2. 用 @mcp.tool() 把普通函数变成 AI 可调用的工具@mcp.tool()defget_weather(city: str) -> str:"""获取指定城市的天气信息。    参数:        city: 城市名称,如"北京""上海"    """# 这里用模拟数据演示,实际可对接真实天气 API    weather_data = {"北京""晴,25°C,湿度 40%,北风 3 级","上海""多云,28°C,湿度 65%,东南风 2 级","深圳""雷阵雨,30°C,湿度 80%,南风 4 级","广州""阵雨,29°C,湿度 75%,东南风 3 级",    }return weather_data.get(city, f"暂未收录 {city} 的天气数据")# 3. 暴露一个只读资源(Resource),AI 可主动读取@mcp.resource("config://api-info")defget_config() -> str:"""返回服务配置信息(只读)"""return"Weather Service v1.0 | 数据源: 模拟数据 | 更新频率: 实时"# 4. 启动服务器,默认使用 stdio 传输(本地进程通信)if __name__ == "__main__":    mcp.run()

就这二十来行代码,你已经拥有一个完整的 MCP 服务器了。

几个关键点说一下:

函数的文档字符串(docstring)会变成工具描述,模型就是靠这段话判断"该不该调这个工具"的,所以要写得清楚。类型标注(city: str)会自动转成参数 Schema,FastMCP 帮你生成校验规则,传错类型直接报错。@mcp.resource() 暴露的是只读资源,适合放配置、文档这类 AI 需要查阅但不修改的信息。

服务器写好了,光它能跑还不算完,真正有意思的是写个客户端去连它。MCP 客户端同样几行代码就能搞定——它会自动拉起服务器、发现工具、调用工具,整个过程一气呵成:

import asynciofrom mcp import ClientSession, StdioServerParametersfrom mcp.client.stdio import stdio_clientasyncdefmain():# 1. 配置如何启动 MCP 服务器(就是上面写的 weather_server.py)    server_params = StdioServerParameters(        command="python",        args=["weather_server.py"],    )# 2. 启动服务器并建立会话asyncwith stdio_client(server_params) as (read, write):asyncwith ClientSession(read, write) as session:# 3. 初始化握手await session.initialize()# 4. 动态发现服务器提供了哪些工具            tools = await session.list_tools()print("可用工具:", [t.name for t in tools.tools])# 5. 调用天气查询工具            result = await session.call_tool("get_weather", {"city""北京"})print("查询结果:", result.content[0].text)asyncio.run(main())

运行这段代码,你会看到客户端自动拉起服务器、列出工具清单,再调用 get_weather 拿到结果。注意第 4 步——工具是运行时动态发现的,客户端代码里并没有写死"有 get_weather 这个工具",它是连上服务器之后现问出来的。这正是前面对比表里 MCP 区别于 Function Call 的关键:动态发现、即插即用。

整个过程你不用手写任何连接协议,MCP 在背后把握手、发现、调用、传参全包了。

这就是 MCP 特别迷人的地方:服务端只管写业务逻辑,客户端只管调用,连接的事协议帮你搞定

四、为什么现在就该关注 MCP?

技术圈有句话:MCP 正在走 REST API 十年前走过的路——从一个技术标准,快速变成 AI 连接世界的默认方式。

官方维护着一批参考服务器,社区开源的服务器已经上千个,覆盖数据库、GitHub、Slack、文件系统各种场景。VS Code、JetBrains 这些 IDE 也在加原生支持,企业开始把内部 MCP 服务器库当基础设施建。

说白了,以后给 AI 加能力,会像今天装 App 一样简单——找一个现成的 MCP 服务器,配置一下,即插即用。

对开发者来说,现在搞懂 MCP,就是提前拿到 AI 时代的"接口开发入场券"。


核心观点:MCP 不取代 Function Call,而是把"调用工具"这件事标准化、模块化、可复用——一次开发处处可用,就像 USB-C 统一了充电口,FastMCP 让你二十行代码就能跑起一个 AI 可调用的服务。

你们公司或项目里,有没有那种"每个 AI 应用都得重写一遍对接"的工具?欢迎评论区聊聊,看看 MCP 能不能帮你省掉这部分重复劳动。