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

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端都重启一次。

http://www.xdnf.cn/news/8765.html

相关文章:

  • DataFrame 和 Dataset的对比理解
  • 常见嵌入式软件架构
  • Spring Boot微服务架构(三):Spring Initializr创建CRM项目
  • 基于CodeBuddy实现本地网速的实时浏览小工具
  • 网络安全从零开始(二):细分技术方向深度解析
  • GM DC Monitor 系统监控对象SNMP配置指南
  • Linux中的前台(同步)运行 或 后台(异步)运行
  • java 代码查重(四)删除java文件中注释的方法后查重实现
  • 鼠标连点器 ,实现鼠标自动点击
  • DVWA通关笔记-靶场安装教程
  • SQL每日一题(5)
  • 阿斯利康医学代表在线测评笔试题库 | 3天备考、能力测评、性格测评历年真题 | 华东同舟求职讲求职
  • 分布式缓存:缓存设计中的 7 大经典问题_缓存失效、缓存穿透、缓存雪崩
  • RV1126+FFMPEG多路码流监控项目大体讲解
  • 【软件测试】第三章·软件测试基本方法(缺陷模式、模型、形式化测试方法)
  • 关键点翻转 数据增强踩坑
  • C++性能相关的部分内容
  • 数据类型与运算符
  • 6.3.1图的广度优先遍历
  • 第一课:医学影像研究的科学思维与问题提出
  • js实现音频的录制
  • Vue 样式不一致问题全面分析与解决方案
  • 专业学习|经济学与管理学常用分析工具详解
  • 【人工智能】微调秘籍:解锁AI大模型的定制化魔法
  • python装饰器的简单理解
  • (2)-玩转Fiddler抓包-再识Fiddler
  • 天地图实景三维数据分享(江苏)
  • 【iOS】内存分区
  • 第2周 PINN核心技术揭秘: 如何用神经网络求解偏微分方程
  • 消息中间件之kafka