摘要:MCP(Model Context Protocol,模型上下文協議)是由Anthropic開源發布的一項技術,旨在作為AI大模型與外部數據和工具之間溝通的“通用語言”。它通過標準化協議,讓大模型能夠自動調用外部工具完成任務,提升效率和靈活性。MCP整合了Function call標準,降低了開發成本,適用于復雜任務處理。其應用廣泛,包括智能問答、編程輔助和辦公自動化等場景,未來有望拓展至更多領域并推動AI生態系統的發展。
一、MCP 是什么
MCP,即 Model Context Protocol,模型上下文協議 ,是由 Claude 的母公司 Anthropic 于 2024 年 11 月開源發布的一項技術。簡單來說,MCP 是 AI 大模型的標準化工具箱,也可以把它想象成 AI 大模型和外部數據、工具之間溝通的 “通用語言” 或者 “萬能插座”。
在日常工作和學習中,我們經常需要與瀏覽器、文件、數據庫和代碼倉庫等外部工具進行交互。在傳統方式中,我們需要手動截圖或復制文本,再將其粘貼到 AI 窗口中進行對話。而 MCP 通過標準化的協議,自動化了這一步驟,讓大模型可以利用這些工具與外界互動,獲取信息并且完成具體任務。
MCP 服務充當 AI 和外部工具之間的橋梁,能夠自動替代人類訪問和操作這些外部工具。每個 MCP 服務(也稱為 MCP Server)都專注于特定的任務。比如有的負責讀寫瀏覽器、有的負責讀寫本地文件、有的操作 Git 倉庫等等 。MCP Server 通常就是運行在本地的一段 Node.js 或者 Python 程序。大模型通過操作系統的標準輸入輸出(stdio),也就是我們常說的輸入與輸出通道,來調用某個 MCP Server,它的消息格式是 JSON,這是一種常用的數據交換格式。MCP Server 在接收到請求后,會通過自身的代碼功能,或者使用 API 請求,訪問外部工具,完成任務。
二、MCP 的技術原理
MCP 技術原理的核心,在于建立大模型與外部工具之間的有效溝通橋梁。當我們向搭載 MCP 技術的大模型提出任務請求時,這個請求就像一顆投入湖面的石子,引發一系列有序的連鎖反應。
大模型首先會通過操作系統標準輸入通道(stdio)調用 MCP Server。這個過程就好比你在電腦操作系統中,通過特定的指令調用某個應用程序。而大模型使用的 “指令”,是遵循特定 JSON 結構的消息格式 ,這就像是它們之間溝通的 “密碼本”,確保信息傳遞的準確性。
MCP Server 收到請求后,就如同接到任務的 “執行者”,會根據自身的功能,利用代碼功能或者向外部工具發送 API 請求,進而訪問這些工具來完成任務。比如,若大模型需要獲取某個網頁的內容,它就會調用負責網頁訪問的 MCP Server,MCP Server 再通過網頁抓取相關的代碼或 API,從互聯網上獲取網頁內容,并將結果返回給大模型。
MCP 在技術原理上的一大創新,是整合了 Function call 標準。在 MCP 出現之前,不同大模型的 Function call 標準就像不同國家的語言,各有各的規則,導致大模型與外部工具之間的交互十分不便。而 MCP 就像是一個強大的 “翻譯官”,將這些不同的標準整合為一個統一的協議,讓幾乎所有的大模型都能按照這個標準與外部工具進行交互 。這不僅降低了開發成本,還極大地提高了大模型與外部工具協作的效率和靈活性,使得大模型在處理各種任務時更加得心應手。
三、MCP 的安裝與配置
下面,我將以在 AI 編程工具 Cursor 上配置 MCP 為例,為大家進行詳細的操作演示。
3.1 升級 Cursor 至最新版本
首先,打開 Cursor,點擊界面中的設置按鈕 ,進入設置頁面。在設置頁面中找到 “Beta features” 選項,在這里將 Cursor 升級為最新版本。這一步非常關鍵,因為新版本通常會修復一些舊版本的問題,并且可能會對 MCP 功能進行優化和完善,確保我們能夠順利地使用 MCP 的各項功能。
3.2 創建配置文件
完成版本升級后,點擊 MCP 配置選項。當前 MCP 是通過文件方式進行配置的,所以我們需要在根目錄下創建一個名為 “.cursor” 的文件夾,然后在該文件夾內再創建一個后綴名為.json 的文件,用于存放 MCP 的配置信息 。這個.json 文件就像是一個 “指令集”,告訴 Cursor 如何與 MCP Server 進行交互。
3.3 復制代碼并完成配置
接下來,打開 GitHub 網站,注冊賬號后,在搜索欄中輸入 “MCP(Model Context Protocol Servers)”,找到對應的頁面。以配置 GitHub 為例,點擊進入 GitHub 相關頁面后,向下滑動頁面找到 “NPX” 部分,這里會展示一段代碼,這段代碼就是我們配置 MCP Server 的關鍵信息。復制這段代碼,并將其粘貼到剛才在 Cursor 中新建的.json 文件中 。粘貼完成后,根據實際需求,可能還需要對代碼中的一些參數進行修改,比如一些需要填寫個人密鑰、token 的地方,要替換成自己的相關信息,以確保 MCP Server 能夠正常運行并與 Cursor 進行安全通信。
完成上述步驟后,重啟 Cursor。再次打開 Cursor 時,如果看到 MCP 配置相關位置顯示綠色指示燈亮起,那就表示 Cursor 已成功識別 MCP Server,MCP 配置成功 。如果指示燈未亮,或者顯示異常,那就需要仔細檢查之前的操作步驟,比如配置文件中的代碼是否復制正確、參數修改是否無誤等,也可以查看相關的日志信息來定位問題所在。
四、MCP 的應用案例
4.1 智能問答系統
以某智能客服為例,當用戶咨詢 “我想了解最近一個月內北京地區銷量最高的產品是哪款” 時,智能客服背后的大模型通過 MCP 調用數據庫查詢工具,直接從企業的銷售數據庫中獲取相關數據,精準地回答用戶問題 。而在以往,可能需要人工先從數據庫中導出數據,再進行分析,最后才能回復用戶,整個過程繁瑣且耗時。通過 MCP,智能問答系統的響應速度大幅提升,準確率也得到了保障,為用戶提供了更加高效、準確的服務體驗 。
4.2 編程輔助
在軟件開發過程中,開發人員使用搭載 MCP 技術的編程工具,如前面提到的 Cursor。當需要實現一個復雜的功能,比如在一個電商項目中創建用戶訂單管理模塊時,開發人員只需在 Cursor 中輸入自然語言描述,如 “創建一個用戶訂單管理模塊,包含訂單的創建、查詢、修改和刪除功能,數據庫使用 MySQL” 。Cursor 利用 MCP 調用相關的代碼生成工具、數據庫連接工具等,自動生成基礎代碼框架,并幫助開發人員完成數據庫表結構設計、SQL 語句編寫等工作,極大地提高了開發效率,減少了開發過程中的錯誤,讓開發人員能夠更加專注于業務邏輯的實現 。
4.3 辦公自動化
在辦公場景中,MCP 同樣發揮著重要作用。例如,在處理一份月度銷售報告時,員工可以通過自然語言指令,讓辦公軟件利用 MCP 自動從多個數據源,如 Excel 銷售數據文件、CRM 系統中的客戶數據等,提取相關信息,進行數據整合和分析,最后自動生成報告文檔 。以前,員工可能需要花費大量時間手動復制粘貼數據,進行格式調整和數據分析,現在借助 MCP,這些繁瑣的操作可以在短時間內自動完成,辦公效率得到了顯著提升 。
五、MCP 與 Function call 的區別
MCP 和 Function call 雖然都涉及大模型與外部工具的交互,但它們在多個方面存在明顯區別 。
從功能角度來看,Function call 本質上是大模型調用外部函數或 API 的一種機制,是大模型自身能力的直接擴展 。比如 GPT-4 可以利用 Function call 直接生成結構化的函數調用請求,查詢天氣、計算數值等操作 。而 MCP 則更側重于提供一個標準化的協議,它像是一個 “萬能適配器”,解決的是大模型與各種外部工具、數據源之間的兼容性問題,讓不同的模型和工具能夠高效地互操作 。
在實現方式上,Function call 通常與特定的大模型緊密綁定,依賴于模型廠商的特定實現 。不同的大模型在 Function call 的實現方式和接口上可能各不相同,缺乏統一的標準,這就導致開發者在使用時需要針對不同模型進行大量的適配工作 。而 MCP 則遵循統一的標準協議,如 JSON-RPC 2.0,開發者按照這個標準開發一次接口,就可以被多個大模型調用,大大降低了開發成本和復雜性 。
從應用場景來看,Function call 適用于處理簡單、低延遲的任務,比如實時翻譯、情感分析、查詢實時天氣等,能夠在模型推理過程中快速調用,高效地完成任務 。而 MCP 更適合復雜、異步的任務,例如企業內部系統的跨平臺數據整合,將 CRM、ERP 等系統封裝為 MCP Server,供多個 Agent 安全調用,實現復雜的數據交互和業務流程 。
簡而言之,MCP 解決的是 “如何讓 AI 連接萬物” 的通用性問題,而 Function call 解決的是 “如何讓 AI 快速執行特定操作” 的效率問題 。二者并不是相互替代的關系,而是互補協作,共同推動 AI 從單純的對話交互向自動化任務執行邁進,在不同的場景下發揮各自的優勢,為 AI 應用的發展提供強大的支持 。
六、MCP 的發展趨勢與代碼案例
6.1?發展趨勢
隨著人工智能技術的飛速發展,MCP 作為連接大模型與外部工具的關鍵技術,其未來發展趨勢備受關注 。
在技術層面,MCP 有望實現更加智能化的任務處理。通過不斷優化算法和模型,MCP 將能夠更精準地理解用戶需求,自動調用最合適的外部工具和數據源,實現任務的高效執行 。例如,在智能寫作場景中,MCP 不僅能幫助作者查詢資料、校對語法,還能根據文章的風格和主題,自動生成相關的案例和引用,提升文章的質量和專業性 。
在應用領域,MCP 將進一步拓展其邊界。除了現有的辦公、編程、問答等場景,MCP 還將深入到醫療、金融、教育等更多垂直領域 。在醫療領域,醫生可以借助 MCP 調用患者的病歷數據、醫學影像資料以及最新的醫學研究成果,為診斷和治療提供更全面的支持 ;在金融領域,MCP 可以幫助投資者快速分析市場數據、評估投資風險,制定更合理的投資策略 。
從生態建設角度來看,MCP 將促進形成更加開放和繁榮的 AI 生態系統。越來越多的開發者和企業將基于 MCP 開發各種創新應用和服務,不同的大模型、工具和數據源之間將實現更緊密的協作和共享 。這將推動 AI 技術的普及和應用,為各行各業的數字化轉型提供強大的動力 。
當然,MCP 的發展也面臨一些挑戰。例如,如何確保數據的安全和隱私,如何解決不同系統之間的兼容性問題,以及如何應對可能出現的技術壟斷等 。但隨著技術的不斷進步和相關標準的完善,這些問題有望逐步得到解決 。可以預見,MCP 將在未來的 AI 發展中扮演越來越重要的角色,為我們的生活和工作帶來更多的便利和創新 。
6.2 經典代碼案例及解釋
1. 客戶端連接到MCP服務器(SSE方式)
async def connect_to_sse_server(self, server_url: str):"""連接到使用SSE傳輸的MCP服務器"""self._streams_context = sse_client(url=server_url)streams = await self._streams_context.__aenter__()self._session_context = ClientSession(*streams)self.session = await self._session_context.__aenter__()await self.session.initialize()response = await self.session.list_tools()tools = response.toolsprint("\n已連接到服務器,可用工具:", [tool.name for tool in tools])
解釋:這段代碼展示了客戶端如何通過SSE(Server-Sent Events)方式連接到MCP服務器。它首先創建一個SSE客戶端上下文,然后進入上下文獲取數據流,接著創建客戶端會話并初始化。最后,它列出服務器支持的工具,驗證連接是否成功。
2. 定義一個MCP工具(天氣查詢)
@mcp.tool()
async def get_weather(city: str, unit: Literal["celsius", "fahrenheit"] = "celsius") -> str:"""獲取城市實時天氣信息"""# 模擬天氣查詢邏輯weather_info = f"{city}: 晴 25°C, 濕度45%, 東南風3級"return weather_info
解釋:這是一個簡單的MCP工具定義,用于獲取指定城市的天氣信息。它使用@mcp.tool()
裝飾器將函數注冊為MCP工具,函數參數和返回值類型都明確指定,便于客戶端調用時傳遞參數和處理返回結果。
3. 啟動MCP服務器(SSE方式)
if __name__ == "__main__":mcp_server = mcp._mcp_serverstarlette_app = create_starlette_app(mcp_server, debug=True)uvicorn.run(starlette_app, host="0.0.0.0", port=8020)
解釋:這段代碼展示了如何啟動一個基于SSE的MCP服務器。它首先創建一個MCP服務器實例,然后通過create_starlette_app
函數將其包裝為一個Starlette應用,最后使用uvicorn
運行該應用,監聽指定的主機和端口。
七、總結與展望
7.1 文章總結
MCP 作為連接大模型與外部工具的創新技術,為人工智能的應用和發展開辟了新的道路。它以其獨特的標準化協議,打破了大模型與外部世界之間的壁壘,實現了高效、靈活的數據交互和任務執行,在智能問答、編程輔助、辦公自動化等多個領域展現出了巨大的應用價值和潛力 。
隨著技術的不斷演進,MCP 有望在未來進一步拓展其應用邊界,為更多行業帶來智能化的解決方案。同時,我們也期待更多的開發者能夠關注和探索 MCP 技術,共同推動人工智能生態系統的繁榮發展 。如果你對人工智能技術充滿熱情,不妨深入了解 MCP,開啟你的創新之旅,說不定下一個基于 MCP 的創新應用就將由你創造!
7.2 關鍵字解釋
-
MCP (Model Context Protocol):模型上下文協議,用于標準化AI大模型與外部工具之間的交互。
-
Function call:大模型調用外部函數或API的機制,與MCP不同,它通常依賴于特定模型的實現。
-
SSE (Server-Sent Events):一種服務器推送技術,允許服務器向客戶端發送實時消息,常用于MCP的網絡傳輸。
-
stdio:標準輸入輸出,用于在同一臺服務器上實現MCP客戶端與服務器之間的通信。
-
JSON-RPC 2.0:一種基于JSON的RPC協議,MCP遵循該協議進行數據交換。
-
Agent:在AI領域,指能夠自主執行任務的智能體,MCP常用于連接和管理Agent的工具。
-
API:應用程序接口,MCP Server通過API與外部工具交互。
-
Cursor:一個支持MCP的AI編程工具,可用于代碼生成和項目管理。
-
OpenAI:一個知名的人工智能研究實驗室,其模型常與MCP結合使用。
-
Anthropic:MCP的開發者,也是Claude大模型的母公司。
部分圖片素材來源:
1、https://zhuanlan.zhihu.com/p/32350404993
2、100 行代碼的 MCP 服務,打造一個簡易的“智能化運維”平臺-騰訊云開發者社區-騰訊云
相關文章素材:?
-
MCP學習筆記:詳細介紹了MCP的概念、發展過程、架構及實際應用案例。
-
100 行代碼的 MCP 服務,打造一個簡易的“智能化運維”平臺:通過具體代碼示例展示了如何快速搭建一個基于MCP的服務。
?