mirror of
https://github.com/xpzouying/xiaohongshu-mcp.git
synced 2026-08-28 17:45:51 +08:00
53ea832773
- 添加官方 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
|
|
}
|