@@ -17,6 +17,7 @@ import (
1717 "github.com/containers/kubernetes-mcp-server/pkg/config"
1818 internalk8s "github.com/containers/kubernetes-mcp-server/pkg/kubernetes"
1919 "github.com/containers/kubernetes-mcp-server/pkg/output"
20+ "github.com/containers/kubernetes-mcp-server/pkg/promptsets"
2021 "github.com/containers/kubernetes-mcp-server/pkg/toolsets"
2122 "github.com/containers/kubernetes-mcp-server/pkg/version"
2223)
@@ -29,6 +30,7 @@ type Configuration struct {
2930 * config.StaticConfig
3031 listOutput output.Output
3132 toolsets []api.Toolset
33+ promptsets []api.PromptSet
3234}
3335
3436func (c * Configuration ) Toolsets () []api.Toolset {
@@ -40,6 +42,23 @@ func (c *Configuration) Toolsets() []api.Toolset {
4042 return c .toolsets
4143}
4244
45+ func (c * Configuration ) Promptsets () []api.PromptSet {
46+ if c .promptsets == nil {
47+ // Default to core if no promptsets configured
48+ promptsetNames := c .StaticConfig .Promptsets
49+ if len (promptsetNames ) == 0 {
50+ promptsetNames = []string {"core" }
51+ }
52+ for _ , promptset := range promptsetNames {
53+ ps := promptsets .PromptSetFromString (promptset )
54+ if ps != nil {
55+ c .promptsets = append (c .promptsets , ps )
56+ }
57+ }
58+ }
59+ return c .promptsets
60+ }
61+
4362func (c * Configuration ) ListOutput () output.Output {
4463 if c .listOutput == nil {
4564 c .listOutput = output .FromString (c .StaticConfig .ListOutput )
@@ -148,11 +167,37 @@ func (s *Server) reloadKubernetesClusterProvider() error {
148167
149168 s .server .SetTools (m3labsServerTools ... )
150169
170+ // Register prompts
171+ if err := s .registerPrompts (p ); err != nil {
172+ klog .Warningf ("Failed to register prompts: %v" , err )
173+ // Don't fail the whole reload if prompts fail
174+ }
175+
151176 // start new watch
152177 s .p .WatchTargets (s .reloadKubernetesClusterProvider )
153178 return nil
154179}
155180
181+ // registerPrompts loads and registers all prompts with the MCP server
182+ func (s * Server ) registerPrompts (p internalk8s.Provider ) error {
183+ allPrompts := make ([]api.ServerPrompt , 0 )
184+ for _ , ps := range s .configuration .Promptsets () {
185+ prompts := ps .GetPrompts (p )
186+ allPrompts = append (allPrompts , prompts ... )
187+ klog .V (5 ).Infof ("Loaded %d prompts from promptset '%s'" , len (prompts ), ps .GetName ())
188+ }
189+
190+ m3labsPrompts , err := ServerPromptToM3LabsPrompt (allPrompts )
191+ if err != nil {
192+ return fmt .Errorf ("failed to convert prompts: %v" , err )
193+ }
194+
195+ s .server .SetPrompts (m3labsPrompts ... )
196+ klog .V (3 ).Infof ("Registered %d prompts" , len (m3labsPrompts ))
197+
198+ return nil
199+ }
200+
156201func (s * Server ) ServeStdio () error {
157202 return server .ServeStdio (s .server )
158203}
0 commit comments