如果你只把大模型当成一个聊天框,你可能很长一段时间都用不到 MCP。可一旦你开始正儿经地做 AI Agent,想让 AI 去查数据库、发邮件、操作浏览器、改设计稿,问题就会立刻冒出来:模型再聪明,也只是一张会说话的嘴,没有“手”去触碰你的系统。MCP(Model Context Protocol,模型上下文协议),就是这个链条上最关键的“接口层”,它解决的是:AI 如何以统一、安全、至少不被厂商锁死的方式,接进真实世界里的工具和数据源。
这篇文章我打算从一个做 AI 应用开发者的视角,把 MCP 的来龙去脉、协议架构、极简落地方案以及落地过程中容易踩的坑讲透。不管你是后端工程师、前端开发者、产品经理,还是自己做 Agent 项目的独立开发者,看完之后应该都能明确一件事:MCP 不是一个新编程语言,不是一个 API 网关,它是 AI 时代的“USB-C”,一个让模型和能力服务进行标准连接的通用的外部世界接口。
1. MCP 解决的是 Agent“伸手够不到”的问题
1.1 大模型的短板不是智商,是行动能力
这两年大模型进步非常快,推理能力越来越强。但实践中你会发现,模型的知识和推理只是“上半身功夫”,真正的业务落地,需要的是执行能力。
举一个很常见的例子:用户问 AI“帮我查一下这个订单现在到哪了”。如果只是模型自己回答,它要么凭训练数据瞎编,要么干脆告诉你“我没有实时数据”。哪怕你给模型再牛的推理能力,只要它不能触达订单系统的接口,这个问题就永远是无解的。
所以从很早期开始,大家就意识到:要让 AI 真正“干活”,就必须给它接口。你提供搜索接口,它就能查资料;提供数据库查询,它就能读数据;提供待办事项的创建接口,它才能帮你加一条日程。这也是 2023 年以来 Function Calling、插件系统、AI Agent 框架们一直在做的事情。
但问题恰恰出在这里——接口该怎么给?
1.2 接口越来越多,Agent 的集成成本开始失控
我最早做 Agent 的时候,第一个版本很简单:模型调用一个函数,比如get_weather(city)。我用 FastAPI 写一个 HTTP 接口,然后在提示词里把函数定义告诉模型,模型决定何时调用,我再去调接口拿结果。当时觉得还行,只有一两个功能。
等到功能变多,需要接订票系统、内部知识库、CRM、企业微信、财务系统的时候,麻烦就来了:
- 每家系统的鉴权方式不一样,有的走 Token,有的走签名,有的还要先申请临时票据。
- 参数格式五花八门,同一个“用户 ID”,在 A 系统叫
user_id,在 B 系统叫uid。 - 每个后端 API 的字段命名、错误码、分页规则都不一样,模型经常在调用时理解错。
- 更麻烦的是,你换一个模型厂商,可能它的 Function Calling 格式、工具描述规范又变了。
这意味着什么?意味着你把工具接给 AI 的适配工作,必须为每一家模型、每一个能力分别写一遍。Agent 的智能程度还没成为瓶颈,接接口的连接器和胶水代码先把人淹没了。
MCP 就是在这样的背景下出现的。它不是一个具体业务接口,而是一个“关于如何定义和调用接口”的协议。你可以把它理解成:过去每个外部系统都需要一根专用电源线,现在大家约好都用同一个标准插座,设备自己带一根标准插头,插上就能通电。
1.3 MCP 定义出来的“统一插座”长什么样
MCP 的官方定义很拗口,但我用人话解释就是:它把 AI 应用程序(Host)和外部工具/数据源(Server)之间的通信方式标准化了。
协议层面,它规定了:
- 服务端如何向客户端暴露自己有哪些“工具”或“资源”。
- 客户端如何发起调用,服务端如何回传结果。
- 两端如何进行能力协商,比如是否支持资源订阅、是否允许服务端反向采样。
- 使用 JSON-RPC 2.0 作为消息格式,传输层可以是本地 stdio,也可以是远程的 Streamable HTTP。
这些规则在 Anthropic 于 2024 年底开源之后,很快被大量开发者和企业接受。到 2025 年,它已经不只是某一个模型厂商的私有协议,而是一个跨厂商的事实标准。Claude、Cursor、各种 IDE、企业自研 Agent 平台,都在原生支持 MCP。
所以在今天的语境下,你已经不需要再把“给 AI 接工具”做成每个业务一套了。你可以把一个能力写成 MCP Server,然后这个 Server 能被任何支持 MCP 的 AI 应用直接使用。这就是“给 AI 接外部世界的通用接口”真正想表达的意思。
2. MCP 架构里的三种角色和三类能力
2.1 三个角色:Host、Client、Server,别把名字搞混
我第一次看 MCP 文档时,最大的困惑是 Host、Client、Server 三个词到底谁是谁。这里关键一点是:这里的 Client 不是说你的前端应用,而是指“MCP 客户端”,它作为协议会话的一方,代表宿主应用去连 MCP Server。
你可以想象一下 USB 设备的连接场景:
- Host(宿主)是你的电脑,也就是真正运行 AI 交互界面的应用,比如 Claude Desktop、Cursor、你自研的 Agent 服务。
- MCP Server 是外设,比如“天气服务”“设计稿读取工具”“数据库查询工具”,它们各自对外提供服务。
- MCP Client 是电脑主板上的 USB 控制器,每个 Server 连接进来时,Host 会为它创建一个对应的 Client 会话,负责握手、请求转发、响应解析。
一个 Host 可以同时连接多个 MCP Server,一个 MCP Server 也可以被多个 Host 连接。Server 与 Server 之间不直接通信,它们只通过各自的 Client 与 Host 交流。这套架构最大的好处是解耦:业务能力不需要关心上层的 Agent 是谁,Agent 也不需要关心能力背后的实现细节。
实际开发里,如果你用官方 Python SDK 或者 TypeScript SDK,往往不需要自己写 Client 的底层逻辑。你只需要写一个普通的 MCP Server,然后所有支持 MCP 的宿主应用会自动帮你完成 Client 部分的协商。
2.2 三个能力:Tools、Resources、Prompts
MCP Server 对外能暴露的能力被分成了三类,这个划分很重要,因为它能帮你决定“某个功能应该做成 Tools 还是 Resources”。
第一类是Tools(工具)。这是大多数人最熟悉的,本质上是可执行的函数。模型认为需要干某件事时,会通过宿主发起“调用工具”的请求。Server 执行完把结果返回给模型。典型例子:查询天气、提交订单、调用第三方 API、执行一段 SQL。Tools 是带副作用的操作,也适合做计算型、检索型的操作。
第二类是Resources(资源)。它更像向模型提供上下文数据,而不是让模型主动执行什么动作。每个 Resource 有 URI,客户端可以读取。典型例子:本地文件的文本内容、某个配置文件的 JSON、数据库里某张表的最新结构。Resources 解决的问题是“模型看不到你本地的数据”。当你希望模型理解某个文件的上下文,与其把内容硬塞进提示词,不如用 Resource 暴露出来,让客户端按需读取。
第三类是Prompts(提示词模板)。它有点像服务端定义的“标准化工作流模板”。比如你写了一个“生成产品需求文档”的 Prompt,用户可以直接选中调用,模型会按照模板一步步补全内容。这个能力在服务端预置,能让不同用户获得一致的使用体验。
这三类能力经常被一起使用。举一个我实际做过的例子:我写过一个代码评审 MCP Server,它用一个 Resource 暴露了 Git 仓库当前分支的改动文件列表,用一个 Tool 执行git diff并获取具体代码差异,再用一个 Prompt 定义了“请结合我的项目规范做代码评审”的模板。模型收到模板后,会调用 Resource 和 Tool,最终给出评审结论。这个结构清晰得让人舒服。
2.3 一次完整的 MCP 调用,消息是怎么走的
为了帮助后面调试,我建议你先脑内跑一遍完整链路。
假设我在 Claude Desktop 里打开了天气 MCP Server。Claude Desktop 是 Host,它会通过自身的 MCP Client 和这个 Server 建立连接。刚连接时,客户端和服务端会做一次初始化握手,互相确认协议版本,以及各自支持哪些能力。之后,客户端向服务端发送tools/list,拿到所有可用工具的 JSON Schema 描述。
接下来,用户对模型说“北京今天多少度”。模型根据对话上下文和自己的指令,判断需要调用get_weather这个工具,就返回一个工具调用请求。Host 收到后,把请求翻译成 MCP 的tools/call消息,发给对应的 MCP Server。Server 执行函数,把温度、天气结果作为 JSON 返回。Host 再把结果包装成一条消息继续交给模型,模型基于结果组织语言,生成最终回答。
你发现没有,这个流程和传统 API 调用很像,最大的不同在于“谁来决定调用哪一个接口”。传统后端是前端代码写死了GET /weather?city=beijing,而 MCP 的调用决策权大量交给了模型。因此,工具的描述质量、参数的语义、返回值的精简程度,都会直接影响模型能不能正确使用。这一点后面在避坑部分我还要展开。
3. 一个可以当模板的天气 MCP Server 极简实现
3.1 为什么拿天气做 Demo
理论讲再多,不如亲手跑一个。选天气作为第一个 MCP Server 有三个好处:第一,天气是典型的“实时外部数据”,模型无法凭记忆回答,你必须接真实服务;第二,不需要申请 API Key,全世界有很多免费天气接口可用;第三,它足够小,代码量不会超过 50 行,能让你专注理解 MCP 机制而不是业务复杂度。
下面我用 Python 官方 SDK,写一个通过wttr.in免费接口查询天气的 MCP Server。这套写法同样适用于查汇率、查股票、查快递等任意“调用外部 HTTP 服务”的场景。
3.2 环境准备与项目结构
首先要有一个 Python 3.10 以上的环境。我建议每个 MCP Server 都单独建虚拟环境,避免污染全局环境。
mkdir weather-mcp cd weather-mcp python -m venv .venv source .venv/bin/activate pip install "mcp[cli]" httpx注意,安装的是官方mcp包,[cli]是为了拿到mcp命令行工具,后面调试时会用到。httpx只是负责发 HTTP 请求,如果你公司内部已经习惯用requests,换成它也可以。
项目里只需要一个server.py文件就够了,不需要额外搭 web 框架。因为 MCP Server 在本地运行时,默认通过标准输入/输出(stdio)和客户端通信,不需要监听端口。这个设计对本地体验非常友好,你不需要关心端口冲突、CORS 这类问题。
3.3 核心代码:用 FastMCP 暴露一个工具
官方 SDK 里提供了一个高层封装叫 FastMCP,语法非常接近 FastAPI,写起来很顺手。下面是完整代码:
from mcp.server.fastmcp import FastMCP import httpx mcp = FastMCP("weather-server") @mcp.tool() def get_weather(city: str) -> dict: """查询指定城市的当前天气,返回温度、体感温度和天气描述。城市可以是中文名或拼音。""" try: url = f"https://wttr.in/{city}?format=j1" resp = httpx.get(url, timeout=10) resp.raise_for_status() data = resp.json() current = data["current_condition"][0] return { "city": city, "temp_c": current["temp_C"], "feels_like_c": current["FeelsLikeC"], "weather_desc": current["weatherDesc"][0]["value"], "humidity": current["humidity"], "wind_kmph": current["windspeedKmph"], } except Exception as e: return {"error": str(e)} if __name__ == "__main__": mcp.run(transport="stdio")这段代码里最容易被忽略、也最关键的是函数的docstring。在 MCP 体系里,docstring 会被传递并告知模型:这个工具是干什么的、参数应该怎么填。你写“查询指定城市的当前天气,返回温度、体感温度和天气描述。城市可以是中文名或拼音。”,比你写“weather”要有效得多。我见过太多人栽在这个细节上,模型并不是万能的,它完全依赖这些描述来理解工具用途。
在if __name__ == "__main__"里调用mcp.run(transport="stdio"),程序就会以 stdio 模式运行,宿主应用通过子进程启动这个 Python 脚本并与之通信。
你可能会问,能不能让它作为 HTTP 服务跑在服务器上?可以,transport参数可以换成http或sse。但本地开发阶段用 stdio 是最省事的,也是绝大多数桌面 Agent 默认支持的方式。真正部署到线上时,再把它改成 HTTP 或者 Streamable HTTP 也不迟。
3.4 本地调试:用 MCP Inspector 验证工具
写代码容易,验证难。你不能像调试普通脚本那样直接运行python server.py,因为服务端一直在等待 stdin 上的协议消息,直接跑会卡住。这时候需要用官方提供的调试工具 MCP Inspector。
mcp dev server.py执行完这个命令,终端会输出一个本地地址,通常会自动打开一个浏览器面板。面板里能看到:
- Server 的基本信息和连接状态。
Tools列表,你写的get_weather会出现在这里。- 一个手动测试区域,你可以填参数
city=北京,然后点击调用。 - 调用后能直接看到返回的 JSON。
这一步会帮你省下大量时间。很多人配置完连接到 Claude Desktop 后发现工具没出现,第一反应是改代码,但其实最简单的方法是用 Inspector 确认 Server 本身有没有问题。如果 Inspector 里能看到工具并且能正确返回数据,说明服务端是健康的,问题大概率出在宿主应用配置或环境路径上。
3.5 把 Server 挂到宿主应用里
验证通过之后,就可以把它接到真正的 AI 应用里了。以 Claude Desktop 为例,你需要在配置文件claude_desktop_config.json中声明这个 MCP Server:
{ "mcpServers": { "weather": { "command": "python", "args": ["C:/projects/weather-mcp/server.py"] } } }这里有一个实际的坑:command一定不要写成python3,因为 Claude Desktop 在 Windows 上启动子进程时可能找不到python3命令。更稳妥的做法是填虚拟环境里 Python 的绝对路径,比如/path/to/your/venv/bin/python或C:\projects\weather-mcp\.venv\Scripts\python.exe,这样可以避免系统 PATH 环境变量干扰。
配置保存后重启 Claude Desktop,在新的对话里问一句“北京今天多少度”,如果一切正常,它会自动调用你写的这个工具,并返回实时天气。
如果你是在自己开发的 Agent 服务里使用 MCP,也可以不依赖桌面应用,直接在代码里创建 MCP Client 会话。官方 Python SDK 里提供了对应的客户端封装:
from mcp import ClientSession, StdioServerParameters from mcp.client.stdio import stdio_client server_params = StdioServerParameters( command="python", args=["server.py"], ) async with stdio_client(server_params) as (read, write): async with ClientSession(read, write) as session: tools = await session.list_tools() result = await session.call_tool("get_weather", {"city": "北京"}) print(tools) print(result)看到没有?只要你的 Agent 具备 MCP Client,那么以后接任何新的 MCP Server,都是同一套代码。这就是“通用接口”带来的直接收益,你不再为每一个外部能力写一套定制调用逻辑。
4. 跑通 MCP 最容易踩的几个坑,我全部替你踩过了
4.1 配置了却连不上,八成是 Python 环境和路径问题
很多人按照文档把 MCP Server 配置进 Claude Desktop 后,发现工具列表为空,或者状态一直显示失败。这时候先不要怀疑代码,优先检查启动命令。
最常见的情况是:开发时你在终端里激活了虚拟环境,所以python指向的是虚拟环境里的解释器。但桌面应用是在你自己的日常环境里启动的,它使用的python可能完全不是同一个。如果你在虚拟环境里用pip install安装了mcp包,而桌面应用调用的是系统 Python,那它当然找不到mcp模块。
解决方法是,配置里的command直接写虚拟环境中 Python 的绝对路径。这样无论系统环境怎么样,都能确保使用正确的解释器和依赖。
4.2 别把 print 当日志:stdio 模式不允许“附属输出”
MCP 通过标准输入和标准输出传递 JSON-RPC 消息。这意味着,Server 进程里的 stdout 通道不能随便写任何东西。如果你在代码里写了一句print("开始查询天气"),这行字符串会被宿主当成协议消息来解析,结果就是协议损坏,连接中断,工具直接不可用。
正确的做法是:需要打印日志时,请用logging模块,并且把日志输出到 stderr,或者写到文件。简单来说,在 stdout 上只能输出符合协议格式的 JSON 消息。
这个问题的隐蔽性在于,本地终端调试时你可能没发现,因为终端并不会报错;但接入桌面应用后就奇奇怪怪地失败。调试这种问题很费时间,所以我从项目一开始就坚持不在 Server 里使用任何裸print。
4.3 工具描述写不好,模型再聪明也不会用
同一个工具,描述写“给当前用户发一封邮件”,和写“send(email)”,对模型的可用性有天壤之别。MCP 世界里,函数签名是连接模型和后端能力的桥梁,而 docstring 就是这座桥上的路标。
写描述的时候,我总结了三层要求:
- 第一层:说清楚工具做什么,最好带有业务上下文。比如“查询指定城市的当前天气”就比“获取天气”更清晰。
- 第二层:说清楚参数语义和约束。比如
city参数是中文名还是英文城市代码,是必填还是可选,是否支持模糊匹配。 - 第三层:说明异常情况。比如“如果城市不存在返回 error,不会抛出异常”,模型才能正确处理返回结果。
你开发时是人通过 Inspector 调用工具,可能觉得有没有描述都无所谓。但到了实际对话里,模型面对大量工具时,只能靠这些描述来判断该调用谁。描述好的工具,准确率可以提升一个量级。
4.4 不要一股脑把大文件塞给模型,资源也得控制体积
MCP 的 Resources 设计很容易让人误以为“可以把文件直接暴露给模型读取”。确实可以,但它并不会魔法般地绕开模型的上下文窗口限制。你把一个 5 万行的日志文件作为 Resource 暴露出来,客户端读取后如果原样交给模型,照样会把上下文撑爆,推理速度变慢,成本飙升,甚至直接超限。
正确的姿势是:Server 在返回 Resource 前先做裁剪,或者提供多个更细粒度的 Resource。比如日志文件,可以按错误级别切分,或者提供一个“最近 100 条错误日志”的资源,而不是整个文件。工具调用同样如此,如果查询结果很大,尽量在 Server 内部做聚合和精简,只返回模型真正需要的那部分。
4.5 本地 MCP 不等于安全,权限边界要收得足够紧
MCP Server 通常以本地子进程方式运行,这意味着它可能拥有与你当前用户相同的文件读取权限。如果你在 Server 里实现了“读取任意文件路径”这样的工具,又连上了一个不怀好意的远程 Prompt,后果可能很严重。
我建议两条底线:
- Server 内部实现工具时,一定要做路径校验、参数白名单、操作权限收敛。不要让模型能访问任意文件,尽量限制在指定目录内。
- 不要在管理员的 sudo 权限下运行 MCP Server。它只是一个工具进程,不需要那么高的权限。
凡是能操作外部系统、写入数据、发起支付的工具,都要加一层用户确认机制。MCP 协议本身不负责这种业务审批,它需要你在 Server 或宿主应用里实现。
5. MCP、Function Calling、API、Computer Use 的边界在哪
5.1 四者的本质差异
现在市面上的 AI 应用集成方式有好几种,很多人会把它们混为一谈。我整理了一下它们之间的区别:
| 对比维度 | MCP | Function Calling | 传统 REST API | Computer Use |
|---|---|---|---|---|
| 本质 | Agent 与工具之间的连接协议 | 模型的一种工具调用能力 | 系统间通信范式 | 通过屏幕画面操控电脑 |
| 工具来源 | 可动态发现,多个 Server 动态接入 | 在请求中显式传入函数定义 | 需要在代码里硬编码 | 不需要预定义工具 |
| 调用决策方 | 模型决定 + 宿主转发 | 模型决定 | 代码逻辑决定 | 模型决定鼠标键盘动作 |
| 适用范围 | 跨模型、跨工具的通用标准 | 通常绑定某个模型厂商 | 适用于人工/前后端对接 | 适合没有 API 的遗留系统 |
| 稳定性/成本 | 结构化、可靠 | 结构化、可靠 | 结构化、可靠 | 稳定性和速度都较差 |
这里最核心的一句话:MCP 不是某个能力,而是一个能把能力“接入”模型的标准协议。它并不排斥 Function Calling。实际运行时,宿主在把工具列表交给模型之前,可能要先把 MCP Server 暴露的工具转化成当前模型能理解的 Function Calling 格式。换句话说,MCP 可以把不同工具统一进来,而 Function Calling 是模型使用这些工具时的一种内部接口机制。
5.2 MCP 会取代 REST API 吗
不会,至少短期内不会。REST API 依然是系统与系统之间通信的事实标准,MCP Server 底层往往还是要调用多个 REST API。MCP 更像是在 API 之上加了一个“AI 友好的适配层”。
举个例子,你有一个订单服务,REST API 提供了GET /orders/{id}。这个 API 该不该保留?该。但要让 AI 直接调用它,你还需要考虑鉴权、错误码语义、返回字段是否冗余、是否需要多步操作组合等问题。MCP Server 在这里扮演的是“翻译官”角色:它把底层 API 包装成模型能理解、能调用的工具,并把结果整理成适合模型的格式。
所以,如果你本来有一个稳定的后端服务,现在想做 AI Agent,并不需要推倒重来写一套 MCP。更合理的方案是:保留原有服务,写一个轻量 MCP Server 作为薄适配层,把要暴露给 AI 的工具慢慢加进去。
5.3 Computer Use 和 MCP 的区别
Computer Use 这个方向最近很火,它让模型直接“看屏幕”、“点鼠标”、“敲键盘”,本质上是在模拟人操作电脑。而 MCP 是让模型通过结构化接口操作系统,不需要模拟人。
两者各有优劣。Computer Use 最大的价值在于,很多老旧的 Windows 桌面程序、内部管理系统根本没有对外开放 API,无法通过 MCP 接入,模型只能靠截图和鼠标级操作去完成任务。代价是速度慢、准确率不稳定、权限边界很难控制,而且每步操作都要消耗大量视觉 token。
MCP 则适合那些你能拿到接口、愿意为模型做结构化封装的场景。它更快、更稳、更可控。我个人的看法是:两者不是替代关系,而是补充关系。能走 MCP 的结构化接口,坚决走 MCP;实在没有接口的系统,再考虑 Computer Use 作为兜底方案。
5.4 什么项目不需要 MCP
说了这么多,我也要泼一点冷水。MCP 不是银弹,不是所有场景都要上。
如果你只是在一个聊天应用里接了一两个固定功能,比如“查询天气”“算一下 BMI”,直接写 Function Calling 或简单接口调用可能更快,引入 MCP 反而增加复杂度。
如果你的 Agent 只服务一个固定的业务系统,并且你有完整的后端控制权,那你可以直接把业务逻辑封装成内部 RPC 接口,不一定非要遵循 MCP。
MCP 的价值主要体现在“数量多”和“复用广”两个场景:数量多,指 Agent 需要访问的工具/数据源超过三五个;复用广,指同一套工具要被多种模型、多个 Agent 应用共享。只有当这两个前提出现时,MCP 的标准化优势才真正体现出来。
6. 把“接口资产化”落到实处:给后端和产品同学的建议
6.1 MCP 让接口变成了可以被 AI 直接消费的资产
过去我们聊“接口资产”,指的是后端要把 API 设计得清晰规范,让前端方便调用。在 AI 时代,接口又多了一类消费者,就是 AI Agent。MCP 让这件事变得更加系统化:当你把一个能力封装成 MCP Server,不仅当前的 AI 应用能使用,未来任何支持 MCP 的 Agent 都能使用。
这意味着,后端可以开始把一些高频能力,比如“查询订单状态”“创建工单”“检索知识库”,主动封装成 MCP Server。它不只是接口,而是带描述、带参数语义、带异常处理规范的“AI 可用能力”。
6.2 好的 MCP 设计是分层设计,不是让 AI 直连数据库
我见过一些团队一上来就写了一个 MCP Server,里面直接连数据库,然后把SELECT * FROM users这样的能力暴露给模型。这是很危险的做法,权限粒度太粗,AI 一旦理解错参数,可能把整张表读出来,甚至误删数据。
更好的做法是分层:
- 底层依然是常规的后端服务,负责权限校验、业务规则、审计日志。
- 中间加一层适配层,也就是 MCP Server,把业务操作翻译成模型友好的工具调用。
- 顶层才是 Agent,它只和 MCP Server 对话。
这样的好处是,你可以对 MCP Server 暴露的工具做“最小化”设计:只给删改功能,不给任意 SQL;只给聚合查询结果,不给原始表字段。模型再强,也只能在接口规定的边界内行动。
6.3 尽早体验 MCP,比追新框架更有性价比
从技术热度曲线看,MCP 已经过了“要不要用”的观望期,进入了“怎么用”的落地期。各种主流开发工具、桌面应用、云服务都在支持 MCP 客户端,Figma、浏览器自动化、数据库工具链也都出了官方 MCP Server。现在的生态很像 iPhone 刚出时的 App Store,虽然还有不少粗糙的地方,但基础设施正在快速完善。
我个人建议,如果你的团队正在做 AI Agent 相关产品,可以找一个小而实际的功能先跑通 MCP。比如内部知识库检索,或者常用业务的查询能力。用一周时间从零搭一个真实工具 Server,接入一个 AI 客户端体验完整链路。这样做一轮之后,你对 MCP 的感受会比读十篇文章都深。
我自己做出第一个能返回真实天气的 MCP Server,并且在对话里成功让 Claude 调用它的时候,其实是很震撼的。那种感觉就像突然给模型装上了传感器,它第一次真的能“看见”这个世界了。之后我做 Agent 产品,凡是涉及外部系统连接的,都会优先考虑用 MCP 这层壳把能力包起来。它早期还有不少细节在演进,但方向已经很明确了,接口标准化是 AI Agent 走向工程化的必经之路。