Skip to content

Commit 7f237c3

Browse files
yogesh-chauhanHarness
authored andcommitted
fix: [ML-1255]: re add internal cmd (#187)
* Merge remote-tracking branch 'origin/master' into yogesh/re-add-internalCMD * fix: [ML-1255]: re add internal cmd
1 parent 0fb8901 commit 7f237c3

File tree

1 file changed

+174
-0
lines changed

1 file changed

+174
-0
lines changed

cmd/harness-mcp-server/main.go

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212

1313
"github.com/harness/harness-mcp/cmd/harness-mcp-server/config"
1414
"github.com/harness/harness-mcp/pkg/harness"
15+
"github.com/harness/harness-mcp/pkg/harness/auth"
1516
"github.com/harness/harness-mcp/pkg/harness/prompts"
1617
"github.com/harness/harness-mcp/pkg/modules"
1718
"github.com/harness/harness-mcp/pkg/types/enum"
@@ -145,6 +146,106 @@ var (
145146
return nil
146147
},
147148
}
149+
150+
// TODO: this will move to streamable HTTP once the service is setup
151+
internalCmd = &cobra.Command{
152+
Use: "internal",
153+
Short: "Start stdio server in internal mode",
154+
Long: `Start a server that communicates via standard input/output streams using JSON-RPC messages with additional internal credentials.`,
155+
RunE: func(_ *cobra.Command, _ []string) error {
156+
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
157+
defer stop()
158+
159+
// TODO: get this from request header and add in the context once we move to streamable HTTP
160+
bearerToken := viper.GetString("bearer_token")
161+
if bearerToken == "" {
162+
return fmt.Errorf("bearer token not provided")
163+
}
164+
165+
mcpSecret := viper.GetString("mcp_svc_secret")
166+
if mcpSecret == "" {
167+
return fmt.Errorf("MCP service secret not provided")
168+
}
169+
170+
// Move this out to middleware once we move to streamable HTTP
171+
session, err := auth.AuthenticateSession(bearerToken, mcpSecret)
172+
if err != nil {
173+
return fmt.Errorf("Failed to authenticate session: %w", err)
174+
}
175+
176+
// Store the authenticated session in the context
177+
ctx = auth.WithAuthSession(ctx, session)
178+
179+
var toolsets []string
180+
err = viper.UnmarshalKey("toolsets", &toolsets)
181+
if err != nil {
182+
return fmt.Errorf("Failed to unmarshal toolsets: %w", err)
183+
}
184+
185+
var enableModules []string
186+
err = viper.UnmarshalKey("enable_modules", &enableModules)
187+
if err != nil {
188+
return fmt.Errorf("Failed to unmarshal enabled modules: %w", err)
189+
}
190+
191+
cfg := config.Config{
192+
// Common fields
193+
Version: version,
194+
ReadOnly: true, // we keep it read-only for now
195+
Toolsets: toolsets,
196+
EnableModules: enableModules,
197+
LogFilePath: viper.GetString("log_file"),
198+
Debug: viper.GetBool("debug"),
199+
EnableLicense: viper.GetBool("enable_license"),
200+
Internal: true,
201+
AccountID: session.Principal.AccountID,
202+
// Internal mode specific fields
203+
BearerToken: viper.GetString("bearer_token"),
204+
PipelineSvcBaseURL: viper.GetString("pipeline_svc_base_url"),
205+
PipelineSvcSecret: viper.GetString("pipeline_svc_secret"),
206+
NgManagerBaseURL: viper.GetString("ng_manager_base_url"),
207+
NgManagerSecret: viper.GetString("ng_manager_secret"),
208+
ChatbotBaseURL: viper.GetString("chatbot_base_url"),
209+
ChatbotSecret: viper.GetString("chatbot_secret"),
210+
GenaiBaseURL: viper.GetString("genai_base_url"),
211+
GenaiSecret: viper.GetString("genai_secret"),
212+
ArtifactRegistryBaseURL: viper.GetString("artifact_registry_base_url"),
213+
ArtifactRegistrySecret: viper.GetString("artifact_registry_secret"),
214+
NextgenCEBaseURL: viper.GetString("nextgen_ce_base_url"),
215+
NextgenCESecret: viper.GetString("nextgen_ce_secret"),
216+
CCMCommOrchBaseURL: viper.GetString("ccm_comm_orch_base_url"),
217+
CCMCommOrchSecret: viper.GetString("ccm_comm_orch_secret"),
218+
IDPSvcBaseURL: viper.GetString("idp_svc_base_url"),
219+
IDPSvcSecret: viper.GetString("idp_svc_secret"),
220+
McpSvcSecret: viper.GetString("mcp_svc_secret"),
221+
ChaosManagerSvcBaseURL: viper.GetString("chaos_manager_svc_base_url"),
222+
ChaosManagerSvcSecret: viper.GetString("chaos_manager_svc_secret"),
223+
TemplateSvcBaseURL: viper.GetString("template_svc_base_url"),
224+
TemplateSvcSecret: viper.GetString("template_svc_secret"),
225+
IntelligenceSvcBaseURL: viper.GetString("intelligence_svc_base_url"),
226+
IntelligenceSvcSecret: viper.GetString("intelligence_svc_secret"),
227+
CodeSvcBaseURL: viper.GetString("code_svc_base_url"),
228+
CodeSvcSecret: viper.GetString("code_svc_secret"),
229+
LogSvcBaseURL: viper.GetString("log_svc_base_url"),
230+
LogSvcSecret: viper.GetString("log_svc_secret"),
231+
SCSSvcSecret: viper.GetString("scs_svc_secret"),
232+
SCSSvcBaseURL: viper.GetString("scs_svc_base_url"),
233+
STOSvcSecret: viper.GetString("sto_svc_secret"),
234+
STOSvcBaseURL: viper.GetString("sto_svc_base_url"),
235+
AuditSvcBaseURL: viper.GetString("audit_svc_base_url"),
236+
AuditSvcSecret: viper.GetString("audit_svc_secret"),
237+
DBOpsSvcBaseURL: viper.GetString("dbops_svc_base_url"),
238+
DBOpsSvcSecret: viper.GetString("dbops_svc_secret"),
239+
RBACSvcBaseURL: viper.GetString("rbac_svc_base_url"),
240+
RBACSvcSecret: viper.GetString("rbac_svc_secret"),
241+
}
242+
243+
if err := runStdioServer(ctx, cfg); err != nil {
244+
return fmt.Errorf("failed to run stdio server: %w", err)
245+
}
246+
return nil
247+
},
248+
}
148249
)
149250

150251
func init() {
@@ -174,6 +275,40 @@ func init() {
174275
stdioCmd.Flags().String("default-project-id", "",
175276
"Default project ID to use. If not specified, it would need to be passed in the query (if required)")
176277

278+
// Add internal-specific flags
279+
internalCmd.Flags().String("bearer-token", "", "Bearer token for authentication")
280+
internalCmd.Flags().String("pipeline-svc-base-url", "", "Base URL for pipeline service")
281+
internalCmd.Flags().String("pipeline-svc-secret", "", "Secret for pipeline service")
282+
internalCmd.Flags().String("ng-manager-base-url", "", "Base URL for NG manager")
283+
internalCmd.Flags().String("ng-manager-secret", "", "Secret for NG manager")
284+
internalCmd.Flags().String("chatbot-base-url", "", "Base URL for chatbot service")
285+
internalCmd.Flags().String("chatbot-secret", "", "Secret for chatbot service")
286+
internalCmd.Flags().String("genai-base-url", "", "Base URL for genai service")
287+
internalCmd.Flags().String("genai-secret", "", "Secret for genai service")
288+
internalCmd.Flags().String("mcp-svc-secret", "", "Secret for MCP service")
289+
internalCmd.Flags().String("artifact-registry-base-url", "", "Base URL for artifact registry service")
290+
internalCmd.Flags().String("artifact-registry-secret", "", "Secret for artifact registry service")
291+
internalCmd.Flags().String("nextgen-ce-base-url", "", "Base URL for Nextgen CE service")
292+
internalCmd.Flags().String("nextgen-ce-secret", "", "Secret for Nextgen CE service")
293+
internalCmd.Flags().String("chaos-manager-svc-base-url", "", "Base URL for chaos manager service")
294+
internalCmd.Flags().String("chaos-manager-svc-secret", "", "Secret for chaos manager service")
295+
internalCmd.Flags().String("code-svc-base-url", "", "Base URL for code service")
296+
internalCmd.Flags().String("code-svc-secret", "", "Secret for code service")
297+
internalCmd.Flags().String("dashboard-svc-base-url", "", "Base URL for dashboard service")
298+
internalCmd.Flags().String("dashboard-svc-secret", "", "Secret for dashboard service")
299+
internalCmd.Flags().String("log-svc-base-url", "", "Base URL for log service")
300+
internalCmd.Flags().String("log-service-secret", "", "Secret for log service")
301+
internalCmd.Flags().String("scs-svc-secret", "", "Secret for SCS service")
302+
internalCmd.Flags().String("scs-svc-base-url", "", "Base URL for SCS service")
303+
internalCmd.Flags().String("sto-svc-secret", "", "Secret for STO service")
304+
internalCmd.Flags().String("sto-svc-base-url", "", "Base URL for STO service")
305+
internalCmd.Flags().String("audit-svc-base-url", "", "Base URL for audit service")
306+
internalCmd.Flags().String("audit-svc-secret", "", "Secret for audit service")
307+
internalCmd.Flags().String("dbops-svc-base-url", "", "Base URL for dbops service")
308+
internalCmd.Flags().String("dbops-svc-secret", "", "Secret for dbops service")
309+
internalCmd.Flags().String("rbac-svc-base-url", "", "Base URL for RBAC service")
310+
internalCmd.Flags().String("rbac-svc-secret", "", "Secret for RBAC service")
311+
177312
// Bind global flags to viper
178313
_ = viper.BindPFlag("toolsets", rootCmd.PersistentFlags().Lookup("toolsets"))
179314
_ = viper.BindPFlag("enable_modules", rootCmd.PersistentFlags().Lookup("enable-modules"))
@@ -193,9 +328,48 @@ func init() {
193328
_ = viper.BindPFlag("default_org_id", stdioCmd.Flags().Lookup("default-org-id"))
194329
_ = viper.BindPFlag("default_project_id", stdioCmd.Flags().Lookup("default-project-id"))
195330

331+
// Bind internal-specific flags to viper
332+
_ = viper.BindPFlag("bearer_token", internalCmd.Flags().Lookup("bearer-token"))
333+
_ = viper.BindPFlag("pipeline_svc_base_url", internalCmd.Flags().Lookup("pipeline-svc-base-url"))
334+
_ = viper.BindPFlag("pipeline_svc_secret", internalCmd.Flags().Lookup("pipeline-svc-secret"))
335+
_ = viper.BindPFlag("ng_manager_base_url", internalCmd.Flags().Lookup("ng-manager-base-url"))
336+
_ = viper.BindPFlag("ng_manager_secret", internalCmd.Flags().Lookup("ng-manager-secret"))
337+
_ = viper.BindPFlag("chatbot_base_url", internalCmd.Flags().Lookup("chatbot-base-url"))
338+
_ = viper.BindPFlag("chatbot_secret", internalCmd.Flags().Lookup("chatbot-secret"))
339+
_ = viper.BindPFlag("genai_base_url", internalCmd.Flags().Lookup("genai-base-url"))
340+
_ = viper.BindPFlag("genai_secret", internalCmd.Flags().Lookup("genai-secret"))
341+
_ = viper.BindPFlag("mcp_svc_secret", internalCmd.Flags().Lookup("mcp-svc-secret"))
342+
_ = viper.BindPFlag("artifact_registry_base_url", internalCmd.Flags().Lookup("artifact-registry-base-url"))
343+
_ = viper.BindPFlag("artifact_registry_secret", internalCmd.Flags().Lookup("artifact-registry-secret"))
344+
_ = viper.BindPFlag("nextgen_ce_base_url", internalCmd.Flags().Lookup("nextgen-ce-base-url"))
345+
_ = viper.BindPFlag("nextgen_ce_secret", internalCmd.Flags().Lookup("nextgen-ce-secret"))
346+
_ = viper.BindPFlag("template_svc_base_url", internalCmd.Flags().Lookup("template-svc-base-url"))
347+
_ = viper.BindPFlag("template_svc_secret", internalCmd.Flags().Lookup("template-svc-secret"))
348+
_ = viper.BindPFlag("intelligence_svc_base_url", internalCmd.Flags().Lookup("intelligence-svc-base-url"))
349+
_ = viper.BindPFlag("intelligence_svc_secret", internalCmd.Flags().Lookup("intelligence-svc-secret"))
350+
_ = viper.BindPFlag("chaos_manager_svc_base_url", internalCmd.Flags().Lookup("chaos-manager-svc-base-url"))
351+
_ = viper.BindPFlag("chaos_manager_svc_secret", internalCmd.Flags().Lookup("chaos-manager-svc-secret"))
352+
_ = viper.BindPFlag("code_svc_base_url", internalCmd.Flags().Lookup("code-svc-base-url"))
353+
_ = viper.BindPFlag("code_svc_secret", internalCmd.Flags().Lookup("code-svc-secret"))
354+
_ = viper.BindPFlag("dashboard_svc_base_url", internalCmd.Flags().Lookup("dashboard-svc-base-url"))
355+
_ = viper.BindPFlag("dashboard_svc_secret", internalCmd.Flags().Lookup("dashboard-svc-secret"))
356+
_ = viper.BindPFlag("log_svc_base_url", internalCmd.Flags().Lookup("log-svc-base-url"))
357+
_ = viper.BindPFlag("log_svc_secret", internalCmd.Flags().Lookup("log-svc-secret"))
358+
_ = viper.BindPFlag("scs_svc_secret", internalCmd.Flags().Lookup("scs-svc-secret"))
359+
_ = viper.BindPFlag("scs_svc_base_url", internalCmd.Flags().Lookup("scs-svc-base-url"))
360+
_ = viper.BindPFlag("sto_svc_secret", internalCmd.Flags().Lookup("sto-svc-secret"))
361+
_ = viper.BindPFlag("sto_svc_base_url", internalCmd.Flags().Lookup("sto-svc-base-url"))
362+
_ = viper.BindPFlag("audit_svc_base_url", internalCmd.Flags().Lookup("audit-svc-base-url"))
363+
_ = viper.BindPFlag("audit_svc_secret", internalCmd.Flags().Lookup("audit-svc-secret"))
364+
_ = viper.BindPFlag("dbops_svc_base_url", internalCmd.Flags().Lookup("dbops-svc-base-url"))
365+
_ = viper.BindPFlag("dbops_svc_secret", internalCmd.Flags().Lookup("dbops-svc-secret"))
366+
_ = viper.BindPFlag("rbac_svc_base_url", internalCmd.Flags().Lookup("rbac-svc-base-url"))
367+
_ = viper.BindPFlag("rbac_svc_secret", internalCmd.Flags().Lookup("rbac-svc-secret"))
368+
196369
// Add subcommands
197370
rootCmd.AddCommand(serverCmd)
198371
rootCmd.AddCommand(stdioCmd)
372+
stdioCmd.AddCommand(internalCmd)
199373
}
200374

201375
func initConfig() {

0 commit comments

Comments
 (0)