@@ -14,6 +14,7 @@ import (
1414 "syscall"
1515
1616 "github.com/hashicorp/terraform-mcp-server/pkg/client"
17+ "github.com/hashicorp/terraform-mcp-server/pkg/toolsets"
1718 "github.com/hashicorp/terraform-mcp-server/version"
1819
1920 "github.com/mark3labs/mcp-go/server"
@@ -24,27 +25,27 @@ import (
2425//go:embed instructions.md
2526var instructions string
2627
27- func runHTTPServer (logger * log.Logger , host string , port string , endpointPath string ) error {
28+ func runHTTPServer (logger * log.Logger , host string , port string , endpointPath string , enabledToolsets [] string ) error {
2829 ctx , stop := signal .NotifyContext (context .Background (), os .Interrupt , syscall .SIGTERM )
2930 defer stop ()
3031
31- hcServer := NewServer (version .Version , logger )
32- registerToolsAndResources (hcServer , logger )
32+ hcServer := NewServer (version .Version , logger , enabledToolsets )
33+ registerToolsAndResources (hcServer , logger , enabledToolsets )
3334
3435 return streamableHTTPServerInit (ctx , hcServer , logger , host , port , endpointPath )
3536}
3637
37- func runStdioServer (logger * log.Logger ) error {
38+ func runStdioServer (logger * log.Logger , enabledToolsets [] string ) error {
3839 ctx , stop := signal .NotifyContext (context .Background (), os .Interrupt , syscall .SIGTERM )
3940 defer stop ()
4041
41- hcServer := NewServer (version .Version , logger )
42- registerToolsAndResources (hcServer , logger )
42+ hcServer := NewServer (version .Version , logger , enabledToolsets )
43+ registerToolsAndResources (hcServer , logger , enabledToolsets )
4344
4445 return serverInit (ctx , hcServer , logger )
4546}
4647
47- func NewServer (version string , logger * log.Logger , opts ... server.ServerOption ) * server.MCPServer {
48+ func NewServer (version string , logger * log.Logger , enabledToolsets [] string , opts ... server.ServerOption ) * server.MCPServer {
4849 // Create rate limiting middleware with environment-based configuration
4950 rateLimitConfig := client .LoadRateLimitConfigFromEnv ()
5051 rateLimitMiddleware := client .NewRateLimitMiddleware (rateLimitConfig , logger )
@@ -80,6 +81,33 @@ func NewServer(version string, logger *log.Logger, opts ...server.ServerOption)
8081 return s
8182}
8283
84+ // parseToolsets parses and validates the toolsets flag value
85+ func parseToolsets (toolsetsFlag string , logger * log.Logger ) []string {
86+ rawToolsets := strings .Split (toolsetsFlag , "," )
87+
88+ cleaned , invalid := toolsets .CleanToolsets (rawToolsets )
89+ if len (invalid ) > 0 {
90+ logger .Warnf ("Invalid toolsets ignored: %v" , invalid )
91+ }
92+
93+ expanded := toolsets .ExpandDefaultToolset (cleaned )
94+
95+ logger .Infof ("Enabled toolsets: %v" , expanded )
96+ return expanded
97+ }
98+
99+ func getToolsetsFromCmd (cmd * cobra.Command , logger * log.Logger ) []string {
100+ toolsetsFlag , err := cmd .Flags ().GetString ("toolsets" )
101+ if err != nil {
102+ toolsetsFlag , err = cmd .Root ().PersistentFlags ().GetString ("toolsets" )
103+ if err != nil {
104+ logger .Warnf ("Failed to get toolsets flag, using default: %v" , err )
105+ toolsetsFlag = "default"
106+ }
107+ }
108+ return parseToolsets (toolsetsFlag , logger )
109+ }
110+
83111// runDefaultCommand handles the default behavior when no subcommand is provided
84112func runDefaultCommand (cmd * cobra.Command , _ []string ) {
85113 // Default to stdio mode when no subcommand is provided
@@ -92,7 +120,10 @@ func runDefaultCommand(cmd *cobra.Command, _ []string) {
92120 stdlog .Fatal ("Failed to initialize logger:" , err )
93121 }
94122
95- if err := runStdioServer (logger ); err != nil {
123+ // Get toolsets from the command that was passed in
124+ enabledToolsets := getToolsetsFromCmd (cmd , logger )
125+
126+ if err := runStdioServer (logger , enabledToolsets ); err != nil {
96127 stdlog .Fatal ("failed to run stdio server:" , err )
97128 }
98129}
@@ -110,7 +141,9 @@ func main() {
110141 stdlog .Fatal ("Failed to initialize logger:" , err )
111142 }
112143
113- if err := runHTTPServer (logger , host , port , endpointPath ); err != nil {
144+ enabledToolsets := getToolsetsFromCmd (rootCmd , logger )
145+
146+ if err := runHTTPServer (logger , host , port , endpointPath , enabledToolsets ); err != nil {
114147 stdlog .Fatal ("failed to run StreamableHTTP server:" , err )
115148 }
116149 return
0 commit comments