譯者 | 李睿
審校 | 重樓
本文介紹如何構(gòu)建模型上下文協(xié)議(MCP)服務(wù)器以擴(kuò)展人工智能功能。創(chuàng)建可以無(wú)縫集成人工智能模型的工具,并通過(guò)arXiv論文搜索實(shí)現(xiàn)進(jìn)行演示。
模型上下文協(xié)議(MCP)在人工智能開(kāi)發(fā)領(lǐng)域變得越來(lái)越重要,它可以實(shí)現(xiàn)人工智能模型和外部工具之間的無(wú)縫集成。本指南將探討如何創(chuàng)建MCP服務(wù)器,通過(guò)自定義工具實(shí)現(xiàn)增強(qiáng)人工智能功能。
什么是模型上下文協(xié)議?
模型上下文協(xié)議允許人工智能模型以標(biāo)準(zhǔn)化的方式與外部工具和服務(wù)進(jìn)行交互。它使像Claude這樣的人工智能助手能夠執(zhí)行自定義功能、處理數(shù)據(jù)并與外部服務(wù)交互,同時(shí)保持一致的界面。
MCP服務(wù)器開(kāi)發(fā)入門(mén)
在開(kāi)始創(chuàng)建MCP服務(wù)器時(shí),需要對(duì)Python和異步編程有基本的了解。以下介紹設(shè)置和實(shí)現(xiàn)自定義MCP服務(wù)器的過(guò)程。
設(shè)置項(xiàng)目
創(chuàng)建MCP服務(wù)器最簡(jiǎn)單的方法是使用官方的MCP服務(wù)器創(chuàng)建工具。其中有兩個(gè)選擇:
# Using uvx (recommended)
uvx create-mcp-server
# Or using pip
pip install create-mcp-server
create-mcp-server
這將創(chuàng)建一個(gè)基本的項(xiàng)目結(jié)構(gòu):
my-server/
├── README.md
├── pyproject.toml
└── src/
└── my_server/
├── __init__.py
├── __main__.py
└── server.py
實(shí)施首個(gè)MCP服務(wù)器
首先創(chuàng)建一個(gè)實(shí)例:創(chuàng)建一個(gè)arXiv論文搜索工具,人工智能模型可以使用它來(lái)獲取學(xué)術(shù)論文。以下是實(shí)現(xiàn)方法:
import asyncio
from mcp.server.models import InitializationOptions
import mcp.types as types
from mcp.server import NotificationOptions, Server
import mcp.server.stdio
import arxiv
server = Server("mcp-scholarly")
client = arxiv.Client()
@server.list_tools()
async def handle_list_tools() -> list[types.Tool]:
"""
List available tools.
Each tool specifies its arguments using JSON Schema validation.
"""
return [
types.Tool(
name="search-arxiv",
description="Search arxiv for articles related to the given keyword.",
inputSchema={
"type": "object",
"properties": {
"keyword": {"type": "string"},
},
"required": ["keyword"],
},
)
]
@server.call_tool()
async def handle_call_tool(
name: str, arguments: dict | None
) -> list[types.TextContent | types.ImageContent | types.EmbeddedResource]:
"""
Handle tool execution requests.
Tools can modify server state and notify clients of changes.
"""
if name != "search-arxiv":
raise ValueError(f"Unknown tool: {name}")
if not arguments:
raise ValueError("Missing arguments")
keyword = arguments.get("keyword")
if not keyword:
raise ValueError("Missing keyword")
# Search arXiv papers
search = arxiv.Search(
query=keyword,
max_results=10,
sort_by=arxiv.SortCriterion.SubmittedDate
)
results = client.results(search)
# Format results
formatted_results = []
for result in results:
article_data = "\n".join([
f"Title: {result.title}",
f"Summary: {result.summary}",
f"Links: {'||'.join([link.href for link in result.links])}",
f"PDF URL: {result.pdf_url}",
])
formatted_results.append(article_data)
return [
types.TextContent(
type="text",
text=f"Search articles for {keyword}:\n"
+ "\n\n\n".join(formatted_results)
),
]
關(guān)鍵組件說(shuō)明
- 服務(wù)器初始化。服務(wù)器使用標(biāo)識(shí)MCP服務(wù)的唯一名稱(chēng)進(jìn)行初始化。
- 工具登記。@server.list_tools()裝飾器使用JSON Schema注冊(cè)可用的工具及其規(guī)范。
- 工具實(shí)施。使用@server.call_tool()裝飾器處理人工智能模型調(diào)用工具時(shí)的實(shí)際執(zhí)行。
- 響應(yīng)格式。工具返回結(jié)構(gòu)化的響應(yīng),這些響應(yīng)可以包括文本、圖像或其他嵌入資源。
MCP服務(wù)器開(kāi)發(fā)的最佳實(shí)踐
- 輸入驗(yàn)證。始終使用JSON模式徹底驗(yàn)證輸入?yún)?shù)。
- 錯(cuò)誤處理。實(shí)現(xiàn)全面的錯(cuò)誤處理以提供有意義的反饋。
- 資源管理。正確管理外部資源和連接。
- 文檔。提供對(duì)工具及其參數(shù)的清晰描述。
- 類(lèi)型安全。使用Python的類(lèi)型提示來(lái)確保整個(gè)代碼的類(lèi)型安全。
測(cè)試MCP服務(wù)器
測(cè)試MCP服務(wù)器有兩種主要方法:
1.使用MCP檢查器
對(duì)于開(kāi)發(fā)和調(diào)試,MCP Inspector提供了一個(gè)測(cè)試服務(wù)器的友好界面:
npx @modelcontextprotocol/inspector uv --directory /your/project/path run your-server-name
檢查器將顯示一個(gè)URL,可以在瀏覽器中訪(fǎng)問(wèn)該URL以開(kāi)始調(diào)試。
2.與Claude Desktop集成
使用Claude Desktop測(cè)試MCP服務(wù)器:
(1)找到Claude Desktop配置文件:
MacOS:~/Library/Application Support/Claude/claude_desktop_config.json
Windows:%APPDATA%/Claude/claude_desktop_config.json
(2)添加MCP服務(wù)器配置:
{
"mcpServers": {
"mcp-scholarly": {
"command": "uv",
"args": [
"--directory",
"/path/to/your/mcp-scholarly",
"run",
"mcp-scholarly"
]
}
}
}
對(duì)于已發(fā)布的服務(wù)器,可以使用更簡(jiǎn)單的配置:
{
"mcpServers": {
"mcp-scholarly": {
"command": "uvx",
"args": [
"mcp-scholarly"
]
}
}
}
(3)啟動(dòng)Claude Desktop——現(xiàn)在應(yīng)該可以在工具列表中看到工具(例如“search-arxiv”):
測(cè)試清單:
- 驗(yàn)證工具注冊(cè)和發(fā)現(xiàn)
- 測(cè)試輸入驗(yàn)證
- 檢查錯(cuò)誤處理
- 驗(yàn)證響應(yīng)格式
- 確保適當(dāng)?shù)馁Y源清理
與人工智能模型的集成
一旦MCP服務(wù)器準(zhǔn)備就緒,它就可以與支持模型上下文協(xié)議的人工智能模型集成。該集成使人工智能模型能夠:
- 通過(guò)list_tools端點(diǎn)發(fā)現(xiàn)可用工具
- 調(diào)用具有適當(dāng)參數(shù)的特定工具
- 處理響應(yīng)并將其融入其交互中
例如,當(dāng)與Claude Desktop集成時(shí),MCP工具會(huì)出現(xiàn)在“可用的MCP工具”列表中,從而在對(duì)話(huà)過(guò)程中可以直接訪(fǎng)問(wèn)這些工具。然后,人工智能可以利用這些工具來(lái)增強(qiáng)其能力——在arXiv示例中,Claude可以在討論中實(shí)時(shí)搜索和引用學(xué)術(shù)論文。
常見(jiàn)挑戰(zhàn)與解決方案
- 異步操作。確保正確處理異步操作以防止阻塞。
- 資源限制。實(shí)現(xiàn)適當(dāng)?shù)某瑫r(shí)和資源限制。
- 錯(cuò)誤恢復(fù)。設(shè)計(jì)健壯的錯(cuò)誤恢復(fù)機(jī)制。
- 狀態(tài)管理。在并發(fā)操作中謹(jǐn)慎處理服務(wù)器狀態(tài)。
結(jié)論
構(gòu)建MCP服務(wù)器為擴(kuò)展人工智能功能提供了新的可能性。通過(guò)遵循本指南和最佳實(shí)踐,可以創(chuàng)建與人工智能模型無(wú)縫集成的健壯工具。arXiv搜索實(shí)現(xiàn)的示例展示了如何創(chuàng)建實(shí)用且有用的工具來(lái)增強(qiáng)人工智能功能。
無(wú)論是構(gòu)建研究工具、數(shù)據(jù)處理服務(wù)還是其他人工智能增強(qiáng)功能,模型上下文協(xié)議都提供了一種標(biāo)準(zhǔn)化的方式來(lái)擴(kuò)展人工智能模型功能。用戶(hù)可以構(gòu)建自己的MCP服務(wù)器,并為不斷增長(zhǎng)的人工智能工具和服務(wù)生態(tài)系統(tǒng)做出貢獻(xiàn)。
本文作者的官方MCP Scholarly服務(wù)器已被MCP存儲(chǔ)庫(kù)接受為社區(qū)服務(wù)器。可以在此處的社區(qū)部分找到它。
資源
- 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文檔,該文檔提供了有關(guān)協(xié)議規(guī)范和實(shí)現(xiàn)細(xì)節(jié)的全面信息。
原文標(biāo)題:Building Custom Tools With Model Context Protocol,作者:Aditya Karnam Gururaj Rao,Arjun Jaggi