使用Python構(gòu)建MCP服務(wù)器的詳細(xì)配置步驟
引言
**模型控制協(xié)議(Model Control Protocol, MCP)**是一種專為實(shí)現(xiàn)AI代理與工具解耦而設(shè)計(jì)的通信協(xié)議,為AI驅(qū)動(dòng)應(yīng)用程序的開發(fā)提供了高度的靈活性和模塊化架構(gòu)。通過MCP服務(wù)器,AI代理能夠動(dòng)態(tài)發(fā)現(xiàn)并調(diào)用各種工具來響應(yīng)用戶請(qǐng)求。本文將詳細(xì)介紹MCP服務(wù)器的構(gòu)建過程,包括工具函數(shù)的注冊(cè)、配置以及與Claude Desktop等AI代理的集成。我們將使用Python語言結(jié)合Anthropic的mcp庫(kù)來構(gòu)建一個(gè)功能完整的通用MCP服務(wù)器。

MCP協(xié)議概述
MCP協(xié)議建立了AI代理與MCP服務(wù)器上托管工具集之間的標(biāo)準(zhǔn)化通信機(jī)制。當(dāng)用戶向AI代理提交查詢時(shí),代理會(huì)從MCP服務(wù)器獲取可用的工具列表,將這些工具轉(zhuǎn)換為AI模型可理解的格式,并與用戶請(qǐng)求一同發(fā)送給底層的AI模型。AI模型根據(jù)請(qǐng)求內(nèi)容和可用工具,決定調(diào)用哪個(gè)工具并返回相應(yīng)的執(zhí)行指令。這種解耦架構(gòu)確保了AI代理與工具之間的獨(dú)立性,不僅提升了系統(tǒng)的靈活性,還顯著增強(qiáng)了整體架構(gòu)的可擴(kuò)展性。
開發(fā)環(huán)境準(zhǔn)備
在開始MCP服務(wù)器開發(fā)之前,需要確保開發(fā)環(huán)境滿足以下要求:
系統(tǒng)需要安裝Python 3.8或更高版本。對(duì)于包管理,建議使用pip、Poetry或UV等現(xiàn)代化工具,本文將采用UV作為主要的包管理工具。還需要準(zhǔn)備一個(gè)支持MCP協(xié)議的AI代理應(yīng)用程序(如Claude Desktop)用于后續(xù)的功能測(cè)試。開發(fā)者還應(yīng)具備Python編程和JSON數(shù)據(jù)格式的基礎(chǔ)知識(shí)。
創(chuàng)建項(xiàng)目的過程非常簡(jiǎn)單,通過UV命令即可快速初始化:
uv init McpAgent cd McpAgent
該命令會(huì)生成一個(gè)針對(duì)Python開發(fā)優(yōu)化的項(xiàng)目結(jié)構(gòu)。項(xiàng)目根目錄下包含Git倉(cāng)庫(kù)配置、gitignore文件用于忽略臨時(shí)文件、python-version文件指定Python版本、main.py作為應(yīng)用程序的入口點(diǎn)、pyproject.toml管理項(xiàng)目元數(shù)據(jù)和依賴關(guān)系、README.md提供項(xiàng)目文檔,以及uv.lock文件確保依賴版本的一致性。
UV工具的優(yōu)勢(shì)在于其能夠提供一致的依賴管理和虛擬環(huán)境創(chuàng)建功能,確保項(xiàng)目在不同系統(tǒng)環(huán)境中的可移植性。
工具函數(shù)的設(shè)計(jì)與實(shí)現(xiàn)
MCP服務(wù)器的核心功能依賴于工具函數(shù)的實(shí)現(xiàn)。我們首先創(chuàng)建一個(gè)用于獲取系統(tǒng)信息的工具函數(shù),該函數(shù)將作為MCP服務(wù)器托管的基礎(chǔ)工具。
以下是一個(gè)完整的系統(tǒng)信息獲取工具的實(shí)現(xiàn)示例:
tools.py
import platform
import json
def get_host_info() -> str:
"""
獲取當(dāng)前設(shè)備的系統(tǒng)信息。
Returns:
str: 包含操作系統(tǒng)、架構(gòu)等系統(tǒng)信息的JSON格式字符串。
"""
system_info = {
"os": platform.system(),
"architecture": platform.machine(),
"platform": platform.platform()
}
return json.dumps(system_info)
if __name__ == "__main__":
print(get_host_info())
在設(shè)計(jì)工具函數(shù)時(shí),需要遵循幾個(gè)重要的原則。首先,函數(shù)命名應(yīng)該具有明確的描述性,參數(shù)設(shè)計(jì)要清晰明了。例如,
get_host_info
這個(gè)函數(shù)名直接表達(dá)了其獲取主機(jī)信息的功能。其次,完整的類型提示(如
-> str
)對(duì)于幫助AI模型理解函數(shù)的輸入輸出特征至關(guān)重要。
文檔字符串的編寫同樣重要,特別是當(dāng)函數(shù)功能不能從名稱直接推斷時(shí),詳細(xì)的文檔字符串能夠幫助AI模型更好地理解工具的用途和行為。在返回值設(shè)計(jì)方面,工具函數(shù)應(yīng)該返回AI模型能夠有效處理的字符串格式數(shù)據(jù),通常采用JSON格式。在本例中,我們使用
json.dumps
方法將Python字典轉(zhuǎn)換為JSON字符串。
工具函數(shù)的測(cè)試可以通過UV命令直接執(zhí)行:
uv run tools.py
正常情況下,該命令會(huì)輸出類似以下的系統(tǒng)信息:
{
"os": "Darwin",
"architecture": "arm64",
"platform": "macOS-15.4.1-arm64-arm-64bit"
}
MCP服務(wù)器的構(gòu)建與配置
完成工具函數(shù)開發(fā)后,下一步是使用Anthropic的mcp庫(kù)構(gòu)建MCP服務(wù)器。該服務(wù)器將負(fù)責(zé)托管
get_host_info
工具并為AI代理提供訪問接口。
首先需要安裝mcp庫(kù)。在使用UV的環(huán)境中,可以通過以下命令完成安裝:
uv add mcp
安裝完成后,pyproject.toml文件會(huì)自動(dòng)更新相關(guān)配置:
[project]
name = "mcpagent"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"mcp>=1.9.1",
]
接下來構(gòu)建基礎(chǔ)的MCP服務(wù)器代碼:
main.py
from mcp.server.fastmcp import FastMCP
import tools
# 創(chuàng)建MCP服務(wù)器實(shí)例
mcp = FastMCP("System Info Service")
# 注冊(cè)工具函數(shù)
mcp.add_tool(tools.get_host_info)
# 以stdio模式啟動(dòng)MCP服務(wù)器
def main() -> None:
mcp.run("stdio")
if __name__ == "__main__":
main()
代碼的核心組件包括FastMCP類,它是mcp庫(kù)的主要接口。構(gòu)造函數(shù)接受一個(gè)服務(wù)名稱參數(shù),雖然名稱選擇相對(duì)自由,但建議使用具有描述性的名稱。
add_tool
方法用于將工具函數(shù)注冊(cè)到MCP服務(wù)器中,支持多次調(diào)用以注冊(cè)多個(gè)工具。
run
方法負(fù)責(zé)啟動(dòng)MCP服務(wù)器,其中mode參數(shù)指定通信模式。
MCP協(xié)議支持兩種主要的通信模式:stdio模式使用標(biāo)準(zhǔn)輸入輸出進(jìn)行本地通信,實(shí)現(xiàn)簡(jiǎn)單但要求代理和服務(wù)器運(yùn)行在同一設(shè)備上;SSE(Server-Sent Events)模式通過HTTP協(xié)議實(shí)現(xiàn)通信,適合云端部署場(chǎng)景,但需要處理身份驗(yàn)證和授權(quán)機(jī)制??紤]到教學(xué)目的,本文采用stdio模式以降低復(fù)雜性。
對(duì)于工具函數(shù)與MCP服務(wù)器定義在同一文件中的情況,可以采用裝飾器模式進(jìn)行注冊(cè):
main.py
from mcp.server.fastmcp import FastMCP
import platform
import json
mcp = FastMCP("System Info Service")
@mcp.tool
def get_host_info() -> str:
"""
獲取當(dāng)前設(shè)備的系統(tǒng)信息。
Returns:
str: 包含操作系統(tǒng)、架構(gòu)等系統(tǒng)信息的JSON格式字符串。
"""
system_info = {
"os": platform.system(),
"architecture": platform.machine(),
"platform": platform.platform()
}
return json.dumps(system_info)
mcp.run(mode="stdio")
@mcp.tool
裝飾器在功能上等同于
mcp.add_tool(get_host_info)
的調(diào)用,提供了更加簡(jiǎn)潔的代碼組織方式。
AI代理的配置與集成
為了驗(yàn)證MCP服務(wù)器的功能,我們選擇Claude Desktop作為測(cè)試平臺(tái)。Claude Desktop是一個(gè)用戶友好的AI代理應(yīng)用程序,內(nèi)置了對(duì)MCP協(xié)議的支持。需要注意的是,其他AI代理(如Cline)的配置過程基本相似。

Claude Desktop的配置過程包括以下步驟:
首先,在Claude Desktop中打開設(shè)置菜單,然后訪問開發(fā)者設(shè)置選項(xiàng)。在開發(fā)者設(shè)置中,點(diǎn)擊"編輯配置"按鈕,系統(tǒng)會(huì)打開包含配置文件的目錄。

在配置文件目錄中,需要定位或創(chuàng)建MCP配置文件(通常命名為claude_desktop_config.json)。配置文件的核心內(nèi)容是指定啟動(dòng)MCP服務(wù)器的命令和參數(shù)。由于我們使用UV作為包管理工具,配置文件的格式如下:
mcp_config.json
{
"mcpServers": {
"hostInfoMcp": {
"command": "/ABSOLUTE/PATH/TO/UV/uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/MCPAgent/FOLDER/",
"run",
"main.py"
]
}
}
}
配置文件中有幾個(gè)關(guān)鍵點(diǎn)需要特別注意。command字段必須指向UV可執(zhí)行文件的完整絕對(duì)路徑,在macOS系統(tǒng)中通常是"/Users/username/.local/bin/uv"。同時(shí),directory參數(shù)也必須使用項(xiàng)目的完整絕對(duì)路徑,例如"/Users/username/projects/McpAgent"。
配置項(xiàng)的含義分別是:name字段應(yīng)與FastMCP構(gòu)造函數(shù)中提供的服務(wù)名稱保持一致;command字段指定MCP服務(wù)器的啟動(dòng)命令;args字段包含命令執(zhí)行所需的參數(shù)列表。
完成配置文件編輯后,需要保存文件并重啟Claude Desktop使配置生效。
功能測(cè)試與驗(yàn)證
配置完成后,Claude Desktop應(yīng)該能夠自動(dòng)檢測(cè)到MCP服務(wù)器及其注冊(cè)的工具。測(cè)試過程包括以下幾個(gè)步驟:
啟動(dòng)Claude Desktop的聊天界面,在界面中應(yīng)該能夠看到已注冊(cè)的"hostInfoMcp"工具。

在聊天界面中輸入相關(guān)查詢,例如"我的計(jì)算機(jī)的CPU架構(gòu)是什么?"。Claude Desktop會(huì)顯示一個(gè)對(duì)話框,提示AI模型希望調(diào)用get_host_info工具。用戶需要點(diǎn)擊"允許"按鈕以授權(quán)工具的執(zhí)行。

AI代理會(huì)執(zhí)行工具函數(shù),獲取系統(tǒng)信息,并基于工具的返回結(jié)果生成響應(yīng)。整個(gè)過程展示了MCP協(xié)議在AI代理與工具之間建立的有效通信機(jī)制。

AI生成的響應(yīng)是基于
get_host_info
函數(shù)返回的JSON數(shù)據(jù)進(jìn)行的智能解析和格式化輸出。
開發(fā)最佳實(shí)踐
在MCP服務(wù)器開發(fā)過程中,遵循最佳實(shí)踐能夠顯著提升系統(tǒng)的可靠性和維護(hù)性。
在MCP服務(wù)器開發(fā)過程中,遵循最佳實(shí)踐能夠顯著提升系統(tǒng)的可靠性和維護(hù)性。
在工具設(shè)計(jì)方面,應(yīng)該將AI模型視為需要優(yōu)質(zhì)API和詳細(xì)文檔的開發(fā)者。因此,工具函數(shù)需要具備清晰的命名規(guī)范、完整的類型提示和詳細(xì)的文檔說明。函數(shù)的設(shè)計(jì)應(yīng)該遵循單一職責(zé)原則,每個(gè)工具專注于完成特定的功能,這樣不僅有利于代碼維護(hù),也便于AI模型的理解和調(diào)用。
通信模式的選擇需要根據(jù)具體的部署場(chǎng)景來確定。對(duì)于本地開發(fā)和測(cè)試環(huán)境,stdio模式提供了簡(jiǎn)單直接的通信方式,能夠快速驗(yàn)證功能的有效性。而在生產(chǎn)環(huán)境中,特別是需要遠(yuǎn)程訪問的場(chǎng)景下,SSE模式提供了更強(qiáng)的靈活性和擴(kuò)展性,但同時(shí)也需要考慮網(wǎng)絡(luò)安全和訪問控制的實(shí)現(xiàn)。
錯(cuò)誤處理機(jī)制是系統(tǒng)穩(wěn)定性的重要保障。工具函數(shù)應(yīng)該能夠優(yōu)雅地處理各種異常情況,并返回格式化的錯(cuò)誤信息字符串。這些錯(cuò)誤信息不僅要便于AI模型理解,也要為用戶提供有意義的錯(cuò)誤提示。建議在工具函數(shù)中實(shí)現(xiàn)完整的異常捕獲和處理邏輯,避免因?yàn)檫\(yùn)行時(shí)錯(cuò)誤導(dǎo)致整個(gè)MCP服務(wù)器崩潰。
模塊化架構(gòu)設(shè)計(jì)是MCP協(xié)議的核心優(yōu)勢(shì)之一。保持工具函數(shù)和MCP服務(wù)器的獨(dú)立性,能夠最大化系統(tǒng)的靈活性。這種設(shè)計(jì)允許開發(fā)者獨(dú)立地開發(fā)、測(cè)試和部署不同的工具,也便于后期的功能擴(kuò)展和維護(hù)。
總結(jié)
本文通過實(shí)際的代碼示例和詳細(xì)的配置步驟,展示了使用Python和Anthropic的mcp庫(kù)構(gòu)建MCP服務(wù)器的完整過程。我們從工具函數(shù)的設(shè)計(jì)開始,逐步介紹了MCP服務(wù)器的構(gòu)建、AI代理的配置以及功能測(cè)試的驗(yàn)證方法。
MCP協(xié)議的核心價(jià)值在于實(shí)現(xiàn)了AI代理與工具之間的有效解耦。這種模塊化架構(gòu)不僅簡(jiǎn)化了工具的集成過程,還顯著提升了系統(tǒng)的可擴(kuò)展性。通過標(biāo)準(zhǔn)化的通信協(xié)議,開發(fā)者能夠獨(dú)立地開發(fā)AI代理和工具組件,為AI驅(qū)動(dòng)應(yīng)用程序的開發(fā)提供了更大的靈活性。
遵循本文介紹的最佳實(shí)踐,包括清晰的工具函數(shù)設(shè)計(jì)、合適的通信模式選擇以及完善的錯(cuò)誤處理機(jī)制,開發(fā)者能夠構(gòu)建出可靠且高效的MCP應(yīng)用系統(tǒng)?;谶@個(gè)技術(shù)基礎(chǔ),可以進(jìn)一步擴(kuò)展MCP服務(wù)器的功能,集成更多類型的工具,或者嘗試與不同的AI代理進(jìn)行集成,從而充分發(fā)揮AI驅(qū)動(dòng)工作流程的潛力。
MCP協(xié)議為AI應(yīng)用開發(fā)領(lǐng)域帶來了新的架構(gòu)思路,其在提升系統(tǒng)模塊化程度和開發(fā)效率方面的價(jià)值值得進(jìn)一步探索和應(yīng)用。
以上就是使用Python構(gòu)建MCP服務(wù)器的詳細(xì)配置步驟的詳細(xì)內(nèi)容,更多關(guān)于Python構(gòu)建MCP服務(wù)器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Tkinter組件實(shí)現(xiàn)Radiobutton的示例
Radiobutton組件用于實(shí)現(xiàn)多選一的問題,本文主要介紹了Tkinter組件實(shí)現(xiàn)Radiobutton的示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
深入挖掘Python自定義加密算法的設(shè)計(jì)與實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了Python中自定義加密算法的設(shè)計(jì)與實(shí)現(xiàn)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-12-12
Windows環(huán)境下python環(huán)境安裝使用圖文教程
這篇文章主要為大家詳細(xì)介紹了Windows環(huán)境下python安裝使用圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
python 的 scapy庫(kù),實(shí)現(xiàn)網(wǎng)卡收發(fā)包的例子
今天小編就為大家分享一篇python 的 scapy庫(kù),實(shí)現(xiàn)網(wǎng)卡收發(fā)包的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-07-07

