摘要:大语言模型上下文协议(Model Context Protocol )允许应用程序以标准化的方式为大语言模型提供上下文,将提供上下文的职责与实际的大语言模型交互分离。这个 Python SDK 实现了完整的 MCP 规范,方便开发人员:
大语言模型上下文协议(Model Context Protocol )允许应用程序以标准化的方式为大语言模型提供上下文,将提供上下文的职责与实际的大语言模型交互分离。这个 Python SDK 实现了完整的 MCP 规范,方便开发人员:
我们推荐使用 uv 来管理你的 Python 项目。
如果你还没有创建一个由 uv 管理的项目,请先创建一个:
uv init mcp-server-democd mcp-server-demo示例项目如下所示:
然后将 MCP 添加到你的项目依赖中:
uv add "mcp[cli]"
这个命令用于使用 uv 包管理工具安装 mcp 包及其 cli 可选依赖项。
uv 是一个快速的 Python 包管理工具,类似于 pip 但性能更好。命令 uv add "mcp[cli]" 的含义是:
uv add - 安装指定的 Python 包"mcp[cli]" - 要安装的包名是 mcp,方括号中的 cli 表示安装这个包的 CLI(命令行界面)可选依赖安装过程如下图所示:
安装完成后,你将能够使用 mcp 的命令行功能。这种语法类似于 pip 的 pip install mcp[cli],但使用 uv 工具来执行安装过程,通常会比 pip 更快。
或者,对于使用 pip 管理依赖的项目:
pip install "mcp[cli]"
运行独立的 MCP 开发工具
使用 uv 运行 mcp 命令:
uv run mcp
让我们创建一个简单的 MCP 服务器,它暴露一个计算器工具和一些数据:
如下是创建的 server.py 代码:
# 导入FastMCP类,它是MCP服务器框架的一部分from mcp.server.fastmcp import FastMCP# 创建一个名为"Demo"的FastMCP实例mcp = FastMCP("Demo")# 使用@mcp.tool装饰器注册一个工具函数@mcp.tooldef add(a: int, b: int) -> int: """加法函数:将两个数字相加。""" return a + b# 使用@mcp.resource装饰器注册一个资源,通过URL模式匹配访问@mcp.resource("greeting://{name}")def get_greeting(name: str) -> str: """获取个性化问候语,接收name参数。""" return f"Hello, {name}"你可以通过运行以下命令立即将这个服务器安装到 Claude Desktop 并与之交互:
mcp install server.py
不过,需要先安装并启用 Claude Desktop,目前国内使用有点困难。
或者,你可以使用 MCP 检查器(inspector)进行测试。
https://www.npmjs.com/package/@modelcontextprotocol/inspector
@modelcontextprotocol/inspector 是 MCP (Model Context Protocol) 的一个检查工具,它可以帮助开发者调试和检查 MCP 服务。
@modelcontextprotocol/inspector 的功能
这是一个 Node.js 工具,主要用于:检查和测试 MCP 服务器调试 tool 和 resource 的调用过程验证 MCP 接口实现是否符合规范提供可视化界面查看 MCP 服务的工具和资源安装命令:npm i @modelcontextprotocol/inspector
用于安装 MCP (Model Context Protocol) 的检查器工具。
npm i 是 npm install 的简写,用于安装 Node.js 包@ 符号表示这是一个 作用域包,用于明确包的归属组织或用途@modelcontextprotocol 是组织名,inspector 是包名可以使用 MCP 检查器进行测试:
source .venv/bin/activate # 激活虚拟环境
mcp dev server.py # 启动 MCP 服务器
Starting MCP inspector...⚙️ Proxy server listening on port 6277 MCP Inspector is up and running at http://127.0.0.1:6274Inspector 运行起来后,会启动两个服务:
带UI的客户端,默认端口 6274MCP proxy server,默认端口 6277在浏览器中打开 http://localhost:6274 即可访问使用。
模型上下文协议(MCP)允许你以安全、标准化的方式构建服务器,这些服务器可以向大语言模型(LLM)应用程序暴露数据和功能。你可以将其视为一个专门为大语言模型交互设计的 Web API。
MCP 服务器可以:
通过资源(类似于 REST API 中的 GET 端点;它们用于将信息加载到大语言模型的上下文中)暴露数据。通过工具(类似于 POST 端点;它们用于执行代码或产生副作用)提供功能。通过提示(可重复使用的模板,用于大语言模型交互)定义交互模式。服务器(server)是与 MCP 协议交互的核心接口。它负责连接管理、协议合规和消息路由。
资源(resources)是向大语言模型暴露数据的方式。它们类似于 REST API 中的 GET 端点——提供数据,但不应执行大量计算或产生副作用。
工具(tools)允许大语言模型通过你的服务器执行操作。与资源不同,工具预计会执行计算并产生副作用。
提示(prompts)是可重复使用的模板,帮助大语言模型有效地与你的服务器交互。
可以在现有的 server.py 代码中添加如下提示(prompts)示例代码:
@mcp.promptdef review_code(code: str) -> str: """ 代码审查提示模板 此函数创建一个代码审查的提示模板,将用户提供的代码作为输入, 并生成一个要求审查该代码的格式化提示。 参数: code (str): 需要审查的代码 返回: str: 包含待审查代码的格式化提示字符串 """ return f"Please review this code:\n\n{code}"@mcp.promptdef debug_error(error: str) -> list[base.Message]: """ 调试错误提示模板 此函数创建一个用于调试错误的提示模板,将用户提供的错误信息作为输入, 并生成一个预设对话格式的提示序列,模拟用户和助手之间的初始交互。 参数: error (str): 用户遇到的错误信息 返回: list[base.Message]: 包含预设对话的消息列表,模拟用户提问和助手初始回应 """ return [ base.UserMessage("I'm seeing this error:"), # 用户消息:介绍错误 base.UserMessage(error), # 用户消息:包含具体错误内容 base.AssistantMessage("I'll help debug that. What have you tried so far?"), # 助手回应:提出后续问题 ]通过 MCP Inspector 工具,可以查看到新增的 prompts,如图所示:
测试和调试服务器的最快方式是使用 MCP 检查器(Inspector)。
来源:软件架构