1. 引言

MCP(Model Context Protocol,模型上下文协议) 是 Anthropic 于 2024 年 11 月发布的开放协议标准,旨在统一 AI 模型与外部数据源、工具之间的连接方式。本文将从诞生背景、核心架构、实际应用场景等维度,全面解析 MCP 协议的原理与实战。

MCP,全称 Model Context Protocol(模型上下文协议),是由 Anthropic 于 2024 年 11 月正式发布的一个开放协议标准。简单来说,它的目标是成为 AI 应用领域的"USB-C 接口"——让不同的 AI 模型和外部数据源、工具之间能够以一种标准化的方式连接和通信。

想象一下:你正在用 AI 写代码,它需要读取你本地的项目文件、查询数据库中的用户信息、再调用 Git API 查看提交历史。如果没有 MCP 协议,你需要为每个功能写一堆胶水代码,每个接口的认证方式、数据格式、错误处理都不一样;有了 MCP,AI 应用只需通过一个标准协议就能完成所有这些操作。这就是 MCP 要解决的核心问题。

MCP 的诞生背景

在 MCP 出现之前,AI 应用与外部世界的交互方式主要有以下几种:

  1. Function Calling:OpenAI 等模型提供的函数调用能力,允许模型输出结构化的函数调用参数,但需要开发者自行实现函数执行逻辑和认证管理。
  2. 插件系统:如 ChatGPT Plugin,但每个插件有自己独立的 API 规范和认证方式,缺乏统一标准。
  3. 自定义 Agent 框架:如 LangChain、AutoGPT 等,虽然提供了工具调用能力,但工具的定义和调用方式各不相同,难以跨框架复用。

MCP 正是在这种碎片化的背景下诞生的,它试图为 AI 工具集成提供一个统一的、标准化的协议层

谁在使用 MCP?

目前 MCP 已经获得了广泛的生态支持:

  • Claude Desktop:Anthropic 官方桌面客户端原生支持 MCP,可以直接配置 MCP 服务器。
  • VS Code 扩展:通过 Continue.dev 等插件,VS Code 中的 AI 助手可以连接 MCP 服务器。
  • JetBrains IDE:同样通过插件支持 MCP 协议。
  • 自定义应用:开发者可以在自己的 AI 应用中集成 MCP 客户端 SDK(支持 Python、TypeScript、Java 等语言)。

截至 2025 年中,MCP 生态中已有超过 1000 个公开的 MCP 服务器实现,覆盖数据库、文件系统、云服务、开发工具、办公协作等各个领域。

2. 为什么需要 MCP?——传统 AI 工具集成的痛点

在过去,开发一个 AI 应用(比如一个能查询数据库的聊天机器人)通常需要为每个数据源或工具编写大量的定制化代码。这种"点对点"的连接方式不仅开发成本高,而且难以维护和扩展。MCP 协议正是为了解决 AI 工具集成中的这些核心痛点而诞生。

传统方式的痛点

举个例子:假设你要让 AI 助手能同时查询 MySQL 数据库、读取本地 CSV 文件、调用公司内部的 API 获取订单数据。传统做法是分别为这三个数据源编写独立的接口代码:

# 传统方式:每个数据源独立实现

# 1. 查询 MySQL
def query_mysql(sql):
    import pymysql
    conn = pymysql.connect(host="localhost", user="root", password="xxx", database="sales")
    cursor = conn.cursor()
    cursor.execute(sql)
    return cursor.fetchall()

# 2. 读取 CSV
def read_csv(filepath):
    import pandas as pd
    return pd.read_csv(filepath).to_dict("records")

# 3. 调用内部 API
def call_internal_api(endpoint, params):
    import requests
    headers = {"Authorization": "Bearer xxx"}
    return requests.get(f"https://api.company.com/{endpoint}", params=params, headers=headers).json()

每个接口的认证方式、数据格式、错误处理都不一样。如果后续要换成 PostgreSQL 或增加一个 Redis 缓存,又得重新写一遍。更麻烦的是,AI 模型需要知道什么时候调用哪个函数、传什么参数,这通常需要复杂的提示词工程来引导。

MCP 的解决思路

MCP 的出现就是为了解决这个问题。它提供了一个通用的"中间层",让 AI 模型不再需要关心背后连接的是哪个数据库、哪个 API 或哪个文件系统,只需通过 MCP 协议进行标准化的请求和响应即可。

使用 MCP 后的对比

维度 传统方式 MCP 方式
接入新数据源 编写定制化接口代码 配置一个 MCP 服务器
认证管理 每个接口独立处理 统一在 MCP 服务器层管理
错误处理 各自实现 标准化的错误码和重试机制
跨应用复用 不可复用 一个 MCP 服务器可被多个 AI 应用使用
维护成本 随数据源数量线性增长 一次开发,长期受益

一次接入,到处可用——这就是 MCP 最核心的价值主张。

MCP 与 Function Calling 的关系

很多开发者会问:MCP 和 OpenAI 的 Function Calling 有什么区别?简单来说:

  • Function Calling 是模型层面的能力,让模型能输出结构化的函数调用参数。
  • MCP 是应用层面的协议,定义了客户端和服务器之间如何通信、如何发现可用工具、如何执行调用。

两者可以协同工作:AI 模型通过 Function Calling 决定调用哪个工具,而 MCP 负责将这个调用路由到对应的服务器并返回结果。MCP 实际上是对 Function Calling 的上层封装和标准化

3. MCP 的核心架构——客户端-服务器协议详解

MCP 采用经典的 客户端-服务器(Client-Server) 架构,但在此基础上增加了几个关键角色。理解 MCP 架构是掌握 MCP 协议的基础。

架构角色详解

  • MCP 主机(Host):通常是用户直接交互的 AI 应用,比如 Claude Desktop、VS Code 插件等。它是发起请求的一方,负责管理用户会话和多个 MCP 客户端的生命周期。
  • MCP 客户端(Client):内嵌在主机中,负责与 MCP 服务器建立一对一的连接。每个 MCP 服务器对应一个独立的客户端实例。客户端负责协议协商、请求序列化和响应反序列化。
  • MCP 服务器(Server):一个轻量级的程序,它通过标准化的协议暴露特定的功能,比如"查询数据库"、“读取本地文件”、"调用某个 API"等。服务器可以独立部署,也可以作为子进程运行。

通信协议

MCP 支持两种传输层协议:

  1. stdio(标准输入输出):MCP 服务器作为子进程运行,通过标准输入输出与客户端通信。这种方式配置简单,适合本地开发场景。
  2. SSE(Server-Sent Events):MCP 服务器作为 HTTP 服务运行,客户端通过 HTTP 请求发送指令,服务器通过 SSE 推送结果。这种方式适合远程部署和多人共享。

工作流程

下面是一个完整的 MCP 交互流程:

MCP 服务器(数据库) MCP 客户端 MCP 主机(Claude Desktop) 用户 MCP 服务器(数据库) MCP 客户端 MCP 主机(Claude Desktop) 用户 "帮我查一下上个月的销售数据" 解析用户意图,确定需要调用数据库 发送标准化 MCP 请求(list_tools + call_tool) 执行 SQL 查询 返回标准化结果(JSON格式) 返回查询结果 AI 模型理解结果并生成自然语言回复 "上个月总销售额为 1,234,567 元,同比增长 15%"

协议生命周期

MCP 连接的生命周期分为三个阶段:

  1. 初始化阶段:客户端和服务器进行版本协商、能力声明。服务器告诉客户端它支持哪些功能(资源、工具、提示等)。
  2. 运行阶段:客户端发送请求(如列出可用工具、调用工具、读取资源),服务器执行并返回结果。
  3. 关闭阶段:任意一方发起关闭请求,清理资源,断开连接。

一个简单的 MCP 服务器示例

下面是一个用 Python 编写的 MCP 服务器示例,它暴露了一个"获取天气"的工具:

# weather_server.py
from mcp.server import Server, NotificationOptions
from mcp.server.models import InitializationOptions
import mcp.server.stdio
import httpx

# 创建 MCP 服务器实例
server = Server("weather-server")

# 注册工具:获取天气
@server.list_tools()
async def handle_list_tools():
    return [
        {
            "name": "get_weather",
            "description": "获取指定城市的当前天气信息",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "城市名称,如 北京、上海"
                    }
                },
                "required": ["city"]
            }
        }
    ]

# 执行工具调用
@server.call_tool()
async def handle_call_tool(name: str, arguments: dict):
    if name == "get_weather":
        city = arguments["city"]
        # 调用外部天气 API
        async with httpx.AsyncClient() as client:
            resp = await client.get(
                f"https://api.weather.com/v1/city/{city}",
                params={"key": "your-api-key"}
            )
            data = resp.json()
        return {
            "content": [
                {
                    "type": "text",
                    "text": f"{city}当前天气:{data['temperature']}°C,{data['condition']}"
                }
            ]
        }

# 启动服务器(通过 stdio)
async def main():
    async with mcp.server.stdio.stdio_server() as (read_stream, write_stream):
        await server.run(
            read_stream,
            write_stream,
            InitializationOptions(
                server_name="weather-server",
                server_version="1.0.0"
            )
        )

if __name__ == "__main__":
    import asyncio
    asyncio.run(main())

配置 MCP 服务器

在 Claude Desktop 中配置上述天气服务器,只需在配置文件 claude_desktop_config.json 中添加:

{
  "mcpServers": {
    "weather": {
      "command": "python",
      "args": ["/path/to/weather_server.py"]
    }
  }
}

启动 Claude Desktop 后,AI 助手就能自动发现并使用这个天气查询工具了。

4. MCP 能做什么?——三大核心能力详解

MCP 的核心能力可以概括为三大类,每一类都有非常具体的应用场景。了解这些能力有助于你更好地规划 MCP 服务器的开发方向。

4.1 资源(Resources)——让 AI 拥有"眼睛"和"耳朵"

资源能力让 AI 模型能够读取和访问外部数据。实际能做什么?

  • 读取本地文件:AI 可以直接读取你电脑上的代码文件、日志文件、配置文件,帮你分析 Bug 或总结代码逻辑。比如你写了一个 Python 脚本报错了,AI 能直接读取脚本内容和报错日志,定位问题。
  • 查询数据库:AI 可以连接 MySQL、PostgreSQL、MongoDB 等数据库,执行 SQL 查询并返回结果。比如你问"上个月销售额最高的产品是什么?",AI 自动查询数据库并给出答案。
  • 访问网页内容:AI 可以抓取指定 URL 的网页内容,用于信息提取、竞品分析或文档总结。
  • 读取 API 响应:AI 可以调用 REST API 获取实时数据,比如天气信息、股票价格、GitHub 仓库状态等。

4.2 工具(Tools)——让 AI 拥有"手"和"脚"

工具能力让 AI 模型能够执行外部操作,而不仅仅是"读"。实际能做什么?

  • 发送邮件和消息:AI 可以帮你撰写并发送邮件、在 Slack 上发消息、创建钉钉通知。比如你说"给团队发一封周报邮件",AI 自动生成内容并发送。
  • 操作文件系统:AI 可以创建、修改、删除文件,帮你整理目录结构、批量重命名文件、生成项目脚手架。
  • 调用第三方 API:AI 可以调用 GitHub API 创建 Issue、调用 Jira API 创建任务、调用飞书 API 发送审批。比如你说"给这个仓库提一个 Bug Issue",AI 直接帮你创建。
  • 执行代码和命令:AI 可以在安全沙箱中运行代码片段、执行 Shell 命令,帮你做数据分析、图片处理、自动化脚本执行。
  • 创建日历事件:AI 可以读取你的日程安排,帮你创建会议邀请、设置提醒。

4.3 提示(Prompts)——让交互更高效

提示能力提供预定义的、可复用的交互模板。实际能做什么?

  • 代码审查模板:定义一个"代码审查"提示模板,每次 AI 审查代码时自动按固定格式输出:问题类型、严重级别、修改建议。
  • 周报生成模板:定义一个"周报生成"模板,AI 自动从你的 Git 提交记录、任务管理工具中提取信息,生成结构化周报。
  • 数据分析模板:定义一个"数据分析"模板,AI 自动按"数据概览→趋势分析→异常检测→建议"的流程输出分析报告。

一个完整的实际场景

假设你是一名后端开发者,正在用 AI 助手排查线上问题:

  1. 读取日志(资源):AI 通过 MCP 读取服务器上的错误日志文件。
  2. 查询数据库(资源):AI 查询数据库中的用户订单记录,确认受影响的数据范围。
  3. 执行诊断脚本(工具):AI 运行一个诊断 Shell 脚本,获取当前系统状态。
  4. 创建 Jira 任务(工具):AI 自动在 Jira 上创建一个 Bug 修复任务,附上日志和诊断结果。
  5. 发送通知(工具):AI 在团队 Slack 频道发送一条告警通知。

整个过程,AI 通过 MCP 协议与多个系统交互,而你只需要用自然语言下达指令。

5. 总结

MCP(Model Context Protocol,模型上下文协议) 是一个旨在标准化 AI 模型与外部世界交互方式的开放协议。它通过客户端-服务器架构,将 AI 应用与各种数据源和工具解耦,从而极大地降低了开发复杂度,提升了 AI 系统的可扩展性和互操作性。对于正在构建 AI Agent 或智能应用的开发者来说,掌握 MCP 协议已经成为一项越来越重要的技能。

MCP 带来的实际价值

  • 对开发者:不再需要为每个数据源写定制化接口,一次开发 MCP 服务器,所有兼容的 AI 应用都能使用。开发效率提升 5-10 倍,维护成本降低 80% 以上。
  • 对用户:AI 助手不再只是一个"聊天框",而是能真正帮你操作文件、查询数据、发送消息、管理任务的智能助手。你只需要用自然语言下达指令。
  • 对企业:可以统一管理 AI 能访问的数据和工具权限,安全可控。MCP 服务器的认证、授权、审计都可以集中管理,满足合规要求。

快速上手建议

如果你对 MCP 感兴趣,可以按以下步骤快速上手:

  1. 安装 Claude Desktop:下载并安装 Claude Desktop 客户端,体验 MCP 协议的原生支持。
  2. 尝试内置 MCP 服务器:Claude Desktop 内置了文件系统、终端等基础 MCP 服务器,可以直接体验 MCP 的工作流程。
  3. 配置第三方 MCP 服务器:从 MCP 生态中挑选你需要的服务器(如数据库、GitHub、Slack 等),按文档配置。
  4. 开发自己的 MCP 服务器:使用官方 SDK(Python/TypeScript)开发自定义 MCP 服务器,满足特定业务需求。
  5. 参与社区:在 GitHub 上搜索 awesome-mcp-servers,发现更多社区贡献的 MCP 服务器实现,也可以贡献自己的实现。

未来展望

可以预见,随着生态的成熟,MCP 将成为构建下一代智能 AI 应用的关键基础设施——就像 USB-C 统一了充电接口一样,MCP 正在统一 AI 与世界的连接方式。

未来的 AI 应用将不再是一个个孤立的"聊天机器人",而是能够深度融入我们的工作流、自动完成复杂任务的智能助手。MCP 正是实现这一愿景的关键拼图。如果你正在学习或使用 AI 开发,现在就是了解 MCP 协议的最佳时机。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐