1. 引言:AI Agent 的工具集成挑战

随着 AI Agent 能力的飞速发展,其应用场景已从简单的对话问答扩展到复杂的任务自动化。一个强大的 AI Agent 需要能够调用外部工具来获取信息、执行操作,例如查询数据库、调用 API、操作文件系统等。然而,当前 AI 开发领域面临一个核心挑战:工具集成缺乏统一标准

不同的 AI 框架(如 LangChain、LlamaIndex)、模型提供商(如 OpenAI、Anthropic)以及各类应用平台都定义了自己的工具调用接口和协议。这导致开发者需要为每个平台重复适配工具,工具开发者也需要维护多个版本的集成代码,严重阻碍了生态的互操作性和创新效率。

正是在这样的背景下,Model Context Protocol (MCP) 应运而生。它旨在为 AI 应用与工具之间定义一个通用、开放的通信标准,成为 AI Agent 领域的“USB 接口”。

2. 什么是 MCP 协议?

Model Context Protocol (MCP) 是一个开放协议,用于在 AI 应用程序(客户端)和提供上下文数据或功能的工具(服务器)之间建立标准化通信。其核心目标是:

  • 解耦工具与客户端:工具开发者只需实现一次 MCP 服务器,即可被任何兼容 MCP 的客户端使用。
  • 统一资源抽象:将外部数据(如文件、数据库记录)和功能(如代码执行、API调用)统一抽象为“资源”(Resources)和“工具”(Tools)。
  • 标准化通信:定义了一套基于 JSON-RPC 的消息格式,用于发现、调用和流式传输结果。

简单来说,MCP 让 AI 模型能够以一种可预测、可扩展的方式“看到”和“使用”外部世界。

3. MCP 的核心架构与组件

MCP 协议主要围绕三个核心概念构建:

3.1 客户端 (Client)

客户端是消费 MCP 服务的 AI 应用程序,例如 Claude Desktop、Cursor 或自定义的 AI Agent 框架。客户端负责:

  • 发现并连接到一个或多个 MCP 服务器。
  • 向模型展示可用的资源和工具列表。
  • 将用户的自然语言请求转换为对特定工具或资源的调用。
  • 处理服务器返回的结果并将其整合到对话或任务流中。

3.2 服务器 (Server)

服务器是工具或数据源的提供者。它封装了具体的功能,并通过 MCP 协议暴露给客户端。一个服务器可以提供:

  • 资源 (Resources):静态或动态的数据,如文件内容、数据库表、天气信息。资源通过 URI 标识,内容可以文本形式提供。
  • 工具 (Tools):可执行的操作,如运行命令、发送邮件、创建日历事件。每个工具都有明确的输入参数(JSON Schema 定义)。
  • 提示词模板 (Prompts):可复用的提示词片段,客户端可以填充变量后发送给模型。

3.3 传输层 (Transport)

MCP 定义的是应用层协议,不绑定特定传输方式。常见的实现包括:

  • stdio:通过标准输入/输出进行通信,简单易用,适合本地集成。
  • SSE (Server-Sent Events):用于服务器向客户端推送更新(如资源内容变化)。
  • 未来可能支持 WebSocket 等。

这种设计使得 MCP 既能用于本地进程间通信,也能适应网络环境。

4. MCP 协议的工作流程

一个典型的 MCP 交互流程如下:

  1. 初始化:客户端启动并连接到 MCP 服务器。双方交换初始化消息,协商协议版本。
  2. 能力宣告:服务器向客户端发送 `serverInfo` 消息,声明自己提供的资源、工具和提示词模板。
  3. 列表获取:客户端可以调用 `listResources`、`listTools` 等方法,获取详细的可用项列表及其模式(Schema)。
  4. 资源读取:客户端根据需要,调用 `readResource` 并传入资源 URI 来获取具体内容。
  5. 工具调用:当模型决定使用某个工具时,客户端调用 `callTool`,传入工具名和参数。服务器执行操作并返回结果。
  6. 结果流式传输:对于耗时操作,服务器可以通过 `partialResult` 消息流式返回中间结果,最后发送 `complete` 消息结束。

整个过程由一系列严格的 JSON-RPC 消息驱动,确保了通信的可靠性和一致性。

5. 实战:构建一个简单的 MCP 服务器

以下是一个使用 Node.js 和官方 `@modelcontextprotocol/sdk` 构建 MCP 服务器的简单示例,它提供了一个查询系统时间的工具。

// server.js
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
  CallToolRequestSchema,
  ListToolsRequestSchema,
  ToolSchema,
} from "@modelcontextprotocol/sdk/types.js";

// 1. 创建 Server 实例
const server = new Server(
  {
    name: "system-time-server",
    version: "1.0.0",
  },
  {
    capabilities: {
      tools: {}, // 声明支持工具
    },
  }
);

// 2. 定义工具:获取当前时间
const getCurrentTimeTool = {
  name: "get_current_time",
  description: "获取系统的当前日期和时间",
  inputSchema: {
    type: "object",
    properties: {
      format: {
        type: "string",
        description: "时间格式,例如 'iso' 或 'locale'",
        enum: ["iso", "locale"],
        default: "iso",
      },
    },
  },
};

// 3. 处理工具列表请求
server.setRequestHandler(ListToolsRequestSchema, async () => {
  return {
    tools: [getCurrentTimeTool],
  };
});

// 4. 处理工具调用请求
server.setRequestHandler(CallToolRequestSchema, async (request) => {
  if (request.params.name === "get_current_time") {
    const { format = "iso" } = request.params.arguments || {};
    const now = new Date();
    let result;
    if (format === "locale") {
      result = now.toLocaleString();
    } else {
      result = now.toISOString();
    }
    return {
      content: [
        {
          type: "text",
          text: `当前系统时间 (${format}): ${result}`,
        },
      ],
    };
  }
  throw new Error(`未知的工具: ${request.params.name}`);
});

// 5. 启动服务器,使用 stdio 传输
async function main() {
  const transport = new StdioServerTransport();
  await server.connect(transport);
  console.error("MCP 时间服务器已启动,等待连接...");
}

main().catch((error) => {
  console.error("服务器错误:", error);
  process.exit(1);
});

将此服务器配置到 Claude Desktop 等客户端后,AI 助手就能直接调用 `get_current_time` 工具来获取时间信息。

6. MCP 的生态现状与未来

MCP 由 Anthropic 牵头推动,并迅速获得了社区和业界的关注。

  • 官方与社区服务器:已经出现了用于文件系统访问、数据库查询、天气获取、Git 操作等大量开源 MCP 服务器。
  • 客户端支持:Claude Desktop、Cursor 已原生集成 MCP。LangChain、LlamaIndex 等框架也正在增加对 MCP 的原生支持,允许将任何 MCP 服务器作为工具链的一部分。
  • 标准化意义:MCP 有望结束 AI 工具集成的“战国时代”。对于开发者,只需学习一套协议;对于工具开发者,一次开发即可多处部署。

未来的演进可能包括更复杂的资源订阅模型、安全与权限控制标准化、以及更高效的二进制传输支持。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐