編者按:在人工智能越來越融入生活的今天,你是否好奇人工智能如何與外部系統“對話”,精準獲取信息并完成任務?Anthropic于2024年推出MCP協議將給你答案。本欄目上一期文章重點介紹了MCP協議的起源和工作原理,本期文章將聚焦MCP協議在用戶應用與開發實踐中的關鍵環節,同時提供了實用的指導與參考資源,讀者可通過本文掌握MCP的核心知識與技能,并將其有效運用于教學場景,從而推動MCP技術在教育領域的深化應用與發展。
中圖分類號:G434 文獻標識碼:A論文編號:1674—2117(2025)15-0081-06
引言
隨著人工智能技術的迅猛發展,模型上下文協議(MCP)日益受到關注。MCP的核心是標準化上下文信息的傳遞,它是實現模型服務便捷調用、互操作和整合的關鍵使能規范和基礎。無論是用戶希望借此提升工作效率,還是開發者致力于創新MCP應用的開發,深入掌握MCP的應用與開發流程都顯得極為關鍵。因此,本文將探討MCP在用戶應用及開發實踐中的多個細節,助力讀者理解MCP的精髓與操作要點。
從用戶的角度應用MCP現在,越來越多的人開始關注在日常工作中如何應用MCP來提高工作效率和擴展自身能力邊界,CherryStudio擁有強大的整合能力以及簡單易用的使用界面,為用戶帶來絕佳的MCP服務體驗,下面,介紹如何在Cherry Studio中應用MCP。
1.前置依賴
首先,使用CherryStudio客戶端,需確保已經安裝1.2.9及以上版本并完成模型API配置后才能正常使用此功能,在CherryStudio上進行模型對話所需的最低版本以及如何安裝使用可以參考Cherry
Studio官方文檔。
2.在Cherry Studio中同步魔搭MCP(ModelScopeMCP)服務
魔搭MCP廣場匯聚了海量的MCP服務資源,為用戶提供了豐富多樣的選擇。通過將魔搭MCP服務與Cherry Studio進行同步,用戶可以便捷地在CherryStudio中使用這些服務。
(1)在魔搭發現并托管MCP服務
若已經完成魔搭MCP廣場上的MCP服務發現、選型、托管步驟,則可以直接進入下一步,其中有“Hosted”標簽的為可托管服務,即服務部署于ModelScope平臺上,各客戶端可進行調取使用(如圖1)。
在有“Hosted”標記的MCP頁面上點擊進入詳情頁(如圖2),在“連接”位置進行托管,并獲得包括SSEURL的服務配置信息;除另有說明外,有些MCP服務需要填寫環境變量后才可以連通。連接并托管成功的MCP服務可以在魔搭MCP實驗場、本地開發環境及CherryStudio客戶端等多個場所/應用環境被調取并使用到。
(2)在Cherry Studio中設 置ModelScopeMCP同步
在CherryStudio的“設置-MCP服務器-同步服務器”(如
C ? □ https://www.modelscope.cn/mcp ☆ + ☆ : ...
}Modelscope 首頁 模型庫 數據集 創空間 AIGC專區 文檔 社區
MCP服務 MCP體驗gt;Fetch網頁內容抓取 Hosted 高德地圖 Hosted福@modelcontextprotocol/fetch fetch @amap/amap-maps瀏覽器自動化 301 該服務器使大型語言模型能夠檢索和處理網頁內容,將 高德地圖是一個支持任何MCHTML轉換為markdown格式,以便于更輕松地使用。 用戶輕松利用高德地圖MCP@modelcontextprotocol 118.7k 41 @amap搜索工具 612交流協作工具 235 趣丸千音 Local A 12306-MCP車票查..@allvoicelab/AllVoiceLab @Jooo0ok/12306-mcp官方AllVoiceLab模型上下文協議(MCP)服務器,支持與 服務器提供一個簡單的API接開發者工具 1214 強大的文本轉語音和視頻翻譯API交互。允許MCP客戶 票。@allvoicelab 3.1k 3 @Joooook娛樂與多媒體 106支付寶McPever lacal 支 可視化圖表-MCP-S..文件系統 209是支付寶開放平臺提供的MCPServer,讓你可以輕松將 Avisualization Model Co大計寧立平退州的六創 高 種能能力 -h
圖1魔搭MCP廣場

圖3)中,默認ModelScope,因為CherryStudio與ModelScope為官方合作,所以在MCP服務器勾選ModelScope后會自動進入魔搭主頁,如下頁圖4所示。
在魔搭主頁里將魔搭API令牌填入到對應位置,即可一鍵同步魔搭賬號下的所有已托管MCP服務配置。
進入魔搭首頁訪問“魔搭首頁-訪問令牌”(如下頁圖5),在獲取到Token后,在CherryStudio相應地方填入Token并點擊“同步”。
在Cherry Studio可用的MCP服務器列表當中會有魔搭HostedMCP服務配置好并連接的那些服務器(如下頁圖6)。這樣,就可知道MCP服務在CherryStudio中已經同步完成了,之后就可以在CherryStudio中正常使用MCP服務了。
(3)增量更新
不論是成功地把MCP服務新加入MCP廣場還是卸載了MCP服務,都可以隨時回到CherryStudio中的“設置-MCP服務器一同步服務器”頁面上,點擊“同步”
圖2連接頁面

圖4同步魔搭賬號

圖5訪問令牌

務器”的圖標。點擊“MCP服務器”圖標就可以看到已經通過同步的方式導人到CherryStudio中的可以拿來直接使用的MCP服務列表了(如下頁圖7)。用戶可以在對話框列表中選取本次對話想要使用
從開發者的角度開發MCP
在了解MCP開發的知識技能后就能設計制作出各式各樣的、非常有創意的MCP應用軟件,為用戶打造各種強大功能。其中,FastMCP是一個MCPServer編程的開發引擎框架,以其精簡高效的特點成為許多開發人員的選擇,本文結合使用FastMCP框架實現基于城市天氣查詢的MCPServer來闡述MCP開發的一些知識要點。
的MCP服務,之后AI助手會在后續對話的過程中根據需要調用服務來完成所需求的任務。
按鈕,進行增量更新。每次都會同步MCP廣場上的MCP服務更新情況到CherryStudio中,隨時都保持最新的MCP服務列表。
1.模塊導入及初始化
(2)效果示例
3.在Cherry Studio中結合模型與MCP的使用
開發的第一步是導人必要的模塊并進行初始化操作。在Python環境中,需要導人FastMCP模塊以及其他相關依賴庫。下頁圖9是具體的代碼示例。
(1)用MCP在會話中開啟MCP服務
以“時間服務MCP”為例,當用戶要求AI助手獲取某個網頁的相關信息后,AI助手就會自動調用之前開啟了“時間服務”的MCP,將相關網頁內容準確地提取出來,并把相關信息反饋給用戶(如下頁圖8)。
在完成MCP服務同步以后,在CherryStudio客戶端AI助手消息輸入框的旁邊會出現“MCP服
這里,初始化了一個名為“weather”的FastMCP實例。該實例名稱會在一些工具中顯示,便于開發者識別和管理不同的MCP
圖7選擇MCP服務

圖8MCP服務反饋
圖9代碼示例

型的FastMCP工具主要由以下三個部分構成。
參數可以為數據元添加注釋,例如@ mcp.tool(annotations={\"title\":\"CalculateSum\",\"readOnlyHint\":True,\"openWorldHint\":False}),這些注釋信息有助于LLM更好地理解和使用工具。
(1)裝
飾器
④ 元數據:可以設置name、description和tags等元數據參數,如@mcp.tool(name °leddash 'find_products\",description 11 工具描述信息\",tags={\"catalog\",\"search\"}),通過這些元數據,能夠更清晰地定義工具的名稱、描述和所屬標簽,便于組織和篩選工具。
裝飾器用于聲明一個MCP Tool工具,其標準格式為 @ mcp.tool(.在FastMCP框架中,裝飾器還支持多種參數設置,以實現不同的功能。
(2)函數主體
函數主體是具體實現工具功能的核心部分。FastMCP框架支持豐富的特性,為開發者提供了靈活的開發方式。
① 排除參數:通過exclude_args參數可以指定哪些參數不向LLM暴露,但需要
① 類型注釋:支持廣泛的類型注釋,包括所有Pydantic類型,同時可以使用Field類和Annotated提供有關參數的其他元數據。這有助于提高代碼的可讀性和可維護性,確保參數的正確傳遞和使用。
fromtyping import Any,Dict,Optional
import httpx
frommcp.server.fastmcpimport FastMCP
mcp=FastMCP(\"weather\")#初始化FastMCP
Server
為這些參數提供默認值。例如,@ mcp.tool(name =11 get_user_details\",exclude_args=[\"user_id\"]),在此設置下,user_id參數不會告知LLM填寫,但需要有默認參數傳入。
② 函數參數約定:沒有默認值的參數被視為必需參數,而有默認值的參數則是可選參數。這種約定與Python的標準函數參數規則一致,開發者可以輕松上手。
Server實例。通過這一初始化操作,搭建起了MCP Server的基礎架構,為后續的功能開發做好了準備。
② 禁用工具:若設置enabled參數為False,即 @ mcp.tool(enabled °leddash False),則該工具不會提供給LLM使用,可用于控制工具的啟用狀態。
2.FastMCP工具拆解
③ 支持標準def和異步asynchronous函數:工具可以采用標準的def函數或異步的asynchronous函數作為實現方式。無論采用哪種方式,工具都會自動
FastMCP框架中的工具是實現MCP功能的核心組件。一個典③ 數據注釋:利用annotations
fromtyping import Any return\"Unable to fetchalertsornoalertsfound.\"
import httpx if not data[\"features]:
from mcp.server.fastmcp import FastMCP return\"No active alerts for this state.\" alerts Σ=Σ [format_alert(feature)forfeatureindata[\"features\"]]
#Initialize FastMCP server return\"n- -n\".join(alerts)
mcp=FastMCP(\" weather\") @mcp.tool
#Constants asyncdefget_forecast(latitude:float,longitude:float) -gt;str
NWS_API_BASE Ψ=Ψ \"https://api.weather.gov\" etweatherforecastforalocation
USER_AGENT Σ=Σ \"weather-app/1.0\" Args:
async def make_nws_request(url:str)
dict[str,Any]|None: latitude:Latitude of the location MakearequesttotheNwSAPlwithpropererorhandling.\" longitude:Longitude of the location headers
III \"User-Agent\":USER_AGENT, #First get the forecast grid endpoint \"Accept\":\"application/geo+json\" points_url Σ=Σ f{NWS_APl_BASE}/points/{latitude},{longitude}\" 分 points_data Σ= await make_nws_request(points_url) asyncwith httpx.AsyncClientas client: if not points_data: try: return\"Unable to fetch forecast data forthis location.\" response Σ= awaitclient.get(url,headers=headers,timeout=30.0) #Get the forecast URL from the points response response.raise_for_status forecast_url Σ=Σ points_data.get(\"properties\",0).get(\"forecast\") return response.json if not forecast_url: except Exception ase: return\"Unable to fetch detailed forecast.\" print(f\"Request error:{e}\") forecast_data Σ=Σ awaitmake_nws_request(forecast_url) return None if not forecast_data:
def format_alert(feature:dict) -gt;str return\"Unable to fetchdetailed forecast.\" Formatanalertfeatureintoareadablestring. #Format the periods intoa readable forecast props Σ=Σ feature.get(\"properties\",0) periods Σ=Σ forecast_data.get(\"properties\",{).get(\"periods\",[]) returnf forecasts Θ=I (20
Event:{props.get('event','Unknown')} forperiod in periods[:5]:# Only shownext5periods
Area:{props.get('areaDesc','Unknown')} forecast 
Severity:{props.get('severity','Unknown')} {period.get('name','UnknownPeriod')}:
Description:{props.get('description','No description available')} Temperature:{period.get('temperature','Unknown')}°{period.
Instructions:{props.get(‘instruction’,'No specific instructionsprovided')} get('temperatureUnit','Unknown')} Wind:{period.get('windSpeed','Unknown')}{period.get('windDirection',
@mcp.tool 'Unknown')}
asyncdefget_alerts(state:str)-gt;str: Forecast:{period.get('detailedForecast','Nodetailed forecastavailable')} Get weatheralertsfora US state. Args: forecasts.append(forecast) state:Two-letter US state code (e.g.CA,NY) return\"n -n\".join(forecasts) ! if name_
_main__\": url=f\"{NwS_API_BASE}/alerts/active/area/{state} #Initializeandruntheserver data Σ=Σ awaitmake_nws_request(url) mcp.run(transport='stdio') if not data or \"features\"not in data:
圖10完整的代碼main.py實現及詳細解析
圖11目錄結構信息

樣的輸出數據。例如,在天氣查詢工具的函數說明中,可以詳細描述工具的用途、輸入參數的含義以及輸出結果的格式等內容。
志記錄、閱讀資源或通過Context對象報告進度等。這些功能有助于開發者在開發過程中進行調試、監控和優化工具的性能。
3.實例展示
(3)函數說明
接下來,通過一個具體的實例——獲取指定城市天氣信息的工具,來深入理解FastMCP工具的開發過程。圖10是完整的代碼main.py實現及詳細解析。
圖12添加MCP服務

目錄結構如上頁圖11所示。使用CherryStudio客戶端添加MCP服務如圖12所示。
圖13參數部分的內容

持雙向通信,但實現復雜且可能受網絡限制。它們共同服務于客戶端與MCP服務器的通信,其中SSE和Streamable HTTP基于HTTP協議拓展,而STDIO在本地環境中為快速開發調試提供便利。STDIO、SSE和Streamable HTTP各有優勢和局限,需根據具體場景選擇。未來,新興技術如WebAssembly和WebSockets可能為優化MCP訪問過程提供新思路,同時現有通信方式有望得到進一步優化改進,以適應分布式計算和云計算環境下的應用需求。
注意,參數部分的內容如圖13所示。
結論
圖14MCP服務反饋

在配置完成點擊保存后,綠燈點亮,說明添加服務成功。開啟聊天窗口,選擇剛剛配置的服務器進行測試,如圖14所示。
5.進一步探 索與總結
在MCP訪問過程中,有STDIO、SSE和StreamableHTTP三種方
MCP技術范式正革新人工智能模型應用方式。用戶借助CherryStudio等客戶端與魔搭MCP廣場的融合,能輕松同步、配置和調用眾多MCP服務,拓展AI助手功能,提升效率與問題解決能力,無論是網頁檢索還是路線規劃,都能快速獲得理想方案。開發者熟練掌握MCP開發,尤其是FastMCP框架,可高效搭建實用MCPServer,通過深度解析FastMCP工具,明晰開發需綜合設計裝飾器、函數主體與闡述等關鍵模塊。未來,隨著模型優化與算力提升,MCP將在多領域深度應用,開發者在高效框架支持下,能開發更多創新應用,滿足市場變化需求,推動MCP技術創造更大價值,助力各行業邁向智能化新階段。 e
(powershell -ExecutionPolicy
ByPass-c \"irm https://astral.sh/uv/
install.ps1|iex\")然后創建uv管理的項目:(uvinit mcp—server—democd mcp—server-demo)最后,將MCP添加到項目依賴
項中:(uv add \"mcp[cli]\"mcp—server—demo)
式可供選擇,本例中使用為:mcp.run(transport='stdio').STDIO通過標準輸人輸出實現本地通信,適合簡單開發調試,但效率低,不適用于大規模數據和高并發。SSE基于持久連接,可實時推送服務器更新至客戶端,適合實時場景,不過僅支持文本數據且單向通信。StreamableHTTP利用HTTP分塊傳輸,能處理大規模數據且支