server.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Package agentmcp 是新 AI 助手使用的业务数据 MCP 服务(fwh-agent-mcp)。
  2. //
  3. // 无用户状态:工具不接收、不推断调用者;由 AgentServer 后台登记为远程 HTTP 服务,经 MCP Gateway 转接给 Agent。
  4. // 设计见 docs/ai-assistant-agentserver/agent-mcp.md。与旧助手的 cmd/mcp 相互独立。
  5. package agentmcp
  6. import (
  7. "fmt"
  8. "github.com/mark3labs/mcp-go/server"
  9. "go.uber.org/zap"
  10. "fwh-toolbox-server/agentmcp/kit"
  11. "fwh-toolbox-server/agentmcp/tools"
  12. )
  13. const (
  14. ServerName = "fwh-agent-mcp"
  15. ServerVersion = "1.0.0"
  16. SetReadOnly = "readonly"
  17. SetOps = "ops"
  18. )
  19. // Tools 返回指定工具集。
  20. func Tools(set string) ([]kit.Registrar, error) {
  21. switch set {
  22. case SetReadOnly:
  23. return tools.ReadOnly(), nil
  24. case SetOps:
  25. return tools.Ops(), nil
  26. }
  27. return nil, fmt.Errorf("未知的工具集:%s(可选 readonly / ops)", set)
  28. }
  29. // NewServer 创建 MCPServer 并注册工具集。
  30. func NewServer(set string, log *zap.Logger, maxConcurrency int) (*server.MCPServer, error) {
  31. list, err := Tools(set)
  32. if err != nil {
  33. return nil, err
  34. }
  35. s := server.NewMCPServer(
  36. ServerName+"-"+set,
  37. ServerVersion,
  38. server.WithToolCapabilities(false),
  39. server.WithInputSchemaValidation(),
  40. server.WithToolHandlerMiddleware(kit.Middleware(log, maxConcurrency)),
  41. )
  42. for _, t := range list {
  43. t.Register(s)
  44. }
  45. return s, nil
  46. }