MCP:模型上下文协议

定义

模型上下文协议(MCP) 是一种开放标准接口,使大型语言模型(LLM)能够安全、一致地访问外部数据源、工具和能力。它在 AI 应用与多种上下文提供者之间建立了标准化的通信层,相当于 AI 系统的“USB-C”。

关键组成部分

架构

MCP 遵循客户端-服务器架构:

  • MCP 主机:用户或 AI 系统进行交互的应用(如 Claude Desktop、IDE 插件)
  • MCP 客户端:主机应用中的组件,负责与服务器通信
  • MCP 服务器:通过标准化 MCP 接口,暴露特定功能(如文件访问、数据库连接、API 访问)的轻量级程序
  • 数据源:MCP 服务器可以安全访问的本地或远程信息仓库

核心原语

MCP 定义了三种构建协议的基础原语:

1. 资源

资源 代表 MCP 服务器向 LLM 提供的数据与内容。

  • 特性:由应用控制,通过唯一 URI 标识
  • 数据类型:文本(UTF-8 编码)或二进制(Base64 编码)
  • 发现方式:直接列举或通过模板动态请求资源
  • 操作:读取内容、接收更新

用例示例:MCP 服务器将日志文件以 file:///logs/app.log 作为资源对外暴露

2. 提示

提示 是服务器提供的预定义模板或工作流,用于引导 LLM 交互。

  • 特性:由用户触发,常以斜杠命令形式出现
  • 结构:唯一名称、描述、可选参数
  • 能力:可接收自定义参数、引入资源上下文、定义多步交互
  • 操作:通过列举发现,通过请求执行

用例示例:一个 git 提交信息生成器提示,接受代码变更作为输入

3. 工具

工具 暴露可由 LLM 调用(通常需用户批准)的可执行函数,用于执行操作。

  • 特性:由模型控制,需明确定义输入模式
  • 注解:标明行为提示(只读、破坏性、幂等、开放世界)
  • 安全特性:输入校验、访问控制、清晰的用户警告
  • 操作:通过列举发现,通过带参数调用执行

用例示例:一个计算器工具,对模型提供的输入执行数学运算

FlowHunt 标志

准备好发展您的业务了吗?

今天开始免费试用,几天内即可看到结果。

重要性与优势

对开发者

  • 标准化集成:无需为每个数据源单独编写代码即可连接 AI 应用
  • 安全最佳实践:内置安全暴露敏感信息的指导
  • 简化架构:清晰区分 AI 模型与其上下文来源

对用户与组织

  • 灵活性:更容易在不同 LLM 提供商或主机应用间切换
  • 互操作性:通过标准化接口减少厂商锁定
  • 增强能力:AI 系统可访问更丰富的信息与操作能力

实现示例

文件资源服务器

// 服务器将单个日志文件作为资源暴露
const server = new Server({ /* config */ }, { capabilities: { resources: {} } });

// 列出可用资源
server.setRequestHandler(ListResourcesRequestSchema, async () => {
  return {
    resources: [
      {
        uri: "file:///logs/app.log",
        name: "Application Logs",
        mimeType: "text/plain"
      }
    ]
  };
});

// 提供资源内容
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
  if (request.params.uri === "file:///logs/app.log") {
    const logContents = await readLogFile();
    return {
      contents: [{
        uri: request.params.uri,
        mimeType: "text/plain",
        text: logContents
      }]
    };
  }
  throw new Error("Resource not found");
});

计算器工具服务器

const server = new Server({ /* config */ }, { capabilities: { tools: {} } });

// 列出可用工具
server.setRequestHandler(ListToolsRequestSchema, async () => {
  return {
    tools: [{
      name: "calculate_sum",
      description: "Add two numbers together",
      inputSchema: {
        type: "object",
        properties: {
          a: { type: "number", description: "First number" },
          b: { type: "number", description: "Second number" }
        },
        required: ["a", "b"]
      },
      annotations: {
        title: "Calculate Sum",
        readOnlyHint: true,
        openWorldHint: false
      }
    }]
  };
});

// 处理工具调用
server.setRequestHandler(CallToolRequestSchema, async (request) => {
  if (request.params.name === "calculate_sum") {
    try {
      const { a, b } = request.params.arguments;
      if (typeof a !== 'number' || typeof b !== 'number') {
         throw new Error("Invalid input: 'a' and 'b' must be numbers.");
      }
      const sum = a + b;
      return {
        content: [{ type: "text", text: String(sum) }]
      };
    } catch (error: any) {
      return {
        isError: true,
        content: [{ type: "text", text: `Error calculating sum: ${error.message}` }]
      };
    }
  }
  throw new Error("Tool not found");
});

相关概念

  • LLM 函数调用:模型上下文协议为 LLM 调用函数提供了标准化方案
  • AI 智能体:MCP 为基于智能体的 AI 系统访问工具和信息提供结构化方式
  • AI 插件:类似浏览器扩展,MCP 服务器可视作扩展 AI 能力的“插件”

未来方向

  • 企业级 AI 集成:连接企业知识库、工具和工作流
  • 多模态 AI:标准化访问文本以外的多样数据类型
  • 协作式 AI 系统:使多个 AI 助手通过共享协议协同工作

常见问题

试用 FlowHunt,打造您的专属 AI 解决方案

使用 FlowHunt,通过标准化集成、安全数据访问和灵活工具连接,开始构建强大的 AI 系统。