开发者指南:使用Python编写你的第一个MCP服务器
想象一下,一个能力强大的 AI 助手,它知识渊博、能言善辩,但却被关在一个没有互联网、没有软件、无法访问任何外部数据和工具的房间里。这就是大多数大语言模型(LLM)的现状——它们的能力被限制在训练时所学到的知识中,无法与实时变化的世界互动。
MCP (Model Context Protocol) 就是为了彻底打破这堵墙而生的。它是由 Anthropic (Claude 的创造者) 提出并主导开发的一种开放协议,旨在为 AI 模型提供一种安全、标准化、可扩展的方式来使用外部工具、数据和服务。
你可以把它理解为:
AI 的“万能遥控器”:让 AI 可以操控各种各样的“设备”(数据库、API、计算器、文件系统等)。
AI 的“应用商店”:开发者可以为其开发无限多的“应用”(称为工具或资源),AI 可以按需安装和使用。
AI 的“手和脚”:它为只会“思考”的 AI 模型赋予了“行动”的能力,使其能真正与环境交互。
MCP 的关键特性与优势在于:
开放与跨平台:它是一个开放标准,不受任何单一公司控制,促进了整个AI生态的互联互通。
安全性:协议内置了权限控制。服务器可以声明工具所需的权限,客户端(或用户)可以决定是否授权,有效防止滥用。
灵活性:开发者可以用任何编程语言(Python, JavaScript, Go, Rust等)编写 MCP 服务器,只要遵循协议即可。
模块化:工具和资源是模块化的,可以按需安装、组合和更新,就像手机的App一样方便。
强大的生态潜力:一个繁荣的工具生态即将出现,专业的工具(如Jira操作、服务器监控、科学计算)可以让通用AI变身成为领域专家。
MCP的典型应用场景为:
代码与运维:让AI直接运行测试、查询日志、部署服务、调试服务器。
数据分析:连接数据库(MySQL, BigQuery)、数据分析平台(Tableau),让AI直接执行查询并分析结果。
办公自动化:读写电子表格、发送邮件、管理日历、生成PPT。
实时信息获取:搜索网页、查询股价、获取新闻和天气。
智能家居与IoT:控制智能设备,调节灯光温度。
相关网址:
MCP python sdk官方github:https://github.com/modelcontextprotocol/python-sdk
MCP官方介绍(核心概念等):https://modelcontextprotocol.io/docs/getting-started/intro
为什么需要 MCP?它解决了什么核心问题?
在没有 MCP 之前,让 AI 使用外部功能面临诸多挑战:
碎片化与不兼容:每个 AI 厂商(如 OpenAI, Anthropic, Google)都有自己的一套插件或工具系统,开发者需要为每个平台重复开发功能相似的工具。
安全风险:缺乏统一的安全标准和权限控制模型,可能导致 AI 被恶意工具利用或执行危险操作。
开发效率低下:工具开发过程复杂,难以调试和维护。
MCP 的核心价值在于 standardization (标准化)。它定义了一套通用的“语言”,使得:
工具开发者:只需编写一次 MCP 服务器,任何支持 MCP 协议的 AI 客户端(如 Claude、Dify 等)都可以立即使用这些工具。
AI 厂商和应用开发者:无需重复造轮子,可以直接利用整个生态系统中已有的强大工具。
用户:获得一个能力更强、更安全、更可靠的 AI 助手。
MCP 的核心组件与工作原理
MCP 协议主要围绕三个核心概念构建,涉及两个角色之间的通信:
MCP 客户端 (Client):
角色:通常是 AI 应用或平台(如 Claude 聊天界面、Dify 工作流)。
职责:向用户提供交互界面,接收用户请求,决定需要调用哪些工具,并将工具返回的结果整合后呈现给用户。
MCP 服务器 (Server):
角色:提供具体功能和数据的独立程序。
职责:向客户端“广告”自己提供了哪些工具和资源,并等待客户端的调用请求。当收到请求时,执行具体的操作(如查询数据库、执行命令、读取文件)并将结果返回给客户端。
工具 (Tools) 和资源 (Resources):
这是服务器暴露给客户端的核心内容:
Tools (工具):代表可执行的操作。客户端可以调用它们并传递参数。例如:
search_web
,run_calculator
,execute_sql_query
。Resources (资源):代表可读取的数据流。它们为客户端提供了一种方式来订阅或读取动态或静态内容。例如:
database_tables
,real_time_logs
,file_system
。
工作流程可以简化为:
用户向 客户端 提出请求:“帮我查一下今天的天气。”
客户端 分析请求,发现需要调用一个天气查询工具。
客户端 查看已连接的 MCP 服务器,发现一个提供了
get_weather
工具的服务器。客户端 调用该工具,并传入参数
location="北京"
。MCP 服务器 执行工具:通过某个天气 API 获取北京的数据。
MCP 服务器 将天气数据返回给 客户端。
客户端 将数据整合成友好的格式回复给用户:“北京今天晴,25摄氏度。”
安装
使用如下命令安装:
pip install mcp
第一个MCP服务器
from mcp.server.fastmcp import FastMCP
# 创建一个 MCP 服务器
mcp = FastMCP("demo")
# 添加一个加法工具
@mcp.tool()
def add(a: int, b: int) -> int:
"""将两个数字相加"""
return a + b
# 添加一个动态问候资源
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
"""获取个性化问候语"""
return f"你好, {name}!"
# 添加一个提示模板
@mcp.prompt()
def greet_user(name: str, style: str = "友好") -> str:
"""生成问候提示"""
styles = {
"友好": "请写一个热情友好的问候语",
"正式": "请写一个正式专业的问候语",
"随意": "请写一个轻松随意的问候语",
}
return f"{styles.get(style, styles['友好'])} 给名为 {name} 的人。"
# 启动服务器
if __name__ == "__main__":
mcp.run()
保存以上文件为main.py
为了启动这个服务器,只需要执行该模块即可:
python main.py