MCP协议Python SDK 开发入门(mcp源码)
ccwgpt 2025-07-06 09:42 3 浏览 0 评论
大语言模型上下文协议(Model Context Protocol )允许应用程序以标准化的方式为大语言模型提供上下文,将提供上下文的职责与实际的大语言模型交互分离。这个 Python SDK 实现了完整的 MCP 规范,方便开发人员:
- 构建可以连接到任何 MCP 服务器的 MCP 客户端
- 创建暴露资源、提示和工具的 MCP 服务器
- 使用标准传输方式,如标准输入输出(stdio)和SSE
- 处理所有 MCP 协议消息和生命周期事件
一、将 MCP 添加到 Python 项目中
我们推荐使用 uv 来管理你的 Python 项目。
如果你还没有创建一个由 uv 管理的项目,请先创建一个:
uv init mcp-server-demo
cd 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.tool()
def 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:6274
Inspector 运行起来后,会启动两个服务:
- 带UI的客户端,默认端口 6274
- MCP proxy server,默认端口 6277
在浏览器中打开 http://localhost:6274 即可访问使用。
三、什么是 MCP?
模型上下文协议(MCP)允许你以安全、标准化的方式构建服务器,这些服务器可以向大语言模型(LLM)应用程序暴露数据和功能。你可以将其视为一个专门为大语言模型交互设计的 Web API。
MCP 服务器可以:
- 通过资源(类似于 REST API 中的 GET 端点;它们用于将信息加载到大语言模型的上下文中)暴露数据。
- 通过工具(类似于 POST 端点;它们用于执行代码或产生副作用)提供功能。
- 通过提示(可重复使用的模板,用于大语言模型交互)定义交互模式。
四、MCP核心概念
服务器(server)是与 MCP 协议交互的核心接口。它负责连接管理、协议合规和消息路由。
资源(resources)是向大语言模型暴露数据的方式。它们类似于 REST API 中的 GET 端点——提供数据,但不应执行大量计算或产生副作用。
工具(tools)允许大语言模型通过你的服务器执行操作。与资源不同,工具预计会执行计算并产生副作用。
提示(prompts)是可重复使用的模板,帮助大语言模型有效地与你的服务器交互。
可以在现有的 server.py 代码中添加如下提示(prompts)示例代码:
@mcp.prompt()
def review_code(code: str) -> str:
"""
代码审查提示模板
此函数创建一个代码审查的提示模板,将用户提供的代码作为输入,
并生成一个要求审查该代码的格式化提示。
参数:
code (str): 需要审查的代码
返回:
str: 包含待审查代码的格式化提示字符串
"""
return f"Please review this code:\n\n{code}"
@mcp.prompt()
def 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)。
相关推荐
- Java七大热门技术框架源码解析(25章) 完结
-
获课》aixuetang.xyz/5699/Hibernate与MyBatis源码级PK:ORM框架的两种哲学在Java持久层框架领域,Hibernate与MyBatis代表了两种截然不同的设计哲学。...
- 【25章】Java七大热门技术框架源码解析
-
获课》aixuetang.xyz/5699/Java高级面试:七大框架源码精讲与实战解析在当今Java技术生态中,对主流框架源码的深入理解已成为高级开发者面试的核心竞争力。掌握Spring、MyBat...
- 饿了么董事长吴泽明兼任CEO,韩鎏分管即时物流中心
-
饿了么调整组织架构。2月11日,饿了么董事长吴泽明(花名:范禹)通过公司全员信宣布饿了么最新组织调整:即日起,吴泽明将兼任饿了么CEO,韩鎏(花名:昊宸)专注分管即时物流中心,继续向吴泽明汇报。吴泽明...
- 饿了么100%迁至阿里云,快速扩容可支持1亿人同时点单
-
来源:环球网6月17日,记者获悉,饿了么已完成100%上云,所有业务系统、数据库设施等均已迁移至阿里云。高峰期,饿了么可在阿里云上快速扩容,可以支持1亿人同时在线点单,这意味着饿了么的服务能力再次全面...
- 饿了么组织架构调整:董事长吴泽明兼任CEO 韩鎏专注即时物流中心管理
-
近日,饿了么董事长吴泽明(花名:范禹)通过公司全员信宣布饿了么最新组织调整:即日起,吴泽明将兼任饿了么CEO,韩鎏(花名:昊宸)专注分管即时物流中心,继续向吴泽明汇报。吴泽明在内部信中表示,考虑即时物...
- 饿了么组织架构调整:董事长吴泽明兼任CEO
-
Tech星球2月11日消息,据新浪科技报道,今日饿了么董事长吴泽明(花名:范禹)通过公司全员信宣布饿了么最新组织调整:即日起,吴泽明将兼任饿了么CEO,韩鎏(花名:昊宸)专注分管即时物流中心,继续向吴...
- 饿了么又调整了组织架构,董事长吴泽明兼任CEO
-
2月11日,饿了么董事长,花名为范禹的吴泽明,通过公司全员信宣布最新组织调整:从即日起,吴泽明将兼任饿了么CEO。公司原CEO,花名为昊宸的韩鎏今后专注分管即时物流中心,继续向吴泽明汇报。在内部信中,...
- SpringBoot项目快速开发框架JeecgBoot——Web处理!
-
Web处理JeecgBoot框架主要用于Web开发领域。下面介绍JeecgBoot在Web开发中的常用功能,如控制器、登录、系统菜单、权限模块的角色管理和用户管理。首先启动后台项目,将其导入IDE...
- 腾讯即将开源Kuikly:基于Kotlin的纯原生跨端解决方案
-
IT之家3月4日消息,腾讯日前在端服务网站发布预告,即将开源Kuikly跨端开发框架。预告海报介绍称,Kuikly是基于KotlinKMM技术、客户端开发友好的全新跨端解决方案,可...
- Python构建MCP服务器完整教程:5步打造专属AI工具调用系统
-
模型控制协议(ModelControlProtocol,MCP)是一种专为实现AI代理与工具解耦而设计的通信协议,为AI驱动应用程序的开发提供了高度的灵活性和模块化架构。通过MCP服务器,AI代...
- Python3使用diagrams生成架构图(python模块制作)
-
目录技术背景diagrams的安装基础逻辑关系图组件簇的定义总结概要参考链接技术背景对于一个架构师或者任何一个软件工程师而言,绘制架构图都是一个比较值得学习的技能。这就像我们学习的时候整理的一些Xmi...
- Python 失宠!Hugging Face 用 Rust 新写了一个 ML框架,现已低调开源
-
大数据文摘受权转载自AI前线整理|褚杏娟近期,HuggingFace低调开源了一个重磅ML框架:Candle。Candle一改机器学习惯用Python的做法,而是Rust编写,重...
- Python Web 框架(Python Web 框架)
-
Tornado、Flask、Django三个PythonWeb框架的主要区别和适用场景:特点/框架TornadoFlaskDjango类型异步非阻塞Web服务器和框架轻量级微框架全功能...
- 构建并发布你的自定义 Python 包(python如何创建自定义模块)
-
Python让你可以重用代码,并将代码分享给他人以节省时间和精力。所以,当你编写了一些方便的脚本,希望你的同事或其他人也能使用时,接下来该怎么做呢?这篇文章就来解决打包和分发的问题。我们将专注于将你...
- Python 应用开发框架 BeeWare 简明实用教程
-
1.BeeWare简介BeeWare是一个Python框架,用于开发跨平台原生应用。它支持Android、iOS、Windows、macOS和Linux,并提供原生用户体验。2.安装B...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- mfc框架 (52)
- abb框架断路器 (48)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)