【MCP】从0到1实现一个MCP Client

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

如果连人间真爱都不知,千万年的修行还有什么用?

《青蛇》

01 MCP回顾

MCP全称Model Context Protocol,模型上下文协议。

上一篇文章【MCP】从0到1实现一个MCP Server 我们介绍了如何从0~1实现一个自定义的 MCP Server,感兴趣的朋友可以点击文章链接回顾下或者查看下。

02 MCP Client本质

为什么我们需要 MCP Client

因为我们在拿到一个 MCP Server 的时候没办法直接使用,必须结合 LLM 才能发挥这个 Server 的能力,所以我们需要一个基于 LLM 的 Client 去承接这个 Server。此时,MCP Client就出现了。

MCP Client 的本质

纵观市面上所有的,基于 LLM 的应用或者说客户端,无不是聊天对话机器人形式。再到具体的应用,比如说Cline,比如说Cursor等等,也是对话形式,coze、dify、n8n工具的本质也是对话。再往底层说,LLM 的本质就是输入输出。所以,如果我们要自定义一个 MCP Client,那必然也是对话形式。

03 快速实现简单的MCP Client

开始构建可与所有 MCP 服务器集成的,专属我们自己的客户端。在本教程中,我们将学习如何构建连接到 MCP 服务器的 LLM 支持的聊天机器人客户端。

这里我们使用 Python 实现MCP Client的编码与调用,Python版本为3.10或更高,MCP SDK 版本为 1.2.0 或更高。

官方文档建议使用 uv 作为包管理工作,那这次我就用一下吧。

这里默认各位朋友是掌握了 Python 语言的,所以我省略了环境的配置,也省略了项目的创建。我的项目长这样:

在这里插入图片描述

跟 MCP Server 的开发一样,就一个 main.py 文件,所有逻辑都在这一个文件里面。

我的代码基本逻辑来源于官方Demo:https://gist.github.com/zckly/f3f28ea731e096e53b39b47bf0a2d4b1 ,官方使用的 LLM 是Anthropic,我的代码里用的是OpenAI的SDK,做了一些微小的改动。完整代码如下:

import json
import os
import asyncio
from typing import Optional
from contextlib import AsyncExitStack

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

from openai import OpenAI
from dotenv import load_dotenv

# 加载.env文件中的环境变量
load_dotenv()

class MCPClient:
    def __init__(self):
        # 初始化会话和客户端对象
        self.session: Optional[ClientSession] = None # 用于保存 MCP 客户端会话
        self.exit_stack = AsyncExitStack()  # 用于管理异步资源的生命周期
        # 初始化 OpenAI 客户端
        self.client = OpenAI(
            base_url=os.getenv("BASE_URL"),
            api_key=os.getenv("API_KEY"),  # 从环境变量中获取 API 密钥
        )

    async def connect_to_server(self, server_script_path: str):
        """
        连接到 MCP 服务器

        参数:
            server_script_path: 服务器脚本路径 (.py 或 .js)
        """

        is_python = server_script_path.endswith('.py')  # 判断是否为 Python 脚本
        is_js = server_script_path.endswith('.js') # 判断是否为 JavaScript 脚本
        if not (is_python or is_js):
      

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值