- 添加官方 SDK 依赖 github.com/modelcontextprotocol/go-sdk v0.7.0 - 新增 mcp_server.go 使用官方 SDK 注册 8 个 MCP 工具 - 删除自实现的 streamable_http.go(约 400 行) - 更新 routes.go 使用 mcp.NewStreamableHTTPHandler - 优化服务器优雅关闭逻辑(5秒超时 + 警告日志) - 清理 types.go 中的 JSON-RPC 相关类型 🤖 Generated with [Claude Code](https://claude.ai/code) Co-authored-by: Claude <noreply@anthropic.com>
72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
package main
|
||
|
||
import (
|
||
"context"
|
||
"net/http"
|
||
"os"
|
||
"os/signal"
|
||
"syscall"
|
||
"time"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
"github.com/modelcontextprotocol/go-sdk/mcp"
|
||
"github.com/sirupsen/logrus"
|
||
)
|
||
|
||
// AppServer 应用服务器结构体,封装所有服务和处理器
|
||
type AppServer struct {
|
||
xiaohongshuService *XiaohongshuService
|
||
mcpServer *mcp.Server
|
||
router *gin.Engine
|
||
httpServer *http.Server
|
||
}
|
||
|
||
// NewAppServer 创建新的应用服务器实例
|
||
func NewAppServer(xiaohongshuService *XiaohongshuService) *AppServer {
|
||
appServer := &AppServer{
|
||
xiaohongshuService: xiaohongshuService,
|
||
}
|
||
|
||
// 初始化 MCP Server(需要在创建 appServer 之后,因为工具注册需要访问 appServer)
|
||
appServer.mcpServer = InitMCPServer(appServer)
|
||
|
||
return appServer
|
||
}
|
||
|
||
// Start 启动服务器
|
||
func (s *AppServer) Start(port string) error {
|
||
s.router = setupRoutes(s)
|
||
|
||
s.httpServer = &http.Server{
|
||
Addr: port,
|
||
Handler: s.router,
|
||
}
|
||
|
||
// 启动服务器的 goroutine
|
||
go func() {
|
||
logrus.Infof("启动 HTTP 服务器: %s", port)
|
||
if err := s.httpServer.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
||
logrus.Errorf("服务器启动失败: %v", err)
|
||
os.Exit(1)
|
||
}
|
||
}()
|
||
|
||
// 等待中断信号
|
||
quit := make(chan os.Signal, 1)
|
||
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
|
||
<-quit
|
||
|
||
logrus.Infof("正在关闭服务器...")
|
||
|
||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||
defer cancel()
|
||
|
||
if err := s.httpServer.Shutdown(ctx); err != nil {
|
||
logrus.Warnf("等待连接关闭超时,强制退出: %v", err)
|
||
} else {
|
||
logrus.Infof("服务器已优雅关闭")
|
||
}
|
||
|
||
return nil
|
||
}
|