對于想要深入了解 MCP 技術(shù)的開發(fā)者,AIbase的 MCP 資源網(wǎng)站(https://www.aibase.com/zh/repos/topic/mcp)是一個絕佳的選擇。該網(wǎng)站提供了豐富的學(xué)習(xí)資料、開發(fā)工具和社區(qū)支持,幫助開發(fā)者更好地掌握 MCP 技術(shù)。
- 豐富的學(xué)習(xí)資料:從基礎(chǔ)概念到高級應(yīng)用,AIbase 提供了詳細(xì)的文檔和教程,適合不同水平的開發(fā)者。
- 實(shí)用的開發(fā)工具:包括 MCP Server 的示例代碼和開發(fā)框架,幫助開發(fā)者快速搭建和測試自己的 MCP Server。
- 活躍的社區(qū)交流:開發(fā)者可以在社區(qū)中交流經(jīng)驗(yàn)、分享項(xiàng)目、提出問題并獲得解答。
通過 AIbase 的資源,您可以更深入地探索 MCP 的潛力,并將其應(yīng)用于更多復(fù)雜的場景中
編寫一個供 Cursor 使用的 MCP Server 涉及到理解 MCP 的基本原理、定義 Server 的功能、使用 MCP SDK 進(jìn)行開發(fā)以及在 Cursor 中進(jìn)行配置。
以下是詳細(xì)的步驟和說明:
一、理解 MCP 的基本原理
MCP(Model Context Protocol)是一個開放協(xié)議,旨在標(biāo)準(zhǔn)化應(yīng)用程序如何向大型語言模型(LLM)提供上下文信息。它通過一個標(biāo)準(zhǔn)的中間協(xié)議層,使得 AI 模型能夠以一致的方式連接各種數(shù)據(jù)源、工具和功能。
MCP 架構(gòu)包含三個核心組件:
- MCP Host:是指啟動連接的應(yīng)用程序,例如 Cursor、Claude Desktop 和 Cline。
- MCP Client:客戶端在 Host 應(yīng)用程序內(nèi)維護(hù)與 Server 之間 1:1 的連接。
- MCP Server:通過標(biāo)準(zhǔn)化的協(xié)議,為 Client 端提供上下文、工具和提示。您的目標(biāo)是創(chuàng)建一個 MCP Server。
MCP Server 可以提供三種主要類型的功能:
- 工具(Tools):可以被 LLM 調(diào)用來執(zhí)行特定操作的函數(shù)。
- 資源(Resources):類似文件的數(shù)據(jù),可以被客戶端讀取(如 API 響應(yīng)或文件內(nèi)容)。
- 提示(Prompts):預(yù)先編寫的模板,幫助用戶完成特定任務(wù)。對于供 Cursor 使用的 Server,工具(Tools)是最常見的形式,允許 Cursor 的 AI 助手執(zhí)行各種操作。
二、確定 MCP Server 的功能
在開始編寫 Server 之前,您需要明確您的 Server 將提供哪些功能。思考一下您希望 Cursor 的 AI 助手能夠通過您的 Server 完成哪些任務(wù)。
例如,如果您希望 Cursor 能夠與本地文件系統(tǒng)交互,您可以創(chuàng)建一個提供以下工具的 Server:
- list_files:列出指定目錄下的文件。
- read_file:讀取指定文件的內(nèi)容。
- write_file:將內(nèi)容寫入指定文件。
另一個例子是創(chuàng)建一個與 GitHub 交互的 Server,提供:
- search_repositories:搜索 GitHub 倉庫。
- search_issues:搜索 GitHub Issues。
- create_issue:在 GitHub 倉庫中創(chuàng)建新的 Issue。
三、選擇技術(shù)棧和 MCP SDK
MCP 官方提供了 Python 和 TypeScript 的 SDK,您可以選擇您熟悉或適合您需求的語言。
- Python SDK:提供了
mcp
庫,方便您創(chuàng)建 MCP Server。示例代碼展示了如何使用 FastMCP 創(chuàng)建一個簡單的文件統(tǒng)計(jì) Server。 - TypeScript SDK:同樣提供了相應(yīng)的庫來構(gòu)建 MCP Server。
根據(jù)官方信息,使用 Python 技術(shù)棧開發(fā)簡單的 MCP Server 是一個不錯的入門方式。
四、使用 MCP SDK 實(shí)現(xiàn) Server
初始化 Server
使用 SDK 提供的類(例如 Python SDK 中的FastMCP
或Server
)來創(chuàng)建您的 MCP Server 實(shí)例,并為其命名。
定義工具(Tools)
使用 SDK 提供的裝飾器(例如 Python SDK 中的@mcp.tool()
或@app.call_tool()
)來標(biāo)記您的函數(shù)為可被 LLM 調(diào)用的工具。每個工具函數(shù)都應(yīng)該有一個清晰的名稱(name
)和描述(description
),描述其功能。這些信息將用于告知 LLM 該工具的作用。
您需要定義工具的輸入?yún)?shù)(inputSchema
),描述調(diào)用該工具所需的參數(shù),包括參數(shù)的名稱、類型和描述。MCP SDK 通常支持使用 JSON Schema 來定義inputSchema
。
工具函數(shù)應(yīng)實(shí)現(xiàn)具體的功能邏輯,并返回 LLM 可以理解的結(jié)果(例如文本、JSON 格式的數(shù)據(jù))。
實(shí)現(xiàn)list_tools()
函數(shù)
您的 Server 需要實(shí)現(xiàn)一個函數(shù)(通常通過裝飾器標(biāo)記,例如 Python SDK 中的@app.list_tools()
)來返回一個包含所有可用工具信息的列表。這個列表將告知 Client 端您的 Server 提供了哪些工具,以及如何調(diào)用它們。
實(shí)現(xiàn)call_tool()
函數(shù)
您需要實(shí)現(xiàn)一個函數(shù)(通常通過裝飾器標(biāo)記,例如 Python SDK 中的@app.call_tool()
)來處理 Client 端發(fā)送的工具調(diào)用請求。這個函數(shù)會接收被調(diào)用的工具名稱和參數(shù),然后根據(jù)名稱調(diào)用相應(yīng)的工具函數(shù)并返回結(jié)果。
處理通信
MCP Server 需要監(jiān)聽來自 Client 端的連接和請求。常見的通信方式包括標(biāo)準(zhǔn)輸入輸出(stdio
)和 Server-Sent Events(SSE
)。Python SDK 提供了StdioServerTransport
和SseServerTransport
等來實(shí)現(xiàn)不同的通信方式。對于 Cursor,通常使用命令行方式啟動 Server,通過stdio
進(jìn)行通信可能更直接。
五、配置 Cursor 以使用您的 MCP Server
Cursor 使用.cursor/mcp.json
文件來配置要連接的 MCP Server。您需要在您的項(xiàng)目目錄(或者全局配置目錄)下創(chuàng)建或編輯這個文件。
在mcp.json
文件中,您需要添加一個 JSON 對象來描述您的 MCP Server。這個對象通常包含以下字段:
- name:您的 MCP Server 的名稱,在 Cursor 中用于標(biāo)識。
- command:啟動您的 MCP Server 的命令,包括可執(zhí)行文件的路徑。如果您的 Server 是一個 Python 腳本,這可能是 Python 解釋器的路徑。
- args:傳遞給啟動命令的參數(shù),例如您的 Server 腳本的路徑。
- type:通信類型,例如
command
表示通過命令行啟動并使用stdio
通信。
示例mcp.json
配置(假設(shè)您的 Server 是一個名為my_server.py
的 Python 腳本):
{"mcpServers":{"my_custom_server":{"command":"/usr/bin/env","args":["python","/path/to/your/my_server.py"],"type":"command" } } }
請將/path/to/your/my_server.py
替換為您的實(shí)際 Server 腳本路徑。您可以使用which python
命令獲取 Python 解釋器的路徑。
對于 Windows 平臺,您可能需要在command
中使用cmd /c
來執(zhí)行命令。例如:
{"mcpServers":{"my_custom_server":{"command":"cmd","args":["/c","python","/path/to/your/my_server.py"],"type":"command" } } }
六、運(yùn)行和測試您的 MCP Server
- 保存您的 MCP Server 代碼和
mcp.json
配置文件。 - 重新啟動 Cursor。
- 在 Cursor 中與 AI 助手交互,嘗試觸發(fā)您在 Server 中定義的工具。例如,如果您創(chuàng)建了一個文件系統(tǒng) Server,您可以詢問類似 “列出我桌面上的所有文本文件”。
- Cursor 的 AI 助手會分析您的請求,如果判斷需要使用您的 MCP Server 提供的工具,它會向您的 Server 發(fā)送請求。
- 您可以在您的 Server 端添加日志輸出來查看是否收到了請求、執(zhí)行了哪些工具以及返回了什么結(jié)果。
- 提到了可以使用 MCP Inspector 來測試 Server。您可以通過運(yùn)行
mcp dev your_server.py
(如果使用 Python SDK 的 CLI)來啟動 Inspector,并在瀏覽器中查看和測試您的 Server 提供的工具。
七、注意事項(xiàng)
- 安全性:請注意您暴露的工具可能帶來的安全風(fēng)險,特別是涉及到文件系統(tǒng)操作或敏感數(shù)據(jù)訪問時。確保對工具的使用進(jìn)行適當(dāng)?shù)臋?quán)限控制和驗(yàn)證。
- 錯誤處理:在您的 Server 代碼中實(shí)現(xiàn)完善的錯誤處理機(jī)制,以便在工具調(diào)用失敗時能夠向 Cursor 提供有用的錯誤信息。
- 文檔:為您的 MCP Server 提供清晰的文檔,說明其提供的工具、參數(shù)和預(yù)期行為,方便您自己和其他開發(fā)者使用。
- 參考官方文檔和示例:MCP 官方文檔和 SDK 提供的示例代碼是您學(xué)習(xí)和開發(fā)的寶貴資源。
通過以上步驟,您應(yīng)該能夠編寫一個供 Cursor 使用的 MCP Server,擴(kuò)展 Cursor 的 AI 助手的功能,使其能夠與您定義的外部系統(tǒng)或數(shù)據(jù)進(jìn)行交互。記住從簡單的工具開始,逐步增加復(fù)雜性。
(舉報(bào))