Newsroom
AIEII

MCP 协议入门:让 AI 连接一切的开放标准

Model Context Protocol (MCP) 是什么?为什么它可能成为 AI 时代的 USB 接口?一文搞懂 MCP 的原理、生态和实际应用。

2026年03月27日

MCP 协议入门:让 AI 连接一切的开放标准

你有没有遇到过这种情况:用 ChatGPT 写代码,写到一半需要查数据库里的数据,只能手动复制粘贴过去。用 Claude 写文档,想引用 Notion 里的笔记,又要切窗口手动搬运。用 AI 分析 GitHub Issue,得先把内容一条一条贴进去。

每一次手动复制粘贴,都是 AI 能力的一次浪费。

AI 模型本身已经很强了,但它被困在一个孤岛上。它看不见你的文件,访问不了你的数据库,操作不了你的工具。你成了它和外部世界之间的"人肉中间件"。

这个问题,终于有人认真解决了。Anthropic 在 2024 年底发布了一个叫 MCP (Model Context Protocol) 的开放协议。简单说,它想做 AI 世界的 USB 接口:一个标准化的方式,让任何 AI 模型连接任何外部工具和数据源。

今天这篇文章,就来把 MCP 从里到外讲清楚。


MCP 到底是什么

Model Context Protocol,直译就是"模型上下文协议"。

别被这个名字吓到。核心思想极其简单:给 AI 模型一个标准化的方式去调用外部工具、读取外部数据。

类比一下:USB 出现之前,鼠标用 PS/2 接口,打印机用并口,手机用各种奇形怪状的充电线。每个设备都需要自己的专属接口,换一个就不兼容。USB 统一了这一切,一根线连接所有设备。

MCP 对 AI 做的是同一件事。

在 MCP 之前,如果你想让 Claude 连接 Notion,Anthropic 的工程师得专门写一个 Notion 集成。想连 GitHub?再写一个。想连 Slack、数据库、文件系统、日历……每一个都需要定制开发

这种模式有个著名的 M×N 问题:M 个 AI 模型 × N 个工具 = M×N 个集成。模型越多、工具越多,组合爆炸就越严重。

MCP 的解法很优雅:定义一个标准协议,让每个工具只需要实现一次 MCP 接口(MCP Server),每个 AI 应用只需要实现一次 MCP 客户端(MCP Client)。M×N 变成了 M+N。

一个协议,连接一切。


为什么现在需要 MCP

你可能会说:“Function Calling 不是已经解决了这个问题吗?”

没有。Function Calling 解决了"AI 能调用函数"这件事,但它有几个致命的局限:

第一,没有标准化。 OpenAI 的 Function Calling 格式和 Anthropic 的 Tool Use 格式不一样。Google 的又是另一套。开发者要为每个平台写不同的代码。

第二,缺少发现机制。 Function Calling 需要你在每次 API 调用时手动声明有哪些函数可用。但如果有 200 个工具呢?你不可能每次都把 200 个函数定义全塞进 prompt。

第三,没有状态管理。 Function Calling 是无状态的。每次调用都是独立的,AI 不知道上一次调用的结果对下一次有什么影响。

第四,安全模型原始。 谁能调用什么工具?调用频率怎么限制?敏感操作需不需要用户确认?Function Calling 对这些安全问题基本没有统一方案。

MCP 解决了以上所有问题:

  • 标准化的协议格式:不管什么 AI 模型、什么工具,大家说同一种"语言"
  • 动态发现:AI 客户端可以自动发现一个 MCP Server 提供了哪些工具和资源
  • 有状态连接:MCP 用长连接,Server 和 Client 之间可以持续通信
  • 内置安全机制:权限控制、用户确认、访问范围限制都在协议层面有定义

核心概念:四个角色

MCP 的架构并不复杂,理解四个核心概念就够了:

1. MCP Host(宿主)

就是你直接使用的 AI 应用。比如 Claude Desktop、Cursor、Claude Code。它是整个交互的起点,负责接收你的指令并协调一切。

把它想象成你的电脑主机。

2. MCP Client(客户端)

嵌入在 Host 内部的协议层。它负责和 MCP Server 建立连接、通信。一个 Client 同时可以连接多个 Server。

把它想象成你电脑里的 USB 控制器芯片。

3. MCP Server(服务端)

这是 MCP 生态的核心。每个 MCP Server 封装了一个特定工具或数据源的能力。比如:

  • Notion MCP Server:让 AI 能读写你的 Notion 页面
  • GitHub MCP Server:让 AI 能操作 Issue、PR、代码仓库
  • 文件系统 MCP Server:让 AI 能读写你的本地文件
  • PostgreSQL MCP Server:让 AI 能查询和操作数据库

把它想象成 USB 设备(键盘、鼠标、硬盘)。

4. 三种能力类型

每个 MCP Server 可以暴露三种类型的能力:

类型说明例子
Tools(工具)AI 可以调用的函数/操作创建 Issue、发送消息、执行 SQL
Resources(资源)AI 可以读取的数据文件内容、数据库表、API 响应
Prompts(提示模板)预定义的交互模板代码审查模板、翻译模板

用一个现实场景串起来:你对 Claude Desktop 说"帮我看看 GitHub 上那个 bug 的进展"。Claude Desktop(Host)通过内置的 MCP Client 连接到 GitHub MCP Server,调用它的 get_issue Tool,获取 Issue 详情(Resource),然后用自然语言给你总结。

整个过程你不需要离开对话窗口。


通信机制:JSON-RPC 2.0

MCP 底层用的是 JSON-RPC 2.0 协议。如果你做过后端开发,对这个应该不陌生。

简单说,所有通信都是 JSON 格式的消息,分三种:

// 请求
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "create_issue",
    "arguments": { "title": "Fix login bug", "body": "..." }
  }
}

// 响应
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": { "issue_id": 42, "url": "https://github.com/..." }
}

// 通知(单向,不需要响应)
{
  "jsonrpc": "2.0",
  "method": "notifications/resource_updated",
  "params": { "uri": "file:///path/to/file" }
}

传输层面,MCP 支持两种方式:

  • Stdio(标准输入输出):适合本地运行的 Server,通过进程间通信。这是最常见的方式,Claude Desktop 和 Claude Code 默认用这个。
  • HTTP + SSE(Server-Sent Events):适合远程 Server,通过 HTTP 通信。更新的规范还引入了 Streamable HTTP 传输,可以在单个 HTTP 端点上同时处理请求和流式响应。

对于大多数用户来说,你不需要关心传输细节。配置文件里写好 Server 的启动命令,MCP Client 会自动处理连接。


实际应用场景

理论说完了,来看真正有用的部分。MCP 现在能做什么?

场景 1:AI 直接操作你的文件

安装一个文件系统 MCP Server,Claude 就能直接读写你指定目录下的文件。

你:帮我看看 ~/projects/my-app/src 下有哪些 TypeScript 文件
Claude:[调用 filesystem MCP] 发现 23 个 .ts 文件,主要分布在...
你:把 utils.ts 里的 formatDate 函数改成用 dayjs
Claude:[读取文件 → 修改 → 写入] 已完成修改,改动如下...

这不是幻想,这是 Claude Code 和 Claude Desktop 现在就能做的事。

场景 2:AI 当你的数据库分析师

连接一个 PostgreSQL MCP Server,AI 可以直接查询你的数据库:

你:过去 7 天注册用户数是多少?按天分组
Claude:[执行 SQL] 过去 7 天共新增 1,247 名用户,其中周三最高...
你:和上周同期对比呢?
Claude:[再次查询] 环比增长 23%,主要增长来自...

不用写 SQL,不用切到数据库客户端,直接对话就行。

场景 3:AI 管理你的项目

连接 GitHub MCP Server + Notion MCP Server

你:把 GitHub 上标记为 bug 的 open issue 整理到 Notion 的看板里
Claude:[读取 GitHub Issues → 创建 Notion 页面] 已创建 8 条记录...

场景 4:AI 帮你搜索和总结

连接 Web Search MCP Server + Fetch MCP Server

你:搜索一下 MCP 协议最新的社区动态
Claude:[搜索 → 抓取页面 → 总结] 最近一周有 3 个重要更新...

场景 5:AI 作为团队通信中枢

连接 Slack MCP Server + Email MCP Server

你:把今天的站会纪要发到 #dev-team 频道,同时邮件抄送 PM
Claude:[发送 Slack 消息 → 发送邮件] 已完成

重点不在于单个场景,而在于这些能力可以组合。 当 AI 同时连接了文件系统、数据库、GitHub、Notion、Slack……它就不再是一个"聊天工具",而是一个真正的数字员工


现有生态:谁在用 MCP

MCP 发布一年多以来,生态增长速度相当惊人。

支持 MCP 的 AI 客户端

客户端类型MCP 支持程度
Claude Desktop桌面应用原生支持,官方第一方
Claude CodeCLI 开发工具原生支持,开发者首选
CursorAI IDE完整支持
Windsurf (Codeium)AI IDE支持
Continue开源 AI 编程助手支持
Zed编辑器支持
Sourcegraph Cody代码搜索 + AI支持

此外,OpenAI 也在 2025 年 3 月宣布将在其产品中支持 MCP。这是一个很重要的信号:连竞争对手都认可了这个标准。

热门 MCP Server

社区已经有数千个 MCP Server 可用。以下是一些最常用的:

官方维护的:

  • @modelcontextprotocol/server-filesystem - 文件系统操作
  • @modelcontextprotocol/server-github - GitHub 集成
  • @modelcontextprotocol/server-postgres - PostgreSQL 数据库
  • @modelcontextprotocol/server-slack - Slack 消息
  • @modelcontextprotocol/server-memory - 持久化记忆

社区热门的:

  • mcp-server-notion - Notion 读写
  • mcp-server-fetch - 网页抓取
  • mcp-server-brave-search - Brave 搜索
  • mcp-server-sqlite - SQLite 数据库
  • mcp-server-google-maps - 地图服务
  • mcp-server-docker - Docker 容器管理

发现更多 Server 的地方:

生态的丰富度已经到了一个临界点:大多数常见需求都有现成的 Server 可用。


开发者怎么用:5 分钟创建你的第一个 MCP Server

说了这么多,来点实际的。如果你是开发者,想自己写一个 MCP Server,过程并不复杂。

用 TypeScript 写一个天气查询 Server

先装 SDK:

npm install @modelcontextprotocol/sdk

然后写一个最简单的 Server:

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

// 创建 Server 实例
const server = new McpServer({
  name: "weather-server",
  version: "1.0.0",
});

// 注册一个 Tool
server.tool(
  "get_weather",
  "查询指定城市的天气",
  {
    city: z.string().describe("城市名称,如 Beijing"),
  },
  async ({ city }) => {
    // 实际项目中这里调用天气 API
    const response = await fetch(
      `https://api.weatherapi.com/v1/current.json?key=YOUR_KEY&q=${city}`
    );
    const data = await response.json();

    return {
      content: [
        {
          type: "text",
          text: `${city} 当前温度 ${data.current.temp_c}°C,${data.current.condition.text}`,
        },
      ],
    };
  }
);

// 启动
const transport = new StdioServerTransport();
await server.connect(transport);

注册 Resource(数据资源)

除了 Tool,你还可以暴露 Resource:

server.resource(
  "weather://forecast/beijing",
  "北京未来 3 天天气预报",
  async (uri) => {
    const data = await fetchForecast("beijing");
    return {
      contents: [
        {
          uri: uri.href,
          mimeType: "application/json",
          text: JSON.stringify(data),
        },
      ],
    };
  }
);

在 Claude Desktop 中使用

编辑 Claude Desktop 的配置文件 ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "weather": {
      "command": "node",
      "args": ["/path/to/your/weather-server.js"]
    }
  }
}

重启 Claude Desktop,你就能在对话中说"北京今天天气怎么样?",Claude 会自动调用你的 Server。

Python 版本

如果你更喜欢 Python:

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("weather-server")

@mcp.tool()
def get_weather(city: str) -> str:
    """查询指定城市的天气"""
    # 调用天气 API
    return f"{city} 当前温度 25°C,晴"

@mcp.resource("weather://forecast/{city}")
def get_forecast(city: str) -> str:
    """获取城市天气预报"""
    return f"{city} 未来 3 天:晴→多云→小雨"

mcp.run()

Python SDK 的 FastMCP 用装饰器语法,写起来更简洁。

整个过程:定义能力 → 启动 Server → 在客户端配置 → 开始使用。 就这么简单。


MCP vs Function Calling:别搞混了

这是最常被问的问题之一。我来画个清晰的界限。

维度Function CallingMCP
定义者各 AI 厂商各自定义开放标准,Anthropic 发起
范围单次 API 调用级别完整的协议 + 生态系统
连接方式无状态,每次请求声明有状态长连接
工具发现手动声明自动发现
标准化各平台格式不同统一格式
生态各自平台内跨平台通用
安全机制基本无协议层面定义
适用场景简单的函数调用复杂的工具集成

一句话总结:Function Calling 是"让 AI 调函数",MCP 是"让 AI 连接一切"。

它们不是竞争关系,更像是不同层次的东西。Function Calling 可以看作 MCP 生态中的一个底层机制。事实上,很多 MCP Client 内部就是通过 Function Calling 来调用 MCP Server 暴露的 Tool 的。

但 MCP 提供的远不止 Tool 调用。Resource 的订阅更新、Prompt 模板、Server 的自动发现、安全权限管理……这些都是 Function Calling 不涉及的领域。

什么时候用哪个?

  • 只需要让 AI 调用几个简单函数:用 Function Calling 就够了。比如写一个查天气的 ChatBot,定义两三个 function 就行。
  • 需要让 AI 连接复杂的外部系统:用 MCP。比如让 AI 同时操作数据库、文件系统、GitHub、Slack。
  • 想构建可复用的工具生态:用 MCP。你写的 Server 可以被任何支持 MCP 的客户端使用。
  • 做产品级的 AI Agent:MCP 几乎是必选项。Agent 需要的状态管理、权限控制、工具发现,MCP 都有现成方案。

MCP 的安全模型

把 AI 连接到外部工具,安全性是绕不过去的话题。

MCP 在协议层面定义了几个安全原则:

1. 用户确认优先

敏感操作(写入文件、发送消息、执行 SQL)在执行前需要用户确认。你在 Claude Desktop 里会看到一个弹窗:“Claude 想要调用 filesystem.write_file,是否允许?”

2. 最小权限原则

MCP Server 在声明 Tool 时,可以标注权限级别。Client 端可以根据策略自动放行低风险操作、拦截高风险操作。

3. 沙箱隔离

每个 MCP Server 是独立的进程。一个 Server 的崩溃不会影响其他 Server。Server 之间也互相看不到对方的数据。

4. 传输安全

远程 Server 使用 HTTPS + OAuth 2.0 认证。协议规范明确要求不在本地存储用户凭证。

5. 资源范围限制

文件系统 Server 只能访问你配置的目录。数据库 Server 只能操作你指定的数据库。不会出现"给了 AI 读文件的权限,它把整个硬盘扫了一遍"的情况。

当然,安全不仅仅是协议能解决的。用户自己也要注意:

  • 只安装来源可信的 MCP Server
  • 定期检查 MCP Server 的权限配置
  • 敏感操作开启手动确认
  • 生产数据库只给只读权限

开发 MCP Server 的最佳实践

如果你打算认真做一个 MCP Server,以下是社区总结的一些经验:

1. Tool 的描述要写给 AI 看

AI 会根据 Tool 的名称和描述来决定什么时候调用它。描述不清楚,AI 就不知道该不该用、怎么用。

// 差的描述
server.tool("query", "查询数据", ...)

// 好的描述
server.tool(
  "search_products",
  "在商品数据库中搜索商品。支持按名称、类别、价格范围搜索。返回匹配的商品列表,每个商品包含 ID、名称、价格、库存。",
  ...
)

2. 参数用 Zod/Pydantic 严格校验

AI 生成的参数不一定 100% 正确。严格的 schema 校验能在调用时就拦住错误参数,而不是让它传到后端出 bug。

3. 错误信息要有意义

AI 需要根据错误信息决定下一步怎么做。"Error" 这种信息没用,"找不到 ID 为 42 的商品,请检查 ID 是否正确" 这种才有用。

4. 做好幂等性

AI 有时候会重试操作。一个 Tool 被调用两次不应该产生副作用(比如创建了两条重复数据)。

5. 长操作要有进度反馈

如果一个 Tool 需要运行很久(比如数据导入),用 MCP 的进度通知机制让 AI 和用户知道当前进度。


远程 MCP Server:下一个方向

到目前为止,大部分 MCP Server 还是本地运行的。但 Remote MCP Server 正在成为新趋势。

本地 Server 的限制很明显:

  • 用户需要自己安装和配置
  • 不同机器上要重复配置
  • 某些服务(云数据库、SaaS 工具)天然就是远程的

远程 MCP Server 的架构:

AI 客户端 (你的电脑)
  ↓ HTTPS + OAuth
远程 MCP Server (部署在云端)
  ↓
实际服务 (Notion API / GitHub API / 数据库)

Anthropic 已经发布了远程 MCP 的规范更新,支持 OAuth 2.0 认证流程和 Streamable HTTP 传输。这意味着未来你不需要在本地安装任何东西,只要在客户端输入一个 URL,授权一下,就能用。

几个值得关注的方向:

  • MCP Server 托管平台:类似"MCP 版的 App Store",一键启用各种 Server
  • 企业级 MCP Gateway:集中管理公司内部所有 MCP Server,统一认证、审计
  • MCP Server Marketplace:开发者可以发布自己的 Server,按使用量收费

未来展望:AI 生态的基础设施

MCP 现在的状态,有点像 2005 年的 USB 2.0:已经证明了可行性,生态正在快速增长,但还没有完全统一市场。

几个让我看好 MCP 的理由:

1. Anthropic 的开放策略

MCP 从第一天就是开放标准。源代码、规范文档、SDK 全部开源。这不是一个公司的私有协议,而是整个行业可以参与的标准。

2. 竞争对手也在加入

OpenAI 宣布支持 MCP 是一个分水岭。当两大 AI 巨头都支持同一个协议时,其他玩家很难不跟进。Google 的态度还不明朗,但多数分析认为只是时间问题。

3. 开发者体验足够好

写一个 MCP Server 的门槛非常低。TypeScript 和 Python 的 SDK 都很好用,有丰富的示例和文档。门槛低意味着生态增长快。

4. 解决了真实痛点

AI 工具割裂的问题是真实存在的。每个开发者都经历过手动在不同工具之间复制粘贴的痛苦。MCP 提供了一个优雅的解决方案。

我的判断是:MCP 大概率会成为 AI Agent 时代的核心基础设施之一。 不一定是唯一标准,但一定会是最重要的标准之一。

对于开发者来说,现在是参与 MCP 生态的最佳时机。社区还处于早期阶段,写一个热门的 MCP Server 可以快速获得关注度。更重要的是,理解 MCP 的架构思想,会帮助你更好地理解 AI Agent 的未来走向。

对于普通用户来说,不需要理解底层原理。你只需要知道:未来的 AI 工具会越来越"聪明",不是因为模型变强了,而是因为 MCP 这样的协议让 AI 能触及越来越多的数据和工具。

从聊天机器人到数字员工,中间差的不是智商,是连接能力。MCP 正在补上这一环。


快速上手指南

如果你想现在就体验 MCP:

最简单的方式:用 Claude Desktop

  1. 下载安装 Claude Desktop
  2. 编辑配置文件,添加一个文件系统 Server:
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/你的用户名/Documents"
      ]
    }
  }
}
  1. 重启 Claude Desktop
  2. 对话框左下角应该会出现工具图标,说明 MCP Server 已连接
  3. 试试说:“帮我看看 Documents 目录下有什么文件”

进阶玩法:用 Claude Code

Claude Code 天然支持 MCP,并且作为 CLI 工具,配置更灵活:

# 添加一个 MCP Server
claude mcp add github -- npx -y @modelcontextprotocol/server-github

# 查看已连接的 Server
claude mcp list

想自己开发 Server:


一句话总结

MCP 是 AI 的 USB 接口。它让 AI 从"只能聊天"进化为"能连接一切"。

如果你是开发者,现在开始学 MCP,三年后你会感谢自己。如果你是用户,只要知道 AI 变得越来越好用,背后有 MCP 的一份功劳。

这是一个正在改变 AI 工具使用方式的协议。值得关注。

本文首发于 aieii.com,一个关注 AI 工具与趋势的中文内容平台。

广告合作联系
立即联系 →
加入会员申请
了解详情 →
← Claude Code 完全指南:终端里的 AI 编程革命 2026 AI 翻译工具大横评 … →
💬 Comments
14 min read