目标读者:具备一定编程基础,但尚未涉足 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. 图解红黑树RBT

    rotation:

  2. Kotlin:【字符串操作】substring、split、replace、字符串比较==与===、foreach遍历字符

    字符串的内存区域问题: 都在常量池内,相同的字符串比较属于同一引用 在字符串常量池开辟了新的内存区域,一共有三个对象,所以引用比较不相等

  3. Kotlin基础语法

  4. ChatGpt怎么玩

    注册 梯子 先找好梯子, 归属地最好是米国之类的, 否则提示 OpenAI's services are not available in your country. 注: 最好用固定代理, 如tro ...

  5. 小程序uni-app中uview中select选择器第二次无法选中设置的默认值

    <u-select v-model="subjectFlag" title="选择科目" @confirm="okSubjecthander&q ...

  6. Apache Amoro数据湖管理和治理工具部署

    一.Amoro介绍 2024 年 3 月 11 日,Amoro 项目顺利通过投票,正式进入 Apache 软件基金会(ASF,Apache Software Foundation)的孵化器,成为 AS ...

  7. 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-12- iframe操作-上篇(详细教程)

    1.简介 原估计宏哥这里就不对iframe这个知识点做介绍和讲解了,因为前边的窗口切换就为这种网页处理提供了思路,另一个原因就是虽然iframe很强大,但是现在很少有网站用它了.但是还是有小伙伴或者童 ...

  8. 在python中通过模型api

    前言 首先我选择的siliconflow(硅基流动)平台来调用它的api,无为啥,就是因为我点击了别人的邀请链接它送了我14块余额,那个人同样也获得14块余额 这时候,就不得不说一下我的邀请链接了ht ...

  9. java推送企业微信消息

    <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcl ...

  10. 关于JS中继承

    继承,我理解就是把所有实例可能用到的属性和方法抽出来,单独放在一个"超类"中,一方面避免重复写代码,另一方面也会节省内存.如果单独用原型继承,引用值的处理是个问题 如果单独用cal ...