server.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package mcp
  2. import (
  3. "context"
  4. "sync"
  5. "github.com/gin-gonic/gin"
  6. "github.com/mark3labs/mcp-go/mcp"
  7. "github.com/mark3labs/mcp-go/server"
  8. )
  9. var (
  10. mcpServer = server.NewMCPServer(
  11. "Nginx",
  12. "1.0.0",
  13. server.WithResourceCapabilities(true, true),
  14. server.WithLogging(),
  15. server.WithRecovery(),
  16. )
  17. sseServer = server.NewSSEServer(
  18. mcpServer,
  19. server.WithSSEEndpoint("/mcp"),
  20. server.WithMessageEndpoint("/mcp_message"),
  21. )
  22. )
  23. const (
  24. MimeTypeJSON = "application/json"
  25. MimeTypeText = "text/plain"
  26. )
  27. type Resource struct {
  28. Resource mcp.Resource
  29. Handler func(ctx context.Context, request mcp.ReadResourceRequest) ([]mcp.ResourceContents, error)
  30. }
  31. type Tool struct {
  32. Tool mcp.Tool
  33. Handler func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error)
  34. }
  35. var (
  36. tools = []Tool{}
  37. toolMutex sync.Mutex
  38. )
  39. func AddTool(tool mcp.Tool, handler func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error)) {
  40. toolMutex.Lock()
  41. defer toolMutex.Unlock()
  42. tools = append(tools, Tool{Tool: tool, Handler: handler})
  43. }
  44. func ServeHTTP(c *gin.Context) {
  45. sseServer.ServeHTTP(c.Writer, c.Request)
  46. }
  47. func Init() {
  48. for _, tool := range tools {
  49. mcpServer.AddTool(tool.Tool, tool.Handler)
  50. }
  51. }