/* Package econetmcpgen exposes an MCP server, mounted as an HTTP handler at /api/mcp, whose tools are generated from the EconetService proto by protoc-gen-go-mcp and forwarded to the in-process gRPC server. It is the generated-code counterpart to econetmcp (which hand-writes a single list_water_heaters tool). Both expose an identical package API, so switching between them is a one-line import change in pkg/econet/econet.go. */ package econetmcpgen import ( "context" "net/http" "gitea.libretechconsulting.com/rmcguire/go-app/pkg/srv/http/opts" "github.com/modelcontextprotocol/go-sdk/mcp" "github.com/redpanda-data/protoc-gen-go-mcp/pkg/runtime/gosdk" "github.com/rs/zerolog" v1alpha1mcp "gitea.libretechconsulting.com/rmcguire/econet-exporter/api/econet/v1alpha1/v1alpha1mcp" "gitea.libretechconsulting.com/rmcguire/econet-exporter/pkg/config" "gitea.libretechconsulting.com/rmcguire/econet-exporter/pkg/econet/econetgrpc" ) var EconetMCPImpl = &mcp.Implementation{ Name: "Econet MCP Server", Title: "Econet Exporter MCP", } type EconetMCPServer struct { ctx context.Context cfg *config.ServiceConfig log *zerolog.Logger server *mcp.Server econetGRPC *econetgrpc.EconetGRPCServer } func NewEconetMCPServer(ctx context.Context, cfg *config.ServiceConfig, grpc *econetgrpc.EconetGRPCServer, ) *EconetMCPServer { return &EconetMCPServer{ ctx: ctx, cfg: cfg, log: zerolog.Ctx(ctx), econetGRPC: grpc, server: mcp.NewServer(EconetMCPImpl, &mcp.ServerOptions{ Instructions: "Use these tools to inspect Rheem EcoNet water heaters: " + "current mode, setpoint, hot water availability, connectivity, and alerts.", HasTools: true, }), } } func (m *EconetMCPServer) GetHandlers() []opts.HTTPHandler { // Register the generated tools against the in-process gRPC server via the // go-sdk adapter, so the generated code shares our configured *mcp.Server. v1alpha1mcp.RegisterEconetServiceHandler(gosdk.Wrap(m.server), m.econetGRPC) handler := mcp.NewStreamableHTTPHandler(func(*http.Request) *mcp.Server { return m.server }, &mcp.StreamableHTTPOptions{}) m.log.Debug().Msg("Econet MCP tools ready (generated)") return []opts.HTTPHandler{ { Prefix: "/api/mcp", Handler: handler, }, } }