随着大语言模型 (LLM) 技术的飞速发展,模型上下文协议 (MCP) 正迅速成为连接 LLM 与其他系统的事实标准。本文将深入探讨 MCP 服务器的构建,引导开发者了解其核心架构、关键组件以及实际应用,助力你打造更智能、更安全的 AI 集成方案。我们将以一个实用的代码示例为基础,剖析 工具 (Tools)、资源 (Resources) 和 提示 (Prompts) 这三大支柱,并探讨 MCP 服务器 在 AI 时代的关键作用。
MCP 服务器架构:连接 AI 与世界的桥梁
MCP 服务器 充当 AI 应用与各种数据源之间的桥梁,通过标准化的接口,避免了传统方法中大量定制化连接的复杂性。其核心架构可分为以下几个关键层级:
-
通信层 (Communication Layer): 负责处理客户端与服务器之间的通信,目前主流的实现方式是 JSON-RPC。在开发阶段,Stdio 是一种便捷的选择,但在生产环境中,HTTP 协议通常更可靠和高效。选择合适的传输协议对服务器的可扩展性和部署至关重要。
-
请求处理层 (Request Handlers): 处理基本的 MCP 操作,例如工具列表的获取、工具的调用、资源的读取以及提示的获取。
-
上下文存储层 (Context Stores): 用于存储会话数据,确保 AI 应用能够记住之前的交互信息,提供更连贯的用户体验。
-
缓存层 (Caching Layer): 用于缓存常用的数据和计算结果,提高系统的响应速度和吞吐量。
这种模块化的设计使得 MCP 服务器 能够快速扩展,轻松应对各种应用场景。例如,在一个电商平台的 AI 客服系统中,MCP 服务器 可以通过 HTTP 协议与客户端应用通信,利用上下文存储层记住用户的购物历史和偏好,并利用缓存层快速检索商品信息。
MCP 的三大支柱:工具、资源与提示
MCP 服务器 的核心在于其三大支柱:工具 (Tools)、资源 (Resources) 和 提示 (Prompts)。理解并熟练运用这三大支柱是构建强大 MCP 服务器 的关键。
工具 (Tools):AI 的执行之手
工具 (Tools) 代表 AI 系统的“手”,使模型能够控制现实世界的任务执行。与传统的 API 接口不同,MCP 工具 由 AI 根据上下文和需求智能地调用,从而创造更自然的交互模式。
在示例代码中,src/tools/handlers.py
定义了两个简单的工具:calculate_user_statistics
和 update_user_status
。这两个工具可以用于计算用户统计信息和更新用户状态。
@server.list_tools()
def list_available_tools():
"""Lists all available tools."""
return ["calculate_user_statistics", "update_user_status"]
@server.call_tool()
def calculate_user_statistics(user_id: str):
"""Calculates statistics for a given user."""
# 实现计算用户统计信息的逻辑
pass
@server.call_tool()
def update_user_status(user_id: str, status: str):
"""Updates the status of a given user."""
# 实现更新用户状态的逻辑
pass
@server.list_tools()
装饰器将 list_available_tools
函数注册为 工具 发现请求的处理程序。当客户端或 AI 模型想要知道有哪些 工具 可用时,它会向服务器发送一个 “list tools” 请求。@server.call_tool()
装饰器将 calculate_user_statistics
和 update_user_status
函数注册为实际 工具 调用请求的处理程序。当客户端或 AI 模型想要执行一个 工具 时,它会发送一个 “call tool” 请求,其中包含 工具 名称和参数。
设想一个智能家居场景,AI 助手可以根据用户的指令控制家电设备。例如,用户可以说:“把客厅的灯打开”。AI 助手可以通过 MCP 服务器 调用 turn_on_light
工具,实现对灯的控制。
资源 (Resources):AI 的知识宝库
资源 (Resources) 充当 MCP 服务器 的“记忆库”,提供对数据的应用程序控制访问,从而丰富 AI 交互。这些只读数据源为通用 AI 响应转化为知情、相关的见解提供了上下文基础。
在示例代码中,src/ressources/handlers.py
定义了两个 资源:User Database
和 System Information
。User Database
包含内存用户数据库,提供用户记录,而 System Information
包含当前系统状态和服务器元数据。
AVAILABLE_RESOURCES = [
types.Resource(
uri=AnyUrl("memory://users"),
name="User Database",
description="In-memory user database with sample user records",
mimeType="application/json"
),
types.Resource(
uri=AnyUrl("memory://system-info"),
name="System Information",
description="Current system status and server metadata",
mimeType="application/json"
)
]
@server.list_resources()
def list_available_resources():
"""Lists all available resources."""
return AVAILABLE_RESOURCES
@server.read_resource()
def read_resource(uri: AnyUrl):
"""Reads a resource from the given URI."""
if uri == "memory://users":
# 从内存中读取用户数据
return {"users": [{"id": "1", "name": "Alice"}, {"id": "2", "name": "Bob"}]}
elif uri == "memory://system-info":
# 从内存中读取系统信息
return {"version": "1.0", "status": "healthy"}
else:
raise ValueError(f"Unknown resource URI: {uri}")
@server.list_resources()
装饰器将 list_available_resources
函数注册为 资源 列表请求的处理程序。@server.read_resource()
装饰器将 read_resource
函数注册为 资源 读取请求的处理程序。
假设一个医疗 AI 助手,可以通过 MCP 服务器 访问患者的病历 资源。当医生询问患者的过敏史时,AI 助手可以读取 Patient Medical History
资源,提供准确的患者信息。通过利用 资源,AI 助手能够提供更个性化和有价值的服务。
提示 (Prompts):AI 的引导之灯
提示 (Prompts) 用作可重用的模板,引导 AI 交互朝向特定结果。它们代表用户控制的元素,通过客户端界面呈现,为常见任务和工作流程提供结构化方法。
在示例代码中,src/prompts/handlers.py
定义了两个 提示:analyze-user-data
和 generate-report
。
@server.list_prompts()
def list_available_prompts():
"""Lists all available prompts."""
return ["analyze-user-data", "generate-report"]
@server.get_prompt()
def get_prompt(prompt_name: str, **kwargs):
"""Gets a prompt with the given name and arguments."""
if prompt_name == "analyze-user-data":
return f"Analyze the following user data: {kwargs['user_data']}"
elif prompt_name == "generate-report":
return f"Generate a report based on the following data: {kwargs['data']}"
else:
raise ValueError(f"Unknown prompt name: {prompt_name}")
@server.list_prompts()
装饰器将 list_available_prompts
函数注册为 提示 列表请求的处理程序。@server.get_prompt()
装饰器将 get_prompt
函数注册为 提示 获取请求的处理程序。
想象一个内容创作平台,用户可以使用 AI 助手生成文章。用户可以通过 MCP 服务器 选择 generate-article
提示,并提供文章主题、关键词等参数。AI 助手将根据这些参数生成一篇符合要求的文章。提示 的使用可以有效控制 AI 的输出,使其更符合用户的需求。
实战演练:运行 Demo 服务器
为了更好地理解 MCP 服务器 的构建,我们可以运行示例代码中的 Demo 服务器。以下是运行 Demo 服务器的步骤:
-
设置环境:
- 克隆服务器代码库:
git clone git@github.com:abducodez/mcp-server-demo.git
- 安装依赖项:
cd mcp-server-demo && uv venv && source .venv/bin/activate && uv sync
- 克隆服务器代码库:
-
添加服务器到 Claude Desktop (或任何支持 MCP 的客户端):
- 找到 Claude Desktop 的配置文件 (例如
~/Library/Application\ Support/Claude/claude_desktop_config.json
)。 - 在
mcpServers
设置中添加以下配置 (替换/ABSOLUTE/PATH/TO/PARENT/FOLDER/demo
为你的实际路径):
{ "mcpServers": { "demo": { "command": "uv", "args": [ "--directory", "/ABSOLUTE/PATH/TO/PARENT/FOLDER/demo", "run", "demo.py" ] } } }
- 找到 Claude Desktop 的配置文件 (例如
-
与服务器交互:
现在你就可以在 Claude Desktop 中与 Demo 服务器交互,体验 工具、资源 和 提示 的使用。
MCP 服务器的未来:智能化与安全性的融合
随着技术不断进步,MCP 服务器 的发展方向不仅仅是连接系统,更重要的是构建智能、安全且可扩展的服务器。
- 智能化: 未来的 MCP 服务器 将更加智能,能够自动识别用户需求,并根据上下文选择合适的 工具、资源 和 提示。
- 安全性: 随着 AI 应用的普及,安全性变得越来越重要。未来的 MCP 服务器 将采用更严格的安全措施,保护用户数据和系统安全。
- 可扩展性: 为了应对不断增长的 AI 应用需求,未来的 MCP 服务器 将需要具备更高的可扩展性,能够轻松处理大量的并发请求。
例如,在金融领域,未来的 MCP 服务器 可以通过集成身份验证 工具 和欺诈检测 资源,确保交易的安全性。同时,通过分析用户的交易历史和偏好,MCP 服务器 可以利用个性化 提示 为用户推荐更合适的投资方案。
结语:拥抱 MCP,迎接 AI 驱动的未来
从早期孤立的 AI 模型到真正有用的、上下文感知的助手,这条道路的核心是精心设计的 MCP 服务器。这不仅仅是跟上最新趋势,更是确保创新保持可访问、开放,并基于人们可以信任的坚实工程基础之上。
构建 MCP 服务器 不仅仅是技术挑战,更是一项具有深远意义的战略决策。通过投资于 MCP 服务器 的架构和分析实践,企业能够更好地适应 AI 时代的变革,并在竞争中脱颖而出。 模型上下文协议 不仅仅是一种技术,更是一种理念,它将引领我们走向一个更加智能、高效的未来。抓住 MCP 服务器 带来的机遇,让我们共同拥抱 AI 驱动的未来!