最近看到 Eino 更新,提到已经支持 MCP 协议,今天我们一起来看看它的使用。从架构图可以看到,Eino 在构建 Agent 的时候,使用 MCP Client 连接 MCP Server,并获取相关的 Tools。最后将 tools 转化为 Eino 的 ToolNode,参与最终 workflow 编排。我们还是使用MCP 实战:使用 Go 快速构建 MCP Server一文中提到的 current time MCP Server 作为示例。不过因为使用 Eino 一般都为服务端开发,所以我们需要将 MCP Server 由 stdio 变为 sse。步骤1: 修改 current time MCP Server 监听方式,使其支持 sse//Onlycheckfor"sse"sincestdioisthedefaultiftransport=="sse"{serverUrl:="http://"+serverlistensseServer:=server.NewSSEServer(s,server.WithBaseURL(serverUrl))log.Printf("SSEserverlisteningon%s",serverlisten)iferr:=sseServer.Start(serverlisten);err!=nil{log.Fatalf("Servererror:%v",err)}}else{iferr:=server.ServeStdio(s);err!=nil{log.Fatalf("Servererror:%v",err)}}// 使用 SSE 初始化 MCP clientctx := context.Background()cli, _ := client.NewSSEMCPClient("http://localhost:8080/sse")cli.Start(ctx)defer cli.Close()
// 发送 init requestinitRequest := mcp.InitializeRequest{}initRequest.Params.ProtocolVersion = mcp.LATEST_PROTOCOL_VERSIONinitRequest.Params.ClientInfo = mcp.Implementation{ Name: "current-time", Version:"1.0.0",}cli.Initialize(ctx, initRequest)
// 查询 MCP Server 提供的 toolstools, _ := eino_mcp.GetTools(ctx, &eino_mcp.Config{Cli: cli})
// 将 MCP Tools 与 Eino 绑定llm, _ := openai.NewChatModel(context.Background(), &openai.ChatModelConfig{ BaseURL: os.Getenv("OPENAI_API_URL"), Model: os.Getenv("MODEL_ID"), APIKey: os.Getenv("OPENAI_API_KEY"),})agent, _ := react.NewAgent(ctx, &react.AgentConfig{ Model: llm, ToolsConfig: compose.ToolsNodeConfig{Tools: tools},})run(agent)
- 先启动 mcp server,默认监听 8080 端口
$goruntools/mcp-time/main.go--transportsse2025/03/2318:55:03SSEserverlisteningonlocalhost:8080 $ go run main.go
欢迎使用 einowithmcp demo.
请输入操作: 北京当前时间北京当前时间是2025-03-2318:56:59.061851+0800CST。请注意,这可能是基于假设日期的回答,实际时间会有所不同。
请输入操作: 芝加哥当前时间芝加哥的当前时间是2025年3月23日05:57:13(CDT)。
请输入操作: tell me shanghaicurrenttimeThecurrenttimeinShanghaiis2025-03-2318:57:26.192551+0800CST.
请输入操作: bye欢迎再次使用,再见。
Eino 动作真是快,从社区用户提出 mcp 需求到最终实现,短短几周,主打一个听劝。 Eino 有了将 remote MCP Server 的 Tools 转化为自己可用的 ToolNode,用于统一编排能力后,云端构建智能体时,可以考虑将一些复用的公共能力通过 MCP Server 方式统一管控起来,而不需要 Eino 每个 Agent 再去真正实现,有了 MCP Server 更方便企业各个部门数据的开放与细粒度管控。 |