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

go构建streamablehttp mcp服务

package mainimport ("context""fmt""log""os""os/signal""syscall""time""github.com/ThinkInAIXYZ/go-mcp/protocol""github.com/ThinkInAIXYZ/go-mcp/server""github.com/ThinkInAIXYZ/go-mcp/transport"
)type currentTimeReq struct {
}var srv *server.Serverfunc main() {var err errorstateMode := "stateful"addr := "127.0.0.1:8080"log.Printf("start current time mcp server with streamable_http transport, listen %s", addr)opts := transport.WithStreamableHTTPServerTransportOptionStateMode(transport.StateMode(stateMode))t := transport.NewStreamableHTTPServerTransport(addr, opts)srv, err = server.NewServer(t,server.WithServerInfo(protocol.Implementation{Name:    "current-time-v2-server",Version: "1.0.0",}),)if err != nil {log.Fatalf("Failed to create server: %v", err)}tool1, err := protocol.NewTool("current_time", "Get current time with timezone, Asia/Shanghai is default", currentTimeReq{})if err != nil {log.Fatalf("Failed to create tool: %v", err)return}srv.RegisterTool(tool1, currentTime)errCh := make(chan error)go func() {errCh <- srv.Run()}()if err = signalWaiter(errCh); err != nil {log.Fatalf("signal waiter: %v", err)return}ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)defer cancel()if err := srv.Shutdown(ctx); err != nil {log.Fatalf("Shutdown error: %v", err)}
}func currentTime(ctx context.Context, request *protocol.CallToolRequest) (*protocol.CallToolResult, error) {text := fmt.Sprintf(`%s`, time.Now().Format(time.DateTime))return &protocol.CallToolResult{Content: []protocol.Content{&protocol.TextContent{Type: "text",Text: text,},},}, nil
}func signalWaiter(errCh chan error) error {signalToNotify := []os.Signal{syscall.SIGINT, syscall.SIGHUP, syscall.SIGTERM}if signal.Ignored(syscall.SIGHUP) {signalToNotify = []os.Signal{syscall.SIGINT, syscall.SIGTERM}}signals := make(chan os.Signal, 1)signal.Notify(signals, signalToNotify...)select {case sig := <-signals:switch sig {case syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM:log.Printf("Received signal: %s\n", sig)// graceful shutdownreturn nil}case err := <-errCh:return err}return nil
}
http://icebutterfly214.com/news/529/

相关文章:

  • 对Grid绑定移动
  • 10.27博客
  • [Mirror] LinuxMirrors: Linux 一键换源项目
  • 20232309 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 衡量模型生成图片质量的指标
  • 【转载】‘tensorrt.tensorrt.Builder‘ object has no attribute ‘build_cuda_engine‘
  • 20232403 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • WPF datagrid mvvm loaded 100M items,prism.wpf,prism.dryioc
  • sg.绑定键盘事件
  • 壁纸收集
  • Windows11安装miniconda
  • 10.27 CSP-S模拟40 改题记录
  • 详细介绍:Redis多租户资源隔离方案:基于ACL的权限控制与管理
  • 20251027周一日记
  • 学校协同云盘怎么选?2025年10大热门教育网盘推荐与对比
  • GPU集群之间的交互
  • CF1267G Game Relics
  • 102302115方朴第一次作业
  • 解题报告-梦熊 CSP-S2025 模拟赛T2
  • 鄙“站”麻将和算24,刷新后会换
  • 20232422 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 20232404 2025-2026-1 《网络与系统攻防技术》实验三实验报告
  • 「WC2014-紫荆花之恋」题解
  • 谢谢你周医生
  • 来源未知
  • Date 10.27
  • 10.27及动手动脑
  • go包装bing搜索
  • 鼾声识别芯片方案和睡眠产品的应用场景
  • 2025年工程管理软件公司综合推荐榜:助力建筑行业数字化升级