diff --git a/cmd/mcptools/commands/root.go b/cmd/mcptools/commands/root.go index 068a7eb..7c1ea0b 100644 --- a/cmd/mcptools/commands/root.go +++ b/cmd/mcptools/commands/root.go @@ -19,6 +19,8 @@ const ( FlagTransport = "--transport" FlagAuthUser = "--auth-user" FlagAuthHeader = "--auth-header" + FlagQuiet = "--quiet" + FlagQuietShort = "-q" ) // entity types. @@ -51,6 +53,8 @@ var ( AuthUser string // AuthHeader is a custom Authorization header. AuthHeader string + // QuietMode suppresses startup messages. + QuietMode bool ) // RootCmd creates the root command. diff --git a/cmd/mcptools/commands/shell.go b/cmd/mcptools/commands/shell.go index 3647ede..ffa688b 100644 --- a/cmd/mcptools/commands/shell.go +++ b/cmd/mcptools/commands/shell.go @@ -46,6 +46,9 @@ func ShellCmd() *cobra.Command { //nolint:gocyclo case cmdArgs[i] == FlagAuthHeader && i+1 < len(cmdArgs): AuthHeader = cmdArgs[i+1] i += 2 + case cmdArgs[i] == FlagQuiet || cmdArgs[i] == FlagQuietShort: + QuietMode = true + i++ default: parsedArgs = append(parsedArgs, cmdArgs[i]) i++ @@ -64,9 +67,11 @@ func ShellCmd() *cobra.Command { //nolint:gocyclo os.Exit(1) } - fmt.Fprintf(thisCmd.OutOrStdout(), "mcp > MCP Tools Shell (%s)\n", Version) - fmt.Fprintf(thisCmd.OutOrStdout(), "mcp > Connected to Server: %s\n", strings.Join(parsedArgs, " ")) - fmt.Fprintf(thisCmd.OutOrStdout(), "\nmcp > Type '/h' for help or '/q' to quit\n") + if !QuietMode { + fmt.Fprintf(thisCmd.OutOrStdout(), "mcp > MCP Tools Shell (%s)\n", Version) + fmt.Fprintf(thisCmd.OutOrStdout(), "mcp > Connected to Server: %s\n", strings.Join(parsedArgs, " ")) + fmt.Fprintf(thisCmd.OutOrStdout(), "\nmcp > Type '/h' for help or '/q' to quit\n") + } line := liner.NewLiner() line.SetCtrlCAborts(true) diff --git a/cmd/mcptools/commands/shell_test.go b/cmd/mcptools/commands/shell_test.go index 3435cdd..96fd42d 100644 --- a/cmd/mcptools/commands/shell_test.go +++ b/cmd/mcptools/commands/shell_test.go @@ -365,3 +365,64 @@ func TestShellExit(t *testing.T) { }) } } + +func TestShellQuietFlag(t *testing.T) { + tests := []struct { //nolint:govet + name string + args []string + unexpectedOutput []string + expectStartup bool + }{ + { + name: "without quiet flag shows startup messages", + args: []string{"echo", "test"}, + expectStartup: true, + }, + { + name: "with --quiet flag suppresses startup messages", + args: []string{"--quiet", "echo", "test"}, + expectStartup: false, + unexpectedOutput: []string{"MCP Tools Shell", "Connected to Server", "Type '/h' for help"}, + }, + { + name: "with -q flag suppresses startup messages", + args: []string{"-q", "echo", "test"}, + expectStartup: false, + unexpectedOutput: []string{"MCP Tools Shell", "Connected to Server", "Type '/h' for help"}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // Reset QuietMode before each test + QuietMode = false + + cmd, buf, cleanupSetup := setupTestCommand(t, "/q\n") + defer cleanupSetup() + + cleanupClient := setupMockClient(func(_ string, _ any) (map[string]any, error) { + return map[string]any{}, nil + }) + defer cleanupClient() + + cmd.SetArgs(tt.args) + err := cmd.Execute() + if err != nil { + t.Errorf("cmd.Execute() error = %v", err) + } + + output := buf.String() + if tt.expectStartup { + if !strings.Contains(output, "MCP Tools Shell") { + t.Errorf("Expected startup messages, got: %s", output) + } + } else { + for _, unexpected := range tt.unexpectedOutput { + if strings.Contains(output, unexpected) { + t.Errorf("Expected output to NOT contain %q, got: %s", unexpected, output) + } + } + } + }) + } +}