@@ -77,18 +77,18 @@ func main() {
7777}
7878
7979func printUsage () {
80- fmt .Println ("MCP Registry Publisher Tool" )
81- fmt .Println ()
82- fmt .Println ("Usage:" )
83- fmt .Println (" mcp-publisher publish [flags] Publish a server.json file to the registry" )
84- fmt .Println (" mcp-publisher create [flags] Create a new server.json file" )
85- fmt .Println ()
86- fmt .Println ("Use 'mcp-publisher <command> --help' for more information about a command." )
80+ log .Println ("MCP Registry Publisher Tool" )
81+ log .Println ()
82+ log .Println ("Usage:" )
83+ log .Println (" mcp-publisher publish [flags] Publish a server.json file to the registry" )
84+ log .Println (" mcp-publisher create [flags] Create a new server.json file" )
85+ log .Println ()
86+ log .Println ("Use 'mcp-publisher <command> --help' for more information about a command." )
8787}
8888
8989func publishCommand () {
9090 publishFlags := flag .NewFlagSet ("publish" , flag .ExitOnError )
91-
91+
9292 var registryURL string
9393 var mcpFilePath string
9494 var forceLogin bool
@@ -100,7 +100,9 @@ func publishCommand() {
100100 publishFlags .BoolVar (& forceLogin , "login" , false , "force a new login even if a token exists" )
101101 publishFlags .StringVar (& authMethod , "auth-method" , "github-oauth" , "authentication method to use (default: github-oauth)" )
102102
103- publishFlags .Parse (os .Args [2 :])
103+ if err := publishFlags .Parse (os .Args [2 :]); err != nil {
104+ log .Fatalf ("Error parsing flags: %v" , err )
105+ }
104106
105107 if registryURL == "" || mcpFilePath == "" {
106108 publishFlags .Usage ()
@@ -153,22 +155,22 @@ func publishCommand() {
153155
154156func createCommand () {
155157 createFlags := flag .NewFlagSet ("create" , flag .ExitOnError )
156-
158+
157159 // Basic server information flags
158160 var name string
159161 var description string
160162 var version string
161163 var repoURL string
162164 var repoSource string
163165 var output string
164-
166+
165167 // Package information flags
166168 var registryName string
167169 var packageName string
168170 var packageVersion string
169171 var runtimeHint string
170172 var execute string
171-
173+
172174 // Repeatable flags
173175 var envVars []string
174176 var packageArgs []string
@@ -183,27 +185,29 @@ func createCommand() {
183185 createFlags .StringVar (& repoSource , "repo-source" , "github" , "Repository source" )
184186 createFlags .StringVar (& output , "output" , "server.json" , "Output file path" )
185187 createFlags .StringVar (& output , "o" , "server.json" , "Output file path (shorthand)" )
186-
188+
187189 createFlags .StringVar (& registryName , "registry" , "npm" , "Package registry name" )
188190 createFlags .StringVar (& packageName , "package-name" , "" , "Package name (defaults to server name)" )
189191 createFlags .StringVar (& packageVersion , "package-version" , "" , "Package version (defaults to server version)" )
190192 createFlags .StringVar (& runtimeHint , "runtime-hint" , "" , "Runtime hint (e.g., docker)" )
191193 createFlags .StringVar (& execute , "execute" , "" , "Command to execute the server" )
192194 createFlags .StringVar (& execute , "e" , "" , "Command to execute the server (shorthand)" )
193-
195+
194196 // Custom flag for environment variables
195197 createFlags .Func ("env-var" , "Environment variable in format NAME:DESCRIPTION (can be repeated)" , func (value string ) error {
196198 envVars = append (envVars , value )
197199 return nil
198200 })
199-
201+
200202 // Custom flag for package arguments
201203 createFlags .Func ("package-arg" , "Package argument in format VALUE:DESCRIPTION (can be repeated)" , func (value string ) error {
202204 packageArgs = append (packageArgs , value )
203205 return nil
204206 })
205207
206- createFlags .Parse (os .Args [2 :])
208+ if err := createFlags .Parse (os .Args [2 :]); err != nil {
209+ log .Fatalf ("Error parsing flags: %v" , err )
210+ }
207211
208212 // Validate required flags
209213 if name == "" {
@@ -225,7 +229,8 @@ func createCommand() {
225229 }
226230
227231 // Create server structure
228- server := createServerStructure (name , description , version , repoURL , repoSource , registryName , packageName , packageVersion , runtimeHint , execute , envVars , packageArgs )
232+ server := createServerStructure (name , description , version , repoURL , repoSource ,
233+ registryName , packageName , packageVersion , runtimeHint , execute , envVars , packageArgs )
229234
230235 // Convert to JSON
231236 jsonData , err := json .MarshalIndent (server , "" , " " )
@@ -234,7 +239,7 @@ func createCommand() {
234239 }
235240
236241 // Write to file
237- err = os .WriteFile (output , jsonData , 0644 )
242+ err = os .WriteFile (output , jsonData , 0600 )
238243 if err != nil {
239244 log .Fatalf ("Error writing file: %v" , err )
240245 }
@@ -300,7 +305,8 @@ func publishToRegistry(registryURL string, mcpData []byte, token string) error {
300305 return nil
301306}
302307
303- func createServerStructure (name , description , version , repoURL , repoSource , registryName , packageName , packageVersion , runtimeHint , execute string , envVars []string , packageArgs []string ) ServerJSON {
308+ func createServerStructure (name , description , version , repoURL , repoSource , registryName ,
309+ packageName , packageVersion , runtimeHint , execute string , envVars []string , packageArgs []string ) ServerJSON {
304310 // Parse environment variables
305311 var environmentVariables []EnvironmentVariable
306312 for _ , envVar := range envVars {
@@ -328,7 +334,7 @@ func createServerStructure(name, description, version, repoURL, repoSource, regi
328334 if len (parts ) == 2 {
329335 description = parts [1 ]
330336 }
331-
337+
332338 packageArguments = append (packageArguments , RuntimeArgument {
333339 Description : description ,
334340 IsRequired : true , // Package arguments are typically required
@@ -349,15 +355,16 @@ func createServerStructure(name, description, version, repoURL, repoSource, regi
349355 // Skip the first part (command) and add each argument as a runtime argument
350356 for i , arg := range parts [1 :] {
351357 description := fmt .Sprintf ("Runtime argument %d" , i + 1 )
352-
358+
353359 // Try to provide better descriptions based on common patterns
354- if strings .HasPrefix (arg , "--" ) {
360+ switch {
361+ case strings .HasPrefix (arg , "--" ):
355362 description = fmt .Sprintf ("Command line flag: %s" , arg )
356- } else if strings .HasPrefix (arg , "-" ) && len (arg ) == 2 {
363+ case strings .HasPrefix (arg , "-" ) && len (arg ) == 2 :
357364 description = fmt .Sprintf ("Command line option: %s" , arg )
358- } else if strings .Contains (arg , "=" ) {
365+ case strings .Contains (arg , "=" ):
359366 description = fmt .Sprintf ("Configuration parameter: %s" , arg )
360- } else if i > 0 && strings .HasPrefix (parts [i ], "-" ) {
367+ case i > 0 && strings .HasPrefix (parts [i ], "-" ):
361368 description = fmt .Sprintf ("Value for %s" , parts [i ])
362369 }
363370
@@ -410,13 +417,14 @@ func smartSplit(command string) []string {
410417 for _ , char := range command {
411418 switch {
412419 case char == '"' || char == '\'' :
413- if ! inQuotes {
420+ switch {
421+ case ! inQuotes :
414422 inQuotes = true
415423 quoteChar = char
416- } else if char == quoteChar {
424+ case char == quoteChar :
417425 inQuotes = false
418426 quoteChar = 0
419- } else {
427+ default :
420428 current .WriteRune (char )
421429 }
422430 case char == ' ' && ! inQuotes :
0 commit comments