1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| package mcpserver
import ( "context" "net/http"
"github.com/mark3labs/mcp-go/server"
"{{{ .Package }}}/app" "{{{ .Package }}}/app/util" )
type Server struct { MCP *server.MCPServer `json:"-"` State *app.State `json:"-"` Resources Resources `json:"resources"` ResourceTemplates ResourceTemplates `json:"resourceTemplates"` Prompts Prompts `json:"prompts"` Tools Tools `json:"tools"` HTTP http.Handler `json:"-"` }
func NewServer(ctx context.Context, as *app.State, logger util.Logger) (*Server, error) { t := util.TimerStart() ms := server.NewMCPServer(util.AppName, as.BuildInfo.Version, server.WithResourceCapabilities(true, true), server.WithPromptCapabilities(true), server.WithToolCapabilities(true), ) ret := &Server{MCP: ms} // $PF_SECTION_START(tools)$ // register your custom resources and tools here // $PF_SECTION_END(tools)$ const msg = "MCP server initialized in [%s] with [%d] status resources, [%d] dynamic resources, [%d] tools, and [%d] prompts" logger.Debugf(msg, t.EndString(), len(ret.Resources), len(ret.ResourceTemplates), len(ret.Tools), len(ret.Prompts)) return ret, nil }
func (s *Server) ServeCLI(ctx context.Context) error { return server.ServeStdio(s.MCP) }
func (s *Server) ServeHTTP(ctx context.Context, w http.ResponseWriter, r *http.Request, logger util.Logger) { logger.Debugf("MCP HTTP request: %s %s", r.Method, r.URL.Path) if s.HTTP == nil { s.HTTP = server.NewStreamableHTTPServer(s.MCP) } s.HTTP.ServeHTTP(w, r) }
|