Null0x62

什么是MCP?

什么是 MCP 协议?

在解释 MCP 协议之前,我们需要先理解一个核心问题:

通常在使用 ChatGPT 等大语言模型(LLM)时,LLM 只能回答问题,而无法主动执行某些任务。例如,如果让 LLM 帮忙购买 BTC,它是无法直接完成的。

传统解决方案

  1. Prompt Engineering

通过提示词工程(Prompt Engineering),可以让 LLM 返回一个结构化的指令,供外部系统执行。例如:

const prompt = "你可以去购买BTC,当用户提出购买BTC的时候,你需要返回一个JSON格式的结果。我会执行之后会告诉你结果然后你再回复。"

示例返回:

{
    "action": "buyBTC",
    "parameters": { ... }
}

执行函数

const buyBTC = () => {};

然而,这种方法存在明显的问题:

  1. 输出的结构化数据不准确。

  2. 容易产生幻觉(Hallucination)。

  3. 缺乏系统化约束,可靠性较低。

当前一些方案(如 Eliza)仍然采用 Prompt Engineering 方式,但存在较大的局限性。例如使用如下模板:

const messageHandlerTemplate = `{{actionExamples}}
...
Instructions: Write the next message for {{agentName}}.`

这种方式在某些场景下仍然有效,但缺乏标准机制来支撑大规模系统级调用。

  1. Function Calling

为了解决 Prompt Engineering 的问题,OpenAI 推出了 Function Calling,允许开发者定义可执行函数,并由 LLM 调用。

示例代码:

import { OpenAI } from "openai";

const openai = new OpenAI();

const tools = [{
  type: "function",
  function: {
    name: "get_weather",
    description: "Get current temperature for a given location.",
    parameters: {
      type: "object",
      properties: {
        location: {
          type: "string",
          description: "City and country e.g. Bogotá, Colombia"
        }
      },
      required: ["location"]
    },
    strict: true
  }
}];

const completion = await openai.chat.completions.create({
  model: "gpt-4o",
  messages: [{ role: "user", content: "What is the weather like in Paris today?" }],
  tools,
  store: true
});

返回结果:

[{
    "id": "call_12345xyz",
    "type": "function",
    "function": {
        "name": "get_weather",
        "arguments": "{\"location\":\"Paris, France\"}"
    }
}]

Function Calling 的优点:

  1. 让 LLM 调用函数变得更简单。

  2. 结构化输出,减少幻觉问题。

但也存在缺点:

  1. 受限于特定平台(如 OpenAI、Anthropic 等)。

  2. 各家 API 接口不同,集成复杂。

例如 Claude 的 Tool Use 格式与 OpenAI 并不相同:Claude 官方文档

MCP(Model Context Protocol)

什么是 MCP?

MCP(Model Context Protocol)是一种开放协议,旨在标准化 Function Calling,使工具和函数可以跨大模型共享与调用。

它基于 JSON-RPC 格式,将工具调用抽象成统一的数据结构和行为接口,消除不同 LLM 提供商之间的差异。

核心架构

MCP 包含以下组件:

  • MCP 客户端(Client):连接服务器,获取工具列表,并将工具信息传递给 LLM。

  • MCP 服务器(Server):提供工具定义、上下文(资源)和提示(Prompt)能力。

  • MCP 主机(Host):包含运行 LLM 的宿主环境,如 Claude Desktop、开发者终端等。

MCP Server 通常负责三大类资源管理:

  1. Resource:提供上下文信息,如当前项目文件、数据库数据等。

  2. Tools:函数和工具列表,定义如何执行某个操作。

  3. Prompts:标准化的提示模板,减少重复提示工程。

工作流程

MCP 的调用流程如下:

  1. MCP Client 启动,与 MCP Server 建立连接(如使用 stdio 或 SSE 传输方式)。

  2. Client 向 Server 请求 tools/resource/prompt。

  3. 将这些信息与用户消息一起传递给 LLM。

  4. LLM 决定是否使用工具。

  5. 如果调用工具,Client 将请求发送到 Server,Server 执行函数。

  6. 将函数返回值传递给 LLM。

  7. LLM 根据上下文+结果生成自然语言响应。

  8. 响应展示给用户。

支持的传输协议

MCP 支持多种传输方式,常见的包括:

  • stdio:适合本地进程通信,如 CLI 工具或桌面程序中嵌入的服务。

  • SSE (Server-Sent Events):适合远程服务,通过 HTTP 和长连接进行数据推送。

目前Claude, cursor, windsurf都是采用的stdio,目前支持MCP协议的产品主要传输方式都是采用的stdio

MCP 的优势

  • 统一标准:适配 OpenAI、Claude、Gemini 等多种模型。

  • 模块解耦:将工具、上下文、提示进行解耦,易于复用。

  • 低耦合集成:工具可以跨项目共享,模型调用方式不依赖具体厂商。

  • 安全透明:由宿主方控制调用过程,可审计和调试。

相关资源

结论

MCP 协议是大语言模型工具调用场景的通用解决方案,它推动了 Function Calling 的标准化和生态构建。对开发者而言,它意味着:

  • 更强的跨平台能力;

  • 更高的开发效率;

  • 更低的运维成本。

随着多模型协同成为趋势,MCP 是连接工具、上下文与智能体的关键桥梁,值得每一个构建 AI 系统的开发者深入了解与使用。

Powered by wisp

3/22/2025
Related Posts
OpenManus

OpenManus

本文深入解析了 OpenManus 的整体架构与运行机制,涵盖单 Agent 与多 Agent 模式的执行流程、核心模块设计(如 ReActAgent、ToolCallingAgent、PlanningAgent 等)、Function Calling 的实现原理,以及系统当前的优势与局限。并结合实际调研,提出了可行的优化与扩展方向,帮助读者全面理解这款 LLM 驱动的多工具 AI Agent 框架。

Read Full Story
© Samantha 2025