分类:AI编程
在 AI Agent 相关讨论中,MCP(Model Context Protocol)经常被当作生态关键词提及。但对开发者而言,真正值得关注的是它如何把工具接入变成可复用的工程流程。Dev.to AI 近日发布的一篇文章,通过一个实际运行的天气服务器,展示了 MCP 从工具注册、发现、调用到返回结果的完整过程,也把 MCP 从概念层面拉回到 Agent 开发现场。
从“每个应用单独接线”到“一次暴露”
在这篇 Agent 系列文章的此前内容中,工具大多直接写入单个项目。这样的做法在只有一个项目时足够简单,但当第二个项目也需要同一个工具时,开发者就要复制函数、参数 schema 和描述,并手动保持两边同步。
MCP 提供的解决方式是把工具封装成一个服务器。只要客户端兼容 MCP,就可以调用同一个工具服务,而不必为每个应用和工具组合重新编写集成代码。没有 MCP 时,应用 1 和应用 2 分别连接工具 A、工具 B,需要多套定制代码;引入 MCP 后,工具 A、工具 B 分别作为 MCP server 存在,多个应用可以通过同一协议访问。
这一协议的行业背景也在发生变化。Anthropic 于 2024年11月推出 MCP,OpenAI 和 Google 在数月内采用。2025年12月,Anthropic 将协议捐赠给 Agentic AI Foundation。该基金会被描述为供应商中立的 Linux Foundation 项目,Block 和 OpenAI 也参与联合发起。对开发者而言,这意味着 MCP 不再只是单一公司主导的接口规范,而开始进入更广泛的行业基础设施。
一个天气服务器如何被发现、调用并返回结果
文章给出的示例是一个基于 TypeScript 和 @modelcontextprotocol/sdk 的天气服务器。示例数据只包含两个城市:Dhaka 的天气为 humid and cloudy,温度为 31;Chittagong 为 light rain,温度为 29。服务器名称为 weather-server,版本为 1.0.0。
服务器通过 registerTool 注册名为 get_weather 的工具,并提供 title、description 和 inputSchema。这里的 inputSchema 使用 Zod 校验器,例如 city 字段使用 z.string(),SDK 会将其转换为协议需要的格式,开发者无需手写 JSON Schema。服务器入口则使用 StdioServerTransport 建立标准输入输出传输。
客户端部分使用 StdioClientTransport,通过 npx tsx mcp/weather-server.ts 启动服务器。这一步会启动一个真实子进程,并完成实际的 MCP 握手,而不是使用模拟对象。连接建立后,客户端先调用 listTools 获取服务器暴露的工具,再通过 callTool 调用 get_weather,并传入参数 city: Dhaka。
- 工具发现:客户端通过 listTools 获取服务器注册的工具信息。
- 工具调用:客户端通过 callTool 指定工具名称和参数。
- 结果返回:服务器返回包含 content 数组的结构,其中每一项可以是 type 为 text 的文本,文本内容为 JSON.stringify 处理后的结果。
如果请求的城市不存在,示例会返回包含 error 字段的结果,例如 “no weather data for ${ city }”。这个细节说明,MCP 并不只处理成功调用,也为错误信息提供了统一返回路径。
真实运行暴露出的不是协议问题,而是入口问题
文章还记录了一个常见的运行时问题。最初版本中,服务器入口直接使用顶层 await 调用 server.connect(transport)。TypeScript 类型检查通过,但实际运行时客户端连接立即关闭。
原因并不在 MCP 协议本身,而是入口文件的执行方式:代码被转换成某种不支持顶层 await 的模块格式,导致进程在服务器开始监听前就崩溃。作者将连接逻辑包裹进 async main() 后,问题被解决。这个例子说明,MCP 服务器不仅要满足协议接口,还要处理真实 JavaScript/TypeScript 运行环境中的入口脚本问题。
对 Agent 开发的实际意义
从工程角度看,这篇文章的价值在于展示了 MCP 的最小闭环:定义工具、注册工具、启动传输、列出工具、调用工具、返回结果。对 Agent 开发者来说,工具不再只是写死在某个项目里的函数,而是可以通过标准协议暴露出来的服务。
这种变化会降低工具复用成本。当工具以 MCP server 形式存在时,任何兼容客户端都可以接入,而不需要为每个新项目重复编写胶水代码。工具描述、输入参数、调用方式和返回结构也被放入同一协议框架中,Agent 在连接外部能力时更容易保持一致性。
随着 MCP 被多家公司采用并进入中立基金会,Agent 工具接入开始从单点实现走向共享标准。对于正在构建 Agent 应用的团队来说,理解 MCP 的关键也不再是追踪概念热度,而是弄清一个真实服务器如何跑通协议,并把工具稳定暴露给客户端。
原创文章,作者:点点,如若转载,请注明出处:https://www.dian8dian.com/mcp-cong-xie-yi-re-ci-zou-xiang-gong-cheng-luo-di-yi-ge