只需5分鐘,教你用Python搭建MCP Server 精華
大語言模型(LLMs)能力強大,能生成各類文本,精準回答知識疑問,還可用于機器翻譯、代碼編寫等場景。然而,大語言模型也存在明顯短板,無法獲取實時數據,在面對需最新信息的問題時,難以給出準確答案。
為攻克這一難題,Anthropic 推出了模型上下文協議(Model Context Protocol,簡稱 MCP)。這一標準將大語言模型與實時工具、APIs 和自定義資源相連,拓展其能力,讓它能處理更多實時信息任務,補齊短板。
本文教大家如何搭建 MCP 服務器,以 Claude 為例,賦予獲取英超實時動態的能力。
一、賦能 Claude:獲取英超實時動態
在實際應用場景中,大語言模型在體育賽事信息獲取方面存在不足,盡管網絡上足球比賽動態易于搜索,但大語言模型卻無法提供相應內容,這給用戶帶來諸多不便。以 Claude 為例,當用戶詢問英超最新比賽結果或近期統計數據時,它的表現并不理想:

為解決這個問題,我們創建一個MCP服務器,為大語言模型提供合適回復這些提示所需的信息。
二、設置
需要先安裝幾個Python軟件包,才能讓MCP服務器啟動并運行。
創建一個全新的虛擬環境來進行安裝:
python -m venv venv激活該環境:
source venv/bin/activate從這里安裝UV軟件包,用來部署服務器并安裝FastMCP。
FastMCP是非常實用的Python軟件包,能夠簡化構建和部署MCP服務器的過程。它承擔了大部分繁重的工作,并且具備直觀(而且很Python風格!)的接口。
uv pip install fastmcp最后,創建一個新的Python文件來編寫服務器代碼。將其命名為??server.py??。
touch server.py三、數據源
使用來自??football-data.org???的足球數據。需要在這個平臺上獲取API密鑰,并將API密鑰存儲在??.env??文件中。
要創建的工具和資源將基于其API的結構。
在文件中添加以下幾行代碼。
from dotenv import load_dotenv
load_dotenv()
# API配置
BASE_URL = "https://api.football-data.org/v4"
HEADERS = {
'X-Auth-Token': os.getenv('FOOTBALL_API_KEY')
}四、MCP服務器
MCP服務器為模型提供三種主要的功能:工具(Tools)、資源(Resources)和提示(Prompts)。
資源和工具非常相似,都能讓大語言模型根據用戶輸入采取某種形式的行動。
二者的主要區別在于啟動方式。資源由應用程序控制,而工具由模型控制。這意味著大語言模型本身可以查看可用工具列表,并決定在特定場景中使用什么工具來完成給定的請求。另一方面,資源既可以由用戶手動選擇,也可以由大語言模型自動選擇,具體取決于客戶端應用程序。
提示本質上是可重復使用的模板,你可以在服務器上針對工具、資源等常見用例進行預編程。
本文只使用工具,因為我們希望模型根據用戶提示來決定使用什么工具。
創建4個工具,當模型收到與英超足球動態相關的提示時,它可以從中選擇。
- 英超聯賽排名工具
- 球隊賽程工具
- 球隊比賽結果工具
- 聯賽比賽結果工具
這些工具涵蓋了涉及英超聯賽動態的最常見用例。如果你有需要,可以輕松擴展服務器以添加更多工具。
現在,實際編寫這些工具的代碼。
在文件中添加以下幾行代碼來初始化FastMCP。
from fastmcp import FastMCP
mcp = FastMCP("Premier League Updates", dependencies=["requests", "python-dotenv"])注意,在初始化時添加了一些依賴項。這能讓FastMCP知道服務器有哪些依賴項,并在啟動服務器時自動加載。
在FastMCP中創建工具的語法非常簡單,基本上就是用??tool()??裝飾器注解的Python函數。
為簡單起見,以下函數進行了截取。
我們為英超聯賽排名工具創建一個函數。這個函數將獲取最新的英超聯賽排名,并返回包含球隊及其統計數據的JSON格式數據。
@mcp.tool()
def get_premier_league_table():
"""
獲取當前英超聯賽排名
:return: 包含當前英超聯賽排名的JSON響應
"""
url = f"{BASE_URL}/competitions/PL/standings"
response = requests.get(url, headers=HEADERS)
data = response.json()
...
return {'standings': standings}我們再創建三個工具,分別用于獲取球隊即將到來的賽程、之前的比賽結果以及聯賽的最新比賽結果。
@mcp.tool()
def get_team_fixtures(team_id: str) -> dict:
"""
獲取特定球隊即將到來的賽程
:param team_id: 球隊的ID
:return: 包含球隊接下來5場賽程的JSON響應
"""
url = f"{BASE_URL}/teams/{team_id}/matches"
params = {
'status': 'SCHEDULED',
'limit': 5
}
response = requests.get(url, headers=HEADERS, params=params)
data = response.json()
...
return {'fixtures': cleaned_fixtures}
@mcp.tool()
def get_team_results(team_id: str) -> dict:
"""
獲取特定球隊近期的比賽
:param team_id: 球隊的ID
:return: 包含球隊最近5場比賽的JSON響應
"""
url = f"{BASE_URL}/teams/{team_id}/matches"
params = {
'status': 'FINISHED',
'limit': 5
}
response = requests.get(url, headers=HEADERS, params=params)
data = response.json()
...
return {'results': cleaned_results}
@mcp.tool()
def get_latest_league_results() -> dict:
"""
獲取英超聯賽的最新比賽結果
:return: 包含英超聯賽最近比賽的JSON響應
"""
url = f"{BASE_URL}/competitions/PL/matches"
params = {
'status': 'FINISHED',
'limit': 10,
'competitions': 'PL'
}
response = requests.get(url, headers=HEADERS, params=params)
data = response.json()
...
return {'latest_results': cleaned_results}這樣就設置好了所有主要工具。
注意,??get_team_results???和??get_team_fixtures???函數需要一個??team_id???參數。我們不硬編碼??team_id???的選擇,而是可以創建一個額外的工具,為模型提供它需要傳遞給這些函數的??team_id??。
@mcp.tool()
def get_team_ids():
"""
返回一個包含球隊名稱及其對應ID的字典
"""
return {
'arsenal': 57,
'aston villa': 58,
'bournemouth': 1044,
'brentford': 402,
'brighton': 397,
'chelsea': 61,
'crystal palace': 354,
'everton': 62,
'fulham': 63,
'liverpool': 64,
'manchester city': 65,
'manchester united': 66,
'newcastle': 67,
'nottingham forest': 351,
'tottenham': 73,
'west ham': 563,
'wolves': 76,
'southampton': 340,
'ipswich town': 349,
'leicester city': 338
}這使我們可以將解析用戶請求中的球隊名稱的工作交給模型。由于大語言模型非常擅長理解自然語言,無論用戶輸入的球隊名稱拼寫如何,模型都能識別出用戶提到的球隊。例如,“Manchester United”、“Man United”、“Man U”、“Man Utd”甚至“the Red Devils”,模型都應該選擇ID為66的球隊。在這種情況下,這特別有用,因為體育團隊通常會用昵稱來稱呼。
五、測試
在部署服務器之前,可以在開發模式下測試服務器,以確保所有工具都按預期工作。為此,在終端中輸入以下命令:
fastmcp dev server.py這會啟動一個Web界面,可以在其中測試工具、監控服務器性能并查看任何錯誤消息。在將服務器部署到客戶端之前,這對于調試服務器非常有用。

六、部署
現在開始部署到客戶端。FastMCP已經內置了與Claude桌面應用的集成。要進行安裝,在終端中運行以下命令:
fastmcp install server.py服務器已上線。
重新啟動Claude桌面應用程序,你應該會在文本框下方看到一個小工具圖標。服務器上所有可用的工具都將顯示在這里。

現在已經創建了MCP服務器,讓Claude能夠訪問英超聯賽的最新比賽結果和統計數據,讓我們用之前的提示來測試一下,看看表現如何:


如你所見,剛剛創建的MCP服務器現在使Claude能夠獲取最新信息,并針對有關英超足球的提示提供準確的回復。
這個設置展示了MCP如何彌合靜態知識與動態的現實世界信息之間的差距。只需幾個工具和一些簡單的設置,就可以大幅增強大語言模型在特定實時任務中的實用性。
本文轉載自??AI科技論談??,作者:AI科技論談

















