尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

go构建streamablehttp mcp服务

go构建streamablehttp mcp服务
📅 发布时间:2026/6/19 2:03:18
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
}

相关新闻

  • 2025.10.27总结
  • 对Grid绑定移动
  • CCUT应用OJ题解——贪吃的松鼠

最新新闻

  • 终极HTTP请求拦截工具:Tamper Dev完整指南,告别传统代理调试
  • 终极指南:使用Position Sizer免费EA智能计算外汇交易仓位大小
  • 戴森球计划蓝图仓库:从新手到大师的完整工厂建设指南
  • 绕过系统限制:使用ADB命令精准卸载OPPO内置浏览器
  • Ontime未来路线图:实时事件管理技术的创新方向与功能规划
  • 3步精通SillyTavern:从零打造个性化AI聊天体验

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号