main.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "os"
  6. "github.com/mark3labs/mcp-go/server"
  7. "fwh-toolbox-server/cache"
  8. "fwh-toolbox-server/config"
  9. "fwh-toolbox-server/database"
  10. "fwh-toolbox-server/logger"
  11. "fwh-toolbox-server/repositories"
  12. "fwh-toolbox-server/utils/filestore"
  13. "fwh-toolbox-server/cmd/mcp/tools"
  14. "fwh-toolbox-server/cmd/mcp/tools/storage"
  15. )
  16. const (
  17. serverName = "fwh-tools"
  18. serverVersion = "2.0.0"
  19. )
  20. func main() {
  21. // 加载配置(复用现有 config)
  22. cfg, err := config.LoadConfig()
  23. if err != nil {
  24. log.Fatalf("加载配置失败: %v", err)
  25. }
  26. // 初始化 logger
  27. logger.Init(cfg.App.AppEnv)
  28. defer logger.Log.Sync()
  29. // 初始化基础设施(与 HTTP Server 相同)
  30. if err := database.Init(&cfg.App); err != nil {
  31. log.Fatalf("数据库初始化失败: %v", err)
  32. }
  33. cache.Init(cfg.App.RedisAddr)
  34. repositories.PlaneWebHttpInit(&cfg.PlaneWebApi)
  35. // 初始化 MCP FileStore
  36. mcpFS := filestore.NewFileStore("mcp")
  37. storage.InitFileStore(mcpFS)
  38. // 创建 MCP Server
  39. s := server.NewMCPServer(
  40. serverName,
  41. serverVersion,
  42. server.WithToolCapabilities(false),
  43. server.WithRecovery(),
  44. server.WithInstructions(serverInstructions),
  45. )
  46. // 注册所有 Tools(唯一入口)
  47. tools.RegisterAll(s)
  48. // 启动 stdio 通信
  49. fmt.Fprintln(os.Stderr, "[fwh-mcp-server] started (stdio) v"+serverVersion)
  50. if err := server.ServeStdio(s); err != nil {
  51. log.Fatalf("[fwh-mcp-server] error: %v", err)
  52. }
  53. }
  54. // serverInstructions MCP Server 使用说明,帮助 AI 理解工具分类和使用优先级
  55. const serverInstructions = `FranklinWH 工具箱 MCP Server — 内部工具平台的 AI 接口层。
  56. ## 工具分类(按访问层级)
  57. ### service_* — 业务逻辑层(优先使用)
  58. 调用后端 Service 层函数,包含业务校验、数据聚合和格式化。
  59. 适用场景:常规的业务数据查询和操作。
  60. - service_site_*: 站点设备管理(查详情、搜索、功率流)
  61. - service_sim_*: SIM 卡管理(查详情、搜索)
  62. - service_monitor_*: 运维监控(告警统计、停机统计)
  63. - service_feedback_*: 反馈协作(创建/查询 Plane Issue)
  64. ### data_* — 数据直查层(灵活查询)
  65. 直接读取数据库或缓存,跳过业务逻辑层。仅限只读操作。
  66. 适用场景:当 service 层工具无法满足查询需求时(自定义 filter、聚合统计等)。
  67. - data_mongo_*: MongoDB 集合查询
  68. - data_redis_*: Redis 缓存查看
  69. ### storage_* — 对象存储层
  70. 读取 MinIO 对象存储或用户上传的文件。仅限只读操作。
  71. - storage_file_*: 用户上传文件读取
  72. - storage_minio_*: MinIO bucket 对象浏览和读取
  73. ### util_* — 辅助工具
  74. 纯函数工具,不涉及数据持久化。
  75. - util_parse_sn: 解析设备 SN 序列号含义
  76. ## 使用原则
  77. 1. 优先使用 service_* 工具,它们包含完整的业务逻辑
  78. 2. 仅当 service 层无法满足时才使用 data_* 直查
  79. 3. 所有 data_* 和 storage_* 工具仅支持只读操作
  80. 4. 查询 MongoDB 时注意 collection 白名单限制`