【MCP协议】AI 如何_连上_外部世界——Model Context Protocol 原理剖析

你有没有想过一个问题:ChatGPT 能写出漂亮的代码,却没办法直接读你电脑里的文件;Claude 能理解复杂的业务逻辑,却无法查询你公司的数据库。

这不是模型能力不够,而是模型被关在一个封闭的沙箱里。它没有眼睛去看你的文件系统,也没有手去调用你的 API。

解决这个问题的传统方式是:每接一个新工具,就写一套定制集成代码。数据库一套,GitHub 一套,Slack 再来一套------十个工具十套代码,开发和维护成本线性增长。

MCP(Model Context Protocol,模型上下文协议)就是为了解决这个碎片化问题而生的。

读完这篇文章,你将理解 MCP 是什么、它解决了什么核心矛盾、以及它是怎么工作的。


文章目录

    • [背景:AI 模型的"信息孤岛"困境](#背景:AI 模型的"信息孤岛"困境)
    • [MCP 核心概念:三个角色和三种能力](#MCP 核心概念:三个角色和三种能力)
    • [MCP 是怎样工作的](#MCP 是怎样工作的)
    • [MCP 为什么重要](#MCP 为什么重要)
      • [一个简单的 MCP Server 示例](#一个简单的 MCP Server 示例)
    • 总结
    • 参考

背景:AI 模型的"信息孤岛"困境

先看一个典型场景。假设你想让 Claude 帮你分析上周的销售数据,数据存在公司的 PostgreSQL 里。你会怎么做?

目前最直接的做法是:手动导出 CSV → 粘贴给大模型 → 等它分析。这个过程里你做了一件很"不 AI"的事情------人工搬运数据

如果你想让 AI 自动完成这件事,就需要写一段代码,让 AI 能连接数据库。问题是,下周你还需要连接mysql数据库,下下周需要调用另一个API,每次都要重写一套适配层。每套适配层都要处理认证、格式转换、错误处理,工作量惊人。

这不是 AI 的问题,是接口标准化的问题。 就像当年的 USB------在 USB 出现之前,键盘用 PS/2 口,打印机用并口,鼠标用串口,每个外设都要专门的驱动。USB 用一个统一标准终结了这种混乱。

MCP 想做的事,就是成为 AI 时代的"USB-C 接口"------它定义了一套标准协议,让任何 AI 应用都能用同一种方式连接任何外部工具和数据源。

MCP 核心概念:三个角色和三种能力

三个角色

MCP 的架构里定义了三个角色:

角色 职责 类比
Host(宿主) AI 应用本身,比如 Claude Desktop、VS Code 顾客------提出需求的人
Client(客户端) 运行在 Host 内部,负责和 Server 建立一对一连接 服务员------传递顾客的需求
Server(服务端) 暴露具体能力的服务,比如文件系统 Server、数据库 Server 厨房------真正干活的地方

关键理解:一个 Host 可以连接多个 Server,但每个 Client 只对接到一个 Server。这就像一间餐厅可以同时连接多个厨房,但每个服务员只负责一个厨房的沟通。

三种核心能力

MCP Server 可以向 AI 暴露三类能力:

1. Tools(工具)------让 AI"做事情"

Tool 是模型可以调用的函数。比如一个文件系统 Server 可以提供 read_filewrite_filelist_directory 这些 tool。模型决定什么时候 调用、用什么参数调用,但真正执行的是 Server 端。

plain 复制代码
## 一个文件读取 tool 的定义
- 名称:read_file
- 描述:读取指定路径的文件内容
- 参数:
  - path(必填):文件路径
  - encoding(可选):编码方式,默认 utf-8

2. Resources(资源)------让 AI"看数据"

Resource 是模型可以读取的上下文数据。和 Tool 不同,Resource 是被动的------它不执行操作,只提供信息。

plain 复制代码
## 一个数据库表结构的 resource
- URI:postgres://sales/orders/schema
- 内容:orders 表的列定义和索引信息

Tool 和 Resource 的区别很关键:Tool = 动作,Resource = 数据。查数据库表结构是 Resource,执行一条 UPDATE 是 Tool。

3. Prompts(提示模板)------让用户"快速引导 AI"

Prompts 是预定义的提示词模板,帮助用户快速发起标准化的任务。比如一个代码审查 Server 可以提供 "Review this code for bugs" 的 prompt 模板。

MCP 是怎样工作的

通信层:JSON-RPC 2.0

MCP 在底层使用 JSON-RPC 2.0 作为通信协议。简单说就是:Client 和 Server 之间通过 JSON 格式的消息来交互,一个请求对应一个响应,结构清晰,解析简单。

一个典型的请求长这样:

json 复制代码
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "read_file",
    "arguments": { "path": "/data/report.csv" }
  },
  "id": 1
}

对应的响应:

json 复制代码
{
  "jsonrpc": "2.0",
  "result": {
    "content": [{ "type": "text", "text": "销售额,月份\n10000,1月\n..." }]
  },
  "id": 1
}

传输层:两种连接方式

MCP 支持两种传输方式:

  • stdio(标准输入输出):Client 以子进程方式启动 Server,通过标准输入输出流通信。适合本地工具,简单高效。
  • HTTP SSE(Server-Sent Events):通过 HTTP 长连接通信,Client 发请求,Server 用 SSE 推送响应和通知。适合远程服务和需要流式返回的场景。

两种方式各有适用场景:本地的文件系统 Server 用 stdio 就够;面向团队的共享 API Server 则用 HTTP 部署。

完整的调用生命周期

一个完整的 MCP 调用流程分为三个阶段:

plain 复制代码
初始化握手 → 能力发现 → 调用执行

阶段一:初始化握手

Client 和 Server 建立连接后,先交换基本信息------各自支持什么协议版本、有什么能力声明。

阶段二:能力发现

Client 向 Server 查询"你能做什么"。Server 返回自己提供的 tools、resources、prompts 的完整清单。这个清单就是 AI 模型用来决策的"菜单"------模型看到菜单后,自行判断:当前任务该调用哪个 tool、该读取哪个 resource。

阶段三:调用执行

模型决定了要做什么之后,通过 Client 向 Server 发送具体的调用请求。Server 执行并返回结果。这个结果会作为新的上下文喂给模型,模型再根据结果决定下一步是继续调用其他 tool,还是直接给出最终回答。

这整个过程对用户是透明的------你只需要告诉 AI 你想做什么,AI 自己决定调用什么工具、怎样组合、如何解读结果。

MCP 为什么重要

到这里,你应该已经理解了 MCP 的核心价值:

对 AI 应用开发者:不用再为每个工具写适配代码。Claude Desktop 已经内置了 MCP 支持,你只需配置一个 JSON 文件指向你的 MCP Server,AI 就能获得新能力。

对工具/服务开发者:实现一次 MCP Server 接口,你的服务就能被所有支持 MCP 的 AI 应用使用。不用分别适配 Claude、Cursor、VS Code。

对整个生态:一个开放标准意味着社区可以繁荣生长。有人开发通用的文件系统 Server、数据库 Server,有人开发专用的 Figma Server、Notion Server,所有人都能用。

目前主流支持 MCP 的 AI 工具包括:

  • Claude Desktop:原生支持,配置即用
  • Cursor / VS Code:通过扩展支持
  • Continue.dev:开源 AI 编程助手
  • 越来越多的工具正在加入

一个简单的 MCP Server 示例

下面是一个最小化的 MCP Server(Python 实现),它提供一个查询天气的 tool:

python 复制代码
from mcp.server import Server, NotificationOptions
from mcp.server.models import InitializationCapabilities

# 创建 Server 实例
server = Server("weather-server")

# 注册一个 tool:获取城市天气
@server.list_tools()
async def list_tools():
    return [
        {
            "name": "get_weather",
            "description": "获取指定城市的天气信息",
            "inputSchema": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "城市名称,如 'Beijing'"
                    }
                },
                "required": ["city"]
            }
        }
    ]

# 实现 tool 的调用逻辑
@server.call_tool()
async def call_tool(name: str, arguments: dict):
    if name == "get_weather":
        city = arguments["city"]
        # 实际场景中这里会调用真实天气 API
        return {
            "content": [
                {"type": "text", "text": f"{city}当前天气:晴,23°C"}
            ]
        }

配置到比如Claude Desktop 后,你就可以直接问:"北京今天天气怎么样?"------Claude 会自动发现并调用这个 tool 来获取天气。

总结

MCP 解决的是一件简单但重要的事:让 AI 和外部世界用同一种语言对话

它不复杂------核心就是三个角色(Host、Client、Server)加三种能力(Tools、Resources、Prompts),底层基于 JSON-RPC 2.0 通信。但正是这种简单性,让它有可能成为 AI 时代的基础设施标准。

当然,MCP 也有它的局限性:目前对复杂权限控制、多用户场景的支持还不够完善;大规模分布式部署的实践还在探索中。但作为一项诞生不到两年的技术,它的发展速度已经超出了很多人的预期。

如果你是 AI 应用开发者 ,建议现在就试着跑一个 MCP Server 体验一下------从 Anthropic 的官方 quickstart 开始,十分钟就能让 Claude 获得一个新技能。

参考

MCP 官方文档------最权威的参考资料

MCP GitHub 仓库------规范和 SDK 源码

Anthropic 的 MCP 介绍博客------官方的背景说明

model-context-protocol.基础协议

What is the Model Context Protocol (MCP)? - Model Context Protocol

Model Context Protocol 中文文档 - MCP Wiki

MCP协议:AI时代的上下文集成革命

智能体通信协议-Hello-Agents

相关推荐
Ricky05531 小时前
AgriDet:基于农业检测框架的植物叶片病害严重程度分类(印度2023年研究)
人工智能·分类·数据挖掘
AI人工智能+1 小时前
银行回单识别系统通过融合计算机视觉、深度学习和自然语言处理技术,实现了财务凭证的智能化处理
人工智能·深度学习·ocr·银行回单识别
啦啦啦_99991 小时前
案例之 PyTorch模拟线性回归
人工智能·pytorch·线性回归
戴西软件2 小时前
戴西软件入选2026年安徽省制造业数智化转型服务商名单
java·大数据·服务器·前端·人工智能
牧子川2 小时前
014-国产大模型API封装
人工智能·大模型·api 调用
Master_oid3 小时前
机器学习42:线性回归基础篇
人工智能·机器学习·线性回归
anthea_luo3 小时前
机器学习中的视觉与自然语言处理
人工智能
明月照山海-3 小时前
机器学习周报四十五
人工智能·机器学习
weelinking5 小时前
【2026】08_Claude与版本控制:Git协作技巧
数据库·人工智能·git·python·数据挖掘·交互·cloudera