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.pswp.cn/pingmian/79580.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79580.shtml
英文地址,請注明出處:http://en.pswp.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;這樣變量會被…