图解MCP:Model Context Protocol

news2025/4/21 10:37:55

🧠 向所有学习者致敬!

“学习不是装满一桶水,而是点燃一把火。” —— 叶芝


我的博客主页: https://lizheng.blog.csdn.net

🌐 欢迎点击加入AI人工智能社区!

🚀 让我们一起努力,共创AI未来! 🚀


直白点说,MCP 就像是 AI 应用的 USB-C 接口。

就跟 USB-C 能以标准化的方式把各种设备和配件连接起来一样,MCP 也把 AI 应用连接到不同数据源和工具的方式给标准化了。

咱们再深入一点,从技术角度瞅瞅。

说到底,MCP 采用的是客户端 - 服务器架构,一个宿主应用可以连接到多个服务器。

它有三个关键组成部分:

  • 宿主
  • 客户端
  • 服务器

在深入之前,先大致瞅瞅它们的概览👇

宿主 代表任何 AI 应用(比如 Claude 桌面版、Cursor),它为 AI 交互提供环境,访问工具和数据,并运行 MCP 客户端。

MCP 客户端 在宿主内部运行,用来和 MCP 服务器进行通信。

最后,MCP 服务器 暴露特定的能力,并提供对数据的访问,比如:

  • 工具:让 LLM(大型语言模型)能够通过你的服务器执行操作。
  • 资源:将服务器上的数据和内容暴露给 LLM。
  • 提示模板:创建可复用的提示模板和工作流。

搞清楚客户端和服务器之间的通信,对于构建自己的 MCP 客户端 - 服务器来说至关重要。

那咱们就瞅瞅它们是怎么通信的。

在一步步拆解之前,先看看下面这张图…

首先,是能力交换:

  • 客户端发送一个初始请求,去了解服务器的能力。
  • 然后服务器回复它的能力详情。
  • 比如说,一个天气 API 服务器被调用时,就可以回复可用的“工具”、“提示模板”以及任何其他资源,供客户端使用。

完成这个交换后,客户端就会确认连接成功,之后就可以继续进一步的消息交换了。

这玩意儿厉害的地方就在于:

在传统的 API 设置里:

  • 假如你的 API 最初需要两个参数(比如天气服务的 locationdate),用户就得按照这些精确的参数来集成他们的应用。

  • 后来,要是你决定再加一个必填的参数(比如温度单位的 unit,是摄氏度还是华氏度),API 的契约就变了。

  • 这就意味着,所有使用你 API 的用户都得更新他们的代码,把新参数加进去。要是他们不更新,请求可能就会失败,报错,或者返回不完整的结果。

MCP 的设计是这样解决这个问题的:

  • MCP 引入了一种动态且灵活的方法,和传统的 API 形成鲜明对比。
  • 比如说,当一个客户端(比如像 Claude Desktop 这样的 AI 应用)连接到一个 MCP 服务器(比如你的天气服务)时,它会发送一个初始请求,去了解服务器的能力。
  • 服务器会回复它可用的工具、资源、提示和参数的详情。比如,要是你的天气 API 最初支持 locationdate,服务器就会把这些作为它的能力的一部分进行沟通。

  • 要是后来你加了一个 unit 参数,MCP 服务器可以在下一次交换时动态更新它的能力描述。客户端不需要硬编码或者预先定义参数——它只需要查询服务器当前的能力,然后相应地调整就行。

  • 这样一来,客户端就可以在运行时调整自己的行为,使用更新后的能力(比如在请求中加上 unit),而不需要重写或者重新部署代码。

希望这能帮你搞清楚 MCP 是干啥的。

本专栏将继续探索创建自定义的 MCP 服务器,并且动手搞一些演示,记得关注哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2339367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络】数据链路层知识梳理

全是通俗易懂的讲解,如果你本节之前的知识都掌握清楚,那就速速来看我的笔记吧~ 自己写自己的八股!让未来的自己看懂! (全文手敲,受益良多) 数据链路层 我们来重新理解一下这个图:…

积木报表查询出现jdbc.SQLServerException: 对象名 ‘user_tab_comment 的解决方法

目录 前言1. 问题所示2. 解决方法前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn 1. 问题所示 使用帆软报表无错,后续使用积木报表查询出错: 没有显示报表: 具体错误信息如下:

数字孪生废气处理工艺流程

图扑数字孪生废气处理工艺流程系统。通过精准 3D 建模,对废气收集、预处理、净化、排放等全流程进行 1:1 数字化复刻,实时呈现设备运行参数、污染物浓度变化等关键数据。 借助图扑可视化界面,管理者可直观掌握废气处理各环节状态&#xff0c…

【某比特币网址请求头部sign签名】RSA加密逆向分析

目标:aHR0cDovL21lZ2FiaXQudmlwL21hcmtldA 直接搜索sign不方便定位,可以换个思路搜asi_uuid或者user_info 为什么搜这个,因为都是请求头里面的参数,基本上会在一起 实际上就是Object(h.a)((new Date).getTime()) 直接在这里打断点…

基于WebRTC技术的EasyRTC:支持任意平台设备的实时音视频通信解决方案

一、技术架构与核心优势 EasyRTC是一套基于WebRTC技术的实时音视频通信框架,旨在为开发者提供高效、稳定、跨平台的通信解决方案。其核心优势在于支持任意平台设备,包括Web端、移动端、桌面端和嵌入式设备,真正实现“一次开发,多…

DNS解析失败怎么解决?

在互联网时代,畅快地浏览网页、使用各类网络服务已成为生活常态。然而,当屏幕突然弹出 “DNS解析失败”的提示,原本顺畅的网络连接戛然而止,让人倍感困扰。DNS即域名系统,它如同互联网的 “电话簿”,负责将…

2025年4月19日

1.英语 1.单词 2.翻译 老年人食堂 In recent years, elderly population in China has continued to grow. The Chinese government is taking various measures to advance the construction of the elderly care service system and to make the later lives of the elde…

【Vue】组件通信(Props/Emit、EventBus、Provide/Inject)

个人主页:Guiat 归属专栏:Vue 文章目录 1. Props/Emit 父子组件通信1.1 Props 向下传递数据1.2 Emit 向上传递事件 2. EventBus 跨组件通信2.1 创建事件总线2.2 使用事件总线2.3 EventBus 优缺点 3. Provide/Inject 深层组件通信3.1 基本使用3.2 响应式处…

QT实现串口透传的功能

在一些产品的开发的时候,需要将一个串口的数据发送给另外一个串口进行转发。 具体的代码如下: #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::Ma…

动态规划入门:背包问题求具体方案(以0-1背包问题为例)

本质&#xff1a;有向图最短&#xff08;长&#xff09;路问题 字典序最小方案&#xff1f;--贪心思路&#xff1f;&#xff08;本题未使用&#xff09; 分析第一个物品&#xff1a; 写代码时tip&#xff1a;要考虑“边读边做”还是“先读后做” #include<iostream> #i…

WEMOS LOLIN32 开发板引脚布局和技术规格

&#x1f517; 快速链接ESP32 Development Boards, Sensors, Tools, Projects and More https://megma.ma/wp-content/uploads/2021/08/Wemos-ESP32-Lolin32-Board-BOOK-ENGLISH.pdf WEMOS LOLIN32 Development Board Details, Pinout, Specs WEMOS LOLIN32 Development Board …

mysql中的group by用法详解

MySQL中的GROUP BY是数据聚合分析的核心功能&#xff0c;主要用于将结果集按指定列分组&#xff0c;并结合聚合函数进行统计计算。以下从基本语法到高级用法进行详细解析&#xff1a; 一、基本语法与核心功能 SELECT 分组列, 聚合函数(计算列) FROM 表名 [WHERE 条件] GROUP B…

java基础从入门到上手(九):Java - List、Set、Map

一、List集合 List 是一种用于存储有序元素的集合接口&#xff0c;它是 java.util 包中的一部分&#xff0c;并且继承自 Collection 接口。List 接口提供了多种方法&#xff0c;用于按索引操作元素&#xff0c;允许元素重复&#xff0c;并且保持插入顺序。常用的 List 实现类包…

从malloc到free:动态内存管理全解析

1.为什么要有动态内存管理 我们已经掌握的内存开辟方法有&#xff1a; int main() {int val 20;//在栈空间上开辟四个字节char arr[20] { 0 };//在栈空间上开辟10个字节的连续空间return 0; }上述开辟的内存空间有两个特点&#xff1a; 1.空间开辟的时候大小已经固定 2.数组…

AutoSAR从概念到实践系列之MCAL篇(二)——Mcu模块配置及代码详解(上)

欢迎大家学习我的《AutoSAR从概念到实践系列之MCAL篇》系列课程,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。 学习过程中如有任何疑问,可底下评论! 如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢各位的支持! 根据上一篇内容中…

【数据库】事务

目录 1. 什么是事务&#xff1f; 2. 事务的ACID特性 3. 为什么使用事务&#xff1f; 4. 如何使用事务 4.1 查看支持事务的存储引擎 4.2 语法 4.3 保存点 4.4 自动/手动提交事务 5. 事物的隔离性和隔离级别 5.1 什么是隔离性 5.2 隔离级别 5.3 查看和设置隔离级别 1…

使用Redis实现实时排行榜

为了实现一个实时排行榜系统&#xff0c;我们可以使用Redis的有序集合&#xff08;ZSet&#xff09;&#xff0c;其底层通常是使用跳跃表实现的。有序集合允许我们按照分数&#xff08;score&#xff09;对成员&#xff08;member&#xff09;进行排序&#xff0c;因此非常适合…

6. 字符串

1.反转字符串 2.替换数字 3.反转字符串中的单词 4.KMP算法 5.重复的子字符串&#xff08;看具体证明&#xff09; 太6了&#xff08;真不是人做的&#xff09;

Redis ④-通用命令

Redis 是一个 客户端-服务器 结构的程序&#xff0c;这与 MySQL 是类似的&#xff0c;这点需要牢记&#xff01;&#xff01;&#xff01; Redis 固然好&#xff0c;但也不是任何场景都适合使用 Redis&#xff0c;一定要根据当前的业务需求来选择是否使用 Redis Redis 通用命令…

卷积神经网络(CNN)与VGG16在图像识别中的实验设计与思路

卷积神经网络&#xff08;CNN&#xff09;与VGG16在图像识别中的实验设计与思路 以下从基础原理、VGG16架构解析、实验设计步骤三个层面展开说明&#xff0c;结合代码示例与关键参数设置&#xff0c;帮助理解其应用逻辑。 一、CNN与VGG16的核心差异 基础CNN结构 通常包含33~55个…