ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

mcp-for-beginners 实战:用 Python 编写并运行第一个 MCP 客户端(stdio 传输)

mcp-for-beginners 实战:用 Python 编写并运行第一个 MCP 客户端(stdio 传输) 教程文档人工智能【免费下载链接】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 开源课程中「Creating a client」一课配套的 Python 示例见 translations/bn/03-GettingStarted/02-client/solution/python/README.md英文原版见 03-GettingStarted/02-client/solution/python/README.md带你从零搭建虚拟环境、安装依赖、运行客户端并理解每一行输出。读完本文你将掌握如何用官方 Python SDK 通过 stdio 传输启动并连接一个 MCP 服务器如何列出资源与工具、读取资源、调用工具以及如何结合仓库源码client.py / server.py看懂整个 MCP 客户端-服务器通信链路。一、示例概览一个“自启动服务器”的 Python 客户端本示例位于仓库的 03-GettingStarted/02-client/solution/python/ 目录包含两个文件client.py完整的 MCP 客户端实现server.py一个用 FastMCP 编写的配套服务器提供add工具与greeting://{name}动态资源。这个客户端有一个显著特点它通过StdioServerParameters在自身进程中拉起服务器子进程commandmcp, args[run, server.py]因此客户端启动的同时也会自动启动服务器。这也呼应了课程 03-GettingStarted/02-client/README.md 中的要点客户端既可以自己拉起服务器也可以连接已经运行中的服务器。示例的核心流程客户端初始化会话session.initialize ↓ 列出资源list_resources ↓ 列出工具list_tools ↓ 读取资源read_resource greeting://hello ↓ 调用工具call_tool add {a:1, b:7}二、环境准备创建并激活虚拟环境按照 README.md 的步骤建议非必须安装uv来管理 Python 环境不安装uv也完全可以走标准venv流程。-0- 创建虚拟环境python -m venv venv-1- 激活虚拟环境原文档给出的是 Windows 下的激活命令venv\Scripts\activate如果你在 Linux/macOS 上运行对应的激活命令为source venv/bin/activate说明激活方式取决于操作系统。仓库文档以 Windows 语法为例不代表其他平台不可用实际以你所在环境的 Python 工具链为准。三、安装依赖mcp[cli]pip install mcp[cli]这里的关键是[cli]extra它不仅安装mcp客户端/服务端 SDK还会安装mcp命令行工具。在 client.py 中客户端正是通过commandmcp来启动服务器的因此这个 CLI 入口是必需的server_params StdioServerParameters( commandmcp, # Executable args[run, server.py], # Optional command line arguments envNone, # Optional environment variables )从源码结构可以推断mcp run server.py本质上是用 FastMCP 的mcp.run()语义见 server.py 中的mcp.tool()/mcp.resource()注册方式以子进程形式把服务器跑起来并通过 stdin/stdout 与客户端交换 JSON-RPC 消息。envNone表示继承当前进程的环境变量如需注入自定义环境可传入字典。四、运行客户端并解读输出python client.py你将看到类似如下的输出LISTING RESOURCES Resource: (meta, None) Resource: (nextCursor, None) Resource: (resources, []) INFO Processing request of type ListToolsRequest server.py:534 LISTING TOOLS Tool: add READING RESOURCE INFO Processing request of type ReadResourceRequest server.py:534 CALL TOOL INFO Processing request of type CallToolRequest server.py:534 [TextContent(typetext, text8, annotationsNone)]逐行拆解输出含义LISTING RESOURCES对应客户端的list_resources()调用打印的是分页元数据meta、nextCursor与资源列表。本例中resources为空数组这是因为配套的server.py用mcp.resource(greeting://{name})注册的是动态资源模板动态资源不会出现在静态资源列表中——只有通过 URI 显式读取时才会被解析。INFO Processing request of type ListToolsRequest server.py:534这是 FastMCP 服务器端打印的日志日志行号server.py:534来自 SDK 内部实现表明服务器收到了ListToolsRequest请求。LISTING TOOLS/Tool: add客户端列出服务器注册的工具当前只有一个add工具。READING RESOURCE客户端调用read_resource(greeting://hello)触发服务器端的ReadResourceRequest。URI 中的hello会匹配资源模板greeting://{name}的{name}占位符服务器返回Hello, hello!该返回值在示例输出中未打印客户端仅打印了触发日志。CALL TOOL客户端调用call_tool(add, arguments{a: 1, b: 7})触发CallToolRequest。[TextContent(typetext, text8, annotationsNone)]最终工具调用的结果——add(1, 7)返回8封装在TextContent对象中。这正是客户端print(result.content)打印的内容见 client.py。五、客户端源码逐段拆解完整代码在 client.py我们按执行顺序拆解。5.1 导入库与服务器参数from mcp import ClientSession, StdioServerParameters, types from mcp.client.stdio import stdio_clientStdioServerParameters描述如何启动服务器子进程命令、参数、环境变量stdio_client异步上下文管理器负责建立 stdio 传输通道ClientSession封装与服务器的高层会话 API。5.2 建立连接与会话初始化async def run(): async with stdio_client(server_params) as (read, write): async with ClientSession(read, write) as session: await session.initialize()stdio_client返回一对流read/writeClientSession在其上封装会话session.initialize()完成 MCP 协议握手协商协议版本与能力。这段代码与课程 03-GettingStarted/02-client/README.md 中「-2- Instantiating client and transport」一节的 Python 示例完全一致。5.3 列出资源与工具resources await session.list_resources() print(LISTING RESOURCES) for resource in resources: print(Resource: , resource) tools await session.list_tools() print(LISTING TOOLS) for tool in tools.tools: print(Tool: , tool.name)list_resources()返回分页结果对象因此输出中出现meta、nextCursor等分页字段list_tools()返回的结果带有tools列表遍历后打印每个工具的名称。5.4 读取资源与调用工具content, mime_type await session.read_resource(greeting://hello) result await session.call_tool(add, arguments{a: 1, b: 7}) print(result.content)read_resource按 URI 读取资源返回(content, mime_type)元组call_tool需要指定工具名与参数字典结果对象包含content列表如[TextContent(...)]。5.5 入口if __name__ __main__: import asyncio asyncio.run(run())由于ClientSession是异步 API主入口通过asyncio.run驱动事件循环。六、配套服务器源码解析server.py 用 FastMCP 定义了示例的全部能力from mcp.server.fastmcp import FastMCP mcp FastMCP(Demo) mcp.tool() def add(a: int, b: int) - int: Add two numbers return a b mcp.resource(greeting://{name}) def get_greeting(name: str) - str: Get a personalized greeting return fHello, {name}!FastMCP(Demo)创建名为Demo的服务器实例mcp.tool()把纯 Python 函数注册为 MCP 工具参数与返回值类型注解a: int, b: int - int会自动转换为工具的 JSON Schemamcp.resource(greeting://{name})注册动态资源模板name作为路径参数传入函数——这正是前文输出中资源列表为空、但greeting://hello可以成功读取的原因。此外第一章的完整版服务器 03-GettingStarted/01-first-server/solution/python/server.py 还额外注册了subtract工具并包含if __name__ __main__: mcp.run()入口可作为扩展参考。七、从源码结构进一步深化更完整的客户端示例如果你想看到更接近生产级的客户端写法仓库还提供了完整示例 client_example_python.py。它在上述最小客户端基础上增加了面向对象的封装MCPCalculatorClient类把服务器参数、会话建立与各操作拆分为独立方法工具批量调用用操作表驱动add、subtract、multiply、divide、help一组工具调用结果解析辅助方法extract_text_result从result.content中稳健地提取文本避免直接打印整个对象异常处理每个操作都包裹 try/except保证单个工具失败不影响整体流程资源读取遍历list_resources()结果并读取第一个资源。该示例同样使用 stdio 传输但commandpython、args[../01-first-server/solution/python/server.py]即直接以 Python 解释器启动第一章的服务器脚本——这展示了StdioServerParameters中命令与参数的另一种组合方式。八、跨语言对照与下一步学习本课程的 solution/README.md 按运行时组织了完整解决方案typescript/、python/、dotnet/、java/、rust/外加一个额外的 .NET 服务器server/。Python 版是所有方案中最轻量的两个脚本加一个 README无需构建步骤即可运行。关于客户端的通用能力课程 03-GettingStarted/02-client/README.md 总结了三点关键收获同样适用于本示例客户端既可以发现列出服务器上的资源、工具与提示词也可以调用它们客户端可以在自身启动的同时拉起服务器本示例也可以连接已运行的服务器客户端是替代 MCP Inspector 的另一种验证服务器能力的方式适合编写自动化测试。如果希望客户端具备“自主决策”能力——即由 LLM 根据用户意图选择调用哪个工具——可以继续学习下一课 03-GettingStarted/03-llm-client/README.md那里将演示如何为客户端接入大语言模型。关键结论运行 Python MCP 客户端只需四步创建虚拟环境、激活、pip install mcp[cli]、python client.pymcp[cli]中的 CLI 入口是客户端通过commandmcp自启动服务器的前提客户端的核心调用链为stdio_client→ClientSession→initialize→list_resources/list_tools→read_resource/call_tool动态资源模板如greeting://{name}不会出现在list_resources的静态列表中只能通过 URI 读取这是理解示例输出中resources: []的关键工具调用的结果以content列表返回如TextContent(text8)生产代码应像 client_example_python.py 那样对其做健壮解析。赞分享教程文档人工智能【免费下载链接】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 客户端stdio 传输mcp for beginners 实战指南用 TypeScript 编写、运行并调试 MCP 客户端stdio 传输 本篇指南基于 mcp for be教程文档人工智能mcp-for-beginners 实战用 TypeScript 编写并运行你的第一个 MCP 客户端mcp for beginners 实战用 TypeScript 编写并运行你的第一个 MCP 客户端 本篇文章基于开源课程 mcp for beginner教程文档人工智能用 Python 编写 MCP 客户端mcp-for-beginners 中的 stdio 客户端实战指南用 Python 编写 MCP 客户端mcp for beginners 中的 stdio 客户端实战指南 在 Model Context Protocol教程文档人工智能上一篇如何免费解锁泰拉瑞亚无限潜力tModLoader终极入门指南下一篇如何高效获取城通网盘文件的直连下载地址创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表