MCP模型上下文協(xié)議客戶端開(kāi)發(fā)教程 - 零基礎(chǔ)入門指南

2025-04-27 16:15 更新

在人工智能快速發(fā)展的今天,大型語(yǔ)言模型(LLM)的應(yīng)用場(chǎng)景不斷拓展。為了讓LLM更好地整合數(shù)據(jù)和工具,MCP(Model Context Protocol)應(yīng)運(yùn)而生。它就像AI領(lǐng)域的USB-C接口,為AI應(yīng)用提供了標(biāo)準(zhǔn)化的連接方式。今天,我們將為大家?guī)?lái)一篇適合國(guó)內(nèi)零基礎(chǔ)小白學(xué)習(xí)的MCP客戶端開(kāi)發(fā)教程,幫助大家輕松上手MCP客戶端開(kāi)發(fā)。

一、準(zhǔn)備工作

在開(kāi)始之前,你需要確保系統(tǒng)滿足以下要求:

  1. 操作系統(tǒng):Mac或Windows計(jì)算機(jī)。
  2. 編程語(yǔ)言:安裝最新版本的Python。
  3. 工具:安裝最新版本的uv。

二、搭建環(huán)境

首先,我們需要?jiǎng)?chuàng)建一個(gè)新的Python項(xiàng)目并安裝uv

  1. pip install uv

三、設(shè)置API密鑰

你需要從Anthropic控制臺(tái)獲取一個(gè)API密鑰。

  1. 創(chuàng)建一個(gè).env文件來(lái)存儲(chǔ)它:

  1. touch .env

  1. 將你的密鑰添加到.env文件中:

  1. ANTHROPIC_API_KEY=your_api_key_here

  1. .env添加到你的.gitignore文件中,以避免將其提交到Git倉(cāng)庫(kù):

  1. .env

四、創(chuàng)建客戶端

基本客戶端結(jié)構(gòu)

首先,我們?cè)O(shè)置導(dǎo)入并創(chuàng)建基本的客戶端類:

  1. import os
  2. import asyncio
  3. from typing import List, Optional
  4. from dotenv import load_dotenv
  5. from anthropic import ClaudeApi
  6. from fastmcp import FastMCPClient
  7. load_dotenv()
  8. class MCPChatClient:
  9. def __init__(self):
  10. self.claude_api = ClaudeApi(api_key=os.getenv("ANTHROPIC_API_KEY"))
  11. self.mcp_client = FastMCPClient()
  12. self.session = None

服務(wù)器連接管理

接下來(lái),我們實(shí)現(xiàn)連接到MCP服務(wù)器的方法:

  1. async def connect_to_server(self, server_path: str):
  2. """連接到MCP服務(wù)器"""
  3. await self.mcp_client.connect(server_path)
  4. self.session = await self.mcp_client.initialize_session()
  5. tools = await self.mcp_client.list_tools(self.session)
  6. print(f"Available tools: {tools}")

查詢處理邏輯

現(xiàn)在,我們添加處理查詢和處理工具調(diào)用的核心功能:

  1. async def process_query(self, query: str) -> str:
  2. """處理查詢并調(diào)用工具"""
  3. # 獲取可用工具
  4. tools = await self.mcp_client.list_tools(self.session)
  5. # 發(fā)送查詢到Claude并獲取響應(yīng)
  6. response = await self.claude_api.send_query(query, tools)
  7. # 處理工具調(diào)用
  8. if response.requires_tool_call:
  9. tool_call_result = await self.mcp_client.call_tool(
  10. self.session,
  11. response.tool_to_call,
  12. response.tool_input
  13. )
  14. response = await self.claude_api.send_tool_result(
  15. response.conversation_id,
  16. tool_call_result
  17. )
  18. return response.content

交互式聊天界面

現(xiàn)在,我們添加聊天循環(huán)和清理功能:

  1. async def chat(self):
  2. """啟動(dòng)交互式聊天界面"""
  3. print("Starting chat with Claude...")
  4. print("Type 'exit' to end the chat.")
  5. while True:
  6. query = input("You: ")
  7. if query.lower() == 'exit':
  8. break
  9. response = await self.process_query(query)
  10. print(f"Claude: {response}")
  11. await self.mcp_client.close()

主入口點(diǎn)

最后,我們添加主執(zhí)行邏輯:

  1. async def main():
  2. client = MCPChatClient()
  3. server_path = input("Enter the path to your MCP server: ")
  4. await client.connect_to_server(server_path)
  5. await client.chat()
  6. if __name__ == "__main__":
  7. asyncio.run(main())

五、關(guān)鍵組件解釋

1. 客戶端初始化

  • MCPChatClient類初始化會(huì)話管理和API客戶端。
  • 使用AsyncExitStack進(jìn)行正確的資源管理。
  • 配置Anthropic客戶端以進(jìn)行Claude交互。

2. 服務(wù)器連接

  • 支持Python和Node.js服務(wù)器。
  • 驗(yàn)證服務(wù)器腳本類型。
  • 設(shè)置適當(dāng)?shù)耐ㄐ徘馈?/li>
  • 初始化會(huì)話并列出可用工具。

3. 查詢處理

  • 維護(hù)對(duì)話上下文。
  • 處理Claude的響應(yīng)和工具調(diào)用。
  • 管理Claude和工具之間的消息流。
  • 將結(jié)果整合成一個(gè)連貫的響應(yīng)。

4. 交互界面

  • 提供簡(jiǎn)單的命令行界面。
  • 處理用戶輸入并顯示響應(yīng)。
  • 包含基本的錯(cuò)誤處理。
  • 允許優(yōu)雅地退出。

5. 資源管理

  • 正確清理資源。
  • 處理連接問(wèn)題的錯(cuò)誤。
  • 優(yōu)雅的關(guān)閉程序。

六、常見(jiàn)的自定義點(diǎn)

  1. 工具處理
    • 修改process_query()以處理特定類型的工具。
    • 為工具調(diào)用添加自定義錯(cuò)誤處理。
    • 實(shí)現(xiàn)特定工具的響應(yīng)格式。
  2. 響應(yīng)處理
    • 自定義工具結(jié)果的格式。
    • 添加響應(yīng)過(guò)濾或轉(zhuǎn)換。
    • 實(shí)現(xiàn)自定義日志記錄。
  3. 用戶界面
    • 添加圖形用戶界面或Web界面。
    • 實(shí)現(xiàn)豐富的控制臺(tái)輸出。
    • 添加命令歷史或自動(dòng)完成。

七、運(yùn)行客戶端

要運(yùn)行你的客戶端與任何MCP服務(wù)器:

  1. 確保你的服務(wù)器正在運(yùn)行。
  2. 提供你的服務(wù)器腳本的路徑。
  3. 啟動(dòng)客戶端。

客戶端將:

  1. 連接到指定的服務(wù)器。
  2. 列出可用工具。
  3. 啟動(dòng)交互式聊天會(huì)話,你可以:
    • 輸入查詢。
    • 查看工具執(zhí)行情況。
    • 獲取Claude的響應(yīng)。

八、工作原理

當(dāng)你提交一個(gè)查詢時(shí):

  1. 客戶端從服務(wù)器獲取可用工具列表。
  2. 你的查詢連同工具描述一起發(fā)送給Claude。
  3. Claude決定使用哪些工具(如果有的話)。
  4. 客戶端通過(guò)服務(wù)器執(zhí)行任何請(qǐng)求的工具調(diào)用。
  5. 結(jié)果被發(fā)送回Claude。
  6. Claude提供自然語(yǔ)言響應(yīng)。
  7. 響應(yīng)被顯示給你。

九、最佳實(shí)踐

  1. 錯(cuò)誤處理
    • 始終將工具調(diào)用包裝在try-catch塊中。
    • 提供有意義的錯(cuò)誤消息。
    • 優(yōu)雅地處理連接問(wèn)題。
  2. 資源管理
    • 使用AsyncExitStack進(jìn)行正確的清理。
    • 完成后關(guān)閉連接。
    • 處理服務(wù)器斷開(kāi)連接的情況。
  3. 安全性
    • 將API密鑰安全地存儲(chǔ)在.env中。
    • 驗(yàn)證服務(wù)器響應(yīng)。
    • 謹(jǐn)慎處理工具權(quán)限。

十、故障排除

服務(wù)器路徑問(wèn)題

  • 雙重檢查你的服務(wù)器腳本路徑是否正確。
  • 如果相對(duì)路徑不起作用,使用絕對(duì)路徑。
  • 對(duì)于Windows用戶,確保在路徑中使用正斜杠(/)或轉(zhuǎn)義的反斜杠(\)。
  • 驗(yàn)證服務(wù)器文件具有正確的擴(kuò)展名(.py用于Python,.js用于Node.js)。

響應(yīng)時(shí)間

  • 第一個(gè)響應(yīng)可能需要長(zhǎng)達(dá)30秒才能返回。
  • 這是正常的,發(fā)生在以下情況:
    • 服務(wù)器初始化時(shí)。
    • Claude處理查詢時(shí)。
    • 工具正在執(zhí)行時(shí)。
  • 后續(xù)的響應(yīng)通常更快。
  • 在這個(gè)初始等待期間不要中斷進(jìn)程。

常見(jiàn)錯(cuò)誤消息

如果你看到:

  • FileNotFoundError:檢查你的服務(wù)器路徑。
  • Connection refused:確保服務(wù)器正在運(yùn)行且路徑正確。
  • Tool execution failed:驗(yàn)證工具所需的環(huán)境變量是否已設(shè)置。
  • Timeout error:考慮在客戶端配置中增加超時(shí)時(shí)間。

希望這篇教程能幫助你更好地理解和掌握MCP客戶端開(kāi)發(fā)。在編程獅(W3Cschool.cn)平臺(tái),你可以找到更多關(guān)于MCP開(kāi)發(fā)的實(shí)例和教程,幫助你進(jìn)一步提升開(kāi)發(fā)技能。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)