@@ -18,6 +18,11 @@ import (
1818const (
1919 DefaultRegistryURL = "https://registry.modelcontextprotocol.io"
2020 TokenFileName = ".mcp_publisher_token" //nolint:gosec // Not a credential, just a filename
21+ MethodGitHub = "github"
22+ MethodGitHubOIDC = "github-oidc"
23+ MethodDNS = "dns"
24+ MethodHTTP = "http"
25+ MethodNone = "none"
2126)
2227
2328type CryptoAlgorithm auth.CryptoAlgorithm
@@ -31,6 +36,7 @@ type LoginFlags struct {
3136 KvVault string
3237 KvKeyName string
3338 KmsResource string
39+ Token Token
3440 CryptoAlgorithm CryptoAlgorithm
3541 SignerType SignerType
3642 ArgOffset int
@@ -56,6 +62,8 @@ func (c *CryptoAlgorithm) Set(v string) error {
5662 return fmt .Errorf ("invalid algorithm: %q (allowed: ed25519, ecdsap384)" , v )
5763}
5864
65+ type Token string
66+
5967func parseLoginFlags (method string , args []string ) (LoginFlags , error ) {
6068 var flags LoginFlags
6169 loginFlags := flag .NewFlagSet ("login" , flag .ExitOnError )
@@ -64,6 +72,12 @@ func parseLoginFlags(method string, args []string) (LoginFlags, error) {
6472 flags .ArgOffset = 1
6573 loginFlags .StringVar (& flags .RegistryURL , "registry" , DefaultRegistryURL , "Registry URL" )
6674
75+ // Add --token flag for GitHub authentication
76+ var token string
77+ if method == MethodGitHub {
78+ loginFlags .StringVar (& token , "token" , "" , "GitHub Personal Access Token" )
79+ }
80+
6781 if method == "dns" || method == "http" {
6882 loginFlags .StringVar (& flags .Domain , "domain" , "" , "Domain name" )
6983 if len (args ) > 1 {
@@ -90,6 +104,11 @@ func parseLoginFlags(method string, args []string) (LoginFlags, error) {
90104 flags .RegistryURL = strings .TrimRight (flags .RegistryURL , "/" )
91105 }
92106
107+ // Store the token in flags if it was provided
108+ if method == MethodGitHub {
109+ flags .Token = Token (token )
110+ }
111+
93112 return flags , err
94113}
95114
@@ -108,23 +127,23 @@ func createSigner(flags LoginFlags) (auth.Signer, error) {
108127 }
109128}
110129
111- func createAuthProvider (method , registryURL , domain string , signer auth.Signer ) (auth.Provider , error ) {
130+ func createAuthProvider (method , registryURL , domain string , token Token , signer auth.Signer ) (auth.Provider , error ) {
112131 switch method {
113- case "github" :
114- return auth .NewGitHubATProvider (true , registryURL ), nil
115- case "github-oidc" :
132+ case MethodGitHub :
133+ return auth .NewGitHubATProvider (true , registryURL , string ( token ) ), nil
134+ case MethodGitHubOIDC :
116135 return auth .NewGitHubOIDCProvider (registryURL ), nil
117- case "dns" :
136+ case MethodDNS :
118137 if domain == "" {
119138 return nil , errors .New ("dns authentication requires --domain" )
120139 }
121140 return auth .NewDNSProvider (registryURL , domain , & signer ), nil
122- case "http" :
141+ case MethodHTTP :
123142 if domain == "" {
124143 return nil , errors .New ("http authentication requires --domain" )
125144 }
126145 return auth .NewHTTPProvider (registryURL , domain , & signer ), nil
127- case "none" :
146+ case MethodNone :
128147 return auth .NewNoneProvider (registryURL ), nil
129148 default :
130149 return nil , fmt .Errorf ("unknown authentication method: %s\n For a list of available methods, run: mcp-publisher login" , method )
@@ -191,11 +210,10 @@ Examples:
191210 }
192211 }
193212
194- authProvider , err := createAuthProvider (method , flags .RegistryURL , flags .Domain , signer )
213+ authProvider , err := createAuthProvider (method , flags .RegistryURL , flags .Domain , flags . Token , signer )
195214 if err != nil {
196215 return err
197216 }
198-
199217 ctx := context .Background ()
200218 _ , _ = fmt .Fprintf (os .Stdout , "Logging in with %s...\n " , method )
201219
0 commit comments