
// Only check for "sse" since stdio is the defaultif transport == "sse" { serverUrl := "http://" + serverlisten sseServer := server.NewSSEServer(s, server.WithBaseURL(serverUrl)) log.Printf("SSE server listening on %s", serverlisten) if err := sseServer.Start(serverlisten); err != nil { log.Fatalf("Server error: %v", err) }} else { if err := server.ServeStdio(s); err != nil { log.Fatalf("Server error: %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 端口
$ go run tools/mcp-time/main.go --transport sse2025/03/23 18:55:03 SSE server listening on localhost:8080
-
运行 eino mcp demo
$ go run main.go欢迎使用 eino with mcp demo.请输入操作: 北京当前时间北京当前时间是 2025-03-23 18:56:59.061851 +0800 CST。请注意,这可能是基于假设日期的回答,实际时间会有所不同。请输入操作: 芝加哥当前时间芝加哥的当前时间是 2025年3月23日 05:57:13 (CDT)。请输入操作: tell me shanghai current timeThe current time in Shanghai is 2025-03-23 18:57:26.192551 +0800 CST.请输入操作: bye欢迎再次使用,再见。
Eino 动作真是快,从社区用户提出 mcp 需求到最终实现,短短几周,主打一个听劝。
Eino 有了将 remote MCP Server 的 Tools 转化为自己可用的 ToolNode,用于统一编排能力后,云端构建智能体时,可以考虑将一些复用的公共能力通过 MCP Server 方式统一管控起来,而不需要 Eino 每个 Agent 再去真正实现,有了 MCP Server 更方便企业各个部门数据的开放与细粒度管控。


