MCP(Model Context Protocol,模型上下文协议)是由 Anthropic 提出的一种开放标准,它就像一套精心设计的“交通规则”或“通用语言”,旨在让大型语言模型(LLM)能够安全、标准化地与外部世界进行交互。下面我们详细了解一下它。
一、是什么
你可以将 MCP 生态系统想象成一个现代化的办公室:
MCP Server(MCP 服务器):这就是办公室里的各种专业设备和部门,比如打印机、文件柜、数据库中心或邮件收发室。每个服务器都是一个提供特定功能的独立程序,例如文件系统访问、数据库查询或发送邮件。它们是能力的提供方。
MCP Client(MCP 客户端):这是办公室的行政助理或协调中心。它内置于你所使用的应用程序(如 Claude Desktop、Cursor 编辑器)中,其职责是理解你的需求(或 AI 的需求),然后去调用合适的 MCP Server 来完成任务。
MCP Host(MCP 主机):这就是你直接与之交互的整个办公环境,例如 Claude Desktop 应用或 Cursor 编辑器本身。
MCP 协议规定了这些部分之间如何安全、高效地通信,使得 AI 模型能够按需调用外部工具和获取数据,而无需为其内置所有功能,从而突破了其训练数据的限制。
二、为什么用
MCP 服务器核心上是连接 AI 模型与外部工具、数据和系统的桥梁。它的主要价值体现在:
突破模型限制:让 AI 能够访问实时信息(如网络搜索)、操作本地文件、执行代码或与专业 API(如 GitHub、Slack)交互,极大地扩展了 AI 的能力边界。
标准化与生态化:它解决了“重复造轮子”的问题。开发者只需遵循 MCP 协议开发一次服务器,这个服务器就能被所有支持 MCP 的客户端工具使用,促进了工具生态的繁荣。
保障安全与可控:用户对 AI 能做什么有最终控制权。MCP 服务器以可控的方式提供功能,敏感数据和 API 密钥无需泄露给 AI 模型本身,而是在用户信任的环境中运行,增强了安全性和隐私性。
根据功能,常见的 MCP 服务器可分为信息检索类(如网络搜索)、文件操作类、开发工具类(如 GitHub 集成)、自动化类(如浏览器自动化)等。
三、使用场景
自己实现 MCP Server 意味着你可以为 AI 助手定制专属的超能力,将其连接到任何你想要的内部或外部服务。这充满了无限可能:
连接内部系统:为你公司的内部 Wiki、CRM、ERP 或项目管理工具创建一个 MCP Server,这样 AI 助手就能帮你查询项目进度、更新客户信息等。
操作专属数据源:如果你有独特的数据库(如产品库、研究数据集),可以构建一个 MCP Server 让 AI 进行查询和分析,充当智能数据分析师。
控制智能设备:结合家庭自动化系统,创建一个 MCP Server 让 AI 语音助手帮你控制灯光、空调等(需注意安全边界)。
封装特定工作流:将你日常重复的复杂操作(如代码部署、数据备份、报告生成)封装成 MCP 工具,通过自然语言指令让 AI 助手一键完成。
简而言之,任何你想让 AI 通过自然语言来操作或访问的服务,都可以考虑通过自定义 MCP Server 来实现。
四、Python 实现
由于 MCP 是一个基于 JSON-RPC 2.0 的协议,实现一个服务器需要遵循其规范。
虽然手动处理通信细节是可行的,但使用社区提供的 SDK 可以大大简化开发。
Anthropic 官方维护了一个 Python 库 mcp,以下是使用它创建一个简单 MCP Server 的基本步骤和概念框架。
由于搜索结果中未提供完整的代码示例,以下流程基于 MCP 协议的一般实现逻辑和该库的常见用法进行阐述。
1. 环境准备
首先,你需要安装必要的库。通常这会包括官方的 mcp SDK 和其他你可能需要的依赖。
pip install mcp2. 导入库并创建 Server 实例
import mcp
import asyncio
# 创建一个 Server 实例
server = mcp.Server("my-first-server")3. 定义工具(Tools)
工具是 MCP Server 提供能力的核心。你需要定义工具的名称、描述、参数 schema 以及实现其逻辑的函数。例如,创建一个查询天气的工具:
from mcp.types import Tool
# 使用装饰器注册工具
@server.list_tools
async def list_tools():
return [
Tool(
name="get_weather",
description="Get the current weather for a city",
inputSchema={
"type": "object",
"properties": {"city": {"type": "string", "description": "The city name"}},
"required": ["city"],
},
)
]
# 实现工具的逻辑
@server.call_tool
async def call_tool(name: str, arguments: dict) -> list[mcp.TextContent]:
if name == "get_weather":
city = arguments.get("city")
# 这里可以替换为真实的天气 API 调用
weather_info = f"假设这里是{city}的天气情况:晴朗,25°C。"
return [mcp.TextContent(type="text", text=weather_info)]
else:
raise ValueError(f"Unknown tool: {name}")4. 运行 Server
最后,配置服务器通过标准输入输出(stdio)进行通信,这是本地 MCP 连接的常见方式。
async def main():
async with await mcp.run_stdio_server(server) as session:
await session.wait_until_completed()
if __name__ == "__main__":
asyncio.run(main())5. 在客户端中配置
将你的 Python 脚本(例如 my_weather_server.py)配置到支持 MCP 的客户端(如 Claude Desktop 或 Cursor)。
配置通常需要指定解释器路径和脚本路径。
Claude Desktop:在设置中添加 MCP Server,命令类似
python /path/to/your/my_weather_server.py。Cursor:在 Settings > Features > MCP Servers 中添加,选择
stdio类型,并输入上述命令。
配置成功后,你就可以在客户端中向 AI 提问,例如“查询北京的天气”,AI 就会通过你创建的 MCP Server 调用 get_weather 工具来获取信息
希望这些信息能帮助你全面理解 MCP Server 并迈出实践的第一步。如果你有特定的工具或系统想连接,或许我可以帮你一起构思更具体的实现方案
评论区