Skip to content

Commit e7bd724

Browse files
authored
Merge pull request #90 from natsirtguy/fix/golangci-lint
fix: resolve all golangci-lint issues
2 parents 543732d + d54bf78 commit e7bd724

7 files changed

Lines changed: 84 additions & 76 deletions

File tree

cmd/mcptools/commands/call.go

Lines changed: 41 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,46 @@ import (
1111
"github.com/spf13/cobra"
1212
)
1313

14+
// parseCallArgs parses command line arguments for the call command.
15+
// Returns entityName, parsedArgs for the command to execute.
16+
func parseCallArgs(cmdArgs []string) (string, []string) {
17+
parsedArgs := []string{}
18+
entityName := ""
19+
i := 0
20+
entityExtracted := false
21+
22+
for i < len(cmdArgs) {
23+
switch {
24+
case (cmdArgs[i] == FlagFormat || cmdArgs[i] == FlagFormatShort) && i+1 < len(cmdArgs):
25+
FormatOption = cmdArgs[i+1]
26+
i += 2
27+
case (cmdArgs[i] == FlagParams || cmdArgs[i] == FlagParamsShort) && i+1 < len(cmdArgs):
28+
ParamsString = cmdArgs[i+1]
29+
i += 2
30+
case (cmdArgs[i] == FlagTransport) && i+1 < len(cmdArgs):
31+
TransportOption = cmdArgs[i+1]
32+
i += 2
33+
case (cmdArgs[i] == FlagAuthUser) && i+1 < len(cmdArgs):
34+
AuthUser = cmdArgs[i+1]
35+
i += 2
36+
case (cmdArgs[i] == FlagAuthHeader) && i+1 < len(cmdArgs):
37+
AuthHeader = cmdArgs[i+1]
38+
i += 2
39+
case !entityExtracted:
40+
entityName = cmdArgs[i]
41+
entityExtracted = true
42+
i++
43+
case cmdArgs[i] == FlagServerLogs:
44+
ShowServerLogs = true
45+
i++
46+
default:
47+
parsedArgs = append(parsedArgs, cmdArgs[i])
48+
i++
49+
}
50+
}
51+
return entityName, parsedArgs
52+
}
53+
1454
// CallCmd creates the call command.
1555
func CallCmd() *cobra.Command {
1656
return &cobra.Command{
@@ -33,42 +73,7 @@ func CallCmd() *cobra.Command {
3373
os.Exit(1)
3474
}
3575

36-
cmdArgs := args
37-
parsedArgs := []string{}
38-
entityName := ""
39-
40-
i := 0
41-
entityExtracted := false
42-
43-
for i < len(cmdArgs) {
44-
switch {
45-
case (cmdArgs[i] == FlagFormat || cmdArgs[i] == FlagFormatShort) && i+1 < len(cmdArgs):
46-
FormatOption = cmdArgs[i+1]
47-
i += 2
48-
case (cmdArgs[i] == FlagParams || cmdArgs[i] == FlagParamsShort) && i+1 < len(cmdArgs):
49-
ParamsString = cmdArgs[i+1]
50-
i += 2
51-
case (cmdArgs[i] == FlagTransport) && i+1 < len(cmdArgs):
52-
TransportOption = cmdArgs[i+1]
53-
i += 2
54-
case (cmdArgs[i] == FlagAuthUser) && i+1 < len(cmdArgs):
55-
AuthUser = cmdArgs[i+1]
56-
i += 2
57-
case (cmdArgs[i] == FlagAuthHeader) && i+1 < len(cmdArgs):
58-
AuthHeader = cmdArgs[i+1]
59-
i += 2
60-
case !entityExtracted:
61-
entityName = cmdArgs[i]
62-
entityExtracted = true
63-
i++
64-
case cmdArgs[i] == FlagServerLogs:
65-
ShowServerLogs = true
66-
i++
67-
default:
68-
parsedArgs = append(parsedArgs, cmdArgs[i])
69-
i++
70-
}
71-
}
76+
entityName, parsedArgs := parseCallArgs(args)
7277

7378
if entityName == "" {
7479
fmt.Fprintln(os.Stderr, "Error: entity name is required")

cmd/mcptools/commands/new.go

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,7 @@ import (
1111
)
1212

1313
// Constants for template options.
14-
const (
15-
sdkTypeScript = "ts"
16-
transportStdio = "stdio"
17-
transportSSE = "sse"
18-
transportHTTP = "http"
19-
)
14+
const sdkTypeScript = "ts"
2015

2116
// NewCmd returns a new 'new' command for scaffolding MCP projects.
2217
func NewCmd() *cobra.Command {
@@ -49,13 +44,13 @@ Examples:
4944
}
5045

5146
// Validate transport flag
52-
if transportFlag != "" && transportFlag != transportStdio && transportFlag != transportSSE && transportFlag != transportHTTP {
47+
if transportFlag != "" && transportFlag != TransportStdio && transportFlag != TransportSSE && transportFlag != TransportHTTP {
5348
return fmt.Errorf("unsupported transport: %s (supported options: stdio, sse, http)", transportFlag)
5449
}
5550

5651
// Set default transport if not specified
5752
if transportFlag == "" {
58-
transportFlag = transportStdio
53+
transportFlag = TransportStdio
5954
}
6055

6156
// Parse components from args
@@ -127,11 +122,12 @@ func createProjectStructure(components map[string]string, sdk, transport string)
127122

128123
// Create index.ts with the server setup
129124
var serverTemplateFile string
130-
if transport == transportSSE {
125+
switch transport {
126+
case TransportSSE:
131127
serverTemplateFile = filepath.Join(templatesDir, "server_sse.ts")
132-
} else if transport == transportHTTP {
128+
case TransportHTTP:
133129
serverTemplateFile = filepath.Join(templatesDir, "server_http.ts")
134-
} else {
130+
default:
135131
// Use stdio by default
136132
serverTemplateFile = filepath.Join(templatesDir, "server_stdio.ts")
137133
}

cmd/mcptools/commands/root.go

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@ import (
99

1010
// flags.
1111
const (
12-
FlagFormat = "--format"
13-
FlagFormatShort = "-f"
14-
FlagParams = "--params"
15-
FlagParamsShort = "-p"
16-
FlagHelp = "--help"
17-
FlagHelpShort = "-h"
18-
FlagServerLogs = "--server-logs"
19-
FlagTransport = "--transport"
20-
FlagAuthUser = "--auth-user"
21-
FlagAuthHeader = "--auth-header"
12+
FlagFormat = "--format"
13+
FlagFormatShort = "-f"
14+
FlagParams = "--params"
15+
FlagParamsShort = "-p"
16+
FlagHelp = "--help"
17+
FlagHelpShort = "-h"
18+
FlagServerLogs = "--server-logs"
19+
FlagTransport = "--transport"
20+
FlagAuthUser = "--auth-user"
21+
FlagAuthHeader = "--auth-header"
2222
)
2323

2424
// entity types.
@@ -28,6 +28,13 @@ const (
2828
EntityTypeRes = "resource"
2929
)
3030

31+
// transport types.
32+
const (
33+
TransportSSE = "sse"
34+
TransportHTTP = "http"
35+
TransportStdio = "stdio"
36+
)
37+
3138
var (
3239
// FormatOption is the format option for the command, valid values are "table", "json", and
3340
// "pretty".

cmd/mcptools/commands/test_helpers.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ func (m *MockTransport) Close() error {
5555
}
5656

5757
// GetSessionId returns an empty session ID for the mock transport.
58+
// nolint:revive // Method name required by transport.Interface from mcp-go
5859
func (m *MockTransport) GetSessionId() string {
5960
return ""
6061
}

cmd/mcptools/commands/utils.go

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,56 +33,55 @@ func IsHTTP(str string) bool {
3333
// It returns the header value and a cleaned URL (with embedded credentials removed).
3434
func buildAuthHeader(originalURL string) (string, string, error) {
3535
cleanURL := originalURL
36-
36+
3737
// First, check if we have explicit auth-user flag with username:password format
3838
if AuthUser != "" {
3939
// Parse username:password format
4040
if !strings.Contains(AuthUser, ":") {
4141
return "", originalURL, fmt.Errorf("auth-user must be in username:password format (missing colon)")
4242
}
43-
43+
4444
parts := strings.SplitN(AuthUser, ":", 2)
4545
username := parts[0]
4646
password := parts[1]
47-
47+
4848
// Allow empty username or password, but not both
49-
if username == "" && password == "" {
50-
// Both empty, treat as no auth
51-
} else {
49+
if username != "" || password != "" {
5250
// Create basic auth header
5351
auth := base64.StdEncoding.EncodeToString([]byte(username + ":" + password))
5452
header := "Basic " + auth
5553
return header, cleanURL, nil
5654
}
55+
// Both empty, treat as no auth - fall through
5756
}
58-
57+
5958
// Check for custom auth header
6059
if AuthHeader != "" {
6160
return AuthHeader, cleanURL, nil
6261
}
63-
62+
6463
// Extract credentials from URL if embedded
6564
parsedURL, err := url.Parse(originalURL)
6665
if err != nil {
6766
return "", originalURL, err
6867
}
69-
68+
7069
if parsedURL.User != nil {
7170
username := parsedURL.User.Username()
7271
password, _ := parsedURL.User.Password()
73-
72+
7473
if username != "" {
7574
// Create basic auth header
7675
auth := base64.StdEncoding.EncodeToString([]byte(username + ":" + password))
77-
76+
7877
// Clean the URL by removing user info
7978
parsedURL.User = nil
8079
cleanURL = parsedURL.String()
81-
80+
8281
return "Basic " + auth, cleanURL, nil
8382
}
8483
}
85-
84+
8685
return "", cleanURL, nil
8786
}
8887

@@ -106,7 +105,7 @@ var CreateClientFunc = func(args []string, _ ...client.ClientOption) (*client.Cl
106105

107106
if len(args) == 1 && IsHTTP(args[0]) {
108107
// Validate transport option for HTTP URLs
109-
if TransportOption != "http" && TransportOption != "sse" {
108+
if TransportOption != TransportHTTP && TransportOption != TransportSSE {
110109
return nil, fmt.Errorf("invalid transport option: %s (supported: http, sse)", TransportOption)
111110
}
112111

@@ -128,7 +127,7 @@ var CreateClientFunc = func(args []string, _ ...client.ClientOption) (*client.Cl
128127
// Many MCP servers require clients to accept both JSON responses and event streams
129128
headers["Accept"] = "application/json, text/event-stream"
130129

131-
if TransportOption == "sse" {
130+
if TransportOption == TransportSSE {
132131
// For SSE transport, use transport.ClientOption
133132
c, err = client.NewSSEMCPClient(cleanURL, transport.WithHeaders(headers))
134133
} else {

cmd/mcptools/commands/web.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1269,20 +1269,20 @@ func handleCall(cache *MCPClientCache) http.HandlerFunc {
12691269
defer cache.mutex.Unlock()
12701270

12711271
switch requestData.Type {
1272-
case "tool":
1272+
case EntityTypeTool:
12731273
var toolResponse *mcp.CallToolResult
12741274
request := mcp.CallToolRequest{}
12751275
request.Params.Name = requestData.Name
12761276
request.Params.Arguments = requestData.Params
12771277
toolResponse, callErr = cache.client.CallTool(context.Background(), request)
12781278
resp = ConvertJSONToMap(toolResponse)
1279-
case "resource":
1279+
case EntityTypeRes:
12801280
var resourceResponse *mcp.ReadResourceResult
12811281
request := mcp.ReadResourceRequest{}
12821282
request.Params.URI = requestData.Name
12831283
resourceResponse, callErr = cache.client.ReadResource(context.Background(), request)
12841284
resp = ConvertJSONToMap(resourceResponse)
1285-
case "prompt":
1285+
case EntityTypePrompt:
12861286
var promptResponse *mcp.GetPromptResult
12871287
request := mcp.GetPromptRequest{}
12881288
request.Params.Name = requestData.Name

cmd/mcptools/transport_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,4 @@ func TestIsHTTP(t *testing.T) {
5757
t.Errorf("IsHTTP(%s) = %v, expected %v", tc.url, result, tc.expected)
5858
}
5959
}
60-
}
60+
}

0 commit comments

Comments
 (0)