当前位置: 首页 > news >正文

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.xdnf.cn/news/288253.html

相关文章:

  • Linux系统安装PaddleDetection
  • 基于CBOW模型的词向量训练实战:从原理到PyTorch实现
  • 使用AI 将文本转成视频 工具 介绍
  • 实验-数字电路设计2-复用器和七段数码管(数字逻辑)
  • 在Ubuntu系统中安装桌面环境
  • 路由器详细讲解
  • Docker —— 隔离的基本操作(1)
  • SpringCloud GateWay网关
  • 排序用法(Arrays.sort)
  • AI笔记-1
  • Qwen2_5-Omni-3B:支持视频、音频、图像和文本的全能AI,可在本地运行
  • 【Flask】ORM模型以及数据库迁移的两种方法(flask-migrate、Alembic)
  • 【全队项目】智能学术海报生成系统PosterGenius--前后端系统介绍
  • Vuex使用指南:状态管理
  • Leetcode:回文链表
  • GGD独立站的优势
  • 备战蓝桥杯国赛第一天-atcoder-beginner-contest404
  • Python异步编程进阶:深入探索asyncio高级特性
  • 从零开始开发纯血鸿蒙应用之NAPI
  • Linux的web服务器的部署及优化
  • 关于浏览器页面自动化操作
  • Python 矩阵运算:从理论到实践
  • 五大神经网络开发实战:从入门到企业级部署
  • 《Python星球日记》第30天:Flask数据库集成
  • 虚幻基础:硬件输入
  • 蓝桥杯 19. 植树
  • 【题解-洛谷】B4303 [蓝桥杯青少年组省赛 2024] 字母移位
  • [HOT 100] 2538. 最大价值和与最小价值和的差值
  • LabVIEW伺服电机故障监测系统
  • 【QT】QT中的事件