55 "context"
66 "encoding/json"
77 "errors"
8+ "flag"
89 "fmt"
910 "io"
1011 "net/http"
@@ -17,14 +18,21 @@ import (
1718)
1819
1920func PublishCommand (args []string ) error {
21+ publishFlags := flag .NewFlagSet ("publish" , flag .ExitOnError )
22+ serverFile := publishFlags .String ("file" , "server.json" , "Path to server.json (default: ./server.json)" )
23+ registryURLFlag := publishFlags .String ("registry" , "" , "Registry URL override" )
24+ dryRun := publishFlags .Bool ("dry-run" , false , "Validate without publishing" )
25+ if err := publishFlags .Parse (args ); err != nil {
26+ return fmt .Errorf ("failed to parse flags: %w" , err )
27+ }
28+
2029 // Check for server.json file
21- serverFile := "server.json"
2230 if len (args ) > 0 && ! strings .HasPrefix (args [0 ], "-" ) {
23- serverFile = args [0 ]
31+ serverFile = & args [0 ]
2432 }
2533
2634 // Read server.json
27- serverData , err := os .ReadFile (serverFile )
35+ serverData , err := os .ReadFile (* serverFile )
2836 if err != nil {
2937 if os .IsNotExist (err ) {
3038 return fmt .Errorf ("server.json not found. Run 'mcp-publisher init' to create one" )
@@ -71,10 +79,17 @@ Migrate to the current schema format for new servers.
7179
7280 token := tokenInfo ["token" ]
7381 registryURL := tokenInfo ["registry" ]
82+ if * registryURLFlag != "" {
83+ registryURL = * registryURLFlag
84+ }
7485 if registryURL == "" {
7586 registryURL = DefaultRegistryURL
7687 }
7788
89+ if * dryRun {
90+ return nil
91+ }
92+
7893 // Publish to registry
7994 _ , _ = fmt .Fprintf (os .Stdout , "Publishing to %s...\n " , registryURL )
8095 response , err := publishToRegistry (registryURL , serverData , token )
0 commit comments