generated from rmcguire/go-server-with-otel
implement econet exporter
This commit is contained in:
@@ -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,
|
||||
},
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user