implement econet exporter
Build and Publish / go-binaries (push) Has been skipped
Build and Publish / container-images (push) Has been skipped
Build and Publish / helm-release (push) Successful in 19s
Build and Publish / check-chart (push) Successful in 52s

This commit is contained in:
2026-07-04 17:22:31 -04:00
parent 8198e8cfee
commit b2ec72352a
44 changed files with 2226 additions and 1281 deletions
+64
View File
@@ -0,0 +1,64 @@
/*
Package econetmcp exposes an MCP server, mounted as an HTTP handler at
/api/mcp, whose tools wrap the EconetService gRPC API.
*/
package econetmcp
import (
"context"
"net/http"
"gitea.libretechconsulting.com/rmcguire/go-app/pkg/srv/http/opts"
"github.com/modelcontextprotocol/go-sdk/mcp"
"github.com/rs/zerolog"
"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 {
// NOTE: Add other tools here
m.addListDevicesTool()
handler := mcp.NewStreamableHTTPHandler(func(*http.Request) *mcp.Server {
return m.server
}, &mcp.StreamableHTTPOptions{})
m.log.Debug().Msg("Econet MCP tools ready")
return []opts.HTTPHandler{
{
Prefix: "/api/mcp",
Handler: handler,
},
}
}