如何使用模型上下文協議構建自定義工具 原創
本文介紹如何構建模型上下文協議(MCP)服務器以擴展人工智能功能。創建可以無縫集成人工智能模型的工具,并通過arXiv論文搜索實現進行演示。
模型上下文協議(MCP)在人工智能開發領域變得越來越重要,它可以實現人工智能模型和外部工具之間的無縫集成。本指南將探討如何創建MCP服務器,通過自定義工具實現增強人工智能功能。
什么是模型上下文協議?
模型上下文協議允許人工智能模型以標準化的方式與外部工具和服務進行交互。它使像Claude這樣的人工智能助手能夠執行自定義功能、處理數據并與外部服務交互,同時保持一致的界面。
MCP服務器開發入門
在開始創建MCP服務器時,需要對Python和異步編程有基本的了解。以下介紹設置和實現自定義MCP服務器的過程。
設置項目
創建MCP服務器最簡單的方法是使用官方的MCP服務器創建工具。其中有兩個選擇:
1 # Using uvx (recommended)
2 uvx create-mcp-server
3
4 # Or using pip
5 pip install create-mcp-server
6 create-mcp-server
這將創建一個基本的項目結構:
Plain Text
1 my-server/
2 ├── README.md
3 ├── pyproject.toml
4 └── src/
5 └── my_server/
6 ├── __init__.py
7 ├── __main__.py
8 └── server.py
實施首個MCP服務器
首先創建一個實例:創建一個arXiv論文搜索工具,人工智能模型可以使用它來獲取學術論文。以下是實現方法:
1 import asyncio
2 from mcp.server.models import InitializationOptions
3 import mcp.types as types
4 from mcp.server import NotificationOptions, Server
5 import mcp.server.stdio
6 import arxiv
7
8 server = Server("mcp-scholarly")
9 client = arxiv.Client()
10
11 @server.list_tools()
12 async def handle_list_tools() -> list[types.Tool]:
13 """
14 List available tools.
15 Each tool specifies its arguments using JSON Schema validation.
16 """
17 return [
18 types.Tool(
19 name="search-arxiv",
20 description="Search arxiv for articles related to the given keyword.",
21 inputSchema={
22 "type": "object",
23 "properties": {
24 "keyword": {"type": "string"},
25 },
26 "required": ["keyword"],
27 },
28 )
29 ]
30
31 @server.call_tool()
32 async def handle_call_tool(
33 name: str, arguments: dict | None
34 ) -> list[types.TextContent | types.ImageContent | types.EmbeddedResource]:
35 """
36 Handle tool execution requests.
37 Tools can modify server state and notify clients of changes.
38 """
39 if name != "search-arxiv":
40 raise ValueError(f"Unknown tool: {name}")
41
42 if not arguments:
43 raise ValueError("Missing arguments")
44
45 keyword = arguments.get("keyword")
46 if not keyword:
47 raise ValueError("Missing keyword")
48
49 # Search arXiv papers
50 search = arxiv.Search(
51 query=keyword,
52 max_results=10,
53 sort_by=arxiv.SortCriterion.SubmittedDate
54 )
55 results = client.results(search)
56
57 # Format results
58 formatted_results = []
59 for result in results:
60 article_data = "\n".join([
61 f"Title: {result.title}",
62 f"Summary: {result.summary}",
63 f"Links: {'||'.join([link.href for link in result.links])}",
64 f"PDF URL: {result.pdf_url}",
65 ])
66 formatted_results.append(article_data)
67
68 return [
69 types.TextContent(
70 type="text",
71 text=f"Search articles for {keyword}:\n"
72 + "\n\n\n".join(formatted_results)
73 ),
74 ]
關鍵組件說明
- 服務器初始化。服務器使用標識MCP服務的唯一名稱進行初始化。
- 工具登記。@server.list_tools()裝飾器使用JSON Schema注冊可用的工具及其規范。
- 工具實施。使用@server.call_tool()裝飾器處理人工智能模型調用工具時的實際執行。
- 響應格式。工具返回結構化的響應,這些響應可以包括文本、圖像或其他嵌入資源。
MCP服務器開發的最佳實踐
- 輸入驗證。始終使用JSON模式徹底驗證輸入參數。
- 錯誤處理。實現全面的錯誤處理以提供有意義的反饋。
- 資源管理。正確管理外部資源和連接。
- 文檔。提供對工具及其參數的清晰描述。
- 類型安全。使用Python的類型提示來確保整個代碼的類型安全。
測試MCP服務器
測試MCP服務器有兩種主要方法:
1.使用MCP檢查器
對于開發和調試,MCP Inspector提供了一個測試服務器的友好界面:
lain Text
1 npx @modelcontextprotocol/inspector uv --directory /your/project/path run your-server-name
檢查器將顯示一個URL,可以在瀏覽器中訪問該URL以開始調試。
2.與Claude Desktop集成
使用Claude Desktop測試MCP服務器:
(1)找到Claude Desktop配置文件:
MacOS:~/Library/Application Support/Claude/claude_desktop_config.json
Windows:%APPDATA%/Claude/claude_desktop_config.json
(2)添加MCP服務器配置:
1 {
2 "mcpServers": {
3 "mcp-scholarly": {
4 "command": "uv",
5 "args": [
6 "--directory",
7 "/path/to/your/mcp-scholarly",
8 "run",
9 "mcp-scholarly"
10 ]
11 }
12 }
13 }
對于已發布的服務器,可以使用更簡單的配置:
1 {
2 "mcpServers": {
3 "mcp-scholarly": {
4 "command": "uvx",
5 "args": [
6 "mcp-scholarly"
7 ]
8 }
9 }
10 }
(3)啟動Claude Desktop——現在應該可以在工具列表中看到工具(例如“search-arxiv”):
測試清單:
- 驗證工具注冊和發現
- 測試輸入驗證
- 檢查錯誤處理
- 驗證響應格式
- 確保適當的資源清理
與人工智能模型的集成
一旦MCP服務器準備就緒,它就可以與支持模型上下文協議的人工智能模型集成。該集成使人工智能模型能夠:
- 通過list_tools端點發現可用工具
- 調用具有適當參數的特定工具
- 處理響應并將其融入其交互中
例如,當與Claude Desktop集成時,MCP工具會出現在“可用的MCP工具”列表中,從而在對話過程中可以直接訪問這些工具。然后,人工智能可以利用這些工具來增強其能力——在arXiv示例中,Claude可以在討論中實時搜索和引用學術論文。
常見挑戰與解決方案
- 異步操作。確保正確處理異步操作以防止阻塞。
- 資源限制。實現適當的超時和資源限制。
- 錯誤恢復。設計健壯的錯誤恢復機制。
- 狀態管理。在并發操作中謹慎處理服務器狀態。
結論
構建MCP服務器為擴展人工智能功能提供了新的可能性。通過遵循本指南和最佳實踐,可以創建與人工智能模型無縫集成的健壯工具。arXiv搜索實現的示例展示了如何創建實用且有用的工具來增強人工智能功能。
無論是構建研究工具、數據處理服務還是其他人工智能增強功能,模型上下文協議都提供了一種標準化的方式來擴展人工智能模型功能。用戶可以構建自己的MCP服務器,并為不斷增長的人工智能工具和服務生態系統做出貢獻。
本文作者的官方MCP Scholarly服務器已被MCP存儲庫接受為社區服務器。可以在??此處??的社區部分找到它。
資源
- ??Model Context Protocol Documentation??
- ??MCP Official Repository??
- ??MCP Python SDK??
- ??MCP Python Server Creator??
- ??MCP Server Examples??
- ??arXiv API Documentation??
- ??Example arXiv Search MCP Server??
為了更深入地了解MCP及其功能,可以瀏覽官方MCP文檔,該文檔提供了有關協議規范和實現細節的全面信息。?
原文標題:??Building Custom Tools With Model Context Protocol??,作者:Aditya Karnam Gururaj Rao,Arjun Jaggi
