MCP原理详解及实战案例(动嘴出UI稿、3D建模)

文章目录

  • MCP 原理介绍
  • 架构
  • 核心组件
    • 协议层
    • 传输层
    • 连接生命周期
    • MCP与function calling: 互补关系
  • MCP python SDK
    • MCP的优点
  • 怎么用MCP:天气服务
    • 参考应用项目:
  • REF

24年11月份,claude推出了模型上下文协议( MCP),作为一种潜在的解决方案,解决大模型和其他工具交互。
走红的Manus验证了自动打工agent的潜在市场需求后,作为大模型与其他工具交互的协议,MCP这几个月也在在开发人员和 AI 社区中获得了巨大的关注.。
claude的AI产品思维做的确实好,交互式对话的artifact、AI编程的coding能力、还有大模型与外界数据传输的USE接口MCP,都是它家最早做的;这几天qwen的界面也上新了还在开发中的MCP按钮,估计是做tool calling类似的功能。
在这里插入图片描述

MCP 原理介绍

  • 提出背景:随着基座大模型变得更加智能,agent与外部工具、数据和 API 交互的能力变得越来越分散:开发人员需要为代理运行和集成的每个系统实现具有特殊业务逻辑的代理,需要有一个用于执行、数据获取和工具调用的标准接口。
  • 与API的比较:API 是互联网上第一个伟大的统一器,为软件创建一种共享语言进行通信,但 AI 模型缺乏等效项。MCP补足了大模型连接数据、工具标准接口的生态位。
  • 什么是MCP:MCP(model context protool) 是一种开放协议,允许系统以可集成、通用化的方式为 AI 模型提供上下文。 该协议定义了 AI 模型如何调用外部工具、获取数据以及与服务交互。这种开放标准也使得开发人员能够在其数据源和 AI 驱动的工具之间构建安全的双向连接。

架构

MCP的架构遵循客户端-服务器架构:开发人员可以通过 MCP 服务器开放数据,也可以构建连接到这些服务器的 AI 应用程序(MCP 客户端)。
在这里插入图片描述
在这里插入图片描述
MCP架构主要包括主机、客户端和服务器。

  • 主机(Host):AI应用程序,例如claude desktop或IDE,发起连接;
  • 客户端(Client): 在主机应用程序内与服务器保持一对一的连接;
  • 服务器(Server): 客户端提供context、tool和prompt;

目前MCP的生态系统正在快速发展,a16z的图给出了有代表性的MCP 服务器、客户端:
在这里插入图片描述
各大企业MCP服务器的参考实现地址:https://github.com/modelcontextprotocol/servers,包括git、PostgreSQL 、redis等构建MCP服务器的实现代码。

核心组件

协议层

处理消息帧、请求/响应链接和高级通信模式,基于MCP协议的通信会话包括request、notification两类。

class Session(BaseSession[RequestT, NotificationT, ResultT]):"""会话类,用于管理基于MCP协议的通信会话。"""async def send_request(self,request: RequestT,result_type: type[Result]) -> Result:"""发送请求并等待响应。如果响应中包含错误,则抛出McpError异常。参数:- request (RequestT): 要发送的请求对象。- result_type (type[Result]): 期望的响应结果类型。返回值:- Result: 响应结果对象。"""# Request handling implementation# (请求处理的具体实现代码)async def send_notification(self,notification: NotificationT) -> None:"""发送单向通知,不期望对方发送响应。参数:- notification (NotificationT): 要发送的通知对象。"""# Notification handling implementation# (通知处理的具体实现代码)async def _received_request(self,responder: RequestResponder[ReceiveRequestT, ResultT]) -> None:"""处理从对端接收到的请求。参数:- responder (RequestResponder[ReceiveRequestT, ResultT]): 请求响应器,用于处理请求并生成响应。"""# Request handling implementation# (请求处理的具体实现代码)async def _received_notification(self,notification: ReceiveNotificationT) -> None:"""处理从对端接收到的通知。参数:- notification (ReceiveNotificationT): 接收到的通知对象。"""# Notification handling implementation# (通知处理的具体实现代码)

传输层

传输层处理客户端和服务器之间的实际通信。MCP 支持多种传输机制:1.标准传输。2.使用服务器发送事件(Server-Sent Events)来实现服务器到客户端的消息传输,使用HTTP POST方法来实现客户端到服务器的消息传输。

连接生命周期

MCP的连接生命周期分为初始化、消息交换和终止三个阶段:
在这里插入图片描述

  1. 初始化阶段
    客户端发送初始化请求 :客户端向服务器发送一个初始化请求,该请求中包含协议版本和客户端的能力信息。这是建立连接的第一步,用于告知服务器客户端支持的协议版本以及自身具备的功能和特性。
    服务器响应初始化请求 :服务器接收到客户端的初始化请求后,会回复自己的协议版本和能力信息。通过这种方式,双方能够确认彼此支持的协议版本是否兼容,并了解对方的功能特性,为后续的通信做好准备。
    客户端发送初始化完成通知 :客户端收到服务器的响应后,会发送一个初始化完成通知作为确认。这标志着初始化过程结束,双方已经准备好开始正常的通信。
  2. 消息交换阶段
    a. 请求 - 响应模式 :客户端或服务器可以发送请求,另一方则需要对请求进行响应。这种模式适用于需要交互的场景,例如客户端请求服务器执行某个操作或获取某些数据,服务器处理完成后返回结果。
    b. 通知模式 :客户端或服务器可以发送单向通知,这种通知不需要对方回复。通知通常用于告知对方一些状态信息或事件,例如服务器通知客户端某个资源的状态发生了变化,或者客户端通知服务器用户的一些操作行为等。
  3. 终止阶段
    正常关闭 :双方中的任意一方都可以通过调用 close() 方法来正常关闭连接。这种情况下,双方会按照协议规定的流程,完成一些必要的清理工作,然后断开连接。
    传输层断开连接 :如果传输层(例如网络连接)出现问题,导致连接中断,那么连接也会终止。这种情况可能是由于网络故障、服务器或客户端的意外关闭等原因引起的。
    错误条件 :如果在通信过程中出现错误,例如请求格式错误、服务器内部错误等,也可能会导致连接终止。根据错误的严重程度和协议的规定,可能会尝试重新建立连接,或者直接断开连接并记录错误信息。

MCP与function calling: 互补关系

函数调用和 MCP 都是将 LLM 桥接到企业系统不可或缺的一部分,但它们解决了不同的挑战:
• 函数调用侧重于将prompt转换为可执行的指令。它是 LLM 驱动的,并且因供应商而异,目前还没有通用标准。
• MCP 标准化了这些指令的执行,从而实现了数千种工具的可扩展性和互作性。

MCP python SDK

Claude开源了MCP的python-SDK:https://github.com/modelcontextprotocol/python-sdk/tree/main

MCP Python SDK 实现了完整的 MCP specification规范,使得以下操作变得简单:

  1. 构建能够连接到任何 MCP 服务器的 MCP 客户端。
  2. 创建提取资源、提示和工具的 MCP 服务器。
  3. 使用标准传输方式,如标准输入输出(stdio)和服务器发送事件(SSE)。
  4. 处理所有 MCP 协议消息和生命周期事件

安装:

pip install mcp

MCP的优点

MCP让开发者以安全、标准化的方式构造向大型语言模型(LLM)应用程序暴露数据和功能的服务器:

  • 通过**资源(Resources)**暴露数据(类似于GET端点;它们用于将信息加载到LLM的上下文中)。
  • 通过**工具(Tools)**提供功能(类似于POST端点;它们用于执行代码或产生其他副作用)。
  • 通过**提示(Prompts)**定义交互模式(LLM交互的可重用模板)。
    在这里插入图片描述

怎么用MCP:天气服务

https://github.com/modelcontextprotocol/quickstart-resources/blob/main/weather-server-python/weather.py
初始化FastMCP服务器、API和agent:

from typing import Any
import httpx
from mcp.server.fastmcp import FastMCP# Initialize FastMCP server
mcp = FastMCP("weather")# Constants
NWS_API_BASE = "https://api.weather.gov"
USER_AGENT = "weather-app/1.0"

参考应用项目:

  1. MCP-figma:交互出UI设计稿
    https://github.com/JayZeeDesign/figma-mcp
  2. MCP-blender: 动嘴实现3D建模
    https://github.com/ahujasid/blender-mcp
    在这里插入图片描述

REF

https://www.anthropic.com/news/model-context-protocol
MCP代码地址:https://github.com/modelcontextprotocol
MCP文档地址:https://modelcontextprotocol.io/docs/concepts/architecture
https://a16z.com/a-deep-dive-into-mcp-and-the-future-of-ai-tooling/

https://x.com/sidahuj/status/1901632110395265452

https://www.gentoro.com/blog/function-calling-vs-model-context-protocol-mcp
https://x.com/akshay_pachaar/status/1900170408038642058

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

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

相关文章

2025年深圳杯数学建模(东三省)B题【颜色转换】原论文讲解(含完整python代码)

大家好呀,从发布赛题一直到现在,总算完成了2025年深圳杯数学建模(东三省)B题【颜色转换】完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成…

cpp学习笔记1--class

2年前学过cpp,但是一直没有用到,现在要读研了,终于要用到了,重新拿出来看一看,觉得很多东西都能在c和python上看到影子。 #include "iostream" class Person { private:std::string name;int age;public://…

基于YOLOv的目标检测训练数据构建方法研究—图像采集、标注、划分与增强一体化流程设计

在目标检测任务中,高质量的训练数据是模型性能提升的关键。本文围绕 YOLOv 系列模型,系统性地研究了目标检测训练数据的构建方法,提出了一套从图像采集、标注、数据集划分到数据增强的一体化流程设计 。通过多源图像采集策略确保样本多样性,结合 LabelImg 工具完成 VOC 格式…

SQL数据库操作大全:从基础到高级查询技巧

大家好,欢迎来到程序视点!我是你们的老朋友.小二! SQL数据库操作核心语法精要 数据库基础操作 创建/删除数据库:CREATE DATABASE / DROP DATABASE 备份SQL Server:使用sp_addumpdevice和BACKUP DATABASE命令 数据库…

[2025]MySQL的事务机制是什么样的?redolog,undolog、binog三种日志的区别?二阶段提交是什么?ACID怎么保证的?主从复制的过程?

MySQL事务机制与日志系统详解 一、MySQL事务机制 1. 事务特性(ACID) 特性实现机制原子性(Atomicity)undo log回滚,(事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行)。一致性(Consistency)约束…

LLama-v2 权重下载

地址:llama模型 官方github仓库:llama仓库 注意点 网络代理位置:美国下面的国家选择 United States 克隆仓库后 运行bash download.sh输入邮箱收到的URL选择要下载的权重等待下载完成即可 有问题留言!!&#xff01…

zephyr OS架构下构建Nordic MCU boot

目录 概述 1. 软硬件环境 1.1 软件开发环境 1.2 硬件环境 2 MCU boot 2.1 核心功能 2.2 关键术语 2.3 重要字段介绍 3 VS-Code下创建MCU-BOOT项目 3.1 软件框架结构 3.2 创建测试项目 3.3 编译项目 3.3 固件在Flash中的分布 4 验证 4.1 烧写固件 ​ 4.2 代码…

【Mytais系列】介绍、核心概念

MyBatis 是一款优秀的 持久层框架,它通过简化 JDBC 操作、提供灵活的 SQL 映射能力,成为 Java 开发中处理数据库交互的核心工具之一。以下是 MyBatis 的核心框架和概念解析: 一、MyBatis 框架概述 1. 核心定位 作用:将 Java 对象…

IO模型和多路复用

一、IO模型的基础理解 什么是IO? IO全称是 Input/Output(输入/输出),在计算机科学里主要指程序与外部设备(硬盘、网络、用户终端等)进行数据交换的操作。首要特点是: IO通常很慢(从CPU和内存的视角看)经常需要等待外部设备响应1. 为什么要谈IO模型? 当一个程序需要…

深入理解 Bash 中的 $‘...‘ 字符串语法糖

在 Bash 脚本编程中,字符串处理是不可或缺的一部分。为了让开发者更高效地处理特殊字符和控制字符,Bash 引入了一种独特的字符串语法糖:$(带单引号的 ANSI-C 风格字符串)。这种语法来源于 C 语言的 ANSI-C 标准&#x…

用Python打造自己的专属命令行工具

在日常的开发和使用过程中,我们常常会编写一些实用的Python脚本,比如用来批量处理文件、获取系统信息等。然而,每次都要输入python script_name.py来运行脚本,时间一长难免觉得繁琐。要是能像使用系统自带的命令(如ls、…

【KWDB 创作者计划】KWDB 2.2.0多模融合架构与分布式时序引擎

KWDB介绍 KWDB数据库是由开放原子开源基金会孵化的分布式多模数据库,专为AIoT场景设计,支持时序数据、关系数据和非结构化数据的统一管理。其核心架构采用多模融合引擎,集成列式时序存储、行式关系存储及自适应查询优化器,实现跨模…

学习Linux的第二天

如何在Linux环境下做开发 Linux的一些基操 Tips:平常最表层的是命令行模式,最多见这个默认叫做命令行模式 Vi操作是什么意思呢 就是在提示符输入vi a.c 是可以创建一个a.c这个文件并进入这个输入模式 按i可以输入代码 要退出的时候按esc 再按:(冒号…

链表操作练习

要求 现在有一个双向链表&#xff0c;里面要保存歌曲的名字&#xff1b;例如 蔡琴/渡口.mp3 我们把它定义在一个link.h文件中。 #ifndef LINK_H #define LINK_H #include <stdlib.h> #include <stdio.h> #include <string.h>typedef struct Node {//保存歌…

MATLAB制作散点图:从基础到进阶的三种类型讲解

一、什么是散点图 散点图是一种用来展示两个或多个变量之间关系的图表形式。它可以帮助我们直观地观察变量之间是否存在相关性、趋势或异常值&#xff0c;常用于数据分析的初步探索阶段。 二、三种类型散点图 1. 基本二维散点图&#xff1a;最简单、最常用 基本二维散点图的…

模块方法模式(Module Method Pattern)

&#x1f9e0; 模块方法模式&#xff08;Module Method Pattern&#xff09; 模块方法模式是一种结构型设计模式&#xff0c;它将复杂的操作分解成一系列相对简单、独立且单一职责的模块。每个模块负责完成一种具体的操作&#xff0c;其他模块或系统可以通过调用这些模块的公开…

Python中的JSON库,详细介绍与代码示例

目录 1. 前言 2. json 库基本概念 3. json 的适应场景 4. json 库的基本用法 4.1 导 json入 模块 4.2 将 Python 对象转换为 JSON 字符串 4.3 将 JSON 字符串转换为 Python 对象 4.4 将 Python 对象写入 JSON 文件 4.5 从 JSON 文件读取数据 4.6 json 的其他方法 5.…

网狐旗舰大联盟组件源码私测笔记:结构分层、UI重构与本地实操全流程

作为一套衍生于传统网狐架构的源码版本&#xff0c;大联盟这套源码组件可谓是在经典基础上进行了深度重塑。与老版死板的框架风格不同&#xff0c;它不仅对界面做了大刀阔斧的重构&#xff0c;还在组件层级的组织上做了优化。本文将基于一整套源码进行深度解析&#xff0c;强调…

STM32 PulseSensor心跳传感器驱动代码

STM32CubeMX中准备工作&#xff1a; 1、设置AD 通道 2、设置一个定时器中断&#xff0c;间隔时间2ms&#xff0c;我这里采用的是定时器7 3、代码优化01 PulseSensor.c文件 #include "main.h" #include "PulseSensor/PulseSensor.h"/******************…

C++项目容易犯错的点

1. 矩阵q要先定义大小&#xff0c;再赋值。不可以直接赋值。下面这种方式是错误的Eigen::MatrixXd q&#xff1b;q<<1,2&#xff1b;正确的这样的&#xff1a; Eigen::MatrixXd q(2,1); q<<1.4, 1.5; 2. 不要重复加载variables.h头文件&#xff0c;这样变量会被…