大模型的 Tools(函数调用)stdio MCP 在功能上的核心区别,可以用一句话概括:

Tools 是“一次性外挂”,而 stdio MCP 是“持久化的标准接口”。

下面从几个关键维度拆解:

1. 连接与生命周期

  • Tools (函数调用)

    • 无状态、短连接。每次调用都是独立的请求-响应,模型通过 HTTP 向你的服务发请求,完成后连接就断了。
    • 被动触发。模型本身不主动连接你,而是你提前把工具的定义(名称、描述、参数)发给它,它“想用”时,才回传调用请求。
  • stdio MCP

    • 有状态、长连接。基于标准输入输出(stdin/stdout),客户端(如 Claude Desktop)会启动你的 MCP 服务器作为一个常驻子进程。只要会话不断,连接就一直保持。
    • 主动握手。连接建立后,客户端和服务器会进行能力协商,服务器动态暴露它拥有的所有工具、资源和提示词。

2. 交互模式与实时性

  • Tools

    • 一问一答的轮询。模型生成一次响应最多调用一次工具(或并行调用),你得等它执行完返回结果,它才能继续。你没发请求,它就不知道外部世界发生了什么。
    • 单向通知难。你的服务很难主动向模型推送消息。
  • stdio MCP

    • 全双工通信。因为管道是双向的,服务器可以随时通过 notifications 主动给客户端和模型发消息。
    • 实时推送。比如,一个文件监控 MCP 服务器可以主动通知模型:“你正在看的日志文件更新了”,模型就能立刻反应。这在 Tools 模式下很难优雅实现。

3. 资源与上下文管理

这是 MCP 独有的概念,Tools 基本不具备

  • Tools

    • 只提供“动作”,没有“资源”的概念。如果你想读取文件内容,必须写一个叫 read_file 的工具,模型每次都要显式调用它。
  • stdio MCP

    • 除了 Tools(动作),还提供:
      • Resources(资源):暴露结构化的只读数据,像文件、数据库记录。模型能像看书一样直接引用(用 uri:// 的形式),不用反复调用工具。
      • Prompts(提示词模板):预定义的交互模板,方便用户快速发起标准化的复杂任务。

4. 服务发现与组织方式

  • Tools

    • 平铺列表。你需要把所有工具的定义都列出来发给模型。工具一多(比如上百个),模型容易选错,提示词也塞不下。
    • 无内置组合。通常是一次性把所有工具定义扔给一个模型。
  • stdio MCP

    • 动态发现。连接时,客户端问“你有什么能力?”,服务器返回清单。能力变化(如新增工具),重连即可生效。
    • 天然支持组合。一个客户端(宿主)可以同时连接多个 MCP 服务器(每个是一个 stdio 进程),模型面前出现的是来自不同服务器的、动态整合好的能力集。

5. 开发部署与适用场景

维度 Tools (函数调用) stdio MCP
部署模型 独立服务,暴露 HTTP/HTTPS 端点 本地或远程的独立进程,通过标准输入输出通信
复杂度 低,实现一个 API 即可 相对高,需处理进程间通信、JSON-RPC 协议
开发体验 快,调试工具多(如 Postman) 调试稍复杂,通常需依赖专门的 MCP 客户端
适用场景 简单、无状态、一次性的动作,如查天气、发邮件、搜索网页。适合公网服务。 有状态、需要上下文、复杂的本地集成,如操作本地文件系统、连接数据库并持续感知变化、动态管理多工具组合。是本地 Agent 的理想形态。

总结一下演进关系

MCP 其实是“标准化的 Tools”的超集。

你可以把 MCP 理解为:给你一堆 Tools,再加上一套管理它们、让它们和模型双向沟通、甚至能主动报信的“智能包装”。而 stdio 是 MCP 最常用的一种底层传输方式,特别适合需要与本地资源深度、持续交互的 AI 应用。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐