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

agentscope以STUDIO方式调用MCP服务

文章目录

    • 解决方法:使用与 STDIO 传输匹配的客户端
    • 关键修改说明
    • 运行方式

从错误日志和 MCP 服务器启动信息来看,核心问题是 传输方式不匹配

你的 MCP 服务器启动时使用的是 STDIO 传输方式(日志中显示 📦 Transport: STDIO),但你的客户端代码中却配置了 HttpStatelessClient 并使用 streamable_http 传输方式,两者不兼容,导致连接失败(httpx.ConnectError: All connection attempts failed)。

解决方法:使用与 STDIO 传输匹配的客户端

FastMCP 服务器默认使用 STDIO 传输时,AgentScope 需要对应使用 StdIOStatefulClient 客户端(而非 HTTP 客户端)。修改代码如下:

mcp_stdio_integration.py

import asyncio
import os
from agentscope.agent import ReActAgent
from agentscope.formatter import DashScopeChatFormatter
from agentscope.memory import InMemoryMemory
from agentscope.message import Msg
from agentscope.model import DashScopeChatModel
from agentscope.tool import Toolkit
# 关键修改:导入 STDIO 客户端(而非 HTTP 客户端)
from agentscope.mcp import StdIOStatefulClientasync def integrate_local_mcp():# 1. 创建 STDIO 类型的 MCP 客户端(匹配服务器的 STDIO 传输)# 注意:StdIO 客户端需要指定启动 MCP 服务器的命令mcp_client = StdIOStatefulClient(name="local_echo_mcp",# 命令:启动你的 MCP 服务器(替换为实际路径)command="python",args=["/mnt/data/test1/repo/agentscope/server.py"],# 工作目录(你的 server.py 所在目录)cwd="/mnt/data/test1/repo/agentscope/")# 2. 连接到 MCP 服务器(STDIO 客户端需要显式连接)await mcp_client.connect()# 3. 创建工具包并注册 MCP 服务toolkit = Toolkit()await toolkit.register_mcp_client(mcp_client)# 验证已注册的工具print("✅ 从 MCP 服务注册的工具列表:")for tool in toolkit.get_json_schemas():print(f"  - 工具名:{tool['function']['name']}")# 4. 实例化智能体(其余配置不变)agent = ReActAgent(name="MCP_Studio_Agent",sys_prompt="你可以是一个提供帮助的机器人",#使用 echo_tool 重复文本,get_weather 查询天气。",model=DashScopeChatModel(model_name="qwen-max",api_key="这里填写API key 去https://bailian.console.aliyun.com/?tab=model#/api-key注册api key", # os.environ.get(stream=True,),formatter=DashScopeChatFormatter(),toolkit=toolkit,memory=InMemoryMemory(),enable_meta_tool=True,)# 5. 测试工具调用test_messages = [Msg("user", "重复:STDIO 连接成功", "user"),Msg("user", "查询南极天气", "user"),Msg("user", "25*25等于几", "user")]for msg in test_messages:print(f"\n📥 用户请求:{msg.content}")print("📤 智能体响应:")await agent(msg)# 6. 关闭客户端(重要:STDIO 客户端需显式关闭)await mcp_client.close()if __name__ == "__main__":asyncio.run(integrate_local_mcp())

关键修改说明

  1. 客户端类型替换
    HttpStatelessClient 替换为 StdIOStatefulClient,因为服务器使用 STDIO 传输。

  2. 客户端参数调整
    STDIO 客户端需要通过 commandargs 指定启动 MCP 服务器的命令(相当于自动帮你运行 python server.py),无需手动在另一个终端启动服务器。

  3. 连接与关闭

    • 必须调用 await mcp_client.connect() 建立连接(STDIO 客户端需要显式连接)。
    • 结束后必须调用 await mcp_client.close() 释放资源(遵循 LIFO 原则)。

运行方式

直接运行修改后的代码即可(无需手动启动 MCP 服务器,客户端会自动启动):

python mcp_stdio_integration.py

此时客户端会自动启动 MCP 服务器并通过 STDIO 传输方式通信,解决连接失败问题。

MCP server.py 简单天气查询功能代码

"""
FastMCP Echo Server
"""from fastmcp import FastMCP# Create server
mcp = FastMCP("Echo Server")@mcp.tool
def echo_tool(text: str) -> str:return text@mcp.resource("echo://static")
def echo_resource() -> str:return "Echo!"@mcp.resource("echo://{text}")
def echo_template(text: str) -> str:"""Echo the input text"""return f"Echo: {text}"@mcp.prompt("echo")
def echo_prompt(text: str) -> str:return text# 新增的天气查询工具
@mcp.tool
def get_weather(city: str) -> str:"""Get the weather for a given city (demo version).Regardless of the city name, returns sunny and 25°C."""return f"城市 {city} 的天气:晴,气温 25 度。"if __name__ == "__main__":mcp.run()

确保在mcp_stdio_integration.py 的mcp_client = StdIOStatefulClient函数当中将自己的MCP基本信息填写好,路径填写正确,然后运行即可

http://www.dtcms.com/a/392385.html

相关文章:

  • 无公网 IP 访问群晖 NAS:神卓 N600 的安全解决方案(附其他方法风险对比)
  • Redis最佳实践——性能优化技巧之Pipeline 批量操作
  • Java-130 深入浅出 MySQL MyCat 深入解析 核心配置文件 server.xml 使用与优化
  • 业主信息查询功能测试指南
  • WinDivert学习文档之四-————卸载
  • 分布式链路追踪关键指标实战:精准定位服务调用 “慢节点” 全指南(二)
  • DuckDB客户端API之ADBC官方文档翻译
  • 区块链技术应用开发:智能合约进阶与多链生态落地实践
  • 分布式专题——13 RabbitMQ之高级功能
  • 神经风格迁移(Neural Style Transfer)
  • Chromium 138 编译指南 Ubuntu 篇:源码获取与版本管理(四)
  • R 语言入门实战|第九章 循环与模拟:用自动化任务解锁数据科学概率思维
  • [论文阅读] 人工智能 + 软件工程 | 4907个用户故事验证!SEEAgent:解决敏捷估计“黑箱+不协作”的终极方案
  • 鸿蒙Next ArkTS卡片开发指南:从入门到实战
  • 【绕过disable_function】
  • 使用云手机运行手游的注意事项有哪些?
  • 【数据结构】利用堆解决 TopK 问题
  • 2025陇剑杯现场检测
  • openharmony之充电空闲状态定制开发
  • 【开题答辩全过程】以 python的线上订餐系统为例,包含答辩的问题和答案
  • (附源码)基于Spring Boot的校园心理健康服务平台的设计与实现
  • 微信小程序开发教程(十八)
  • 寰宇光锥舟架构图
  • Spring Bean生命周期全面解析
  • [vibe code追踪] 侧边栏UI管理器 | showSidebarContent
  • 嵌入式ARM架构学习9——IIC
  • 多线程——线程安全的练习加感悟
  • 使用 TwelveLabs 的 Marengo 视频嵌入模型与 Amazon Bedrock 和 Elasticsearch
  • Windows 11 下 Notepad++ 等应用无法启动问题排查修复
  • 面向口齿不清者的语音识别新突破:用大模型拯救“听不懂”的声音