MCP學習與實踐

目錄

1.MCP簡介

1.1 MCP是什么

1.2 MCP與Agent關系:

1.3 MCP的架構

2. MCP原理

2.1 MCP 工作過程

2.2 MCP 通訊方式

2. MCP使用

2.1 cursor中增加MCP-SSE(高德地圖MCP)

2.2?cursor中增加MCP-STDIO(12306-MCP)


本文詳細講解了什么是MCP,并在Cursor中實踐了兩個MCP的配置,其中也遇到了很多問題,并一一解決了。

1.MCP簡介

1.1 MCP是什么

MCP的全稱是Model Context Protocol,即「模型上下文協議」,目的是為LLM提供標準化的上下文信息傳遞方式,從而實現AI智能體與外部數據及工具的結合。是Anthropic推出的AI萬能插座。

標準化AI模型接入協議,通過自然語言描述工具調用邏輯,實現模型與外部數據/工具的交互。

1.2 MCP與Agent關系:

MCP提供了標準化的接口,使得Agent能夠方便地調用各種外部工具和數據源。MCP就像一個“萬能插座”,將不同的工具和數據源連接到Agent上。

Agent:是應用層的實體,基于大模型(LLM)的智能體,通過MCP協議調用工具或服務完成任務(如文檔搜索、工單處理等)。Agent利用MCP提供的接口,自主決策并執行任務。Agent可以根據上下文和模型的推理,判斷是否需要調用某個服務,然后使用function calling執行函數。

1.3 MCP的架構

MCP分為:MCP Host(主機)、MCP Client(客戶端)、?MCP Server(服務端)

MCP Host:Host=內置了MCP Client的應用程序,可以是APP、Agent、IDE、插件、桌面應用等等形態;

是承載 AI 模型的各類應用程序(例如?Claude Desktop、Cursor、CatPaw等)的核心載體。

MCP Host的作用:一方面負責接收用戶輸入的信息,并將 AI 給出的響應清晰、直觀地展示給用戶;另一方面,它深度集成了 MCP Client 組件,為整個 MCP 生態系統搭建起基礎框架。 以用戶使用 CatPaw提問的場景為例:當用戶在界面上輸入問題時,MCP Host 作為中轉樞紐,會將這個請求準確無誤地傳遞給內部嵌入的 AI 模型(如 Claude)。而一旦處理過程中涉及到外部資源的調用,MCP Host 會迅速激活 MCP Client,開啟與外部資源的交互流程,確保整個交互過程流暢且高效。

MCP Client:是大模型與MCP Server之間的橋梁。

MCP Client 緊密內嵌于 Host 環境之中,是實現 Host 與?MCP Server?之間高效通信的核心組件。它在整個 MCP 架構里扮演著橋梁的關鍵角色,主要致力于建立與 MCP Server 的一對一專屬連接,并妥善處理協議通信、用戶授權以及權限控制等關鍵事務。

MCP Server:負責處理來自MCP Client的請求,并調用各種資源,返回相應的結果或數據。

MCP Server 屬于輕量級的服務程序,肩負著為 AI 系統提供對各類數據源、工具或 API 進行訪問的重要使命。在實際應用過程中,它能夠執行各種具體的操作任務,包括但不限于讀取數據庫中的數據、調用 Git 命令進行版本控制等,是 MCP 架構中實現實際功能操作的關鍵環節。

2. MCP原理

2.1 MCP 工作過程

問題1.MCP如何與大模型進行協作:

主要是基于System Prompt的方式進行通信。System Prompt的方式,是通過將所有工具以及工具Schema信息注入到System Prompt中給到大模型,由大模型結合當前對話上下文信息、工具信息、工具使用說明等,選擇具體的工具響應,并由Agent識別來完成最終工具調用,最終將調用工具結果給到大模型,由大模型繼續判斷下一步動作,從而進入任務循環,直到達到Agent規定的最大的交互輪次或者大模型認為任務已結束,終止任務循環,并最終響應用戶。

問題2.MCP Client-Server如何通信:

MCP Client和Server的通訊是基于HTTP+JSON-RPC2.0協議規范進行通訊的,在通訊配置上目前MCP client支持HTTP with SSE和stdio兩種通訊配置方式

簡單來說:MCP 的主要工作是描述 Server 提供了哪些能力(給 LLM 提供),需要哪些參數(參數具體的功能是什么),最后返回的結果是什么。

AI Agent 在用戶輸入 幫我查詢2024年5月01日的北京天氣指令后,自行判斷需要調用哪些 MCP Server,并決定調用順序,最終根據不同 MCP Server 的返回結果來決定是否需要調用下一個 Server,以此來完成整個任務。

2.2 MCP 通訊方式

MCP 協議支持兩種主要的通信機制:基于標準輸入輸出的本地通信基于SSE(Server-Sent Events)的遠程通信

  • 本地通信通過 stdio 傳輸數據,適用于在同一臺機器上運行的客戶端和服務器之間的通信。

  • 遠程通信利用 SSE 與 HTTP 結合,實現跨網絡的實時數據傳輸,適用于需要訪問遠程資源或分布式部署的場景。

stdio傳輸方式:stdio 傳輸適用于要操作的數據資源位于本地計算機,且不希望暴露外部訪問的場景。(客戶端 將 MCP 服務器作為子進程啟動)

根據MCP server服務類型用不同的commond命令,如果是node,commod則為npx,python服務則用uv

{"mcpServers": {"mdp-ai-mcp-localserver-example": {"command": "java","args": ["-jar","配置你的 MCP local server fatjar 絕對路徑"]}}
}

接入MCP server方式:(客戶端 通過 HTTP 請求連接到服務器的 SSE 端點,基于長連接)

{"mcpServers": {"mdp-ai-mcp-remoteserver-example": {"url": "http://{your mcp server domain}/sse"}}
}

2. MCP使用

常見的MCP Host有cursor,美團CatPaw IDE或者CatPaw插件

2.1 cursor中增加MCP-SSE(高德地圖MCP)

其它MCP Host是類似的操作

SSE的方式:這種方式的MCP是部署在遠程服務器上,cursor中增加MCP的http鏈接

例如:cursor中增加高德地圖MCP,此MCP是部署在高德公司的服務器上,如果想用client進行連接的話,需要申請服務的授權,即申請一個key。

第一步:登入:高德開放平臺控制臺,申請個開發者賬號

第二步:進入【應用管理】,點擊頁面右上角【創建新應用】,填寫表單即可創建新的應用

第三步:添加Key,創建成功后,可獲取 Key?

第四步:在cursor中增加MCP server

{"mcpServers": {"amap-amap-sse": {"url": "https://mcp.amap.com/sse?key=${申請的key}"}}
}

mcp列表中展示該mcp下的所有tools

當詢問大模型天氣的時候,會識別到加載的MCP中的工具,可以看到調用工具的入參和返參,達模型會從用戶輸入的自然語言中進行意圖識別,并提取出參數,并將tool返回的參數進行加工返回給用戶。

2.2?cursor中增加MCP-STDIO(12306-MCP)

stdio方式接入MCP,是需要在本地運行MCP server服務,用MCP client運行Commond命令,啟動MCP server。

以12306-mcp為例子:mcp社區:12306車票查詢 - MCP Store

第一步:下載12306-MCP的代碼:

git clone https://github.com/Joooook/12306-mcp.git

第二步:安裝依賴包:npm install(在12306-mcp目錄下)

第三步:cursor中增加MCP,并配置

{"mcpServers": {"12306-mcp": {"command": "npx","args": ["-y","/Users/用戶名/github_code/12306-mcp"]}}
}

出現如下日志,或者mcp變成小綠點,表示成功啟動本地MCP server并連接上

測試一下:分別調用了MCP下的三個tools

遇到的問題記錄:

問題描述原因解決
cursor中agent出現Model not available是因為模型提供方對中國地區實施了訪問限制,主要影響 Claude 系列模型調用在模型選擇處,勾選 “auto”,讓 Cursor 自動選擇一個可用模型,或手動選擇非 ChatGPT、Claude 系列的模型,如 DeepSeek-R1、DeepSeek-V3 等
npx -y?命令報錯 “您必須提供一個命令”本地node版本是12,node版本不兼容升級為node 18
sh: tsc: command not found系統中沒有找到 TypeScript 編譯器(tsc),通常是因為未安裝 TypeScript 或未正確配置環境變量導致的安裝:
npm install -g typescript
tsc.js文件中SyntaxError: Unexpected token ?本地node版本是12,node版本不兼容升級為node 18
升級node報錯 unknown or unsupported macOS version: :dunno通常是由于使用的 Node 版本管理工具(如?nvm?或?brew)與當前 macOS 版本不兼容導致的brew update-reset # 重置并更新 brew 到最新版本
cursor中連接mcp,env: node: No such file or directory是因為 Cursor 無法找到系統中的 Node.js 環境(MCP 功能依賴 Node.js 運行)

配置環境變量:

export PATH="/Users/用戶名/.nvm/versions

/node/v18.20.8/bin:$PATH"

cursor中配置mcp報錯No server info foundMCP server未起來需要將

"args": [

"-y",

"/12306-mcp"

]

改為:

"args": [

"-y",

"/Users/用戶名/

github_code/12306-mcp"

]

MCP社區市場:MCP Store - Find and Connect to 20,000+ MCP Servers

干貨分享!MCP 實現原理,小白也能看懂 - 磊哥|www.javacn.site - 博客園

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918372.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918372.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918372.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL(187)如何使用pt-query-digest進行查詢分析?

使用 pt-query-digest 工具可以幫助分析 MySQL 查詢的性能,找出慢查詢、頻繁查詢以及消耗資源較多的查詢,從而為優化提供依據。以下是詳細深入的使用 pt-query-digest 進行查詢分析的步驟和相關示例。 一、安裝 pt-query-digest pt-query-digest 是 Perc…

分享一個基于Python和Hadoop的的電信客戶特征可視化分析平臺 基于Spark平臺的電信客服數據存儲與處理系統源碼

💕💕作者:計算機源碼社 💕💕個人簡介:本人八年開發經驗,擅長Java、Python、PHP、.NET、Node.js、Spark、hadoop、Android、微信小程序、爬蟲、大數據、機器學習等,大家有這一塊的問題…

初識STL

一 、STL的誕生在C發展早期,程序員在不同的項目中需要反復編寫相似的數據結構和算法。重復開發帶來以下問題:代碼冗余:每個項目都要重新實現基本數據結構和算法維護困難:不同人編寫的代碼風格不一致,難以維護效率低下&…

DDoS 防護的未來趨勢:AI 如何重塑安全行業?

隨著網絡攻擊規模和復雜性的不斷升級,分布式拒絕服務(DDoS)攻擊已成為企業數字化轉型中的一大威脅。傳統防御手段在應對智能化、動態化的攻擊時逐漸顯露出局限性。而人工智能(AI)技術的崛起,正為 DDoS 防護…

【每天一個知識點】深度領域對抗神經網絡

Deep Domain Adversarial Neural Network(深度領域對抗神經網絡,DDANN) 是一類結合 深度學習 與 領域自適應(domain adaptation) 思想的神經網絡結構,主要用于不同數據域之間的知識遷移,尤其是在…

【C語言】深入理解預處理

文章目錄一、預定義符號二、#define定義常量:便捷的符號替換常見用法示例:注意事項:三、#define定義宏:帶參數的文本替換關鍵注意點:四、帶有副作用的宏參數五、宏替換的規則:預處理的執行步驟重要注意&…

展銳平臺(Android15)WLAN熱點名稱修改不生效問題分析

前言 在展銳Android V項目開發中,需要修改softAp/P2P熱點名稱時,發現集成GMS后直接修改framework層代碼無效。具體表現為: 修改packages/modules/Wifi/WifiApConfigStore中的getDefaultApConfiguration方法編譯燒錄后修改不生效 問題根源在…

wsl ubuntu訪問(掛載)vmware vmdk磁盤教程

之前使用VMware Workstation 虛擬機跑了個ubuntu,現在改用wsl了, 想把vmware的磁盤掛載到wsl ubuntu。一、磁盤合并我原先的vmware跑的ubuntu存在多個vmdk文件(磁盤文件),需要先將磁盤合并成一個才方便掛載。首先你電腦…

UGUI源碼剖析(3):布局的“原子”——RectTransform的核心數據模型與幾何學

UGUI源碼剖析(第三章):布局的“原子”——RectTransform的核心數據模型與幾何學 在前幾章中,我們了解了UGUI的組件規范和更新調度機制。現在,我們將深入到這個系統的“幾何學”核心,去剖析那個我們每天都在…

c++注意點(15)----設計模式(橋接模式與適配器模式)

一、結構型設計模式兩者有點相似,都是為了做到解耦的功能。適配器模式是一種結構型設計模式, 它能使接口不兼容的對象能夠相互合作。橋接模式是一種結構型設計模式, 可將一個大類或一系列緊密相關的類拆分為抽象和實現兩個獨立的層次結構&…

DuoPlus支持導入文件批量配置云手機參數,還優化了批量操作和搜索功能!

作為我常用的一款還不錯的跨境工具,DuoPlus云手機幫我高效完成了很多跨境工作,它的功能也在逐步完善和優化,今天來聊聊它最近新更新的一些功能。功能更新一覽新增導入文件配置參數:批量初始化代理、批量修改參數支持導入文件一鍵配…

PLC如何實現通過MQTT協議物聯網網關接入管理云平臺

在工業4.0與智能制造浪潮下,企業亟需實現設備數據的高效采集與云端協同,以支撐遠程監控、預測性維護等場景。工業智能網關憑借其強大的協議解析能力、邊緣計算功能及安全傳輸機制,成為PLC接入云平臺的核心解決方案。本文將從技術架構、功能模…

通過sealos工具在ubuntu 24.02上安裝k8s集群

一、系統準備(1)安裝openssh服務 sudo apt install openssh-server sudo systemctl start ssh sudo systemctl enable ssh(2)放通防火墻 sudo ufw allow ssh(3)開通root直接登錄 vim /etc/ssh/sshd_config#…

nginx+Lua環境集成、nginx+Lua應用

nginxluaredis實踐 概述 nginx、lua訪問redis的三種方式: 1。 HttpRedis模塊。 指令少,功能單一 ,適合簡單的緩存。只支持get 、select命令。 2。 HttpRedis2Module模塊。 功能強大,比較靈活。 3。 lua-resty-redis庫 OpenResty。…

機器學習 K-Means聚類 無監督學習

目錄 K-Means 聚類:從原理到實踐的完整指南 什么是 K-Means 聚類? 應用場景舉例 K-Means 算法的核心原理 K-Means 算法的步驟詳解 可視化理解 K-Means 的優缺點分析 優點 缺點 如何選擇合適的 K 值? 1. 肘部法(Elbow Me…

RabbitMQ面試精講 Day 16:生產者優化策略與實踐

【RabbitMQ面試精講 Day 16】生產者優化策略與實踐 開篇 歡迎來到"RabbitMQ面試精講"系列第16天,今天我們聚焦RabbitMQ生產者優化策略與實踐。在消息隊列系統中,生產者的性能表現直接影響整個系統的吞吐量和可靠性。掌握生產者優化技巧不僅能…

Android 系統的安全 和 三星安全的區別

維度Android(AOSP 通用)Samsung(Knox 強化)本質差異一句話信任根標準 Verified Boot(公鑰由谷歌或 OEM 托管)額外在 自家 SoC 里燒錄 Knox 密鑰 熔絲位,一旦解鎖即觸發 Knox 0x1 熔斷&#xff…

開源大模型實戰:GPT-OSS本地部署與全面測評

文章目錄一、引言二、安裝Ollama三、Linux部署GPT-OSS-20B模型四、模型測試4.1 AI幻覺檢測題題目1:虛假歷史事件題目2:不存在的科學概念題目3:虛構的地理信息題目4:錯誤的數學常識題目5:虛假的生物學事實4.2 算法題測試…

【無標題】命名管道(Named Pipe)是一種在操作系統中用于**進程間通信(IPC)** 的機制

命名管道(Named Pipe)是一種在操作系統中用于進程間通信(IPC) 的機制,它允許不相關的進程(甚至不同用戶的進程)通過一個可見的文件系統路徑進行數據交換。與匿名管道(僅存在于內存&a…

Baumer相機如何通過YoloV8深度學習模型實現危險區域人員的實時檢測識別(C#代碼UI界面版)

《------往期經典推薦------》 AI應用軟件開發實戰專欄【鏈接】 序號 項目名稱 項目名稱 1 1.工業相機 + YOLOv8 實現人物檢測識別:(C#代碼,UI界面版) 2.工業相機 + YOLOv8 實現PCB的缺陷檢測:(C#代碼,UI界面版) 2 3.工業相機 + YOLOv8 實現動物分類識別:(C#代碼,U…