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

OpenAI Agent调用MCP Server案例分析

目录

  • 写在前面
  • 一、OpenAI Agent调用MCP Server案例
    • 1、MCP 的两种调用方式SSE/stdio
      • stdio(标准输入/输出)‌
      • SSE(Server-Sent Events)‌
    • 2、创建并运行一个名为“Weather Server”的服务器实例
    • 3、创建SSE服务器并通过Agent登记调用
  • 二、支持MCP的框架有哪些

写在前面

在这里插入图片描述

我们之前介绍了MCP协议的概念是什么以及如何使用客户端cline调用MCP服务,再到如何自己动手实现MCP Server demo和MCP Client demo,循序渐进基本对MCP已经有了整体的认识。

模型上下文协议(Model Context Protocol,MCP)初见概念篇
在Cline上调用MCP服务之MCP实践篇
编写第一个MCP Server之Hello world
编写第一个MCP Client之Hello world

那么,MCP是随着Agent应运而生的,自然而言它最终的使用场景还是要回归AI Agent。至今为止市面上的Agent已然琳琅满目,傻瓜化的编排框架也是层出不穷。然而,想要使用MCP Server的Agent框架自然也必须支持MCP协议才行。

今天还是以最通俗易懂的形式来介绍一个OpenAI Agent调用MCP Server的简单案例分析,化繁为简帮助大家体验和进一步理解MCP与Agent的结合编码实现。(其实Agent的过程体验我们在《在Cline上调用MCP服务之MCP实践篇》也早就有过交手)

阅读本文默认已经掌握python语法基础。

一、OpenAI Agent调用MCP Server案例

我们参考openai官方的openai-agents-python教程,以实现一个Agent接入天气查询MCP Server的案例来分析理解。

1、MCP 的两种调用方式SSE/stdio

在案例开始之前先来看下MCP的通信方式。
在这里插入图片描述

MCP 的两种主要调用方式如下,其核心差异体现在通信机制和应用场景上:

stdio(标准输入/输出)‌

本地进程通信‌:通过标准输入输出流实现本地进程间的高效交互,适用于本地部署的大模型与工具的直接集成

特点‌:低延迟、无网络依赖,常用于开发调试或单机环境下的快速原型验证。

SSE(Server-Sent Events)‌

远程实时通信‌:基于 HTTP 的单向事件流协议,支持云端服务与客户端的长连接通信,适合分布式系统中的工具调用

特点‌:
支持服务端主动推送数据(如持续返回计算中间结果)
兼容主流浏览器和 HTTP 生态
内置断线重连机制保障稳定性

两种方式均遵循统一的 ‌JSON-RPC 2.0‌ 消息格式规范,包含请求(Request)、响应(Response)和通知(Notification)三种标准消息类型,确保不同实现间的互操作性。开发者可根据部署环境和性能需求灵活选择:本地工具链优先采用 stdio,云端服务则推荐 SSE 方案

类似配置体验如下:

stdio:
在这里插入图片描述
SSE:
在这里插入图片描述

2、创建并运行一个名为“Weather Server”的服务器实例

注意代码中的相关依赖可以先进行安装,参考官方传送门。


# 导入requests库,用于发送HTTP请求
import requests# 从mcp.server.fastmcp模块导入FastMCP类
from mcp.server.fastmcp import FastMCP# 创建一个FastMCP服务器实例,命名为"Weather Server"
# 这里假设mcp.server.fastmcp是一个自定义模块,用于创建和管理服务器
mcp = FastMCP("Weather Server")# 使用mcp.tool()装饰器定义一个工具函数get_current_weather
# 这个函数接收一个城市名称作为参数,并返回该城市的当前天气信息
@mcp.tool()
def get_current_weather(city: str) -> str:# 打印调试信息,显示正在查询的城市天气print(f"[debug-server] get_current_weather({city})")# 定义天气API的端点endpoint = "https://wttr.in"# 使用requests库发送GET请求到天气API,获取指定城市的天气信息# 注意:这里直接将城市名称拼接到URL中,实际使用中应考虑URL编码问题response = requests.get(f"{endpoint}/{city}")# {endpoint}/{city} => https://wttr.in/泉州# 返回天气API的响应文本,这里假设响应文本是天气信息return response.text# 如果当前脚本作为主程序运行(而非被导入到其他脚本中)
if __name__ == "__main__":# 启动mcp服务器,指定传输方式为sse(Server-Sent Events,服务器发送事件)# 这里假设FastMCP类支持sse作为通信方式mcp.run(transport="sse")

该段Python代码的主要功能是创建并运行一个名为“Weather Server”的服务器实例,该实例利用自定义的FastMCP类(假定来自mcp.server.fastmcp模块)进行管理。服务器上定义了一个工具函数get_current_weather,用于获取指定城市的当前天气信息。

其中,wttr.in 是开源的一个面向控制台的天气预报服务,支持多种信息展示方式,如面向终端的 ANSI 序列,适用于控制台 HTTP 客户端(如 curl、httpie 或 wget),HTML 格式适用于网页浏览器,以及 PNG 格式适用于图形查看器。
仓库地址:https://gitcode.com/gh_mirrors/wt/wttr.in/

接口爱之初体验如下:
在这里插入图片描述

3、创建SSE服务器并通过Agent登记调用

# 导入必要的模块
from agents.mcp.server import MCPServerSse  # 导入SSE服务器实现
import asyncio  # Python异步IO库
from agents import Agent, Runner, AsyncOpenAI, OpenAIChatCompletionsModel  # 导入AI代理相关类
from agents.mcp import MCPServer  # 导入MCP服务器接口# 定义运行函数,接收MCP服务器实例
async def run(mcp_server: MCPServer):# 创建外部OpenAI客户端实例external_client = AsyncOpenAI(api_key="",  # OpenAI API密钥base_url="",  # OpenAI API基础URL  https://api.openai.com/v1 OpenAI库已内置该URL)# 创建AI代理实例agent = Agent(name="Assistant",  # 代理名称instructions="Use the tools to answer the questions.",  # 代理指令mcp_servers=[mcp_server],  # 关联的MCP服务器列表model=OpenAIChatCompletionsModel(  # 使用的模型配置model="gpt-4o",  # 模型名称openai_client=external_client,  # 使用的OpenAI客户端),)# 定义测试消息message = "泉州今天的天气怎么样?"print(f"Running input: {message}")  # 打印运行信息# 运行代理并获取结果result = await Runner.run(starting_agent=agent, input=message)print(result.final_output)  # 打印最终输出# 主函数
async def main():# 使用上下文管理器创建SSE服务器实例async with MCPServerSse(name="SSE Python Server",  # 服务器名称params={"url": "http://localhost:8000/sse",  # 服务器URL  sse默认是8000},) as server:await run(server)  # 运行主逻辑# 程序入口
if __name__ == "__main__":try:asyncio.run(main())  # 运行异步主函数finally:

这段代码主要功能是:

创建一个SSE服务器;
配置一个AI代理(使用GPT-4模型);
通过代理处理用户输入(“泉州今天的天气怎么样?”);
输出处理结果。

运行将看到类似效果:

Running input: 泉州今天的天气怎么样?
今天泉州的天气是局部多云,气温大约在28℃,风速为 10 km/h,能见度为 10 km。预计全天无降水。

至此,我们的OpenAI Agent调用MCP Server案例分析结束,主要介绍了如何Agent调用MCP的过程。

二、支持MCP的框架有哪些

以下是支持 MCP 协议的 Agent 框架及相关工具的表格列表(欢迎补充):

类型名称/工具特点说明
原生支持框架CrewAI通过 automcp 实现 MCP 协议转换,支持工具交互
LangGraph微软生态框架,深度集成 MCP 协议,适合复杂协作
Llama Index数据连接层使用 MCP 协议优化工具调用精准度
可扩展框架OpenAI Agents SDK借助 automcp 转换为 MCP 服务器,实现跨平台互操作
Pydantic AI模块化设计兼容 MCP,支持快速构建符合企业规范的 Agents
Spring AIJava 技术栈通过 MCP Client/Server 架构实现标准化集成
开发平台Azure AI Foundry原生集成 MCP 协议栈,提供端到端 Agent 开发支持
Copilot Studio可视化配置 MCP 工具链,降低接入门槛
配套工具automcp关键协议转换工具,支持 CrewAI/LangGraph 等框架与 MCP 生态无缝对接
Java MCP SDK提供 Stdio/HTTP SSE 传输层实现,适配企业级安全规范
其他difyDify是一个开源的大语言模型(LLM)应用开发平台,融合了后端即服务(Backend as Service, BaaS)和 LLMOps 理念,旨在简化和加速生成式AI应用的创建和部署。它支持多种大型语言模型(如OpenAI的GPT系列、Claude3等),并提供强大的数据集管理功能、可视化的 Prompt 编排以及应用运营工具。
deer-flowDeerFlow(Deep Exploration and Efficient Research Flow)是一个社区驱动的深度研究框架,它建立在开源社区的杰出工作基础之上。我们的目标是将语言模型与专业工具(如网络搜索、爬虫和 Python 代码执行)相结合,同时回馈使这一切成为可能的社区。

(注:表格内容基于公开技术文档整理,具体实现需参考各框架官方指南)

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

相关文章:

  • JavaScript【4】数组和其他内置对象(API)
  • 如何在 Windows 10 或 11 中安装 PowerShellGet 模块?
  • 【软考中级软件设计师】进程管理
  • Windows/MacOS WebStorm/IDEA 中开发 Uni-App 配置
  • Unable to get end effector tips from jmg
  • UDP三种通信方式
  • Harmony开发 List、Grid拖动自定义排序实现
  • 车载诊断架构 --- 核心网关流控制机制需求
  • Python训练打卡Day26
  • c++成员函数返回类对象引用和直接返回类对象的区别
  • 时间筛掉了不够坚定的东西
  • STM32之蜂鸣器和按键
  • Face Over 84.0| 利用AI技术交换照片或视频中的面孔,制作有趣内容
  • (8)python开发经验
  • 如何在纷杂的环境当中保持保持独立思考能力?
  • 基于多头自注意力机制(MHSA)增强的YOLOv11主干网络—面向高精度目标检测的结构创新与性能优化
  • HCIP第六次作业
  • Web3开发工具与框架全解析:从入门到实战
  • 【matlab技巧】通过手绘的方法设计二维运动轨迹,附MATLAB程序
  • 机器学习 day04
  • 线性dp练习(碱基配对)
  • 【OpenCV】基本数据类型及常见图像模式
  • java中的循环结构
  • MySQL——4、表的约束
  • 【Java】应对高并发的思路
  • 使用Spring Boot和Spring Security构建安全的RESTful API
  • 第8讲、Multi-Head Attention 的核心机制与实现细节
  • Github 2025-05-17 Rust开源项目日报 Top10
  • Bitmap原理及Hive去重方式对比
  • 网络流量分析 | Zeek(上)