Model Context Protocol Python SDK 入门指南:从零搭建并验证你的第一个 MCP 服务器

发布时间:2026/9/20 20:56:48

Model Context Protocol Python SDK 入门指南:从零搭建并验证你的第一个 MCP 服务器 Model Context Protocol Python SDK 入门指南从零搭建并验证你的第一个 MCP 服务器【免费下载链接】python-sdkThe official Python SDK for Model Context Protocol servers and clients项目地址: https://gitcode.com/gh_mirrors/pythonsd/python-sdk本篇指南面向 MCPModel Context Protocol新手也面向刚接触 python-sdk 的开发者系统讲解从安装 SDK、编写第一个服务器、连接真实宿主Host到用内存客户端验证功能的完整路径。读完本文你将掌握uv run mcp dev与内存客户端Client(mcp)两套核心工作流并理解为什么本仓库文档中的每一段示例代码都是可直接复制、可运行、可被测试验证的真实代码。快速上手四条主线路径MCPModel Context Protocol定义了 AI 应用与工具服务器之间的通信协议。python-sdk 是 MCP 协议在 Python 生态下的官方实现仓库地址README.md它同时提供了构建服务器与客户端的完整能力。对于零基础读者官方文档规划了一条从零到可运行的、经过测试的服务器的路径共四步安装 SDK在 Python 3.10 环境中安装mcp包编写第一个服务器用三个装饰器暴露工具、资源和提示词连接真实宿主把服务器接入 Claude Desktop、IDE 等宿主应用测试服务器用内存客户端Client(mcp)无需进程与端口即可验证。这四个页面是入门阶段的唯一主线本文将以这条路径为骨架展开并结合仓库源码与示例文件把每一步背后的实现原理讲透。直接运行文档中的每一段代码入门文档给出一条最重要的使用建议所有代码块都可以直接复制使用它们是完整、可运行的文件。这意味着你不需要脑补缺失的导入、包装或入口代码。具体操作方式把代码块粘贴进一个server.py然后用 MCP Inspector 打开它uv run mcp dev server.pymcp dev是 SDK 自带命令行工具由mcp[cli]可选依赖提供的一个子命令。查看 src/mcp/cli/cli.py 可以看到它的真实行为它先导入目标文件支持file.py:object后缀指定服务器对象然后调用npx启动modelcontextprotocol/inspector再以子进程方式把你的服务器跑起来从而在浏览器中获得一个可视化的调试面板。因此运行该命令的前提是环境中具备 Node.js/npm用于npx以及uv工具链。文档强烈建议你把代码亲手写或复制下来、本地编辑并运行。只有在自己的编辑器里实际操作你才能真正体会到这套 SDK 的设计意图代码量之少、自动补全之智能以及类型检查在运行之前就能拦截错误。示例全部经过测试验证绝非凭空猜测入门页有一个关键承诺你不会靠猜You will not be guessing。这并非空话而是由仓库的工程机制保证的每个文档示例都是仓库中的真实文件所有示例代码位于docs_src/目录下例如入门示例 docs_src/first_steps/tutorial001.py文档页通过--8--语法直接内嵌这些文件每个示例都被 SDK 自身的测试套件执行测试通过一个内存客户端in-memory client来调用示例中的服务器对象。入门页给出了这段验证测试的核心代码import pytest from mcp import Client from server import mcp pytest.mark.anyio async def test_add() - None: async with Client(mcp) as client: result await client.call_tool(add, {a: 1, b: 2}) assert result.structured_content {result: 3}注意这里的关键点没有子进程、没有端口、没有传输层。Client(mcp)直接把mcp这个服务器对象传给了Client类——因为Client内部支持内存连接模式它绕过一切网络协议在进程内直接与服务器对象对话。这与 FastAPI 生态中的TestClient思路一致。正因为如此如果 SDK 的某次改动破坏了某个文档示例CI 会在页面出错之前先变红。你在这里读到的代码就是实际运行的代码。而且这段测试代码不仅服务于文档验证它就是你日后测试自己服务器的方式详见 Testing。文档示例如何组织为了让示例即源码这条链路可追溯仓库按文档章节在 docs_src/ 下建立了一一对应的子目录例如docs_src/first_steps/tutorial001.py第一个服务器的完整示例docs_src/first_steps/tutorial001_client.py与之配对的完整客户端docs_src/testing/tutorial001.py测试章节用的简单计算器服务器。在 tests/docs_src/ 下每个章节都有对应的test_*.py测试文件如 tests/docs_src/test_first_steps.py它们正是文档示例被测试套件守护这一承诺的实现载体。内存测试的关键参数raise_exceptionsTrue在测试场景下Testing 文档推荐一种更完整的写法其中raise_exceptionsTrue值得单独说明pytest.mark.anyio async def test_call_add_tool(client: Client): result await client.call_tool(add, {a: 1, b: 2}) result.meta None assert result snapshot( CallToolResult( content[TextContent(typetext, text3)], structured_content{result: 3}, ) )这个参数只影响工具函数体之外的异常行为当服务器内部发生意外崩溃时出于安全考虑服务器会把它消毒成一条通用的Internal server error再返回给远端调用者避免泄漏内部细节而在测试中你恰恰不希望看到被掩盖的错误raise_exceptionsTrue会让测试看到真实报错信息。注意它不影响工具内部抛出的异常——工具内的异常会正常变成is_errorTrue的结果对象这在 Handling errors 中有完整论述。该参数在测试中应始终开启在生产代码中则没有意义。从示例源码反推 SDK 的核心设计既然示例代码就是仓库源码我们直接以 docs_src/first_steps/tutorial001.py 为例看看一个入门服务器长什么样from mcp.server import MCPServer mcp MCPServer(Demo) mcp.tool() def add(a: int, b: int) - int: Add two numbers. return a b mcp.resource(greeting://{name}) def greeting(name: str) - str: Greet someone by name. return fHello, {name}! mcp.prompt() def summarize(text: str) - str: Summarize a piece of text in one sentence. return fSummarize the following text in one sentence:\n\n{text}这个文件暴露了 SDK 的三个核心设计事实两个导入路径分工明确客户端类从from mcp import Client导入实现位于 src/mcp/client/client.py服务器类则从from mcp.server import MCPServer导入。SDK 刻意不提供from mcp import MCPServer这种捷径。一个装饰器完成全部注册mcp.tool()、mcp.resource(uri)、mcp.prompt()分别是工具、资源、提示词三种原语的唯一注册入口。函数的名称、docstring、类型注解会被自动解析为协议所需的名称、描述与参数 JSON Schema——你无需单独声明任何元数据。{param}即资源模板greeting://{name}中的{name}会绑定到函数同名参数使该资源成为资源模板Resource Template在客户端列表中单独呈现直到调用方提供具体的name值才产生实际资源。配对的客户端示例 docs_src/first_steps/tutorial001_client.py 则展示了另一种用法——通过 URL 连接运行中的服务器并读取它声明的能力capabilitiesasync def main() - None: async with Client(http://localhost:8000/mcp) as client: print(client.server_capabilities.model_dump(exclude_noneTrue))能力capabilities机制是 MCP 协议的关键服务器在连接时声明自己能应答哪些请求族tools/list、tools/call、resources/read、prompts/get等客户端只请求服务器声明过的内容。MCPServer会为你自动声明这三类能力而像completions参数自动补全这类需要额外编写 handler 的能力未注册时就不会出现在声明中规范的客户端也不会贸然发起请求。安装前的知识准备mcp[cli]与 v2 版本线入门路径的第一步是安装这里补充安装文档Installation中的关键事实避免初学者踩坑SDK 以mcp包名发布在 PyPI 上要求Python 3.10官方文档描述的是v2当前稳定主版本。v2 是一次带破坏性变更的大版本若你的项目依赖mcp且暂未迁移应保留2的上界如mcp1.28,2具体变更清单见 Migration Guide开发时推荐安装 CLI 扩展用于mcp dev、mcp run、mcp install三个子命令# uv uv add mcp[cli] # pip pip install mcp[cli]可选扩展mcp[rich]则用于美化服务器日志。SDK 底层依赖mcp-types协议类型、anyio异步运行时支持 asyncio 与 trio、pydantic模型与 Schema 生成、httpx2客户端 HTTP 传输等组件这些细节在正常使用中无需关心。下一步文档是参考手册而非线性课程一旦你的服务器跑起来入门文档明确指出其余文档是参考手册不是课程。每个页面都可以独立阅读你完全可以按需直达。四条主线指向如下服务器能暴露什么工具、资源、提示词→ Servers在你注册的函数内部能用什么上下文、依赖、日志等→ Handlers如何把服务器放到客户端面前stdio、HTTP、已有的 FastAPI 应用→ Run构建使用 MCP 服务器的应用即客户端一侧→ Clients。此外入门路径中的 Connect to a real host 页面展示了接入宿主的统一思路宿主如 Claude Desktop、Claude Code、Cursor、VS Code通过uv run --with mcp[cli] mcp run /absolute/path/to/server.py以子进程方式启动你的服务器全部配置工作本质上只是把这同一个启动命令写到不同宿主的不同配置文件中。而mcp install命令可以自动完成 Claude Desktop 的配置写入。小结入门路径四步走安装 → 第一个服务器 → 连接真实宿主 → 内存测试对应 docs/get-started/ 下的四个页面文档中每个代码块都是 docs_src/ 里的完整文件可用uv run mcp dev server.py直接运行调试每个示例都被 SDK 测试套件通过内存客户端Client(mcp)守护执行CI 先于文档变红因此文档代码可信可复用内存客户端也是你测试自己服务器的标准工具测试时开启raise_exceptionsTrue以便暴露真实异常从 src/mcp/cli/cli.py、src/mcp/client/client.py 到 docs_src/first_steps/仓库源码与文档示例互相印证构成了示例即源码、源码即文档的完整闭环。【免费下载链接】python-sdkThe official Python SDK for Model Context Protocol servers and clients项目地址: https://gitcode.com/gh_mirrors/pythonsd/python-sdk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/20 20:56:48

中文AI作图提示词失效真相:文化语义与视觉对齐

1. 这不是“能不能用中文”的问题,而是“中文提示词能否被真正理解”的问题最近两周,我连续帮三位设计师朋友调试AI作图流程——一位做电商详情页的,想输入“国风青花瓷纹样现代简约手机壳”,结果出图全是明清官窑瓷器摆件&#x…

2026/9/20 20:56:48

Tableau数据可视化工具安装与配置全指南

1. 为什么选择Tableau做数据可视化?十年前我刚入行数据分析时,总被老板要求做各种报表。那时候用Excel折腾透视表和VBA,经常为了调个图表样式加班到凌晨。直到在某次行业交流会上,看到有人用Tableau拖拽几下就生成了动态交互仪表盘…

2026/9/20 21:51:52

ABAP 7.40新语法实战:用VALUE和REDUCE简化内表统计

ABAP 7.40之后,新语法里最值得花半小时弄明白的,就是VALUE和REDUCE这对组合,它们能直接把复杂内表统计从几十行压缩到几行。我这句话不是标题党,去年做一个物料凭证汇总增强,接手一段五十多行的老代码:一个…

2026/9/20 21:51:52

EPISuite 4.1与ECOSAR批量预测水生生物毒性实操指南

EPISuite 4.1这个东西,做环境风险评估、新化学物质申报、还有论文里需要补充生态毒性数据的同学,迟早会碰到。它不是什么新软件,但至今依然是环境领域做暴露评估和效应评估最常用的免费工具之一,尤其是里面的ECOSAR模块&#xff0…

2026/9/20 21:46:51

如何给PicGo贡献代码:本地开发环境搭建到提交第一个PR的完整指南

如何给PicGo贡献代码:本地开发环境搭建到提交第一个PR的完整指南 【免费下载链接】PicGo 高效创作者的最佳图片上传工具。实现图片一键上传并自动获取链接,提升创作效率。它支持主流图床,提供拖拽、剪贴板粘贴等多种上传方式,具备…

2026/9/20 0:04:49

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/20 0:04:49

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/20 0:04:49

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/20 0:04:49

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/20 4:54:47

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/20 5:01:23

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/20 5:09:33

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码