目标读者:具备一定编程基础,但尚未涉足 AI 编程的开发者

本文目的:帮助你理解 MCP 的核心概念、技术优势、运作机制,并指导你如何使用 MCP 构建智能体项目。


什么是 MCP?

MCP,全称 Model Context Protocol,是由 Anthropic 于 2024 年底推出的开源协议,旨在为大型语言模型(LLM)与外部数据源、工具之间建立统一的交互标准。citeturn0news12

MCP 的现实类比:AI 世界的“USB 接口”

在 USB 出现之前,不同设备之间的连接需要各自定制的接口,极为繁琐。而 USB 的出现,统一了接口标准,使得“即插即用”成为可能。

同样地,MCP 为 AI 系统提供了类似的标准化接口,使得不同的 AI 应用可以方便地连接到各种数据源和工具,无需为每种组合编写特定的集成代码。


为什么需要 MCP?——传统架构 vs MCP 架构对比

在深入了解 MCP(Model Context Protocol)之前,我们先来回顾一下传统 AI 应用的集成方式,以及它们在实际开发中遇到的挑战。

传统 AI 应用架构的挑战

在传统架构中,AI 应用通常通过调用各个服务的 API 来获取数据或执行操作。这种方式存在以下问题:

  • 集成复杂:每个服务都有不同的 API 接口、认证方式和数据格式,开发者需要为每个服务编写特定的集成代码。
  • 维护困难:服务的更新可能导致 API 变更,开发者需要不断维护和更新集成代码。
  • 上下文缺失:AI 模型在与多个服务交互时,难以保持一致的上下文,影响响应的准确性。
  • 扩展性差:每新增一个服务,都需要重新编写集成代码,增加了系统的复杂度。

MCP 架构的优势

MCP 提供了一种标准化的协议,使得 AI 应用可以通过统一的方式与各种服务和数据源交互,带来了以下优势:

  • 标准化接口:一次集成,处处可用,显著降低开发和维护成本。
  • 上下文保持:通过统一的协议,AI 模型可以在不同的服务之间保持一致的上下文。
  • 模块化设计:支持资源、提示词和工具的统一管理,提升系统的可扩展性和可维护性。
  • 动态发现:AI 模型可以动态发现并使用可用的工具和资源,无需提前硬编码每个接口。
  • 双向通信:支持实时的双向通信,AI 模型不仅可以获取数据,还可以主动触发操作。

架构对比表

特性 传统架构 MCP 架构
集成方式 每个服务单独集成,需编写特定代码 统一协议,标准化集成
开发复杂度 高,需要处理多个 API 的差异 低,统一的协议简化了开发
维护成本 高,服务更新可能导致集成代码需要频繁修改 低,标准化接口减少了维护工作
上下文管理 难以保持一致的上下文,影响响应准确性 统一的协议有助于保持上下文一致
扩展性 差,每新增一个服务都需要重新编写集成代码 强,模块化设计支持快速扩展
动态发现与使用 不支持,需提前硬编码每个接口 支持,AI 模型可以动态发现并使用可用的工具和资源
通信方式 通常为单向请求响应模式 支持实时的双向通信,提升交互能力

通过上述对比,我们可以看出 MCP 架构在多个方面优于传统架构,特别是在集成效率、上下文管理和系统扩展性方面。因此,采用 MCP 架构可以显著提升 AI 应用的开发效率和用户体验。


⚙️ MCP 的运作原理

架构概览

MCP 采用客户端-服务器架构,主要包括以下组件:

  • MCP Host:承载 AI 应用的环境,如 Claude Desktop、IDE 等。
  • MCP Client:在 Host 内部运行,负责与 MCP Server 建立连接。
  • MCP Server:提供具体的资源、工具和提示词,供 AI 模型使用。
  • 本地数据源:如文件系统、数据库等。
  • 远程服务:如 GitHub、Google Drive 等。

通信流程

  1. 初始化:Client 向 Server 发送初始化请求,协商协议版本和能力。
  2. 消息交换:双方通过 JSON-RPC 2.0 协议进行请求、响应和通知的交换。
  3. 终止连接:任一方可以根据需要终止连接,确保资源的正确释放。

️ 如何使用 MCP 构建智能体项目?

安装 MCP SDK

MCP 提供了多种语言的 SDK,以下以 TypeScript 为例:

npm install @modelcontextprotocol/sdk

示例:构建一个与 PostgreSQL 数据库交互的智能体

  1. 配置 MCP Server
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://localhost/mydb"]
}
}
}
  1. 在 MCP Client 中发送请求
const client = new MCPClient();
await client.connect("localhost"); const response = await client.send({
method: "tools.execute",
params: {
tool: "database",
action: "query",
args: { sql: "SELECT * FROM users" }
}
}); console.log(response.result);

通过上述配置,AI 模型可以直接访问 PostgreSQL 数据库,执行查询操作,而无需编写额外的集成代码。


结语

MCP 的出现,为 AI 应用的开发带来了前所未有的便利性和灵活性。通过标准化的协议,开发者可以更专注于业务逻辑的实现,而无需为每个数据源编写繁琐的集成代码。

无论你是 AI 编程的新手,还是希望提升现有系统的开发者,MCP 都值得你深入了解和尝试。


延伸阅读

🧠 Model Context Protocol(MCP)详解:AI 编程新时代的“USB 接口的更多相关文章

  1. 前端后台以及游戏中使用Google Protocol Buffer详解

    前端后台以及游戏中使用Google Protocol Buffer详解 0.什么是protoBuf protoBuf是一种灵活高效的独立于语言平台的结构化数据表示方法,与XML相比,protoBuf更 ...

  2. context.Session[“xxx”]详解

    1.在aspx和aspx.cs中,都是以Session[“xxx”]=”aaa”和aaa=Session[“xxx”].ToString()进行读写.而在ashx中,Session都要使用contex ...

  3. [转]Hadoop集群_WordCount运行详解--MapReduce编程模型

    Hadoop集群_WordCount运行详解--MapReduce编程模型 下面这篇文章写得非常好,有利于初学mapreduce的入门 http://www.nosqldb.cn/1369099810 ...

  4. 详解Python编程中基本的数学计算使用

    详解Python编程中基本的数学计算使用 在Python中,对数的规定比较简单,基本在小学数学水平即可理解. 那么,做为零基础学习这,也就从计算小学数学题目开始吧.因为从这里开始,数学的基础知识列位肯 ...

  5. linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)

    linux useradd(adduser)命令参数及用法详解(linux创建新用户命令) useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号 ...

  6. Hadoop详解(09) - Hadoop新特性

    Hadoop详解(09) - Hadoop新特性 Hadoop2.x新特性 远程主机之间的文件复制 scp实现两个远程主机之间的文件复制 推 push:scp -r hello.txt root@ha ...

  7. volatile关键字的详解-并发编程的体现

    xl_echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! 参 ...

  8. APNS推送服务证书制作 图文详解教程(新)

    iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务 ...

  9. Js apply方法与call方法详解 附ES6新写法

    我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家 ...

  10. FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

随机推荐

  1. 在离线环境使用nuget包

    原来程序集的引用 一个项目所有功能我们不可能都自己写对吧.这个时代 引用一大片的第三方包  项目源文件几百兆 ,有可能第三方包占了总体积99%.有可能我们自己写的代码不过几十行.想想我们原来的 老时代 ...

  2. 微信小程序音频播放

    微信小程序音频播放 // 开启播放音频 startAudio(){ const innerAudioContext = uni.createInnerAudioContext();//创建并返回内部 ...

  3. Windows中使用http-server搭建一个本地服务

    我们在开发中,经常会需要搭建一个本地服务去浏览开发的静态html文件,如果当静态文件中存在一些http.https或者访问文件之类的请求时,直接双击打开html文件是会报错预览不成功的,这时候就需要将 ...

  4. Linux 之 vi / vim

    vi / vim ​ Vim 是从 vi 发展出来的一个文本编辑器.代码补全.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用. 简单的来说, vi 是老式的字处理器,不过功能已经很齐全了 ...

  5. lxl 讲课的记录

    D1 lxl:LCT 没有前途.所以平衡树一般只需要 fhq-treap. 线段树.平衡树简单例题 P3215 注意到抵消掉合法括号串之后一定是这样的情况:))))((((即前缀最小值 \(a\).后 ...

  6. Iceberg v2表写入和微批治理冲突,如何保证治理准确性

    一.背景 微批治理任务分多个job治理一张表,还有一个Flink程序每5分钟一次写入iceberg表,如治理任务划分了20个job治理一张表,在治理期间存在新的数据更新,如何保证治理准确性 二.治理时 ...

  7. vue集成amis

    一.下载amis 方式一:git下载sdk.tar.gz,https://github.com/baidu/amis/releases 方式二:npm i amis 来下载,在 node_module ...

  8. [AHOI2013] 差异 题解

    后缀自动机维护子串公共后缀方便一点,所以直接倒序插入字符串即可. 我们给所有前缀打上标记,然后跑树形 \(dp\),设 \(sum_i\) 表示第 \(i\) 个点的子树内有多少个前缀,\(ans\) ...

  9. [SCOI2007] 蜥蜴 题解

    发现实际上就是在求有多少只蜥蜴能逃出来. 发现可以将柱子拆成入点和出点两部分,自己的出点向别人的入点连边,自己的入点向自己的出点连边.最后再加一个超级源点 \(S\),连接所有有蜥蜴的柱子入点:再加一 ...

  10. Magnet AXIOM使用+2024獬豸杯实战

    Magnet AXIOM+2024獬豸杯实战 百度网盘链接 2024獬豸杯:https://pan.baidu.com/s/1t_6Fwl6RgmEtF0UXRfVD1A?pwd=j583#list/ ...