Python之MCPClient实现

简介: 本示例展示FastMCP客户端集成:通过RSA加密认证连接MCP服务,获取工具列表;再将MCP工具动态转为OpenAI格式,供大模型调用。含完整异步初始化、鉴权、工具发现与流式函数调用实现。(239字)

客户端

import asyncio

from fastmcp import Client

from utils.ConfigManager import config
from utils.LoggerManager import logger
from utils.RSAHelper import pack_rsa_decrypted

# 用户认证信息
user_id = config.get("MCP").get("UID")
user_secret_key = config.get("MCP").get("SECRET_KEY")
# MCP server 信息
mcp_server_url = config.get("MCP").get("SERVER_URL")

# 创建MCP客户端
def get_client():
    # 公钥加密密钥
    decrypted = pack_rsa_decrypted(user_id, user_secret_key)
    mcpConfig = {
        "mcpServers": {
            "server_name": {
                # Remote HTTP/SSE server
                "transport": "http",  # or "sse"
                "url": mcp_server_url,
                "headers": {"Authorization": f"Bearer {decrypted}"},
            }
        }
    }
    client = Client(mcpConfig)
    return client

# 获取MCP服务工具列表
async def list_tools():
    tools = None
    try:
        client = get_client()
        async with client:
            # Basic server interaction
            await client.ping()
            # List available operations
            tools = await client.list_tools()
    except Exception as e:
        logger.error(f"list_tools error: {e}")
    logger.info(f"list_tools: {tools}")
    return tools


if __name__ == "__main__":
    tools = asyncio.run(list_tools())
    print(tools)

大语言模型配置

# 获取MCP服务工具列表
mcp_tools = asyncio.run(list_tools())

# 构建工具描述给OpenAI
def build_tool_descriptions(tools):
    """将MCP工具转换为OpenAI工具调用格式"""
    openai_tools = []
    for tool in tools:
        openai_tools.append({
            "type": "function",
            "function": {
                "name": tool.name,
                "description": tool.description,
                "parameters": tool.inputSchema  # MCP工具的参数模式
            }
        })
    return openai_tools
openai_tools = build_tool_descriptions(mcp_tools)

# 大语言模型配置
response = client.chat.completions.create(
    model=model,
    messages=[
        {"role": "system", "content": "你是中国移动智慧助手"},
        {"role": "user", "content": "雷军为啥最近都是负面新闻。"},
    ],
    stream=True,
    tools=openai_tools,
    tool_choice="auto",
)
tool_calls_full = []
for chunk in response:
    choice = chunk.choices[0]
    tool_calls = choice.delta.tool_calls
    if tool_calls:
        tool_calls_full.append(tool_calls)
    content1 = choice.delta.content
    print(content1)
print("-----------------")
print(tool_calls_full)
相关文章
|
人工智能 物联网 开发工具
本地搭建 Stable Diffusion,还有完整的安装包
本地搭建 Stable Diffusion,还有完整的安装包
847 0
|
人工智能 Java API
MCP客户端调用看这一篇就够了(Java版)
本文详细介绍了MCP(Model Context Protocol)客户端的开发方法,包括在没有MCP时的痛点、MCP的作用以及如何通过Spring-AI框架和原生SDK调用MCP服务。文章首先分析了MCP协议的必要性,接着分别讲解了Spring-AI框架和自研SDK的使用方式,涵盖配置LLM接口、工具注入、动态封装工具等步骤,并提供了代码示例。此外,还记录了开发过程中遇到的问题及解决办法,如版本冲突、服务连接超时等。最后,文章探讨了框架与原生SDK的选择,认为框架适合快速构建应用,而原生SDK更适合平台级开发,强调了两者结合使用的价值。
14574 33
MCP客户端调用看这一篇就够了(Java版)
|
缓存 Linux
CentOS7配置阿里yum源 超详细!!!
CentOS7配置阿里yum源 超详细!!!
35423 2
|
2月前
|
Python
Python之代码片段-AES加解密
本文介绍基于PyCryptodome的AES-128/192/256(CBC模式)加解密实现,含依赖安装、完整Python类封装(支持UTF-8字符串加解密、PKCS7填充)、密钥/IV长度校验及Base64编码输出,并附使用示例。
230 3
|
3月前
|
存储 关系型数据库 PostgreSQL
在 RDS PostgreSQL 中实现 RaBitQ 量化
本文介绍阿里云RDS PostgreSQL中pgvector的RaBitQ向量量化技术:通过1-bit二值压缩实现32倍索引空间缩减,显著提升千万级向量场景下的存储效率与查询性能,同时保障高召回率,无需引入专用向量数据库。
在 RDS PostgreSQL 中实现 RaBitQ 量化
|
4月前
|
NoSQL MongoDB 索引
Python之DeepAgents基于mongodb的检查点
本文介绍了基于MongoDB实现LangGraph检查点的完整方案:提供同步/异步的CheckpointSaver类,支持线程隔离、索引优化与序列化;包含连接配置、实例化及DeepAgent集成示例,并附带按thread_id查询历史对话消息的实用工具函数。
132 1
|
4月前
|
人工智能 运维 监控
【AI工程化】AI工程化:MLOps、大模型全生命周期管理、大模型安全(幻觉、Prompt注入、数据泄露、合规)
本知识体系构建以LLMOps为底座、大模型全生命周期管理为核心、安全合规为红线的AI工程化系统性框架,覆盖规划选型、数据治理、研发训练、部署运维到迭代退役全流程,解决落地难、风险高、成本大等核心痛点。
|
4月前
|
存储 关系型数据库 MySQL
【MySQL】MySQL安装图解 | MySQL8数据库下载配置一步到位指南(全网最详细)
MySQL是全球最流行的开源关系型数据库,以稳定高效、学习曲线平缓、文档丰富、完全免费著称,广泛应用于Web开发。本文详述MySQL 8.0.41下载、图形化安装(含路径/密码配置)、环境变量设置及验证方法,并解答端口占用、密码重置等常见问题,助力新手快速上手。(239字)
HTTP协议中常见的状态码 ?
HTTP状态码分为1xx、2xx、3xx、4xx、5xx五类。常见状态码包括:101(切换协议,如WebSocket)、200(请求成功)、302(重定向)、401(未认证)、404(资源未找到)、500(服务器内部错误),广泛应用于Web开发中。
|
XML Java 测试技术
testNG框架从入门到精通
testNG框架从入门到精通
testNG框架从入门到精通

热门文章

最新文章