当前位置: 首页 > news >正文

DeepSeek实战--MCP Client Stdio模式

1. 背景

前面我们介绍了 MCP 架构是server + client 模式,今天来研究一下Client实现方案,本文会依赖MCP Python SDK,如果Python环境还未搭建好,可以爬楼看一下,我前序文章。
Client 有两种模式,今天研究stdio(Standard Input/Output, stdio 标准输入输出) 模式,客户端通过启动服务器子进程并使用标准输入(stdin)和标准输出(stdout)建立双向通信,一个服务器进程只能与启动它的客户端通信(1:1 关系)。stdio 适用于本地快速集成的场景。

两种模式,对比一下,方便大家选型:

特征stdio模式sse模式
通信协议标准输入输出服务器发送事件
实时性不支持实时更新支持实时更新
架构灵活性耦合,由客户端启动服务器解耦,客户端可随时连接
适用场景简单本地应用交互式应用
配置复杂性无需网络,本地命令运行需要网络连接和url

2. 环境准备

python 版本:3.12.5
LLM: deepseek-chat
SDK:openai 1.63.2

3. 步骤

1)使用 uv 工具初始化项目

uv init mcp-client-demouv  
#使用 uv 初始化一个名为 mcp-client-demo 的新 Python 项目,并在其中创建一个虚拟环境。add "mcp[cli]"
# 将包添加到当前项目中,"mcp[cli]": 表示要安装的包名是 mcp,并额外包含其 [cli] 可选依赖组uv add mcp
# 安装mcp包

初始化后项目结构
在这里插入图片描述

2)首先引用一下 MCP Client 的包

from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

在这里插入图片描述

3)设置服务器连接参数

然后需要编写设置服务器连接参数的代码。在使用 stdio 方式进行通信时,MCP 服务器的进程由 MCP 客户端程序负责启动。因此,我们通过 StdioServerParameters 来配置服务器进程的启动参数,包括运行 MCP 服务器的命令及其对应的参数。代码如下:

# Create server parameters for stdio connection
server_params = StdioServerParameters(command="uv", # Executableargs=["run","--with","mcp[cli]","--with-editable","/Users/zhangsir/PycharmProjects/Geek02/achievement-mcp-server/achievement",# "D:\\workspace\\python\\mcp-test\\achievement","mcp","run","/Users/zhangsir/PycharmProjects/Geek02/achievement-mcp-server/achievement/server.py"],# Optional command line argumentsenv=None # Optional environment variables
)

过配置这部分内容,可以确保 MCP 客户端能够正确启动并连接到 MCP 服务器。
配置结果
在这里插入图片描述

4)建立服务器连接

写一个 run 方法来建立客户端与服务器的连接

async def run():# stdio_client  负责启动服务器进程并建立双向通信通道,它返回用于读写数据的流对象。async with stdio_client(server_params) as (read, write):# ClientSession  则在这些流的基础上提供高层的会话管理,包括初始化连接、维护会话状态等async with ClientSession(read, write) as session:# Initialize the connectionawait session.initialize()# List available toolstools = await session.list_tools()print("Tools:", tools)# call a toolscore = await session.call_tool(name="get_score_by_name",arguments={"name": "张三"})print("score: ", score)

在这里插入图片描述

5)启动 run 函数

if __name__ == "__main__": 
import asyncio 
asyncio.run(run())

6)运行客户端

可以使用 uv 命令运行程序

uv run .\hello.py

4. 总结

1)stdio 模式是在client启动服务器,不适用用于生产环境,不可能,新增、变更tools后,所有client端都重启一次。

相关文章:

  • android studio 开启无线调试
  • Spring AI 1.0.0 中文文档上线
  • 网页 CSS美化2(详解)
  • 页面实现渲染大量 DOM 元素
  • 【GESP真题解析】第 12 集 GESP 二级 2024 年 3 月编程题 1:乘法问题
  • Spring Boot中使用AMQP协议与RabbitMQ
  • stream数据流
  • 0304考试通过-逻辑回归实战-机器学习-人工智能
  • 40-智慧医疗服务平台(在线接/问诊/机器学习)
  • 机器学习课程设计报告 —— 基于二分类的岩石与金属识别模型
  • 如何保证 Kafka 数据实时同步到 Elasticsearch?
  • 【MySQL】第7节|Mysql锁机制与优化实践以及MVCC底层原理剖析
  • 预分配矩阵内存提升文件数据读取速度
  • Kotlin中let、run、with、apply及also的差别
  • 【Python/Pygame】事件监测
  • [C语言初阶]扫雷小游戏
  • Java 函数式接口(Functional Interface)
  • 符合Python风格的对象(使用 __slots__ 类属性节省空间)
  • DeepSeek 赋能数字农业:从智慧种植到产业升级的全链条革新
  • Windows 中动态库.dll 的 .lib 文件有什么作用?
  • 做网站推荐/为什么seo工资不高
  • 黑龙江省建设工程交易中心网站/google海外版
  • 电子商务网站建设技巧/凡科建站下载
  • wordpress改变上传目录权限/保定seo网站推广
  • 怎么制定网站/百度访问量统计
  • 如何与网站建立私密关系/传媒网站