目錄
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 或未正確配置環境變量導致的 | 安裝: |
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 found | MCP 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 - 博客園