mcp-for-beginners 实战:用 Python 低层 Server 构建可扩展的 MCP 工具服务并完成端到端运行验证
教程文档人工智能【免费下载链接】mcp-for-beginnersThis open-source curriculum introduces the fundamentals of Model Context Protocol (MCP) through real-world, cross-language examples in .NET, Java, TypeScript, JavaScript, Rust and Python. Designed for developers, it focuses on practical techniques for building modular, scalable, and secure AI workflows from session setup to service orchestration.项目地址https://gitcode.com/GitHub_Trending/mc/mcp-for-beginners点击查看免费下载本篇技术指南围绕 mcp-for-beginners 课程中“Advanced server usage高级 Server 用法”一节的 Python 示例工程展开完整讲解从虚拟环境搭建、依赖安装、代码运行到预期输出的全过程并结合仓库内server.py、client.py与tools/目录的源码实现剖析低层 Server 的list_tools/call_tool双处理器架构与 Pydantic 输入校验原理。读完本文你将掌握如何在本地跑通一个基于 stdio 传输的 MCP Python 示例并理解其可扩展架构的核心设计思想。一、示例工程概览文档对应哪个代码仓库本节对应的原文档位于仓库根目录下的 translations/bg/03-GettingStarted/10-advanced/code/python/README.md保加利亚语翻译版英文原文见 03-GettingStarted/10-advanced/code/python/README.md其内容是整个 10-advanced 章节 Python 示例的运行说明书。该示例工程的完整源码位于 03-GettingStarted/10-advanced/code/python/采用章节 README 中推荐的“低层 Server 独立工具目录”架构目录结构如下python/ --| client.py # 基于 stdio 传输的 MCP 客户端入口 --| server.py # 低层 MCP Server仅注册两个请求处理器 --| tools ----| __init__.py # 工具注册表以字典形式集中暴露所有工具 ----| add.py # add 工具的定义与处理函数 ----| schema.py # 基于 Pydantic 的输入模型JSON Schema 来源二、环境准备创建虚拟环境并安装mcp[cli]原文档给出的第一步是创建并激活 Python 虚拟环境python -m venv venv source ./venv/bin/activatepython -m venv venv会在当前目录生成名为venv的隔离虚拟环境避免 MCP SDK 依赖污染系统 Pythonsource ./venv/bin/activate在 Linux/macOS 下激活该环境Windows 下对应为venv\Scripts\activate激活后后续pip安装与python运行均在此环境中进行。第二步是安装依赖pip install mcp[cli]这里需要重点说明[cli]这个 extra 的含义mcp是 Model Context Protocol 的官方 Python SDK基础包已包含ClientSession、StdioServerParameters、mcp.server.stdio等核心模块而[cli]额外附带命令行工具相关依赖。示例的客户端与服务器分别通过from mcp import ClientSession, StdioServerParameters, types与from mcp.server.lowlevel import NotificationOptions, Server导入 SDK这些正是由mcp包提供的核心 API。若后续需要直接使用mcp命令行如配合 MCP Inspector 调试该 extra 也是必需的。三、运行示例python client.py与预期输出环境就绪后在原文档即 03-GettingStarted/10-advanced/code/python/README.md中执行python client.py正常情况下终端会输出两行关键信息Available tools: [add] Result of add tool: metaNone content[TextContent(typetext, text8.0, annotationsNone, metaNone)] structuredContentNone isErrorFalse这两行输出逐字验证了整个 MCP 调用链已经走通Available tools: [add]客户端成功发起tools/list请求服务器返回当前唯一的工具addResult of add tool: ...客户端随后以参数{a: 5, b: 3}发起tools/call请求服务器返回TextContent(typetext, text8.0)即5 3 8.0add工具将输入强制转为float后求和故结果带小数位。注意text8.0这一细节它印证了 tools/add.py 中float(input_model.a) float(input_model.b)的实现——Pydantic 模型字段声明为float后传入的整数5、3被转换为浮点数参与运算。四、源码级剖析低层 Server 的双处理器架构要理解示例为何能以“一个 Server 一个 tools 目录”就完成工具注册与调用需要通读 server.py 的实现。与常规FastMCP逐个mcp.tool()注册的方式不同低层 Server 只为每个特性类型工具、资源、提示词维护两个处理器本示例中即4.1 工具列表处理器handle_list_tools对应 server.py 中的server.list_tools()装饰器函数。其核心逻辑是遍历tools注册表中的每一个工具定义将其包装为符合 MCP 协议返回类型的types.Toolserver.list_tools() async def handle_list_tools() - list[types.Tool]: List available tools. vm_tools [] for tool in tools.values(): print(fRegistered tool: {tool[name]}) vm_tools.append( types.Tool( nametool[name], descriptiontool[description], inputSchemaconvert_to_json(tool[input_schema]), ) ) return vm_tools这里的convert_to_json是示例中一个关键辅助函数见 server.py它接收一个 Pydantic 模型类通过model_cls.schema()取得 JSON Schema再精简为{type: object, properties: ..., required: ...}结构作为 MCP 协议要求的inputSchema返回。这一设计让工具作者只需要声明 Pydantic 模型无需手写 JSON Schema。4.2 工具调用处理器handle_call_tool对应 server.py 中的server.call_tool()装饰器函数。它接收工具名name与参数字典arguments通过名称查表、调用对应 handler 并统一包装返回结果server.call_tool() async def handle_call_tool( name: str, arguments: dict[str, str] | None ) - list[types.TextContent]: if name not in tools: raise ValueError(fUnknown tool: {name}) tool tools[name] result default try: result await toolhandler except Exception as e: raise ValueError(fError calling tool {name}: {str(e)}) return [ types.TextContent(typetext, textstr(result)) ]可见未知工具名会抛出ValueError已知工具通过await toolhandler异步调用参数校验的失败会由 handler 内部抛出异常进而在此处被捕获并转换为错误信息避免服务器进程崩溃。所有工具的返回内容统一封装为types.TextContent这也是客户端最终打印出text8.0的直接原因。4.3 服务器启动与生命周期管理server.py 中的run()函数展示了低层 Server 的启动方式使用mcp.server.stdio.stdio_server()获取标准输入输出流再调用server.run(...)传入InitializationOptions含server_nameexample-server、server_version0.1.0与通过server.get_capabilities()计算的 capabilities。其中NotificationOptions()用于声明服务器支持的协议通知类型experimental_capabilities{}表示未启用实验性能力。4.4tools/目录工具定义与校验的落点工具侧由三个文件组成形成了“Schema 声明 → 工具定义 → 集中注册”的清晰链路tools/schema.py 定义 Pydantic 输入模型from pydantic import BaseModel class AddInputModel(BaseModel): a: float b: floattools/add.py 定义工具元信息与处理函数from .schema import AddInputModel async def add_handler(args) - float: try: # Validate input using Pydantic model input_model AddInputModel(**args) except Exception as e: raise ValueError(fInvalid input: {str(e)}) Handler function for the add tool. return float(input_model.a) float(input_model.b) add { name: add, description: Adds two numbers, input_schema: AddInputModel, handler: add_handler }这里体现了章节 README 强调的“在 handler 内做校验”策略AddInputModel(**args)会依据a、b两个float字段对传入参数进行类型与必填性校验参数缺失或类型不符会抛出异常并被捕获为ValueError。工具字典的四要素name、description、input_schema、handler与服务器端handle_list_tools/handle_call_tool的读取字段一一对应这就是两个处理器能“无差别”驱动任意工具的原因。tools/init.py 以字典形式集中注册工具from .add import add tools { add[name] : add }今后每新增一个工具只需在tools/下新增“Schema 文件 工具定义文件”并在__init__.py中追加一条注册项服务器端代码完全不需要改动——这正是该架构可扩展性的核心。五、客户端视角stdio 传输与调用链验证client.py 演示了 MCP 客户端通过 stdio 传输与本示例服务器的完整交互流程共三步构建服务器启动参数StdioServerParameters(commandpython, args[server.py])指明以python server.py子进程方式启动服务器建立会话并初始化stdio_client(server_params)打开双向标准流ClientSession(read, write)建立会话随后await session.initialize()完成 MCP 握手依次调用协议方法session.list_tools()获取工具清单并打印名称session.call_tool(add, {a: 5, b: 3})调用 add 工具并打印结果对象。从打印出的Result对象可以看出MCP 的工具调用返回值是一个包含content、meta、structuredContent、isError等字段的结构化结果isErrorFalse表明调用成功content[TextContent(...)]中承载服务器返回的文本内容。客户端入口通过asyncio.run(run())驱动异步流程见 client.py。六、从示例到架构为什么选用低层 Server示例背后对应章节 03-GettingStarted/10-advanced/README.md 对“常规 Server vs 低层 Server”做了系统对比常规 ServerPython 的FastMCP、TypeScript 的McpServer通过mcp.tool()/registerTool逐个注册特性而低层 Server 则“每个特性类型只写两个处理器”——一个负责list列出全部特性、一个负责call分发调用请求。本示例正是该理念的落地在 server.py 中无论将来注册多少个工具服务器侧代码体量保持不变新增工具的工作全部收敛到tools/目录内。章节 README 还给出了一种可直接推广的目录组织方式app --| tools --| resources --| prompts并指出低层 Server 的另一个优势在于可访问某些高级特性例如课程后续章节如 Sampling、Elicitation 相关能力只有在低层 Server 上才可用其中 Sampling 已在 MCP 协议版本2026-07-28中标记为 legacy/废弃特性。此外原文档在 03-GettingStarted/10-advanced/README.md 中还布置了扩展练习Assignment在给定代码基础上继续增加工具、资源和提示词并体会“只需要在tools/目录中新增文件、无需改动其他位置”的架构优势该练习未提供官方答案。读者可以参照本示例的add工具模式在tools/下复制出subtract.py、multiply.py等新工具并更新__init__.py注册表即可直观验证这一结论。七、小结一条完整的验证闭环从 translations/bg/03-GettingStarted/10-advanced/code/python/README.md或英文原文 03-GettingStarted/10-advanced/code/python/README.md出发本示例形成了“环境搭建 → 依赖安装 → 一键运行 → 输出验证”的完整闭环且每一步都有仓库源码作为事实依据环节命令/文件关键结论环境隔离python -m venv venv source ./venv/bin/activate独立运行 MCP SDK依赖安装pip install mcp[cli]官方 Python SDK 及其 CLI extra服务器server.pylist_tools/call_tool双处理器 stdio 启动工具定义tools/add.py名称/描述/Schema/处理器四要素字典输入校验tools/schema.pyPydanticAddInputModel(a, b)客户端client.pyinitialize → list_tools → call_tool预期输出Available tools: [add]/text8.0验证工具列表与调用结果均正确按此步骤在本地依次执行三条命令即可复现完整的 MCP 低层 Server 端到端交互再结合本节源码逐行阅读就能透彻理解“两个处理器驱动任意工具”这一低层 Server 架构设计的精髓。赞分享教程文档人工智能【免费下载链接】mcp-for-beginnersThis open-source curriculum introduces the fundamentals of Model Context Protocol (MCP) through real-world, cross-language examples in .NET, Java, TypeScript, JavaScript, Rust and Python. Designed for developers, it focuses on practical techniques for building modular, scalable, and secure AI workflows from session setup to service orchestration.项目地址https://gitcode.com/GitHub_Trending/mc/mcp-for-beginners点击查看免费下载相关推荐mcp-for-beginners 实战用 TypeScript 低级服务器构建可验证的 MCP 工具并借助 MCP Inspector 完成端到端测试mcp for beginners 实战用 TypeScript 低级服务器构建可验证的 MCP 工具并借助 MCP Inspector 完成端到端测试 本教程文档人工智能mcp-for-beginners 进阶指南用 MCP 低层服务器Low-Level Server打造可扩展、可验证的工具架构mcp for beginners 进阶指南用 MCP 低层服务器Low Level Server打造可扩展、可验证的工具架构 本篇文章是 mcp for教程文档人工智能mcp-for-beginners 实战运行并理解基于低层服务器的 Python MCP 示例mcp for beginners 实战运行并理解基于低层服务器的 Python MCP 示例 导读 本文以 mcp for beginners 课程第 10教程文档人工智能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

剪映数字人长句口型不齐:先核原声和断句,再比较同一句修改结果

剪映数字人长句口型不齐:先核原声和断句,再比较同一句修改结果

园艺课数字人讲一段较长说明,嘴部动作和声音明显不齐,可以先核文稿、原声与画面各自状态,再在当前支持范围内试断句或语速。调整文稿可能改善表达,但不能保证所有嘴部问题都随之修复,最终仍要看实际音画。剪映有数字人…

2026/10/8 22:42:31 阅读更多 →
猎头多平台寻访繁琐,聘小助7×24小时自动触达能力如何?

猎头多平台寻访繁琐,聘小助7×24小时自动触达能力如何?

猎头与招聘团队在多平台寻访候选人时,常面临账号切换、重复搜索、逐个打招呼、消息跟进遗漏、非工作时段响应慢等问题。若工具能实现自动触达与AI初筛,确实可能压缩重复劳动。但“效率提升”不能只看宣传,需要从可验证信息、功能边界、数据合…

2026/10/8 22:41:28 阅读更多 →
2027年中小企业选CRM,先看它能不能“自动完成”这7件事

2027年中小企业选CRM,先看它能不能“自动完成”这7件事

2026年,AI CRM的热度很高。但很多中小企业上线后发现,系统确实多了AI功能,销售的工作却没有明显变轻。原因并不复杂:如果AI只是帮人“写得更快”,而不是帮人“做得更多”,它仍然是一个高级工具,…

2026/10/8 22:41:27 阅读更多 →

最新新闻

Claude Code大规模封号潮背后:风控规则深度解读与账号自救指南

Claude Code大规模封号潮背后:风控规则深度解读与账号自救指南

这几天,我在好几个开发者社群里看到同样的求助:早上一打开终端,Claude Code 提示登录失效,回到网页端一看,账号状态变成了 disabled。有人是刚充了一个月订阅才用了一个礼拜,有人是用了大半年没出过问题&am…

2026/10/10 0:45:00 阅读更多 →
C# ONNX Runtime 部署 RMBG-2.0 实现工业级背景去除

C# ONNX Runtime 部署 RMBG-2.0 实现工业级背景去除

简介:本资源是一套基于C#与ONNX Runtime实现RMBG-2.0高精度人像背景去除的完整工程实践方案,面向具备基础C#开发能力及初步深度学习部署经验的工程师与图像处理开发者,解决实时人像抠图在桌面端或轻量级应用中模型集成难、推理慢、细节保留差…

2026/10/10 0:45:00 阅读更多 →
基于 Claude Fable 5 视觉流的头部姿态估算:纯前端驱动视角三维微视差实操

基于 Claude Fable 5 视觉流的头部姿态估算:纯前端驱动视角三维微视差实操

做前端动效和 3D 舞台交互的人,最头疼的就是“沉浸感”与“算力开销”之间的肉搏。以往要在网页端实现“用户晃动脑袋,页面视角跟着产生裸眼 3D 微视差”的效果,标准做法是拉一个 30MB 的 MediaPipe 或 TensorFlow.js 库,挂起 Web…

2026/10/10 0:44:59 阅读更多 →
UGC 评论区隐蔽违规引流检测:基于多模态轻量小模型的图文语义交叉验证实战

UGC 评论区隐蔽违规引流检测:基于多模态轻量小模型的图文语义交叉验证实战

大促期间商品评价区和内容社区是黑灰产引流的重灾区。刷单黑产早已不再采用“直接留微信号”这种幼稚的手段,他们的手法已经演进得极为隐蔽:文本上使用“🛰️、薇芯、v-心、v.X”配合同音拆字;图片上则采用多图九宫格切片拼接、低…

2026/10/10 0:44:59 阅读更多 →
利用大模型提取流行乐和声走向骨架:从复杂织体到标准罗马数字级数标注

利用大模型提取流行乐和声走向骨架:从复杂织体到标准罗马数字级数标注

很多学乐器或者做音频生成的朋友都遇到过一个难题:听一首复杂的流行歌或爵士乐时,吉他在疯狂扫弦,键盘铺满了切分和延音琶音,贝斯还在底下时不时来两句半音阶过渡滑音。如果你想理清这首歌的和声骨架,很容易被那些繁复…

2026/10/10 0:44:58 阅读更多 →
数值分析历年真题整理:用统计与OCR打造高效复习指南

数值分析历年真题整理:用统计与OCR打造高效复习指南

简介:《北航数值分析历年试题整理》是一份面向北京航空航天大学数值分析课程学习者的历年考题合集,系统覆盖误差分析、线性代数数值方法(如高斯消元、LU分解、QR分解)、非线性方程求根、插值与拟合、数值微积分以及常微分方程初值…

2026/10/10 0:43:56 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →