Skip to content

Conversation

otaviof
Copy link
Collaborator

@otaviof otaviof commented Jul 25, 2025

This PR is bringing the MCP server scaffold to the project, it exposes a number of MCP tools to have a "vibe platform engineering" powered by tssc.

The MCP server is a subcommand of tssc, following the example of many other projects out there. To start the MCP server run:

tssc mcp-server --image="ghcr.io/otaviof/tssc:latest"

Summary by CodeRabbit

  • New Features

    • Introduced a Model Context Protocol (MCP) server, enabling TSSC features to be accessed via a standardized protocol.
    • Added a new CLI subcommand to start the MCP server for installer operations.
    • Provided tools for cluster configuration, integration management, and deployment through the MCP server.
    • Integrated comprehensive documentation for MCP server usage and protocol.
  • Enhancements

    • Improved flag handling and validation for integration commands, ensuring required parameters are enforced.
    • Added support for Kubernetes batch job management to facilitate asynchronous installer deployments.
  • Documentation

    • Expanded README and added detailed guides for MCP server functionality and usage.
  • Chores

    • Updated dependencies and vendored libraries to support new MCP protocol features and utilities.
    • Updated .gitignore to exclude new development artifacts.

@openshift-ci-robot
Copy link
Collaborator

openshift-ci-robot commented Jul 25, 2025

@otaviof: This pull request references RHTAP-5269 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the epic to target the "4.20.0" version, but no target version was set.

In response to this:

This PR is bringing the MCP server scaffold to the project, it exposes a number of MCP tools to have a "vibe platform engineering" powered by tssc.

The MCP server is a subcommand of tssc, following the example of many other projects out there. To start the MCP server run:

tssc mcp-server --image="ghcr.io/otaviof/tssc:latest"

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@openshift-ci openshift-ci bot requested a review from rhopp July 25, 2025 09:55
Copy link

coderabbitai bot commented Jul 25, 2025

Walkthrough

This update introduces a comprehensive Model Context Protocol (MCP) server integration for TSSC, including new subcommands, configuration, integration, and deployment tooling, and extensive vendor dependencies for MCP protocol support. It adds new documentation, modifies command-line flag handling, enhances Kubernetes and configuration management, and incorporates a robust vendor ecosystem for protocol, JSON, and ordered map utilities.

Changes

Cohort / File(s) Change Summary
Documentation and Ignore Updates
.gitignore, README.md, docs/mcp.md, pkg/mcpserver/instructions.md
Added .gemini to .gitignore. Updated README with MCP server info and fixed a link. Introduced new documentation for the MCP server and installer assistant.
Go Module and Vendor Dependency Additions
go.mod, vendor/modules.txt, vendor/github.com/mark3labs/mcp-go/*, vendor/github.com/yosida95/uritemplate/v3/*, vendor/github.com/bahlo/generic-list-go/*, vendor/github.com/buger/jsonparser/*, vendor/github.com/invopop/jsonschema/*, vendor/github.com/wk8/go-ordered-map/v2/*
Added new direct/indirect dependencies for MCP, JSON, URI template, ordered map, and JSON schema support. Introduced extensive vendor code for these libraries, including licenses, documentation, and full source.
MCP Server and Tooling Implementation
pkg/mcpserver/mcpserver.go, pkg/mcptools/configtools.go, pkg/mcptools/deploytools.go, pkg/mcptools/integrationtools.go, pkg/mcptools/interface.go
Implemented MCP server wrapper, configuration, deployment, and integration tools as MCP server extensions. Defined interfaces and handlers for tool registration and operation.
Installer and Kubernetes Enhancements
pkg/installer/job.go, pkg/k8s/kube.go
Added asynchronous Kubernetes job management for installer deployment, including job state tracking and log command generation. Added batch/v1 client getter to Kubernetes client abstraction.
Configuration Management Enhancements
pkg/config/config.go, pkg/config/manager.go
Introduced new type aliases for configuration fields, added a default config loader, and improved error propagation in ConfigMap management.
Subcommand and CLI Refactoring
pkg/cmd/root.go, pkg/subcmd/mcpserver.go
Added a new MCP server subcommand to the CLI, reorganized subcommand registration, and implemented MCP server startup, tool integration, and flag management.
Integration Flag Handling Refactor
pkg/integrations/acs.go, pkg/integrations/artifactory.go, pkg/integrations/azure.go, pkg/integrations/bitbucket.go, pkg/integrations/github.go, pkg/integrations/gitlab.go, pkg/integrations/jenkins.go, pkg/integrations/nexus.go, pkg/integrations/quay.go, pkg/integrations/trustification.go
Refactored persistent flag registration to use cobra.Command, added required flag enforcement, simplified validation logic, and centralized default assignments in constructors.
Integration Subcommand Flag Registration Updates
pkg/subcmd/integration_acs.go, pkg/subcmd/integration_artifactory.go, pkg/subcmd/integration_azure.go, pkg/subcmd/integration_bitbucket.go, pkg/subcmd/integration_githubapp.go, pkg/subcmd/integration_gitlab.go, pkg/subcmd/integration_jenkins.go, pkg/subcmd/integration_nexus.go, pkg/subcmd/integration_quay.go, pkg/subcmd/integration_trustification.go
Updated integration subcommands to pass the full cobra.Command to PersistentFlags methods, aligning with the new flag handling interface.
Minor Formatting and Import Changes
pkg/subcmd/integration.go
Added a blank line between import statements for formatting consistency.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant CLI (tssc)
    participant MCPServer
    participant ConfigTools
    participant IntegrationTools
    participant DeployTools
    participant Kubernetes

    User->>CLI (tssc): Run 'tssc mcpserver --image ...'
    CLI (tssc)->>MCPServer: Start server (stdio)
    MCPServer->>ConfigTools: Register config tools
    MCPServer->>IntegrationTools: Register integration tools
    MCPServer->>DeployTools: Register deploy tools

    User->>MCPServer: Call 'tssc_config_get'
    MCPServer->>ConfigTools: getHandler()
    ConfigTools->>Kubernetes: Retrieve ConfigMap
    ConfigTools-->>MCPServer: Return config or default

    User->>MCPServer: Call 'tssc_integration_list'
    MCPServer->>IntegrationTools: listHandler()
    IntegrationTools-->>MCPServer: Return integration list

    User->>MCPServer: Call 'tssc_deploy'
    MCPServer->>DeployTools: deployHandler()
    DeployTools->>Kubernetes: Create installer Job
    DeployTools-->>MCPServer: Return deployment status/log command
Loading

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~90+ minutes

Suggested labels

lgtm

Suggested reviewers

  • lingyzhuang
  • dperaza4dustbit
  • rhopp

Poem

Oh, what a leap for TSSC’s domain,
The MCP server now runs on the train!
With configs, deploys, and integrations galore,
Rabbits can automate, hop, and explore.
Vendor gardens bloom with code so bright—
This release is a hare’s delight!
🐇✨

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 golangci-lint (2.2.2)

Error: can't load config: unsupported version of the configuration: "" See https://golangci-lint.run/product/migration-guide for migration instructions
The command is terminated due to an error: can't load config: unsupported version of the configuration: "" See https://golangci-lint.run/product/migration-guide for migration instructions

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@openshift-ci-robot
Copy link
Collaborator

openshift-ci-robot commented Jul 25, 2025

@otaviof: This pull request references RHTAP-5269 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the epic to target the "4.20.0" version, but no target version was set.

In response to this:

This PR is bringing the MCP server scaffold to the project, it exposes a number of MCP tools to have a "vibe platform engineering" powered by tssc.

The MCP server is a subcommand of tssc, following the example of many other projects out there. To start the MCP server run:

tssc mcp-server --image="ghcr.io/otaviof/tssc:latest"

Summary by CodeRabbit

  • New Features

  • Introduced a new MCP server subcommand, enabling TSSC installer features to be accessed via the Model Context Protocol (MCP) server.

  • Added tools for cluster configuration, integration management, and asynchronous deployment through the MCP interface.

  • Provided documentation for the MCP server and its usage, including a high-level guide and installation assistant instructions.

  • Improvements

  • Enhanced integration commands to enforce required flags and improve validation.

  • Updated documentation with clearer installation instructions and references to MCP features.

  • Dependency Updates

  • Added new dependencies for MCP protocol and URI template processing.

  • Bug Fixes

  • Improved error handling in configuration and integration management.

  • Chores

  • Updated ignore patterns and vendor modules for new dependencies.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 16

♻️ Duplicate comments (2)
pkg/integrations/bitbucket.go (1)

46-50: Same panic concern as other integration files

Similar to the nexus integration, consider whether panicking on flag marking failures is the best approach for production code.

pkg/integrations/quay.go (1)

51-55: Same panic handling concern applies

As with other integration files, consider whether panicking on flag marking failures is the optimal approach.

🧹 Nitpick comments (17)
pkg/k8s/kube.go (1)

47-47: Fix typo in comment.

There's a typo in the comment: "Clientset.l" should be "Clientset."

-// BatchV1ClientSet returns a "batchv1" Kubernetes Clientset.l
+// BatchV1ClientSet returns a "batchv1" Kubernetes Clientset.
pkg/integrations/github.go (1)

39-59: Flag validation improvements with minor cleanup suggestion.

The method signature change and required flag enforcement for "token" are good improvements. The panic handling is appropriate for programming errors.

Consider removing the commented-out old method signature (line 39) in a follow-up cleanup to reduce code clutter.

-// func (g *GithubIntegration) PersistentFlags(p *pflag.FlagSet) {
 func (g *GithubIntegration) PersistentFlags(cmd *cobra.Command) {
pkg/mcpserver/mcpserver.go (1)

29-38: Consider making the version configurable.

The hard-coded version "1.6.0" may become outdated. Consider making this configurable or deriving it from build-time variables.

-func NewMCPServer() *MCPServer {
+func NewMCPServer(version string) *MCPServer {
+	if version == "" {
+		version = "1.6.0" // fallback default
+	}
 	return &MCPServer{s: server.NewMCPServer(
 		constants.AppName,
-		"1.6.0",
+		version,
 		server.WithToolCapabilities(true),
 		server.WithPromptCapabilities(true),
 		server.WithLogging(),
 		server.WithInstructions(string(instructionsBytes)),
 	)}
 }
pkg/integrations/nexus.go (1)

42-46: Consider error handling instead of panic for flag marking failures

While panicking on MarkPersistentFlagRequired failures might be acceptable during initialization, consider whether a more graceful error handling approach would be better for production code.

-	for _, f := range []string{"dockerconfigjson", "url"} {
-		if err := c.MarkPersistentFlagRequired(f); err != nil {
-			panic(err)
-		}
-	}
+	for _, f := range []string{"dockerconfigjson", "url"} {
+		if err := c.MarkPersistentFlagRequired(f); err != nil {
+			return fmt.Errorf("failed to mark flag %s as required: %w", f, err)
+		}
+	}

Note: This would require changing the method signature to return an error.

pkg/mcptools/integrationtools.go (2)

44-50: Consider improving flag information formatting

The flag information display could be enhanced to show default values and improve readability:

 flagsInfo.WriteString(fmt.Sprintf(
-    "  - \"--%s\" %s%s: %s.\n",
+    "  - `--%s` (%s)%s: %s\n",
     f.Name,
     f.Value.Type(),
     required,
     f.Usage,
 ))

This makes the flag type more visually distinct and removes the unnecessary trailing period.


24-31: Consider making the output format more structured

The current string concatenation approach works but could be made more maintainable with a template-based approach or structured output building.

Consider using text/template for better maintainability:

const listTemplate = `
# Integration Commands

The detailed description of each '{{.AppName}} integration' command is found below.
{{range .Commands}}
## '$ {{$.AppName}} integration {{.Name}}'

{{.Short}}
{{.Long}}

### Flags
{{range .Flags}}
  - "--{{.Name}}" {{.Type}}{{.Required}}: {{.Usage}}
{{end}}
{{end}}
`
pkg/subcmd/mcpserver.go (1)

48-56: Consider documenting why Complete and Validate are empty

The Complete and Validate methods currently have no implementation. If this is intentional, consider adding a comment explaining why validation is not needed for this subcommand.

 // Complete implements Interface.
 func (m *MCPServer) Complete(_ []string) error {
+	// No completion logic needed for MCP server
 	return nil
 }
 
 // Validate implements Interface.
 func (m *MCPServer) Validate() error {
+	// Validation is handled by cobra's required flag mechanism
 	return nil
 }
pkg/installer/job.go (1)

53-58: Consider adding context timeout for list operations.

The job listing operation could hang indefinitely if the API server is unresponsive.

Consider adding a timeout:

+    listCtx, cancel := context.WithTimeout(ctx, 30*time.Second)
+    defer cancel()
+    
-    jobList, err := bc.Jobs("").List(ctx, metav1.ListOptions{
+    jobList, err := bc.Jobs("").List(listCtx, metav1.ListOptions{
         LabelSelector: fmt.Sprintf("type=%s", JobLabelSelector),
     })
pkg/mcptools/deploytools.go (2)

148-148: Fix typo in comment.

-// NewDeployTools creates a new DeployTools instance.l
+// NewDeployTools creates a new DeployTools instance.

96-104: Improve error message consistency.

The error message construction here differs from the pattern used elsewhere in the file. Consider using fmt.Sprintf for consistency.

-    errMsg := strings.Builder{}
-    errMsg.WriteString("The cluster is not configured yet , use the tool")
-    errMsg.WriteString(" 'tssc_config_create' to configure it")
-    return nil, fmt.Errorf("%s: %s", errMsg.String(), err)
+    return nil, fmt.Errorf("the cluster is not configured yet, use the tool 'tssc_config_create' to configure it: %w", err)
pkg/mcptools/configtools.go (1)

172-175: Fix inconsistent indentation in description string

The description string has extra indentation that will appear in the output.

 				mcp.Description(`
 The global settings object for TSSC ('.tssc.settings{}'). When empty the default
 settings will be used.
-				`),
+`),
vendor/github.com/mark3labs/mcp-go/server/streamable_http.go (2)

26-26: Fix typo in comment

-// It's only works for `Start` method. When used as a http.Handler, it has no effect.
+// It only works for `Start` method. When used as a http.Handler, it has no effect.

678-702: InsecureStatefulSessionIdManager doesn't track session state

Despite being called "Stateful", this manager doesn't actually track which sessions exist or have been terminated. It only validates the UUID format. Consider either:

  1. Renaming to clarify it's format-only validation
  2. Adding actual session tracking
  3. Documenting this limitation more clearly in the comments
vendor/github.com/mark3labs/mcp-go/server/session.go (1)

134-154: Consider rate limiting error reporting goroutines

When notification channels are blocked, a new goroutine is spawned for each failed send. In high-traffic scenarios with consistently blocked channels, this could create many goroutines.

Consider implementing a rate limiter or a bounded worker pool for error reporting to prevent goroutine proliferation.

vendor/github.com/mark3labs/mcp-go/server/stdio.go (1)

192-196: Global singleton pattern limits flexibility

The global stdioSessionInstance prevents running multiple stdio servers in the same process. While this is typically fine for stdio usage, consider making it an instance variable of StdioServer for better testability and flexibility.

vendor/github.com/mark3labs/mcp-go/mcp/tools.go (1)

645-649: Consider reversing the default annotation hints

The current defaults set DestructiveHint=true and ReadOnlyHint=false, which marks all tools as potentially destructive by default. Most tools are likely to be safe/read-only operations. Consider making the defaults less conservative.

 Annotations: ToolAnnotation{
     Title:           "",
-    ReadOnlyHint:    ToBoolPtr(false),
-    DestructiveHint: ToBoolPtr(true),
-    IdempotentHint:  ToBoolPtr(false),
-    OpenWorldHint:   ToBoolPtr(true),
+    ReadOnlyHint:    ToBoolPtr(true),
+    DestructiveHint: ToBoolPtr(false),
+    IdempotentHint:  ToBoolPtr(true),
+    OpenWorldHint:   ToBoolPtr(false),
 },
vendor/github.com/mark3labs/mcp-go/server/sse.go (1)

353-356: Consider handling buffer overflow for event channels

The eventQueue and notificationChannel are buffered channels with a fixed size of 100. If events are produced faster than they can be consumed, these buffers could fill up, potentially causing event loss or blocking.

Consider implementing a strategy to handle buffer overflow, such as:

  • Dropping old events with logging
  • Dynamically increasing buffer size
  • Using an unbounded queue implementation
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 169e297 and adae17c.

⛔ Files ignored due to path filters (1)
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (73)
  • .gitignore (1 hunks)
  • README.md (2 hunks)
  • docs/mcp.md (1 hunks)
  • go.mod (2 hunks)
  • pkg/cmd/root.go (1 hunks)
  • pkg/config/config.go (2 hunks)
  • pkg/config/manager.go (1 hunks)
  • pkg/githubapp/githubapp.go (3 hunks)
  • pkg/installer/job.go (1 hunks)
  • pkg/integrations/acs.go (2 hunks)
  • pkg/integrations/artifactory.go (4 hunks)
  • pkg/integrations/azure.go (4 hunks)
  • pkg/integrations/bitbucket.go (3 hunks)
  • pkg/integrations/github.go (3 hunks)
  • pkg/integrations/gitlab.go (3 hunks)
  • pkg/integrations/jenkins.go (3 hunks)
  • pkg/integrations/nexus.go (3 hunks)
  • pkg/integrations/quay.go (5 hunks)
  • pkg/integrations/trustification.go (3 hunks)
  • pkg/k8s/job.go (1 hunks)
  • pkg/k8s/kube.go (2 hunks)
  • pkg/mcpserver/instructions.md (1 hunks)
  • pkg/mcpserver/mcpserver.go (1 hunks)
  • pkg/mcptools/configtools.go (1 hunks)
  • pkg/mcptools/deploytools.go (1 hunks)
  • pkg/mcptools/integrationtools.go (1 hunks)
  • pkg/mcptools/interface.go (1 hunks)
  • pkg/subcmd/deploy.go (1 hunks)
  • pkg/subcmd/integration.go (1 hunks)
  • pkg/subcmd/integration_acs.go (1 hunks)
  • pkg/subcmd/integration_artifactory.go (1 hunks)
  • pkg/subcmd/integration_azure.go (1 hunks)
  • pkg/subcmd/integration_bitbucket.go (1 hunks)
  • pkg/subcmd/integration_githubapp.go (1 hunks)
  • pkg/subcmd/integration_gitlab.go (1 hunks)
  • pkg/subcmd/integration_jenkins.go (1 hunks)
  • pkg/subcmd/integration_nexus.go (1 hunks)
  • pkg/subcmd/integration_quay.go (1 hunks)
  • pkg/subcmd/integration_trustification.go (1 hunks)
  • pkg/subcmd/mcpserver.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/LICENSE (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/prompts.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/resources.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/tools.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/typed_tools.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/types.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/utils.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/errors.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/hooks.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/http_transport_options.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/inprocess_session.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/request_handler.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/sampling.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/server.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/session.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/sse.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/stdio.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/streamable_http.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/util/logger.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/LICENSE (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/README.rst (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/compile.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/equals.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/error.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/escape.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/expression.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/machine.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/match.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/parse.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/prog.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/uritemplate.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/value.go (1 hunks)
  • vendor/modules.txt (2 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (15)
pkg/subcmd/deploy.go (1)
pkg/chartfs/chartfs.go (1)
  • NewChartFSForCWD (117-123)
pkg/mcptools/interface.go (1)
pkg/mcpserver/mcpserver.go (1)
  • MCPServer (15-17)
pkg/config/config.go (3)
pkg/config/product.go (1)
  • ProductSpec (27-36)
pkg/config/dependency.go (1)
  • Dependency (8-15)
pkg/chartfs/chartfs.go (1)
  • NewChartFSForCWD (117-123)
pkg/mcptools/integrationtools.go (4)
vendor/github.com/mark3labs/mcp-go/mcp/tools.go (4)
  • CallToolResult (36-43)
  • Tool (538-549)
  • NewTool (635-657)
  • WithDescription (678-682)
vendor/github.com/spf13/pflag/flag.go (3)
  • VisitAll (333-335)
  • Flag (184-196)
  • Usage (793-796)
vendor/github.com/mark3labs/mcp-go/mcp/utils.go (1)
  • NewToolResultText (245-254)
vendor/github.com/mark3labs/mcp-go/server/server.go (1)
  • ServerTool (50-53)
vendor/github.com/mark3labs/mcp-go/mcp/typed_tools.go (2)
vendor/github.com/mark3labs/mcp-go/mcp/tools.go (2)
  • CallToolRequest (46-49)
  • CallToolResult (36-43)
vendor/github.com/mark3labs/mcp-go/mcp/utils.go (1)
  • NewToolResultError (311-321)
pkg/mcpserver/mcpserver.go (3)
pkg/mcptools/interface.go (1)
  • Interface (8-11)
vendor/github.com/mark3labs/mcp-go/server/stdio.go (1)
  • ServeStdio (462-482)
vendor/github.com/mark3labs/mcp-go/server/server.go (4)
  • WithToolCapabilities (268-275)
  • WithPromptCapabilities (258-265)
  • WithLogging (278-282)
  • WithInstructions (285-289)
vendor/github.com/yosida95/uritemplate/v3/equals.go (1)
vendor/github.com/yosida95/uritemplate/v3/uritemplate.go (1)
  • Template (29-38)
pkg/cmd/root.go (2)
pkg/subcmd/mcpserver.go (1)
  • NewMCPServer (76-91)
pkg/subcmd/template.go (1)
  • NewTemplate (156-190)
vendor/github.com/yosida95/uritemplate/v3/compile.go (1)
vendor/github.com/yosida95/uritemplate/v3/uritemplate.go (1)
  • Template (29-38)
vendor/github.com/yosida95/uritemplate/v3/uritemplate.go (1)
vendor/github.com/yosida95/uritemplate/v3/value.go (2)
  • Values (15-15)
  • String (191-196)
vendor/github.com/yosida95/uritemplate/v3/expression.go (1)
vendor/github.com/yosida95/uritemplate/v3/value.go (1)
  • Values (15-15)
vendor/github.com/mark3labs/mcp-go/mcp/prompts.go (3)
vendor/github.com/mark3labs/mcp-go/mcp/types.go (7)
  • PaginatedRequest (519-522)
  • PaginatedResult (530-536)
  • Request (153-156)
  • Params (162-162)
  • Result (231-235)
  • Content (852-854)
  • Notification (164-167)
pkg/config/manager.go (1)
  • Name (26-26)
vendor/github.com/mark3labs/mcp-go/mcp/tools.go (2)
  • Description (737-741)
  • Required (745-749)
vendor/github.com/mark3labs/mcp-go/mcp/resources.go (3)
vendor/github.com/mark3labs/mcp-go/mcp/types.go (4)
  • Resource (636-651)
  • Annotations (830-843)
  • ResourceTemplate (660-677)
  • URITemplate (72-74)
vendor/github.com/mark3labs/mcp-go/mcp/prompts.go (1)
  • Role (75-75)
vendor/github.com/yosida95/uritemplate/v3/uritemplate.go (2)
  • Template (29-38)
  • MustNew (47-53)
vendor/github.com/mark3labs/mcp-go/server/inprocess_session.go (3)
vendor/github.com/mark3labs/mcp-go/mcp/types.go (6)
  • CreateMessageRequest (795-798)
  • CreateMessageResult (815-822)
  • JSONRPCNotification (318-321)
  • LoggingLevelError (758-758)
  • Implementation (480-483)
  • LoggingLevel (751-751)
vendor/github.com/mark3labs/mcp-go/server/session.go (3)
  • ClientSession (11-20)
  • SessionWithLogging (23-29)
  • SessionWithClientInfo (43-49)
vendor/github.com/mark3labs/mcp-go/server/sampling.go (1)
  • SessionWithSampling (39-42)
vendor/github.com/mark3labs/mcp-go/server/server.go (7)
vendor/github.com/mark3labs/mcp-go/mcp/types.go (16)
  • Resource (636-651)
  • ResourceTemplate (660-677)
  • ReadResourceRequest (568-571)
  • ResourceContents (686-688)
  • JSONRPCError (331-344)
  • Params (162-162)
  • URITemplate (72-74)
  • InitializeRequest (399-402)
  • InitializeResult (414-428)
  • ServerCapabilities (454-477)
  • Implementation (480-483)
  • Named (1083-1085)
  • Cursor (114-114)
  • PaginatedResult (530-536)
  • ReadResourceResult (583-586)
  • Result (231-235)
vendor/github.com/mark3labs/mcp-go/mcp/prompts.go (5)
  • GetPromptRequest (20-23)
  • GetPromptResult (34-39)
  • Prompt (45-53)
  • ListPromptsRequest (7-9)
  • ListPromptsResult (13-16)
vendor/github.com/mark3labs/mcp-go/mcp/tools.go (5)
  • CallToolRequest (46-49)
  • CallToolResult (36-43)
  • Tool (538-549)
  • ListToolsRequest (15-17)
  • ListToolsResult (21-24)
vendor/github.com/mark3labs/mcp-go/mcp/utils.go (1)
  • ToBoolPtr (817-819)
vendor/github.com/mark3labs/mcp-go/server/inprocess_session.go (1)
  • GenerateInProcessSessionID (91-93)
vendor/github.com/mark3labs/mcp-go/server/session.go (4)
  • ClientSessionFromContext (71-76)
  • SessionWithClientInfo (43-49)
  • SessionWithLogging (23-29)
  • SessionWithTools (32-40)
vendor/github.com/mark3labs/mcp-go/server/errors.go (5)
  • ErrSessionNotInitialized (18-18)
  • ErrSessionDoesNotSupportLogging (20-20)
  • ErrResourceNotFound (11-11)
  • ErrPromptNotFound (12-12)
  • ErrToolNotFound (13-13)
🪛 markdownlint-cli2 (0.17.2)
README.md

56-56: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)

docs/mcp.md

4-4: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


12-12: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


18-18: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


22-22: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


26-26: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


31-31: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


35-35: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


36-36: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


37-37: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


38-38: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


39-39: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


41-41: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


45-45: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


50-50: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


58-58: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


63-63: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)

🪛 LanguageTool
docs/mcp.md

[grammar] ~14-~14: Ensure spelling is correct
Context: ...tions for the LLM client to follow. The intructions are documented [here](../pkg/mcpserver/...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[style] ~54-~54: Consider a more concise word here.
Context: ... configuration on a unique ConfigMap, in order to have a single RHADS installation per cl...

(IN_ORDER_TO_PREMIUM)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Red Hat Konflux / rhtap-cli-on-pull-request
🔇 Additional comments (92)
vendor/modules.txt (2)

217-221: LGTM: Vendor modules correctly updated for new MCP dependencies.

The addition of github.com/mark3labs/mcp-go and github.com/yosida95/uritemplate/v3 dependencies is properly reflected in the vendor modules file, which aligns with the MCP server implementation introduced in this PR.


370-372: LGTM: URI template dependency properly tracked.

The github.com/yosida95/uritemplate/v3 module is correctly added to support URI template parsing and matching functionality required by the MCP server.

vendor/github.com/mark3labs/mcp-go/util/logger.go (2)

7-11: LGTM: Clean logging interface design.

The Logger interface provides a minimal and focused contract with Infof and Errorf methods, which is appropriate for the MCP server's logging needs.


16-33: LGTM: Solid default logger implementation.

The DefaultLogger function and stdLogger struct provide a clean wrapper around the standard library logger with appropriate INFO/ERROR prefixes for log level differentiation.

pkg/subcmd/integration.go (1)

7-7: LGTM: Improved import organization.

The addition of a blank line properly separates the standard library imports from the project-specific imports, following Go formatting conventions.

.gitignore (1)

2-2: LGTM: Appropriate addition to .gitignore.

Adding .gemini to the ignore list prevents tool-specific files or directories from being accidentally committed, which aligns with the existing patterns for excluding development tools and temporary files.

go.mod (2)

117-117: LGTM: URI template dependency is well-established.

The github.com/yosida95/uritemplate/v3 v3.0.2 dependency is at a stable v3.x version and provides necessary URI template functionality for the MCP server.


11-11: mcp-go dependency is up-to-date and free of known vulnerabilities

  • Confirmed that v0.34.0 is the latest release of github.com/mark3labs/mcp-go.
  • No open security advisories or vulnerability alerts were found for this version.

No further action needed.

README.md (2)

56-58: Excellent addition of MCP documentation reference.

The new MCP section properly introduces users to the Model Context Protocol server functionality and directs them to comprehensive documentation. This aligns perfectly with the PR objectives.


175-175: Good fix for the markdown link syntax.

The correction properly formats the repository URL link, improving the documentation's readability and functionality.

pkg/config/manager.go (1)

49-52: Critical bug fix: Proper error propagation restored.

The change correctly returns the error when CoreV1ClientSet fails instead of silently returning nil, nil. This ensures callers receive accurate error information, which is essential for the MCP server's reliable operation.

pkg/mcptools/interface.go (1)

7-11: Well-designed interface for MCP tool integration.

The interface follows Go best practices with a single, focused method that clearly defines how MCP tools should integrate with the server. The documentation is clear about its purpose for decorating the server with tool declarations.

pkg/subcmd/integration_gitlab.go (1)

82-82: Good refactoring for improved flag handling.

Passing the entire cobra.Command instance instead of just the flag set allows the PersistentFlags method to properly register and validate required flags at the command level, improving flag handling consistency across integration subcommands.

pkg/subcmd/deploy.go (1)

85-88: Clean refactoring using the helper function.

Replacing the manual current working directory retrieval with chartfs.NewChartFSForCWD() improves code maintainability by eliminating duplication while preserving the same functionality and error handling.

vendor/github.com/mark3labs/mcp-go/LICENSE (1)

1-22: LGTM! Standard MIT license for MCP dependency.

The MIT license text is complete and correctly formatted for the mcp-go dependency from Anthropic, PBC.

pkg/subcmd/integration_bitbucket.go (1)

87-87: LGTM! Improved flag handling pattern.

The change from passing just the flag set to passing the entire cobra command enables enhanced flag management capabilities, including marking flags as required. This aligns with the systematic refactoring across integration subcommands.

vendor/github.com/yosida95/uritemplate/v3/LICENSE (1)

1-26: LGTM! Standard BSD 3-Clause license for URI template dependency.

The BSD license text is complete and correctly formatted for the uritemplate/v3 dependency, with all required clauses present.

vendor/github.com/mark3labs/mcp-go/server/http_transport_options.go (1)

8-11: LGTM! Well-designed HTTP context function type.

The HTTPContextFunc type is well-documented and provides a clean interface for HTTP request-based context augmentation. The design follows Go conventions and enables flexible context manipulation for features like authentication, tracing, or metadata injection.

pkg/subcmd/integration_nexus.go (1)

84-84: LGTM! Consistent with the broader flag handling refactor.

This change aligns with the standardization effort to pass the full cobra.Command object to PersistentFlags methods, enabling better required flag enforcement and consistency across integration commands.

pkg/subcmd/integration_quay.go (1)

90-90: LGTM! Consistent flag handling improvement.

This change follows the same pattern as other integration commands, passing the full cobra.Command to enable standardized flag registration and required flag enforcement.

pkg/subcmd/integration_jenkins.go (1)

86-86: LGTM! Part of the standardized flag handling refactor.

This change maintains consistency with the broader effort to standardize flag registration across all integration commands, supporting both CLI and MCP server usage patterns.

pkg/subcmd/integration_acs.go (1)

84-84: LGTM! Consistent with the standardization effort.

This change aligns with the coordinated refactor to standardize flag handling across integration commands, enabling consistent flag registration and validation patterns.

pkg/subcmd/integration_trustification.go (1)

89-89: LGTM! Completes the coordinated flag handling refactor.

This change finalizes the standardization effort across all integration commands, ensuring consistent flag registration and validation patterns throughout the codebase.

vendor/github.com/yosida95/uritemplate/v3/error.go (1)

13-16: LGTM: Clean error formatting utility.

This is a well-structured helper function that provides consistent error formatting with positional context for the URI template parser. The implementation follows Go conventions and provides useful debugging information by including position data in error messages.

pkg/subcmd/integration_artifactory.go (1)

85-85: LGTM: Consistent flag registration pattern.

This change aligns with the broader refactor to pass the entire cobra.Command to PersistentFlags() instead of just the flag set, enabling better integration with cobra's command structure and flag validation mechanisms.

pkg/subcmd/integration_azure.go (1)

88-88: LGTM: Consistent with refactoring pattern.

This change follows the same pattern as other integration subcommands, passing the complete cobra.Command to enable better flag handling and validation within the integration's PersistentFlags method.

pkg/k8s/kube.go (1)

48-56: LGTM: Well-structured batch client method.

The BatchV1ClientSet method follows the established pattern of other clientset methods in this file and provides the necessary Kubernetes batch/v1 API access for job management functionality introduced in this PR.

pkg/subcmd/integration_githubapp.go (1)

132-133: LGTM: Consistent flag registration refactor.

Both gitHubIntegration and gitHubApp now receive the complete cobra.Command object, following the same refactoring pattern applied across all integration subcommands. This enables better flag handling and required flag enforcement within the integration components.

pkg/cmd/root.go (1)

35-36: LGTM! MCP server subcommand properly integrated.

The addition of the MCP server subcommand is correctly positioned in the command hierarchy and uses appropriate dependencies (r.flags, r.kube). The reordering of the NewTemplate subcommand has no functional impact.

pkg/githubapp/githubapp.go (2)

16-16: Consistent flag handling migration.

The import change from pflag to cobra aligns with the broader refactoring effort across the codebase.


42-56: Improved flag validation with required flag enforcement.

The method signature change to accept *cobra.Command and the addition of required flag marking for "org" improves validation. The panic on MarkPersistentFlagRequired error is appropriate since this would only occur due to programming errors.

vendor/github.com/yosida95/uritemplate/v3/README.rst (1)

1-47: Standard vendor documentation for URI template library.

This README file provides appropriate documentation for the uritemplate package dependency added to support MCP server functionality. The content includes standard elements like installation instructions, documentation links, and licensing information.

pkg/integrations/github.go (1)

15-15: Consistent flag handling migration.

The import change from pflag to cobra aligns with the broader refactoring effort.

pkg/integrations/trustification.go (2)

12-12: Consistent flag handling migration.

The import change from pflag to cobra aligns with the broader refactoring effort across integrations.


33-59: Excellent approach for multiple required flags.

The method signature change and the use of a loop to mark multiple flags as required is a clean, maintainable approach. All marked flags (bombastic-api-url, oidc-issuer-url, oidc-client-id, oidc-client-secret) are properly validated in the Validate() method, ensuring consistency.

pkg/integrations/acs.go (3)

12-12: LGTM! Import migration to Cobra is correct.

The import change from pflag to cobra aligns with the method signature update and is consistent with the broader refactoring across integration packages.


30-31: LGTM! Method signature update is well-implemented.

The change from *pflag.FlagSet to *cobra.Command parameter enables better flag management and required flag enforcement. The implementation correctly obtains the persistent flag set from the command.


41-45: Good addition of required flag enforcement.

The loop to mark endpoint and token flags as required improves user experience by providing early validation. The use of panic() for flag marking errors is consistent with the pattern used across other integration packages in this refactor.

pkg/integrations/jenkins.go (3)

13-13: LGTM! Consistent import migration to Cobra.

The import change is consistent with the standardized migration across integration packages.


32-33: LGTM! Method signature properly updated.

The migration to *cobra.Command parameter follows the established pattern and enables enhanced flag management capabilities.


45-49: Excellent required flag selection for Jenkins integration.

The flags token, username, and url are correctly identified as required for Jenkins integration. The implementation follows the consistent pattern established across integration packages.

pkg/integrations/gitlab.go (3)

11-11: LGTM! Standard import migration.

Consistent with the cobra migration pattern across integration packages.


35-36: LGTM! Consistent method signature update.

The cobra command parameter enables the required flag enforcement pattern used throughout the integration packages.


52-56: Appropriate required flags for GitLab integration.

The token and group flags are correctly marked as required - token for API authentication and group for defining the operational scope in GitLab.

vendor/github.com/yosida95/uritemplate/v3/machine.go (1)

1-24: Vendor code addition for URI template processing.

This new vendor file implements efficient data structures for URI template matching using a sparse set pattern. It's part of the github.com/yosida95/uritemplate/v3 package that supports the MCP server functionality introduced in this PR.

The implementation follows established patterns for virtual machine-based matching engines and should provide efficient URI template processing for the MCP server.

pkg/config/config.go (3)

13-20: Excellent addition of type aliases for better code organization.

The new type aliases Settings, Products, and Dependencies improve code readability and provide a solid foundation for future type-specific enhancements. The documentation is clear and the naming follows Go conventions.


29-33: LGTM! Clean migration to type aliases in Spec struct.

The struct fields now use the new type aliases while maintaining all YAML tags and documentation. This improves type safety without breaking existing functionality.


174-182: Useful addition of default configuration constructor.

The NewConfigDefault function provides a convenient way to create configurations with default values, which supports the MCP server integration. The implementation correctly uses existing helper functions and follows established patterns.

The function properly handles the error chain from NewChartFSForCWD() and NewConfigFromFile().

pkg/mcpserver/instructions.md (1)

1-48: LGTM! Clear and well-structured documentation.

The documentation provides a comprehensive guide for the TSSC Installer Assistant workflow. The phased approach (Configuration → Integrations → Deployment) is logical and the tool commands are clearly defined.

vendor/github.com/mark3labs/mcp-go/mcp/typed_tools.go (1)

8-20: LGTM! Well-designed type-safe tool handler implementation.

The generic TypedToolHandlerFunc and NewTypedToolHandler provide excellent type safety for MCP tool argument binding. The error handling properly returns NewToolResultError when argument binding fails, maintaining consistency with the MCP protocol.

pkg/integrations/azure.go (3)

36-37: LGTM! Consistent flag handling refactor.

The change to accept *cobra.Command instead of *pflag.FlagSet aligns with the broader integration refactoring across the codebase.


55-61: LGTM! Proper required flag enforcement.

Marking the essential flags as required at the command level improves user experience by catching missing required flags early. The panic on error is appropriate for CLI setup failures.


206-206: LGTM! Good default value initialization.

Setting the default host to defaultPublicAzureHost provides a sensible default and improves the user experience.

pkg/mcpserver/mcpserver.go (2)

12-13: LGTM! Proper use of go:embed for instructions.

Using go:embed to include the instructions.md file is the correct approach for embedding static content.


19-23: LGTM! Clean tool integration pattern.

The AddTools method provides a clean way to register multiple MCP tools using the interface pattern.

pkg/integrations/artifactory.go (3)

32-33: LGTM! Consistent with integration refactoring pattern.

The change to accept *cobra.Command instead of *pflag.FlagSet aligns with the broader integration refactoring.


45-49: LGTM! Proper required flag enforcement.

Marking the essential flags as required improves validation by catching missing flags at the command level.


64-71: LGTM! Simplified and focused validation logic.

The validation is now more focused on URL parsing and scheme validation, which is appropriate since empty string validation is handled by the required flags.

pkg/integrations/nexus.go (2)

31-47: LGTM - Clean migration to cobra command flag handling

The migration from pflag.FlagSet to *cobra.Command is well-implemented. The explicit marking of required flags using MarkPersistentFlagRequired provides better enforcement than manual validation.


60-67: URL validation logic is correct and simplified

The simplified validation approach is cleaner - parsing the URL first and then checking the scheme. Removing the explicit empty URL check is appropriate since cobra's required flag enforcement handles this.

vendor/github.com/yosida95/uritemplate/v3/equals.go (2)

16-53: Well-structured URI template comparison implementation

The Equals function provides comprehensive template comparison with configurable behavior via flags. The logic correctly handles both literal and expression comparisons, including variable properties like maxlen and explode.


48-50: Default panic in vendor code is expected and safe

The panic("unhandled case") lives entirely within the vendored URI template implementation and only triggers if a new expression type is ever introduced without corresponding handling. Our searches show no direct calls to Equals outside of that vendor package, so this panic cannot bubble up into application code under normal operation. No changes needed here.

pkg/integrations/bitbucket.go (2)

33-51: Consistent migration to cobra command pattern

The flag handling migration follows the same pattern as other integration files, which ensures consistency across the codebase. The dynamic usage text for the host flag is a nice improvement.


182-182: Good initialization of default host value

Setting the default host in the constructor is cleaner than handling it in validation logic. This ensures the default is always available.

pkg/mcptools/integrationtools.go (2)

72-83: MCP tool registration looks correct

The tool registration follows the proper MCP pattern with appropriate description and handler binding.


35-42: Required flag detection logic verified

Verified that Cobra’s MarkPersistentFlagRequired sets the BashCompOneRequiredFlag annotation to ["true"] (see cobra/shell_completions.go), and every integration under pkg/integrations/… invokes this method for its required flags. The code in pkg/mcptools/integrationtools.go correctly checks for this annotation and appends “(REQUIRED)”. No changes needed.

pkg/integrations/quay.go (3)

36-56: Consistent implementation following established pattern

The migration to cobra command flag handling is consistent with other integration files. The three required flags (dockerconfigjson, token, url) are appropriate for Quay integration.


189-189: Proper default URL initialization

Setting the default Quay URL in the constructor is the right approach, ensuring it's always available without relying on validation-time fallbacks.


71-78: Simplified validation is appropriate

The removal of explicit empty field checks is correct since cobra's required flag enforcement handles this at the CLI level. The URL validation logic is sound.

docs/mcp.md (1)

9-9: Verify the container image reference

The documentation references ghcr.io/redhat-appstudio/tssc:latest while the PR objectives mention ghcr.io/otaviof/tssc:latest. Please confirm which registry should be used in the documentation.

vendor/github.com/mark3labs/mcp-go/server/errors.go (1)

1-35: LGTM!

Well-structured error definitions following Go best practices. The error variables are clearly named and the custom ErrDynamicPathConfig type provides context-specific error information.

vendor/github.com/yosida95/uritemplate/v3/uritemplate.go (1)

1-117: LGTM!

Well-designed template implementation with proper thread safety, efficient caching, and clean API. The use of mutex protection for lazy initialization of computed values is appropriate.

vendor/github.com/yosida95/uritemplate/v3/compile.go (1)

1-225: LGTM!

Complex but well-structured bytecode compiler implementation for URI templates. The code handles various template features systematically with appropriate opcode generation.

vendor/github.com/mark3labs/mcp-go/server/request_handler.go (1)

1-321: Vendor file - no review needed

This is auto-generated vendor code from the github.com/mark3labs/mcp-go dependency. Implementation details in vendor files are outside the scope of this review.

pkg/subcmd/mcpserver.go (2)

83-85: LGTM - Logger constraint is well-documented

The comment clearly explains why the logger output needs to be discarded when using STDIO communication. This is a reasonable design decision for an MCP server.


59-73: No error handling needed for integrationTools or deployTools
Both NewIntegrationTools and NewDeployTools return pointer types and do not return an error, so the lone error check after NewConfigTools is sufficient.

vendor/github.com/yosida95/uritemplate/v3/expression.go (1)

1-174: Vendor file - no review needed

This is vendor code from the github.com/yosida95/uritemplate/v3 dependency with BSD 3-Clause License. Implementation details in vendor files are outside the scope of this review.

vendor/github.com/mark3labs/mcp-go/server/sampling.go (1)

1-59: Vendor file - no review needed

This is vendor code from the github.com/mark3labs/mcp-go dependency. Implementation details in vendor files are outside the scope of this review.

vendor/github.com/yosida95/uritemplate/v3/prog.go (1)

1-131: Vendor file - no review needed

This is vendor code from the github.com/yosida95/uritemplate/v3 dependency with BSD 3-Clause License. Implementation details in vendor files are outside the scope of this review.

vendor/github.com/yosida95/uritemplate/v3/match.go (1)

1-214: Vendor code looks appropriate for URI template matching.

This third-party library implementation appears well-structured with proper synchronization and memory management. The thread-based matching engine with capture groups is a standard approach for template matching.

Key observations:

  • Thread safety is handled via mutex in the Template.Match method
  • Percent decoding is correctly applied to captured values
  • The matching algorithm uses a non-backtracking approach which should provide predictable performance
vendor/github.com/yosida95/uritemplate/v3/parse.go (1)

1-278: URI template parser implementation is robust.

This vendor code provides a well-structured parser with proper validation:

  • Comprehensive Unicode range definitions for valid characters
  • State machine approach with clear state transitions
  • Proper UTF-8 sequence validation
  • Bounds checking for percent-encoded triplets

The parser correctly implements RFC 6570 URI Template parsing requirements.

pkg/mcptools/deploytools.go (1)

24-146: Well-structured deployment tool implementation.

The DeployTools implementation demonstrates good practices:

  • Clear separation between status checking and deployment operations
  • Informative user messages with actionable next steps
  • Proper error handling with context
  • Good integration with the MCP server framework
vendor/github.com/mark3labs/mcp-go/mcp/resources.go (2)

60-71: Be aware of potential panic from MustNew with invalid templates.

The NewResourceTemplate function uses uritemplate.MustNew which panics if the template string is invalid. Ensure that all URI template strings passed to this function are validated or come from trusted sources.

When using this vendor library in your code, consider wrapping calls or pre-validating templates to prevent runtime panics.


1-100: Well-designed resource configuration using functional options pattern.

The implementation provides a clean and flexible API for configuring resources and resource templates:

  • Functional options pattern allows for extensible configuration
  • Clear separation between Resource and ResourceTemplate types
  • Proper integration with the uritemplate library
  • Good documentation for each option function
vendor/github.com/mark3labs/mcp-go/server/streamable_http.go (2)

135-166: Well-structured HTTP handler implementation

The constructor properly initializes with sensible defaults, and the HTTP method routing is clean and follows REST conventions.


459-516: Proper session cleanup and thread-safe request ID generation

The DELETE handler correctly removes all session-related data, and the atomic operations ensure thread-safe request ID generation.

vendor/github.com/mark3labs/mcp-go/server/session.go (1)

10-85: Well-designed session interfaces with proper separation of concerns

The interface hierarchy follows SOLID principles with clear separation between core session functionality and optional capabilities. The context key pattern is properly implemented.

vendor/github.com/mark3labs/mcp-go/server/stdio.go (1)

352-366: Concurrent tool call processing may cause response ordering issues

Processing tool calls in separate goroutines can lead to responses being sent out of order. While this improves throughput for sampling operations, it might confuse clients expecting ordered responses.

Consider documenting this behavior or adding a sequence number to responses if ordering is important for your use case.

vendor/github.com/mark3labs/mcp-go/mcp/types.go (1)

1087-1129: Well-implemented polymorphic content marshaling

The content marshaling correctly handles all content types with proper type discrimination and descriptive error messages. Good implementation of the type-based polymorphism pattern.

vendor/github.com/mark3labs/mcp-go/server/sse.go (1)

88-96: sync.Map.Clear() compatibility confirmed
The project’s go.mod specifies Go 1.24.0, which includes sync.Map.Clear() (introduced in Go 1.23). No changes are required for compatibility.

vendor/github.com/yosida95/uritemplate/v3/value.go (1)

1-217: Vendor file review: No critical issues found

This vendor file implements URI template value handling according to RFC 6570. The implementation appears correct with proper:

  • Nil safety in the Get method
  • Bounds checking in String() method
  • Validation in accessor methods
  • Even-length validation for key-value pairs
  • Proper handling of exploded/non-exploded expressions

Since this is a vendor dependency, no changes should be made directly to this file.

vendor/github.com/mark3labs/mcp-go/mcp/prompts.go (1)

1-171: Vendor file review: Well-structured prompt definitions

This vendor file provides a clean implementation of MCP protocol prompt types with:

  • Proper JSON serialization tags
  • Well-documented types and functions
  • Correct use of functional options pattern
  • Appropriate use of embedded types for pagination
  • Clear separation of concerns

No issues identified. Since this is a vendor dependency, no changes should be made directly to this file.

@otaviof otaviof force-pushed the RHTAP-5269-bootstrap branch from adae17c to 5e66379 Compare July 25, 2025 10:43
@openshift-ci-robot
Copy link
Collaborator

openshift-ci-robot commented Jul 25, 2025

@otaviof: This pull request references RHTAP-5269 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the epic to target the "4.20.0" version, but no target version was set.

In response to this:

This PR is bringing the MCP server scaffold to the project, it exposes a number of MCP tools to have a "vibe platform engineering" powered by tssc.

The MCP server is a subcommand of tssc, following the example of many other projects out there. To start the MCP server run:

tssc mcp-server --image="ghcr.io/otaviof/tssc:latest"

Summary by CodeRabbit

New Features

  • Introduced a Model Context Protocol Server (MCP) for TSSC, enabling advanced installation, configuration, and deployment workflows via a new CLI subcommand and documented protocol.
  • Added MCP-based tools for managing cluster configuration, integrations, and deployment, with asynchronous job handling and status reporting.
  • Enhanced integration subcommands to enforce required flags and improve validation.
  • Updated documentation to include MCP usage, protocol details, and installation guidance.

Bug Fixes

  • Improved error propagation in configuration management for more accurate feedback.

Documentation

  • Added comprehensive guides for MCP server usage, installation phases, and integration with external services.

Chores

  • Updated dependencies and vendored libraries to support MCP functionality and URI template handling.
  • Added and updated license files for new dependencies.

Refactor

  • Streamlined flag registration for integration commands to improve consistency and enforce required parameters.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (3)
pkg/installer/job.go (3)

127-168: Security concern: cluster-admin privileges are overly broad.

The installer job is granted cluster-admin privileges, which provides unrestricted access to the entire cluster. This violates the principle of least privilege.

Consider creating a custom ClusterRole with only the specific permissions needed for TSSC installation.


189-195: Remove hard-coded dry-run flag to enable actual deployment.

The job arguments include a hard-coded --dry-run flag, which prevents actual deployment. This should be configurable.


230-254: Add cleanup on failure and validate input parameters.

The Create method should clean up RBAC resources if job creation fails, and the image parameter should be validated.

🧹 Nitpick comments (4)
pkg/installer/job.go (2)

19-19: Fix typo in comment

-// Job represents the assynchronous actor that runs a Job in the cluster to run
+// Job represents the asynchronous actor that runs a Job in the cluster to run

261-261: Consider allowing retries for deployment resilience.

Setting retries to 0 means the job won't retry on failure. For deployment jobs, having some retry capability (e.g., 3 retries) would improve resilience against transient failures.

-		retries: 0,
+		retries: 3,
README.md (1)

56-56: Match heading style with the rest of the document.

The new section uses atx-style heading (##) while the document appears to use setext-style headings for consistency.

-## Model Context Protocol Server (MCP)
+Model Context Protocol Server (MCP)
+-----------------------------------
docs/mcp.md (1)

54-54: Consider more concise phrasing.

-The `tssc` design maintains a single deployment per cluster, by centralising the installer configuration on a unique `ConfigMap`, in order to have a single RHADS installation per cluster.
+The `tssc` design maintains a single deployment per cluster, by centralising the installer configuration on a unique `ConfigMap`, to ensure a single RHADS installation per cluster.
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between adae17c and 5e66379.

📒 Files selected for processing (10)
  • README.md (2 hunks)
  • docs/mcp.md (1 hunks)
  • pkg/cmd/root.go (1 hunks)
  • pkg/installer/job.go (1 hunks)
  • pkg/k8s/kube.go (2 hunks)
  • pkg/mcpserver/instructions.md (1 hunks)
  • pkg/mcpserver/mcpserver.go (1 hunks)
  • pkg/mcptools/deploytools.go (1 hunks)
  • pkg/mcptools/interface.go (1 hunks)
  • pkg/subcmd/mcpserver.go (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • pkg/mcpserver/mcpserver.go
🚧 Files skipped from review as they are similar to previous changes (6)
  • pkg/mcpserver/instructions.md
  • pkg/cmd/root.go
  • pkg/k8s/kube.go
  • pkg/mcptools/interface.go
  • pkg/subcmd/mcpserver.go
  • pkg/mcptools/deploytools.go
🧰 Additional context used
🧬 Code Graph Analysis (1)
pkg/installer/job.go (1)
pkg/k8s/kube.go (1)
  • Kube (21-23)
🪛 markdownlint-cli2 (0.17.2)
README.md

56-56: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)

docs/mcp.md

4-4: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


12-12: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


18-18: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


22-22: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


26-26: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


31-31: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


35-35: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


36-36: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


37-37: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


38-38: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


39-39: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


41-41: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


45-45: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


50-50: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


58-58: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


63-63: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)

🪛 LanguageTool
docs/mcp.md

[style] ~54-~54: Consider a more concise word here.
Context: ... configuration on a unique ConfigMap, in order to have a single RHADS installation per cl...

(IN_ORDER_TO_PREMIUM)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Red Hat Konflux / rhtap-cli-on-pull-request
🔇 Additional comments (1)
README.md (1)

175-175: Good fix for the markdown link syntax.

The correction properly formats the repository link.

@otaviof otaviof force-pushed the RHTAP-5269-bootstrap branch 2 times, most recently from 2fb32b5 to e55e5e4 Compare July 30, 2025 20:00
@otaviof otaviof requested a review from Roming22 July 30, 2025 20:00
@openshift-ci-robot
Copy link
Collaborator

openshift-ci-robot commented Jul 30, 2025

@otaviof: This pull request references RHTAP-5269 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the epic to target the "4.20.0" version, but no target version was set.

In response to this:

This PR is bringing the MCP server scaffold to the project, it exposes a number of MCP tools to have a "vibe platform engineering" powered by tssc.

The MCP server is a subcommand of tssc, following the example of many other projects out there. To start the MCP server run:

tssc mcp-server --image="ghcr.io/otaviof/tssc:latest"

Summary by CodeRabbit

New Features

  • Introduced a Model Context Protocol Server (MCP) for TSSC, enabling advanced installation, configuration, and deployment workflows via a new CLI subcommand and documented protocol.
  • Added MCP-based tools for managing cluster configuration, integrations, and deployment, with asynchronous job handling and status reporting.
  • Added a new asynchronous installer job mechanism to run installer containers in Kubernetes clusters.
  • Enhanced integration subcommands to enforce required flags and improve validation.
  • Added a new MCP server wrapper supporting tool integration and STDIO communication.
  • Added a new MCP server subcommand to start the MCP server with required flags.
  • Added detailed MCP protocol support including prompts, tools, resources, notifications, and sampling.
  • Added Server-Sent Events (SSE) and HTTP streaming support for MCP server communication.
  • Added URI Template parsing, matching, and expansion support via a new dependency.
  • Added generic typed tool handler abstractions for type-safe MCP tool invocation.

Bug Fixes

  • Improved error propagation in configuration management for more accurate feedback.

Documentation

  • Added comprehensive guides for MCP server usage, installation phases, and integration with external services.
  • Updated README to include MCP server information and corrected installation link formatting.
  • Added detailed MCP protocol and tool documentation files.

Chores

  • Updated dependencies and vendored libraries to support MCP functionality and URI template handling.
  • Added and updated license files for new dependencies.

Refactor

  • Streamlined flag registration for integration commands to improve consistency and enforce required parameters.
  • Changed integration flag handling from pflag.FlagSet to cobra.Command for better flag management and required flag enforcement.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

♻️ Duplicate comments (7)
vendor/github.com/buger/jsonparser/Dockerfile (1)

1-12: Vendor files should not be modified.

This is a vendored dependency file that should remain unmodified to ensure reproducible builds and proper dependency management. Any changes would be lost during dependency updates.

vendor/github.com/mark3labs/mcp-go/server/streamable_http.go (2)

391-406: Consider handling channel blocking in notification forwarding

The notification forwarding goroutine could block indefinitely if writeChan is full. This could lead to goroutine leaks in the vendored library.


221-225: Add request body size limit to prevent memory exhaustion

Using io.ReadAll without a size limit could lead to memory exhaustion with large request bodies. This is a security vulnerability in the vendored library that should be addressed upstream.

vendor/github.com/mark3labs/mcp-go/server/sse.go (1)

356-356: Consider making CORS configuration more restrictive

The Access-Control-Allow-Origin header is set to "*", which allows any origin to connect. This might be too permissive for production use.

vendor/github.com/mark3labs/mcp-go/server/server.go (1)

507-512: Potential race condition in SetTools method

The lock is released before calling AddTools, which could cause concurrent access issues.

vendor/github.com/mark3labs/mcp-go/mcp/utils.go (1)

311-326: Fix parameter name in NewToolResultAudio

The parameter imageData should be renamed to audioData for clarity.

vendor/github.com/mark3labs/mcp-go/server/hooks.go (1)

123-532: Thread safety concern remains valid

The implementation matches the previous review's findings regarding thread safety. The slice operations in Add* methods and iterations in invocation methods lack synchronization, which could cause race conditions under concurrent access. Additionally, hook invocations don't include panic recovery.

Since this is vendor code, ensure your application-level usage of this hooks system implements proper synchronization if concurrent access is expected.

🧹 Nitpick comments (2)
docs/mcp.md (1)

54-54: Consider more concise wording

-The `tssc` design maintains a single deployment per cluster, by centralising the installer configuration on a unique `ConfigMap`, in order to have a single RHADS installation per cluster.
+The `tssc` design maintains a single deployment per cluster, by centralising the installer configuration on a unique `ConfigMap`, to ensure a single RHADS installation per cluster.
vendor/github.com/invopop/jsonschema/reflect_comments.go (1)

59-82: Consider improving error handling and directory traversal

The function silently continues on parse errors and doesn't validate the base path parameter. Also, the logic for building the package key might produce incorrect results when the walked path doesn't properly relate to the base.

Consider adding validation:

// Validate base path
if base == "" {
    return fmt.Errorf("base path cannot be empty")
}

// In the walk function, improve package key construction
relPath, err := filepath.Rel(path, path)
if err != nil {
    return fmt.Errorf("failed to get relative path: %w", err)
}
k := filepath.ToSlash(filepath.Join(base, relPath))
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5e66379 and e55e5e4.

⛔ Files ignored due to path filters (1)
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (86)
  • .gitignore (1 hunks)
  • README.md (2 hunks)
  • docs/mcp.md (1 hunks)
  • go.mod (4 hunks)
  • pkg/cmd/root.go (1 hunks)
  • pkg/config/config.go (2 hunks)
  • pkg/config/manager.go (1 hunks)
  • pkg/githubapp/githubapp.go (3 hunks)
  • pkg/installer/job.go (1 hunks)
  • pkg/integrations/acs.go (2 hunks)
  • pkg/integrations/artifactory.go (4 hunks)
  • pkg/integrations/azure.go (4 hunks)
  • pkg/integrations/bitbucket.go (3 hunks)
  • pkg/integrations/github.go (3 hunks)
  • pkg/integrations/gitlab.go (4 hunks)
  • pkg/integrations/jenkins.go (4 hunks)
  • pkg/integrations/nexus.go (3 hunks)
  • pkg/integrations/quay.go (5 hunks)
  • pkg/integrations/trustification.go (3 hunks)
  • pkg/k8s/kube.go (2 hunks)
  • pkg/mcpserver/instructions.md (1 hunks)
  • pkg/mcpserver/mcpserver.go (1 hunks)
  • pkg/mcptools/configtools.go (1 hunks)
  • pkg/mcptools/deploytools.go (1 hunks)
  • pkg/mcptools/integrationtools.go (1 hunks)
  • pkg/mcptools/interface.go (1 hunks)
  • pkg/subcmd/deploy.go (1 hunks)
  • pkg/subcmd/integration.go (1 hunks)
  • pkg/subcmd/integration_acs.go (1 hunks)
  • pkg/subcmd/integration_artifactory.go (1 hunks)
  • pkg/subcmd/integration_azure.go (1 hunks)
  • pkg/subcmd/integration_bitbucket.go (1 hunks)
  • pkg/subcmd/integration_githubapp.go (1 hunks)
  • pkg/subcmd/integration_gitlab.go (1 hunks)
  • pkg/subcmd/integration_jenkins.go (1 hunks)
  • pkg/subcmd/integration_nexus.go (1 hunks)
  • pkg/subcmd/integration_quay.go (1 hunks)
  • pkg/subcmd/integration_trustification.go (1 hunks)
  • pkg/subcmd/mcpserver.go (1 hunks)
  • vendor/github.com/bahlo/generic-list-go/LICENSE (1 hunks)
  • vendor/github.com/bahlo/generic-list-go/README.md (1 hunks)
  • vendor/github.com/bahlo/generic-list-go/list.go (1 hunks)
  • vendor/github.com/buger/jsonparser/.gitignore (1 hunks)
  • vendor/github.com/buger/jsonparser/.travis.yml (1 hunks)
  • vendor/github.com/buger/jsonparser/Dockerfile (1 hunks)
  • vendor/github.com/buger/jsonparser/LICENSE (1 hunks)
  • vendor/github.com/buger/jsonparser/Makefile (1 hunks)
  • vendor/github.com/buger/jsonparser/README.md (1 hunks)
  • vendor/github.com/buger/jsonparser/bytes.go (1 hunks)
  • vendor/github.com/buger/jsonparser/bytes_safe.go (1 hunks)
  • vendor/github.com/buger/jsonparser/bytes_unsafe.go (1 hunks)
  • vendor/github.com/buger/jsonparser/escape.go (1 hunks)
  • vendor/github.com/buger/jsonparser/fuzz.go (1 hunks)
  • vendor/github.com/buger/jsonparser/oss-fuzz-build.sh (1 hunks)
  • vendor/github.com/buger/jsonparser/parser.go (1 hunks)
  • vendor/github.com/invopop/jsonschema/.gitignore (1 hunks)
  • vendor/github.com/invopop/jsonschema/.golangci.yml (1 hunks)
  • vendor/github.com/invopop/jsonschema/COPYING (1 hunks)
  • vendor/github.com/invopop/jsonschema/README.md (1 hunks)
  • vendor/github.com/invopop/jsonschema/id.go (1 hunks)
  • vendor/github.com/invopop/jsonschema/reflect.go (1 hunks)
  • vendor/github.com/invopop/jsonschema/reflect_comments.go (1 hunks)
  • vendor/github.com/invopop/jsonschema/schema.go (1 hunks)
  • vendor/github.com/invopop/jsonschema/utils.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/LICENSE (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/errors.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/prompts.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/resources.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/tools.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/typed_tools.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/types.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/utils.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/constants.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/ctx.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/errors.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/hooks.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/http_transport_options.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/inprocess_session.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/request_handler.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/sampling.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/server.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/session.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/sse.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/stdio.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/streamable_http.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/util/logger.go (1 hunks)
✅ Files skipped from review due to trivial changes (17)
  • vendor/github.com/invopop/jsonschema/.gitignore
  • vendor/github.com/bahlo/generic-list-go/README.md
  • vendor/github.com/invopop/jsonschema/COPYING
  • pkg/subcmd/integration_bitbucket.go
  • vendor/github.com/bahlo/generic-list-go/LICENSE
  • pkg/subcmd/integration_gitlab.go
  • vendor/github.com/buger/jsonparser/.gitignore
  • vendor/github.com/buger/jsonparser/LICENSE
  • vendor/github.com/mark3labs/mcp-go/server/ctx.go
  • vendor/github.com/mark3labs/mcp-go/server/constants.go
  • vendor/github.com/buger/jsonparser/.travis.yml
  • vendor/github.com/invopop/jsonschema/utils.go
  • vendor/github.com/buger/jsonparser/oss-fuzz-build.sh
  • vendor/github.com/buger/jsonparser/bytes_safe.go
  • pkg/mcpserver/mcpserver.go
  • vendor/github.com/invopop/jsonschema/.golangci.yml
  • vendor/github.com/invopop/jsonschema/schema.go
🚧 Files skipped from review as they are similar to previous changes (42)
  • pkg/subcmd/integration.go
  • .gitignore
  • pkg/subcmd/deploy.go
  • pkg/config/manager.go
  • pkg/subcmd/integration_quay.go
  • vendor/github.com/mark3labs/mcp-go/LICENSE
  • pkg/subcmd/integration_jenkins.go
  • pkg/subcmd/integration_artifactory.go
  • pkg/mcptools/interface.go
  • pkg/subcmd/integration_azure.go
  • pkg/cmd/root.go
  • pkg/subcmd/integration_githubapp.go
  • pkg/subcmd/integration_trustification.go
  • vendor/github.com/mark3labs/mcp-go/server/http_transport_options.go
  • pkg/subcmd/integration_acs.go
  • pkg/subcmd/integration_nexus.go
  • vendor/github.com/mark3labs/mcp-go/util/logger.go
  • pkg/mcpserver/instructions.md
  • pkg/integrations/trustification.go
  • pkg/integrations/azure.go
  • pkg/k8s/kube.go
  • pkg/githubapp/githubapp.go
  • pkg/integrations/github.go
  • pkg/integrations/gitlab.go
  • pkg/integrations/nexus.go
  • pkg/integrations/acs.go
  • pkg/mcptools/integrationtools.go
  • vendor/github.com/mark3labs/mcp-go/server/errors.go
  • pkg/integrations/artifactory.go
  • pkg/integrations/bitbucket.go
  • vendor/github.com/mark3labs/mcp-go/server/sampling.go
  • pkg/subcmd/mcpserver.go
  • pkg/integrations/jenkins.go
  • pkg/mcptools/configtools.go
  • pkg/installer/job.go
  • vendor/github.com/mark3labs/mcp-go/mcp/resources.go
  • pkg/mcptools/deploytools.go
  • pkg/config/config.go
  • go.mod
  • vendor/github.com/mark3labs/mcp-go/mcp/prompts.go
  • vendor/github.com/mark3labs/mcp-go/server/inprocess_session.go
  • pkg/integrations/quay.go
🧰 Additional context used
🧠 Learnings (2)
vendor/github.com/buger/jsonparser/Dockerfile (1)

Learnt from: dperaza4dustbit
PR: #599
File: vendor/github.com/hashicorp/go-retryablehttp/cert_error_go120.go:11-13
Timestamp: 2025-07-30T19:30:03.684Z
Learning: Vendor files in Go projects should never be modified directly. The vendor directory contains third-party dependencies that should remain unmodified to ensure reproducible builds and proper dependency management. Any changes would be lost during dependency updates.

vendor/github.com/buger/jsonparser/Makefile (1)

Learnt from: dperaza4dustbit
PR: #599
File: vendor/github.com/hashicorp/go-retryablehttp/cert_error_go120.go:11-13
Timestamp: 2025-07-30T19:30:03.684Z
Learning: Vendor files in Go projects should never be modified directly. The vendor directory contains third-party dependencies that should remain unmodified to ensure reproducible builds and proper dependency management. Any changes would be lost during dependency updates.

🧬 Code Graph Analysis (8)
vendor/github.com/buger/jsonparser/escape.go (1)
vendor/github.com/buger/jsonparser/parser.go (1)
  • MalformedStringEscapeError (20-20)
vendor/github.com/mark3labs/mcp-go/mcp/typed_tools.go (2)
vendor/github.com/mark3labs/mcp-go/mcp/tools.go (2)
  • CallToolRequest (54-58)
  • CallToolResult (40-51)
vendor/github.com/mark3labs/mcp-go/mcp/utils.go (2)
  • NewToolResultError (349-359)
  • NewToolResultStructuredOnly (273-292)
vendor/github.com/invopop/jsonschema/reflect_comments.go (1)
vendor/github.com/invopop/jsonschema/reflect.go (1)
  • Reflector (73-171)
vendor/github.com/buger/jsonparser/bytes_unsafe.go (2)
vendor/github.com/buger/jsonparser/parser.go (1)
  • ParseFloat (1265-1271)
vendor/github.com/buger/jsonparser/bytes_safe.go (1)
  • StringToBytes (23-25)
vendor/github.com/mark3labs/mcp-go/server/hooks.go (4)
vendor/github.com/mark3labs/mcp-go/server/session.go (1)
  • ClientSession (11-20)
vendor/github.com/mark3labs/mcp-go/mcp/types.go (22)
  • MCPMethod (15-15)
  • InitializeRequest (401-405)
  • InitializeResult (417-431)
  • PingRequest (493-496)
  • EmptyResult (365-365)
  • SetLevelRequest (726-730)
  • ListResourcesRequest (546-549)
  • ListResourcesResult (553-556)
  • ListResourceTemplatesRequest (560-563)
  • ListResourceTemplatesResult (567-570)
  • ReadResourceRequest (574-578)
  • ReadResourceResult (590-593)
  • MethodInitialize (20-20)
  • MethodPing (24-24)
  • MethodSetLogLevel (56-56)
  • MethodResourcesList (28-28)
  • MethodResourcesTemplatesList (32-32)
  • MethodResourcesRead (36-36)
  • MethodPromptsList (40-40)
  • MethodPromptsGet (44-44)
  • MethodToolsList (48-48)
  • MethodToolsCall (52-52)
vendor/github.com/mark3labs/mcp-go/mcp/prompts.go (4)
  • ListPromptsRequest (9-12)
  • ListPromptsResult (16-19)
  • GetPromptRequest (23-27)
  • GetPromptResult (38-43)
vendor/github.com/mark3labs/mcp-go/mcp/tools.go (4)
  • ListToolsRequest (18-21)
  • ListToolsResult (25-28)
  • CallToolRequest (54-58)
  • CallToolResult (40-51)
vendor/github.com/mark3labs/mcp-go/server/streamable_http.go (6)
vendor/github.com/mark3labs/mcp-go/server/http_transport_options.go (1)
  • HTTPContextFunc (11-11)
vendor/github.com/mark3labs/mcp-go/util/logger.go (2)
  • Logger (8-11)
  • DefaultLogger (16-20)
vendor/github.com/mark3labs/mcp-go/server/server.go (2)
  • MCPServer (144-169)
  • ServerTool (50-53)
vendor/github.com/mark3labs/mcp-go/mcp/types.go (9)
  • Request (155-158)
  • PARSE_ERROR (350-350)
  • MCPMethod (15-15)
  • MethodInitialize (20-20)
  • JSONRPCRequest (312-317)
  • NewRequestId (246-248)
  • LoggingLevel (761-761)
  • LoggingLevelError (768-768)
  • JSONRPCNotification (320-323)
vendor/github.com/mark3labs/mcp-go/server/constants.go (1)
  • HeaderKeySessionID (5-5)
vendor/github.com/mark3labs/mcp-go/server/session.go (4)
  • ClientSession (11-20)
  • SessionWithTools (32-40)
  • SessionWithLogging (23-29)
  • SessionWithStreamableHTTPConfig (56-69)
vendor/github.com/mark3labs/mcp-go/mcp/tools.go (3)
vendor/github.com/mark3labs/mcp-go/mcp/types.go (10)
  • PaginatedRequest (523-526)
  • PaginatedResult (534-540)
  • Result (233-237)
  • Content (862-864)
  • Request (155-158)
  • Params (164-164)
  • Meta (120-132)
  • UnmarshalContent (1105-1140)
  • Notification (166-169)
  • Annotations (840-853)
vendor/github.com/mark3labs/mcp-go/mcp/utils.go (1)
  • ToBoolPtr (855-857)
vendor/github.com/invopop/jsonschema/reflect.go (2)
  • Reflector (73-171)
  • Reflect (62-64)
vendor/github.com/mark3labs/mcp-go/mcp/utils.go (2)
vendor/github.com/mark3labs/mcp-go/mcp/types.go (33)
  • InitializeResult (417-431)
  • ListResourcesResult (553-556)
  • ReadResourceResult (590-593)
  • TextContent (868-873)
  • TextContent (875-875)
  • ImageContent (879-886)
  • ImageContent (888-888)
  • AudioContent (892-899)
  • AudioContent (901-901)
  • EmbeddedResource (923-927)
  • EmbeddedResource (929-929)
  • TextResourceContents (699-707)
  • TextResourceContents (709-709)
  • BlobResourceContents (711-718)
  • BlobResourceContents (720-720)
  • RequestId (241-243)
  • Result (233-237)
  • JSONRPCResponse (326-330)
  • JSONRPCError (333-346)
  • ProgressToken (113-113)
  • Params (164-164)
  • LoggingLevel (761-761)
  • Content (862-864)
  • ResourceLink (904-915)
  • ResourceLink (917-917)
  • ResourceContents (695-697)
  • Resource (645-660)
  • Cursor (116-116)
  • PaginatedResult (534-540)
  • ResourceTemplate (669-686)
  • ListResourceTemplatesResult (567-570)
  • ServerCapabilities (457-480)
  • Implementation (483-486)
vendor/github.com/spf13/cast/zz_generated.go (14)
  • ToBool (8-11)
  • ToInt64 (62-65)
  • ToInt32 (56-59)
  • ToInt16 (50-53)
  • ToInt8 (44-47)
  • ToInt (38-41)
  • ToUint (68-71)
  • ToUint64 (92-95)
  • ToUint32 (86-89)
  • ToUint16 (80-83)
  • ToUint8 (74-77)
  • ToFloat32 (98-101)
  • ToFloat64 (104-107)
  • ToStringMap (140-143)
🪛 markdownlint-cli2 (0.17.2)
README.md

56-56: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)

docs/mcp.md

4-4: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


12-12: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


18-18: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


22-22: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


26-26: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


31-31: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


35-35: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


36-36: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


37-37: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


38-38: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


39-39: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


41-41: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


45-45: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


50-50: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


58-58: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


63-63: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)

vendor/github.com/buger/jsonparser/README.md

60-60: Hard tabs
Column: 1

(MD010, no-hard-tabs)


69-69: Hard tabs
Column: 1

(MD010, no-hard-tabs)


95-95: Bare URL used

(MD034, no-bare-urls)


112-112: Hard tabs
Column: 16

(MD010, no-hard-tabs)


167-167: Hard tabs
Column: 1

(MD010, no-hard-tabs)


181-181: Hard tabs
Column: 1

(MD010, no-hard-tabs)


182-182: Hard tabs
Column: 1

(MD010, no-hard-tabs)


183-183: Hard tabs
Column: 1

(MD010, no-hard-tabs)


184-184: Hard tabs
Column: 1

(MD010, no-hard-tabs)


189-189: Hard tabs
Column: 1

(MD010, no-hard-tabs)


190-190: Hard tabs
Column: 1

(MD010, no-hard-tabs)


191-191: Hard tabs
Column: 1

(MD010, no-hard-tabs)


192-192: Hard tabs
Column: 1

(MD010, no-hard-tabs)


193-193: Hard tabs
Column: 1

(MD010, no-hard-tabs)


194-194: Hard tabs
Column: 1

(MD010, no-hard-tabs)


195-195: Hard tabs
Column: 1

(MD010, no-hard-tabs)


196-196: Hard tabs
Column: 1

(MD010, no-hard-tabs)


197-197: Hard tabs
Column: 1

(MD010, no-hard-tabs)


198-198: Hard tabs
Column: 1

(MD010, no-hard-tabs)


199-199: Hard tabs
Column: 1

(MD010, no-hard-tabs)


200-200: Hard tabs
Column: 1

(MD010, no-hard-tabs)


246-246: Bare URL used

(MD034, no-bare-urls)


247-247: Bare URL used

(MD034, no-bare-urls)


248-248: Bare URL used

(MD034, no-bare-urls)


249-249: Bare URL used

(MD034, no-bare-urls)


250-250: Bare URL used

(MD034, no-bare-urls)


251-251: Bare URL used

(MD034, no-bare-urls)


252-252: Bare URL used

(MD034, no-bare-urls)


253-253: Bare URL used

(MD034, no-bare-urls)


254-254: Bare URL used

(MD034, no-bare-urls)


255-255: Bare URL used

(MD034, no-bare-urls)


257-257: Heading levels should only increment by one level at a time
Expected: h3; Actual: h4

(MD001, heading-increment)


275-275: Bare URL used

(MD034, no-bare-urls)


300-300: Bare URL used

(MD034, no-bare-urls)


302-302: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


302-302: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


303-303: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


303-303: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


304-304: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


304-304: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


305-305: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


305-305: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


306-306: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


306-306: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


307-307: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


307-307: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


308-308: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


308-308: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


309-309: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


309-309: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


310-310: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


310-310: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


311-311: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


311-311: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


312-312: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


312-312: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


313-313: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


313-313: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


314-314: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


314-314: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


315-315: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


315-315: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


329-329: Bare URL used

(MD034, no-bare-urls)


331-331: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


331-331: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


332-332: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


332-332: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


333-333: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


333-333: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


334-334: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


334-334: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


335-335: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


335-335: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


336-336: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


336-336: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


337-337: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


337-337: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)


338-338: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected leading pipe

(MD055, table-pipe-style)


338-338: Table pipe style
Expected: no_leading_or_trailing; Actual: leading_and_trailing; Unexpected trailing pipe

(MD055, table-pipe-style)

vendor/github.com/invopop/jsonschema/README.md

125-125: Bare URL used

(MD034, no-bare-urls)


142-142: Hard tabs
Column: 1

(MD010, no-hard-tabs)


146-146: Hard tabs
Column: 1

(MD010, no-hard-tabs)


147-147: Hard tabs
Column: 1

(MD010, no-hard-tabs)


148-148: Hard tabs
Column: 1

(MD010, no-hard-tabs)


149-149: Hard tabs
Column: 1

(MD010, no-hard-tabs)


150-150: Hard tabs
Column: 1

(MD010, no-hard-tabs)


151-151: Hard tabs
Column: 1

(MD010, no-hard-tabs)


152-152: Hard tabs
Column: 1

(MD010, no-hard-tabs)


153-153: Hard tabs
Column: 1

(MD010, no-hard-tabs)


154-154: Hard tabs
Column: 1

(MD010, no-hard-tabs)


155-155: Hard tabs
Column: 1

(MD010, no-hard-tabs)


204-204: Hard tabs
Column: 1

(MD010, no-hard-tabs)


205-205: Hard tabs
Column: 1

(MD010, no-hard-tabs)


206-206: Hard tabs
Column: 1

(MD010, no-hard-tabs)


207-207: Hard tabs
Column: 1

(MD010, no-hard-tabs)


321-321: Hard tabs
Column: 1

(MD010, no-hard-tabs)


322-322: Hard tabs
Column: 1

(MD010, no-hard-tabs)


350-350: Hard tabs
Column: 1

(MD010, no-hard-tabs)


351-351: Hard tabs
Column: 1

(MD010, no-hard-tabs)


352-352: Hard tabs
Column: 1

(MD010, no-hard-tabs)


353-353: Hard tabs
Column: 1

(MD010, no-hard-tabs)


354-354: Hard tabs
Column: 1

(MD010, no-hard-tabs)


355-355: Hard tabs
Column: 1

(MD010, no-hard-tabs)

🪛 LanguageTool
docs/mcp.md

[style] ~54-~54: Consider a more concise word here.
Context: ... configuration on a unique ConfigMap, in order to have a single RHADS installation per cl...

(IN_ORDER_TO_PREMIUM)

vendor/github.com/buger/jsonparser/README.md

[style] ~8-~8: To elevate your writing, try using a synonym here.
Context: ...ce{}` instead, it will be very slow and hard to manage. I investigated what's on the...

(HARD_TO)


[style] ~99-~99: As an alternative to the over-used intensifier ‘really’, consider replacing this phrase.
Context: ...mail.com. ## Reference Library API is really simple. You just need the Get method to perf...

(EN_WEAK_ADJECTIVE)


[style] ~262-~262: To elevate your writing, try using a synonym here.
Context: ...(require some code generation). It's hard to fully comparejsonparserandeasy...

(HARD_TO)


[style] ~264-~264: Consider using a more formal and expressive alternative to ‘amazing’.
Context: ...nwhile keeping structs,easyjson` is an amazing choice. If you want to process dynamic ...

(AWESOME)


[style] ~319-~319: Possibly, ‘actually’ is redundant. Consider using “only”.
Context: ...ing/json and map[string]interface{} and actually only helpers for unstructured JSON, their pe...

(ADVERB_ONLY)


[style] ~340-~340: For a more polite and respectful tone, consider rephrasing with ‘please’.
Context: ...** | jsonparser now is a winner, but do not forget that it is way more lightweight parser ...

(DONT_FORGET)

vendor/github.com/invopop/jsonschema/README.md

[style] ~14-~14: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...gth, maxLength, pattern, format, etc. - Supports simple string and numeric enums. - Supp...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~15-~15: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...orts simple string and numeric enums. - Supports custom property fields via the `jsonsch...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~20-~20: Consider a more concise word here.
Context: ...cally from the current Go package's URL in order to be unique, and can be disabled with the...

(IN_ORDER_TO_PREMIUM)


[style] ~125-~125: As an alternative to the over-used intensifier ‘very’, consider replacing this phrase.
Context: ... tags has now been removed. If you feel very strongly about this, we've opened a discussion t...

(EN_WEAK_ADJECTIVE)


[uncategorized] ~136-~136: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ndedStruct If set to true, makes the top level struct not to reference itself in the d...

(EN_COMPOUND_ADJECTIVE_INTERNAL)

🪛 GitHub Check: SonarCloud
vendor/github.com/buger/jsonparser/Dockerfile

[notice] 12-12: Prefer COPY over ADD for copying local resources

Replace this ADD instruction with a COPY instruction.

See more on SonarQube Cloud

🪛 Hadolint (2.12.0)
vendor/github.com/buger/jsonparser/Dockerfile

[error] 12-12: Use COPY instead of ADD for files and folders

(DL3020)

🪛 checkmake (0.2.2)
vendor/github.com/buger/jsonparser/Makefile

[warning] 1-1: Missing required phony target "all"

(minphony)


[warning] 1-1: Missing required phony target "clean"

(minphony)


[warning] 1-1: Missing required phony target "test"

(minphony)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Red Hat Konflux / rhtap-cli-on-pull-request
🔇 Additional comments (27)
vendor/github.com/bahlo/generic-list-go/list.go (1)

1-236: Vendored dependency looks appropriate for MCP server infrastructure.

This is a well-implemented generic doubly linked list from a third-party library. The implementation follows Go best practices, includes proper memory leak prevention, and provides comprehensive list operations that likely support the MCP server's internal data handling needs.

Since this is vendored code, no modifications should be made here - any issues should be reported upstream to the github.com/bahlo/generic-list-go repository.

vendor/github.com/mark3labs/mcp-go/mcp/errors.go (4)

1-9: LGTM! Well-structured error type definition.

The error type follows Go conventions with clear naming, appropriate field type, and good documentation.


11-13: LGTM! Proper error interface implementation.

The Error() method correctly implements the error interface with clear formatting.


15-19: LGTM! Consistent Is() method implementation.

The Is() method correctly implements error comparison for the value type, consistent with the value receiver approach used throughout.


21-25: LGTM! Useful helper function with consistent implementation.

The helper function provides a convenient way to check for this error type and maintains consistency with the Is() method implementation.

vendor/github.com/buger/jsonparser/Makefile (1)

1-36: Vendor files should not be modified.

This is a vendored dependency file that should remain unmodified to ensure reproducible builds and proper dependency management. Any changes would be lost during dependency updates.

vendor/github.com/buger/jsonparser/bytes.go (1)

1-47: Vendor files should not be modified.

This is a vendored dependency file that should remain unmodified to ensure reproducible builds and proper dependency management. Any changes would be lost during dependency updates. If there are issues with the vendored code, they should be reported to the upstream maintainers.

README.md (2)

56-58: LGTM! Good documentation addition.

The new MCP section provides clear guidance for users about the Model Context Protocol server feature and properly references the detailed documentation.


175-175: LGTM! Link formatting fix.

Good catch on fixing the markdown link syntax.

vendor/github.com/invopop/jsonschema/id.go (1)

1-76: Vendor files should not be modified.

This is a vendored dependency file that should remain unmodified to ensure reproducible builds and proper dependency management. Any changes would be lost during dependency updates.

vendor/github.com/invopop/jsonschema/reflect_comments.go (2)

129-146: LGTM! Well-structured comment lookup with proper fallback logic

The method correctly prioritizes the custom LookupComment callback over the CommentMap and handles nil checks appropriately.


73-73: Use filepath.Join instead of path.Join for file paths

The code uses gopath.Join (aliased from path) which is designed for URL paths, not file system paths. This could cause issues on Windows where file paths use backslashes.

-				k := gopath.Join(base, path)
+				k := filepath.Join(base, strings.TrimPrefix(path, filepath.Dir(path)+string(filepath.Separator)))

However, since this appears to be building a package import path rather than a file path, you might want to normalize the path relative to the base first.

⛔ Skipped due to learnings
Learnt from: dperaza4dustbit
PR: redhat-appstudio/rhtap-cli#599
File: vendor/github.com/hashicorp/go-retryablehttp/cert_error_go120.go:11-13
Timestamp: 2025-07-30T19:30:03.684Z
Learning: Vendor files in Go projects should never be modified directly. The vendor directory contains third-party dependencies that should remain unmodified to ensure reproducible builds and proper dependency management. Any changes would be lost during dependency updates.
vendor/github.com/buger/jsonparser/parser.go (1)

1-1284: Vendored dependency - consider security and performance implications

This is a vendored third-party JSON parsing library. While vendored dependencies typically don't require code review, consider:

  • Checking for known security vulnerabilities in github.com/buger/jsonparser v1.1.1
  • Evaluating if this indirect dependency is necessary or if it can be replaced with standard library functions
  • Monitoring for updates to address any security issues
vendor/github.com/mark3labs/mcp-go/server/session.go (1)

1-445: Vendored MCP session management implementation

This vendored file provides comprehensive session management for the MCP server. The implementation includes proper interface definitions, concurrent-safe session tracking, and notification delivery mechanisms.

vendor/github.com/mark3labs/mcp-go/server/stdio.go (1)

1-497: Vendored stdio transport implementation for MCP

This vendored file implements JSON-RPC communication over standard input/output streams for the MCP server. The implementation properly handles context cancellation, EOF conditions, and concurrent message processing.

vendor/github.com/invopop/jsonschema/reflect.go (1)

1-1149: Vendored JSON schema reflection library

This vendored file provides comprehensive JSON schema generation from Go types using reflection. The library supports extensive customization through struct tags and interfaces.

vendor/github.com/mark3labs/mcp-go/mcp/types.go (1)

55-56: Future date in specification URL appears incorrect

The comment references a specification URL with date 2025-03-26, which is in the future. This should likely reference an existing specification date or be updated to reflect the current specification version.

⛔ Skipped due to learnings
Learnt from: dperaza4dustbit
PR: redhat-appstudio/rhtap-cli#599
File: vendor/github.com/hashicorp/go-retryablehttp/cert_error_go120.go:11-13
Timestamp: 2025-07-30T19:30:03.684Z
Learning: Vendor files in Go projects should never be modified directly. The vendor directory contains third-party dependencies that should remain unmodified to ensure reproducible builds and proper dependency management. Any changes would be lost during dependency updates.
vendor/github.com/invopop/jsonschema/README.md (1)

1-375: LGTM - Comprehensive documentation for the jsonschema vendor dependency

This vendor documentation provides clear usage examples and configuration options for the jsonschema library. The library supports JSON Schema Draft 2020-12 and offers extensive customization through the jsonschema.Reflector type, which aligns well with the MCP server's need for schema generation.

Note: The static analysis hints about formatting (hard tabs, bare URLs) can be ignored as vendor files should not be modified.

vendor/github.com/mark3labs/mcp-go/server/request_handler.go (1)

1-340: LGTM - Well-structured MCP server request handler

This code-generated vendor file implements a comprehensive JSON-RPC message handler for the MCP protocol. The implementation includes:

  • Proper validation of JSON-RPC version
  • Clear handling of requests, notifications, and responses
  • Comprehensive lifecycle hooks for extensibility
  • Appropriate error handling with MCP-specific error codes
  • Context-aware HTTP header extraction

The code follows good practices for JSON-RPC implementations and appears secure with proper input validation.

vendor/github.com/mark3labs/mcp-go/mcp/typed_tools.go (1)

1-43: LGTM - Type-safe tool handler abstractions

This vendor file provides excellent type-safe abstractions for MCP tool handlers using Go generics. The implementation:

  • Enables compile-time type safety for tool arguments and results
  • Automatically handles JSON argument binding with proper error reporting
  • Maintains backwards compatibility by providing both structured and text content
  • Follows MCP protocol conventions by returning errors as tool results rather than Go errors

The design promotes clean, type-safe tool implementations which will help prevent runtime errors in the MCP server tools.

vendor/github.com/buger/jsonparser/README.md (1)

1-366: LGTM - High-performance JSON parser documentation

This vendor documentation describes a high-performance JSON parser that operates at the byte level with zero memory allocations. Key benefits for the MCP server use case:

  • Up to 10x faster than standard encoding/json for targeted field extraction
  • Zero memory allocation reduces GC pressure
  • Path-based access pattern aligns well with MCP's JSON-RPC message processing needs
  • Comprehensive API with array/object iteration support

The benchmarks demonstrate significant performance advantages, especially for selective field extraction which is common in JSON-RPC processing.

Note: Static analysis formatting hints can be ignored for vendor files.

vendor/github.com/buger/jsonparser/fuzz.go (1)

1-118: LGTM - Comprehensive fuzz testing for jsonparser

This vendor file implements fuzz testing functions that exercise all major jsonparser APIs with arbitrary input data. The fuzzing coverage includes:

  • Parsing functions (strings, floats, integers, booleans)
  • Iteration functions (EachKey, ObjectEach)
  • Mutation functions (Set, Delete)
  • Edge cases in paths (array indices, special characters)

The simple return convention (0 for error, 1 for success) is standard for Go fuzzing. This testing approach helps ensure the JSON parser is robust against malformed or malicious inputs, which is important for security in the MCP server context.

vendor/github.com/mark3labs/mcp-go/server/hooks.go (5)

1-3: Generated vendor code - review for awareness only

This is generated code from a template as indicated by the header. Any issues should be addressed upstream in the mark3labs/mcp-go repository rather than modified locally.


11-92: Comprehensive hook system design

The hook function types provide extensive coverage for the MCP server lifecycle, including session management (register/unregister), request lifecycle (before/after/error), and method-specific hooks for all MCP operations. The error handling hook includes detailed documentation with practical examples using errors.Is and errors.As patterns.


94-121: Well-structured hooks aggregation

The Hooks struct effectively aggregates all hook types into a single manageable structure, making it easy to configure and use multiple hooks simultaneously.


180-187: Consistent nil-safety pattern

All hook invocation methods properly check for nil receivers before iterating over hook slices, preventing potential panics when hooks aren't initialized.

Also applies to: 189-196, 212-219


251-262: Early error return in request initialization

The onRequestInitialization method correctly implements early return on first error, which is appropriate for initialization hooks where any failure should halt processing.

@otaviof otaviof force-pushed the RHTAP-5269-bootstrap branch from e55e5e4 to c7aa182 Compare July 31, 2025 13:15
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (5)
pkg/installer/job.go (5)

19-19: Fix typo in comment.

The word "asynchronous" is misspelled.

-// Job represents the asynchronous actor that runs a Job in the cluster to run
+// Job represents the asynchronous actor that runs a Job in the cluster to run

21-21: Fix grammatical issue in comment.

"allowing" should be "to allow" for proper grammar.

-// installation process for the MCP server.
+// installation process for the MCP server.

127-168: Security concern: cluster-admin privileges are overly broad.

The installer job is granted cluster-admin privileges, which provides unrestricted access to the entire cluster. This violates the principle of least privilege.

Consider creating a custom ClusterRole with only the specific permissions needed for TSSC installation.


189-195: Remove hard-coded dry-run flag to enable actual deployment.

The job arguments include a hard-coded --dry-run flag, which prevents actual deployment. This should be configurable.


230-254: Add cleanup on failure and validate input parameters.

The Create method should clean up RBAC resources if job creation fails, and the image parameter should be validated.

🧹 Nitpick comments (2)
docs/mcp.md (2)

35-40: Fix list indentation for consistency.

The list indentation is inconsistent with markdown standards. Use 2 spaces for primary bullets and 4 spaces for nested items.

 - *Arguments*:
-    - **namespace** (string):
-        - **Description**: The main namespace for TSSC (`.tssc.namespace`), where Red Hat Developer Hub (DH) and other fundamental services will be deployed.
-        - **Default**: "tssc".
-    - **setting** (object):
-        - **Description**: The global settings object for TSSC (`.tssc.settings{}`). When empty the default settings will be used.
+  - **namespace** (string):
+    - **Description**: The main namespace for TSSC (`.tssc.namespace`), where Red Hat Developer Hub (DH) and other fundamental services will be deployed.
+    - **Default**: "tssc".
+  - **setting** (object):
+    - **Description**: The global settings object for TSSC (`.tssc.settings{}`). When empty the default settings will be used.

54-54: Consider more concise phrasing.

The phrase "in order to" can be simplified to "to" for better readability.

-The `tssc` design maintains a single deployment per cluster, by centralising the installer configuration on a unique `ConfigMap`, in order to have a single RHADS installation per cluster.
+The `tssc` design maintains a single deployment per cluster, by centralising the installer configuration on a unique `ConfigMap`, to have a single RHADS installation per cluster.
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e55e5e4 and c7aa182.

📒 Files selected for processing (10)
  • README.md (2 hunks)
  • docs/mcp.md (1 hunks)
  • pkg/cmd/root.go (1 hunks)
  • pkg/installer/job.go (1 hunks)
  • pkg/k8s/kube.go (2 hunks)
  • pkg/mcpserver/instructions.md (1 hunks)
  • pkg/mcpserver/mcpserver.go (1 hunks)
  • pkg/mcptools/deploytools.go (1 hunks)
  • pkg/mcptools/interface.go (1 hunks)
  • pkg/subcmd/mcpserver.go (1 hunks)
✅ Files skipped from review due to trivial changes (2)
  • README.md
  • pkg/mcpserver/mcpserver.go
🚧 Files skipped from review as they are similar to previous changes (6)
  • pkg/mcptools/interface.go
  • pkg/k8s/kube.go
  • pkg/mcpserver/instructions.md
  • pkg/cmd/root.go
  • pkg/subcmd/mcpserver.go
  • pkg/mcptools/deploytools.go
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: rhopp
PR: redhat-appstudio/rhtap-cli#998
File: integration-tests/config/rhads-config:1-6
Timestamp: 2025-07-09T12:31:10.478Z
Learning: When using Tekton CLI (tkn) version 0.40.0, multi-line parameters are handled correctly and do not break into separate arguments like they did in earlier versions (≥ 0.29). Multi-line configuration files can be safely passed as Tekton parameters without needing to compress or base64-encode them.
📚 Learning: gitlab rbac configuration uses single group concept and only requires adminusers field, unlike githu...
Learnt from: dperaza4dustbit
PR: redhat-appstudio/rhtap-cli#599
File: installer/charts/values.yaml.tpl:239-242
Timestamp: 2025-07-30T19:13:34.870Z
Learning: GitLab RBAC configuration uses single group concept and only requires adminUsers field, unlike GitHub which supports multiple orgs. The RBAC configuration in installer/charts/values.yaml.tpl should be platform-specific rather than forcing consistency between GitHub and GitLab.

Applied to files:

  • pkg/installer/job.go
🪛 LanguageTool
docs/mcp.md

[style] ~54-~54: Consider a more concise word here.
Context: ... configuration on a unique ConfigMap, in order to have a single RHADS installation per cl...

(IN_ORDER_TO_PREMIUM)

🪛 markdownlint-cli2 (0.17.2)
docs/mcp.md

4-4: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


12-12: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


18-18: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


22-22: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


26-26: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


31-31: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


35-35: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


36-36: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


37-37: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


38-38: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


39-39: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


41-41: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


45-45: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


50-50: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


58-58: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


63-63: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Red Hat Konflux / rhtap-cli-on-pull-request

Copy link
Member

@Roming22 Roming22 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/lgtm

@openshift-ci openshift-ci bot added the lgtm label Jul 31, 2025
Copy link

openshift-ci bot commented Jul 31, 2025

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: otaviof, Roming22

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@otaviof otaviof force-pushed the RHTAP-5269-bootstrap branch from c7aa182 to e2525fe Compare July 31, 2025 14:55
@openshift-ci openshift-ci bot removed the lgtm label Jul 31, 2025
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🔭 Outside diff range comments (2)
vendor/github.com/wk8/go-ordered-map/v2/Makefile (1)

1-33: Vendor files should not be modified directly.

This file is part of the vendored dependencies (vendor/ directory). According to Go best practices, vendor files should never be modified directly as any changes will be lost when dependencies are updated. The vendor directory should only be populated through dependency management tools like go mod vendor.

If you need to customize this dependency, consider:

  1. Contributing changes upstream to the original repository
  2. Forking the dependency and using your fork in go.mod
  3. Using a replace directive in go.mod if temporary modifications are needed
vendor/github.com/invopop/jsonschema/reflect_comments.go (1)

1-147: Vendor files should not be modified directly.

This file is part of the vendor/github.com/invopop/jsonschema package. As with all vendor files, this should not be modified directly. The vendor directory is managed by Go's dependency management system, and any manual modifications will be overwritten when dependencies are updated via go mod vendor.

If you need this functionality in the jsonschema package, please:

  1. Submit a pull request to the upstream repository at https://github.com/invopop/jsonschema
  2. Once merged and released, update the dependency version in your go.mod file
  3. Run go mod vendor to pull in the updated dependency
♻️ Duplicate comments (8)
vendor/github.com/buger/jsonparser/Dockerfile (1)

12-12: Prefer COPY over ADD for local sources

ADD has extra, rarely-needed semantics (remote URLs, tar extraction) and is flagged by Hadolint/ANSI. Use COPY for a clearer intent.

-ADD . /go/src/github.com/buger/jsonparser
+COPY . /go/src/github.com/buger/jsonparser
vendor/github.com/buger/jsonparser/escape.go (1)

69-69: Potential out-of-bounds read when decoding UTF-16 surrogate pairs

The comment claims that "previous decodeSingleUnicodeEscape success guarantees at least 6 bytes remain", but this is incorrect. The previous call only guarantees that in had at least 6 bytes total. Before attempting to decode the second escape sequence at in[6:], you need to verify that len(in) >= 12 to ensure there are enough bytes for both escape sequences.

-	} else if r2, ok := decodeSingleUnicodeEscape(in[6:]); !ok { // Note: previous decodeSingleUnicodeEscape success guarantees at least 6 bytes remain
+	} else if len(in) < 12 {
+		// Not enough bytes for a complete surrogate pair
+		return utf8.RuneError, -1
+	} else if r2, ok := decodeSingleUnicodeEscape(in[6:]); !ok {
pkg/mcptools/configtools.go (2)

60-69: Bug: Using wrong config variable for marshaling

The code creates a new default config with NewConfigDefault() but then marshals c.defaultCfg instead of the newly created cfg.

Apply this diff to fix:

-	payload, err := c.defaultCfg.MarshalYAML()
+	payload, err := cfg.MarshalYAML()

93-100: Fix type assertion for Settings argument

The type assertion for Settings will never succeed because MCP arguments are primitive types or maps, not config.Settings structs. User-provided settings will be ignored.

Apply this diff to properly handle settings:

-	if settings, ok := ctr.GetArguments()[SettingsArg].(config.Settings); ok {
-		cfg.Installer.Settings = settings
-	}
+	// Parse JSON settings payload into config.Settings
+	if raw, ok := ctr.GetArguments()[SettingsArg].(string); ok && raw != "" {
+		var settings config.Settings
+		if err := json.Unmarshal([]byte(raw), &settings); err != nil {
+			return nil, fmt.Errorf("invalid %q JSON: %v", SettingsArg, err)
+		}
+		cfg.Installer.Settings = settings
+	} else if settingsMap, ok := ctr.GetArguments()[SettingsArg].(map[string]any); ok {
+		// Handle map[string]any input
+		jsonBytes, err := json.Marshal(settingsMap)
+		if err != nil {
+			return nil, fmt.Errorf("failed to marshal settings: %v", err)
+		}
+		var settings config.Settings
+		if err := json.Unmarshal(jsonBytes, &settings); err != nil {
+			return nil, fmt.Errorf("invalid settings format: %v", err)
+		}
+		cfg.Installer.Settings = settings
+	}

Also add the required imports:

import (
	"encoding/json"
)

Let me verify how MCP passes arguments:

#!/bin/bash
# Check how GetArguments() is used and what types it returns
ast-grep --pattern 'GetArguments()'

# Look for MCP argument handling patterns
rg -A 5 "GetArguments\(\)" --type go
vendor/github.com/mark3labs/mcp-go/server/inprocess_session.go (1)

104-107: Awareness: Potential session ID collision risk in vendor code

The session ID generation uses nanosecond timestamps which could theoretically collide if called rapidly. Since this is a vendor file, this observation is for awareness only - changes would need to be made upstream.

vendor/github.com/mark3labs/mcp-go/server/streamable_http.go (2)

221-225: Add request body size limit to prevent memory exhaustion

Using io.ReadAll without a size limit could lead to memory exhaustion with large request bodies. Consider using io.LimitReader or checking Content-Length header.

-rawData, err := io.ReadAll(r.Body)
+// Limit request body to 10MB to prevent memory exhaustion
+const maxRequestSize = 10 * 1024 * 1024
+rawData, err := io.ReadAll(io.LimitReader(r.Body, maxRequestSize))

393-406: Consider handling channel blocking in notification forwarding

The notification forwarding goroutine could block indefinitely if writeChan is full. Consider using a select with default case to drop messages or log warnings when the channel is full.

 go func() {
     for {
         select {
         case nt := <-session.notificationChannel:
             select {
             case writeChan <- &nt:
             case <-done:
                 return
+            default:
+                // Channel full, log and drop message
+                s.logger.Warnf("Notification channel full, dropping message for session %s", sessionID)
             }
         case <-done:
             return
         }
     }
 }()
vendor/github.com/mark3labs/mcp-go/mcp/utils.go (1)

311-326: Fix parameter name in NewToolResultAudio

The function NewToolResultAudio has a parameter named imageData which should be audioData for clarity and consistency.

-func NewToolResultAudio(text, imageData, mimeType string) *CallToolResult {
+func NewToolResultAudio(text, audioData, mimeType string) *CallToolResult {
 	return &CallToolResult{
 		Content: []Content{
 			TextContent{
 				Type: "text",
 				Text: text,
 			},
 			AudioContent{
 				Type:     "audio",
-				Data:     imageData,
+				Data:     audioData,
 				MIMEType: mimeType,
 			},
 		},
 	}
 }
🧹 Nitpick comments (9)
vendor/github.com/wk8/go-ordered-map/v2/.golangci.yml (1)

4-4: Remove trailing whitespace to keep YAML parsers quiet

Line 4 has an extra space after linters: which triggers yamllint on strict settings.

-linters: 
+linters:
README.md (1)

56-59: Align heading style with the rest of the document

Most top-level sections use Setext (---) headings. Converting this one keeps markdownlint (MD003) silent and the doc consistent.

-## Model Context Protocol Server (MCP)
-
-The TSSC features are also available via the Model Context Protocol server (MCP), please consider the [MCP documentation](docs/mcp.md) for more details.
+Model Context Protocol Server (MCP)
+-----------------------------------
+
+The TSSC features are also available via the Model Context Protocol (MCP) server. See the [MCP documentation](docs/mcp.md) for details.
docs/mcp.md (1)

1-67: Comprehensive MCP server documentation.

This documentation effectively explains the MCP server functionality, usage, and available tools. The structure is logical with clear sections for configuration, integration, and deployment tools.

The static analysis tools suggest some optional formatting improvements:

-# Usage
+Usage
+=====

-# Instructions  
+Instructions
+============

-# Tools
+Tools
+=====

Also consider more consistent list indentation (2 spaces instead of 4/8) for better markdown compliance.

vendor/github.com/wk8/go-ordered-map/v2/json.go (1)

166-182: Consider simplifying UTF-8 validation.

While this implementation is correct, Go's standard library already provides UTF-8 validation. The current implementation could be simplified.

Consider using the standard library approach:

 func decodeUTF8(input []byte) (string, error) {
-	remaining, offset := input, 0
-	runes := make([]rune, 0, len(remaining))
-
-	for len(remaining) > 0 {
-		r, size := utf8.DecodeRune(remaining)
-		if r == utf8.RuneError && size <= 1 {
-			return "", fmt.Errorf("not a valid UTF-8 string (at position %d): %s", offset, string(input))
-		}
-
-		runes = append(runes, r)
-		remaining = remaining[size:]
-		offset += size
-	}
-
-	return string(runes), nil
+	s := string(input)
+	if !utf8.ValidString(s) {
+		return "", fmt.Errorf("not a valid UTF-8 string: %s", string(input))
+	}
+	return s, nil
 }

This maintains the same validation while being more concise. If position information is critical, the current implementation is fine.

vendor/github.com/yosida95/uritemplate/v3/compile.go (1)

213-220: Consider returning an error instead of panicking.

The panic at line 215 for unhandled expression types could cause runtime crashes if the template parser is extended with new expression types.

Consider returning an error from the compile method instead:

-func (c *compiler) compile(tmpl *Template) {
+func (c *compiler) compile(tmpl *Template) error {
 	c.op(opLineBegin)
 	for i := range tmpl.exprs {
 		expr := tmpl.exprs[i]
 		switch expr := expr.(type) {
 		default:
-			panic("unhandled expression")
+			return fmt.Errorf("unhandled expression type: %T", expr)
 		case *expression:
 			c.compileExpression(expr)
 		case literals:
 			c.compileLiterals(expr)
 		}
 	}
 	c.op(opLineEnd)
 	c.op(opEnd)
+	return nil
 }

This would require updating callers but provides better error handling.

vendor/github.com/invopop/jsonschema/README.md (2)

125-125: Format the bare URL as a proper link.

The bare URL should be formatted as a Markdown link for better readability.

-Support for `yaml` tags has now been removed. If you feel very strongly about this, we've opened a discussion to hear your comments: https://github.com/invopop/jsonschema/discussions/28
+Support for `yaml` tags has now been removed. If you feel very strongly about this, we've opened a discussion to hear your comments: [https://github.com/invopop/jsonschema/discussions/28](https://github.com/invopop/jsonschema/discussions/28)

142-155: Replace hard tabs with spaces in code examples.

The code examples contain hard tabs which may render inconsistently across different viewers. Consider using spaces for consistent formatting.

For better compatibility and consistent rendering, replace all hard tabs with spaces (typically 2 or 4 spaces) in the code examples throughout the README.

Also applies to: 204-207, 321-322, 350-355

pkg/mcptools/configtools.go (1)

169-175: Clean up description formatting

The description has inconsistent indentation.

 			mcp.WithObject(
 				SettingsArg,
 				mcp.Description(`
 The global settings object for TSSC ('.tssc.settings{}'). When empty the default
-settings will be used.
-				`),
+settings will be used.`),
 			),
vendor/github.com/wk8/go-ordered-map/v2/orderedmap.go (1)

164-169: Simplify nil checks in Len method

The nil receiver check is unnecessary as Go will panic before entering the method if the receiver is nil.

 func (om *OrderedMap[K, V]) Len() int {
-	if om == nil || om.pairs == nil {
+	if om.pairs == nil {
 		return 0
 	}
 	return len(om.pairs)
 }
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c7aa182 and e2525fe.

⛔ Files ignored due to path filters (1)
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (107)
  • .gitignore (1 hunks)
  • README.md (2 hunks)
  • docs/mcp.md (1 hunks)
  • go.mod (4 hunks)
  • pkg/cmd/root.go (1 hunks)
  • pkg/config/config.go (2 hunks)
  • pkg/config/manager.go (1 hunks)
  • pkg/githubapp/githubapp.go (3 hunks)
  • pkg/installer/job.go (1 hunks)
  • pkg/integrations/acs.go (2 hunks)
  • pkg/integrations/artifactory.go (4 hunks)
  • pkg/integrations/azure.go (4 hunks)
  • pkg/integrations/bitbucket.go (3 hunks)
  • pkg/integrations/github.go (3 hunks)
  • pkg/integrations/gitlab.go (4 hunks)
  • pkg/integrations/jenkins.go (4 hunks)
  • pkg/integrations/nexus.go (3 hunks)
  • pkg/integrations/quay.go (5 hunks)
  • pkg/integrations/trustification.go (3 hunks)
  • pkg/k8s/kube.go (2 hunks)
  • pkg/mcpserver/instructions.md (1 hunks)
  • pkg/mcpserver/mcpserver.go (1 hunks)
  • pkg/mcptools/configtools.go (1 hunks)
  • pkg/mcptools/deploytools.go (1 hunks)
  • pkg/mcptools/integrationtools.go (1 hunks)
  • pkg/mcptools/interface.go (1 hunks)
  • pkg/subcmd/deploy.go (1 hunks)
  • pkg/subcmd/integration.go (1 hunks)
  • pkg/subcmd/integration_acs.go (1 hunks)
  • pkg/subcmd/integration_artifactory.go (1 hunks)
  • pkg/subcmd/integration_azure.go (1 hunks)
  • pkg/subcmd/integration_bitbucket.go (1 hunks)
  • pkg/subcmd/integration_githubapp.go (1 hunks)
  • pkg/subcmd/integration_gitlab.go (1 hunks)
  • pkg/subcmd/integration_jenkins.go (1 hunks)
  • pkg/subcmd/integration_nexus.go (1 hunks)
  • pkg/subcmd/integration_quay.go (1 hunks)
  • pkg/subcmd/integration_trustification.go (1 hunks)
  • pkg/subcmd/mcpserver.go (1 hunks)
  • vendor/github.com/bahlo/generic-list-go/LICENSE (1 hunks)
  • vendor/github.com/bahlo/generic-list-go/README.md (1 hunks)
  • vendor/github.com/bahlo/generic-list-go/list.go (1 hunks)
  • vendor/github.com/buger/jsonparser/.gitignore (1 hunks)
  • vendor/github.com/buger/jsonparser/.travis.yml (1 hunks)
  • vendor/github.com/buger/jsonparser/Dockerfile (1 hunks)
  • vendor/github.com/buger/jsonparser/LICENSE (1 hunks)
  • vendor/github.com/buger/jsonparser/Makefile (1 hunks)
  • vendor/github.com/buger/jsonparser/README.md (1 hunks)
  • vendor/github.com/buger/jsonparser/bytes.go (1 hunks)
  • vendor/github.com/buger/jsonparser/bytes_safe.go (1 hunks)
  • vendor/github.com/buger/jsonparser/bytes_unsafe.go (1 hunks)
  • vendor/github.com/buger/jsonparser/escape.go (1 hunks)
  • vendor/github.com/buger/jsonparser/fuzz.go (1 hunks)
  • vendor/github.com/buger/jsonparser/oss-fuzz-build.sh (1 hunks)
  • vendor/github.com/buger/jsonparser/parser.go (1 hunks)
  • vendor/github.com/invopop/jsonschema/.gitignore (1 hunks)
  • vendor/github.com/invopop/jsonschema/.golangci.yml (1 hunks)
  • vendor/github.com/invopop/jsonschema/COPYING (1 hunks)
  • vendor/github.com/invopop/jsonschema/README.md (1 hunks)
  • vendor/github.com/invopop/jsonschema/id.go (1 hunks)
  • vendor/github.com/invopop/jsonschema/reflect.go (1 hunks)
  • vendor/github.com/invopop/jsonschema/reflect_comments.go (1 hunks)
  • vendor/github.com/invopop/jsonschema/schema.go (1 hunks)
  • vendor/github.com/invopop/jsonschema/utils.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/LICENSE (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/errors.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/prompts.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/resources.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/tools.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/typed_tools.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/types.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/utils.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/constants.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/ctx.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/errors.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/hooks.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/http_transport_options.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/inprocess_session.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/request_handler.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/sampling.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/server.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/session.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/sse.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/stdio.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/streamable_http.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/util/logger.go (1 hunks)
  • vendor/github.com/wk8/go-ordered-map/v2/.gitignore (1 hunks)
  • vendor/github.com/wk8/go-ordered-map/v2/.golangci.yml (1 hunks)
  • vendor/github.com/wk8/go-ordered-map/v2/CHANGELOG.md (1 hunks)
  • vendor/github.com/wk8/go-ordered-map/v2/LICENSE (1 hunks)
  • vendor/github.com/wk8/go-ordered-map/v2/Makefile (1 hunks)
  • vendor/github.com/wk8/go-ordered-map/v2/README.md (1 hunks)
  • vendor/github.com/wk8/go-ordered-map/v2/json.go (1 hunks)
  • vendor/github.com/wk8/go-ordered-map/v2/orderedmap.go (1 hunks)
  • vendor/github.com/wk8/go-ordered-map/v2/yaml.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/LICENSE (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/README.rst (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/compile.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/equals.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/error.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/escape.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/expression.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/machine.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/match.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/parse.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/prog.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/uritemplate.go (1 hunks)
⛔ Files not processed due to max files limit (2)
  • vendor/github.com/yosida95/uritemplate/v3/value.go
  • vendor/modules.txt
✅ Files skipped from review due to trivial changes (11)
  • vendor/github.com/yosida95/uritemplate/v3/README.rst
  • pkg/subcmd/integration_bitbucket.go
  • vendor/github.com/buger/jsonparser/bytes_safe.go
  • pkg/mcpserver/mcpserver.go
  • vendor/github.com/wk8/go-ordered-map/v2/.gitignore
  • vendor/github.com/wk8/go-ordered-map/v2/LICENSE
  • vendor/github.com/yosida95/uritemplate/v3/LICENSE
  • vendor/github.com/buger/jsonparser/oss-fuzz-build.sh
  • vendor/github.com/invopop/jsonschema/schema.go
  • vendor/github.com/yosida95/uritemplate/v3/error.go
  • vendor/github.com/mark3labs/mcp-go/mcp/types.go
🚧 Files skipped from review as they are similar to previous changes (71)
  • pkg/subcmd/integration_artifactory.go
  • pkg/githubapp/githubapp.go
  • pkg/subcmd/integration.go
  • vendor/github.com/mark3labs/mcp-go/mcp/prompts.go
  • pkg/cmd/root.go
  • pkg/mcpserver/instructions.md
  • vendor/github.com/yosida95/uritemplate/v3/parse.go
  • pkg/integrations/gitlab.go
  • pkg/subcmd/integration_nexus.go
  • vendor/github.com/mark3labs/mcp-go/mcp/resources.go
  • pkg/subcmd/mcpserver.go
  • vendor/github.com/mark3labs/mcp-go/server/stdio.go
  • vendor/github.com/buger/jsonparser/fuzz.go
  • pkg/integrations/acs.go
  • vendor/github.com/mark3labs/mcp-go/server/hooks.go
  • pkg/subcmd/integration_acs.go
  • vendor/github.com/buger/jsonparser/.travis.yml
  • pkg/integrations/azure.go
  • vendor/github.com/mark3labs/mcp-go/server/sse.go
  • vendor/github.com/invopop/jsonschema/.golangci.yml
  • pkg/subcmd/integration_githubapp.go
  • vendor/github.com/mark3labs/mcp-go/LICENSE
  • pkg/mcptools/interface.go
  • pkg/integrations/jenkins.go
  • vendor/github.com/yosida95/uritemplate/v3/escape.go
  • vendor/github.com/yosida95/uritemplate/v3/uritemplate.go
  • vendor/github.com/invopop/jsonschema/id.go
  • pkg/integrations/bitbucket.go
  • vendor/github.com/mark3labs/mcp-go/server/constants.go
  • vendor/github.com/buger/jsonparser/.gitignore
  • vendor/github.com/mark3labs/mcp-go/server/ctx.go
  • pkg/integrations/quay.go
  • vendor/github.com/mark3labs/mcp-go/util/logger.go
  • pkg/subcmd/integration_azure.go
  • pkg/subcmd/integration_trustification.go
  • pkg/mcptools/deploytools.go
  • go.mod
  • pkg/subcmd/integration_gitlab.go
  • pkg/integrations/github.go
  • vendor/github.com/bahlo/generic-list-go/README.md
  • vendor/github.com/invopop/jsonschema/.gitignore
  • pkg/config/manager.go
  • pkg/subcmd/integration_jenkins.go
  • vendor/github.com/invopop/jsonschema/COPYING
  • vendor/github.com/mark3labs/mcp-go/server/http_transport_options.go
  • .gitignore
  • pkg/installer/job.go
  • vendor/github.com/buger/jsonparser/bytes.go
  • pkg/config/config.go
  • vendor/github.com/invopop/jsonschema/utils.go
  • pkg/integrations/nexus.go
  • vendor/github.com/bahlo/generic-list-go/LICENSE
  • vendor/github.com/mark3labs/mcp-go/server/sampling.go
  • pkg/k8s/kube.go
  • pkg/mcptools/integrationtools.go
  • vendor/github.com/yosida95/uritemplate/v3/match.go
  • pkg/integrations/trustification.go
  • pkg/subcmd/deploy.go
  • vendor/github.com/yosida95/uritemplate/v3/machine.go
  • pkg/subcmd/integration_quay.go
  • vendor/github.com/mark3labs/mcp-go/server/errors.go
  • vendor/github.com/mark3labs/mcp-go/mcp/errors.go
  • pkg/integrations/artifactory.go
  • vendor/github.com/yosida95/uritemplate/v3/equals.go
  • vendor/github.com/buger/jsonparser/bytes_unsafe.go
  • vendor/github.com/mark3labs/mcp-go/mcp/typed_tools.go
  • vendor/github.com/bahlo/generic-list-go/list.go
  • vendor/github.com/mark3labs/mcp-go/server/request_handler.go
  • vendor/github.com/buger/jsonparser/LICENSE
  • vendor/github.com/mark3labs/mcp-go/server/server.go
  • vendor/github.com/mark3labs/mcp-go/mcp/tools.go
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: rhopp
PR: redhat-appstudio/rhtap-cli#998
File: integration-tests/config/rhads-config:1-6
Timestamp: 2025-07-09T12:31:10.478Z
Learning: When using Tekton CLI (tkn) version 0.40.0, multi-line parameters are handled correctly and do not break into separate arguments like they did in earlier versions (≥ 0.29). Multi-line configuration files can be safely passed as Tekton parameters without needing to compress or base64-encode them.
📚 Learning: vendor files in go projects should never be modified directly. the vendor directory contains third-p...
Learnt from: dperaza4dustbit
PR: redhat-appstudio/rhtap-cli#599
File: vendor/github.com/hashicorp/go-retryablehttp/cert_error_go120.go:11-13
Timestamp: 2025-07-30T19:30:03.684Z
Learning: Vendor files in Go projects should never be modified directly. The vendor directory contains third-party dependencies that should remain unmodified to ensure reproducible builds and proper dependency management. Any changes would be lost during dependency updates.

Applied to files:

  • vendor/github.com/buger/jsonparser/Dockerfile
  • vendor/github.com/buger/jsonparser/Makefile
  • vendor/github.com/wk8/go-ordered-map/v2/.golangci.yml
  • vendor/github.com/wk8/go-ordered-map/v2/Makefile
🧬 Code Graph Analysis (9)
vendor/github.com/wk8/go-ordered-map/v2/yaml.go (1)
vendor/github.com/wk8/go-ordered-map/v2/orderedmap.go (1)
  • OrderedMap (23-26)
vendor/github.com/mark3labs/mcp-go/server/inprocess_session.go (3)
vendor/github.com/mark3labs/mcp-go/mcp/types.go (7)
  • CreateMessageRequest (805-808)
  • CreateMessageResult (825-832)
  • JSONRPCNotification (320-323)
  • LoggingLevelError (768-768)
  • Implementation (483-486)
  • ClientCapabilities (442-452)
  • LoggingLevel (761-761)
vendor/github.com/mark3labs/mcp-go/server/session.go (3)
  • ClientSession (11-20)
  • SessionWithLogging (23-29)
  • SessionWithClientInfo (43-53)
vendor/github.com/mark3labs/mcp-go/server/sampling.go (1)
  • SessionWithSampling (39-42)
vendor/github.com/yosida95/uritemplate/v3/compile.go (1)
vendor/github.com/yosida95/uritemplate/v3/uritemplate.go (1)
  • Template (29-38)
vendor/github.com/invopop/jsonschema/reflect_comments.go (1)
vendor/github.com/invopop/jsonschema/reflect.go (1)
  • Reflector (73-171)
vendor/github.com/buger/jsonparser/escape.go (1)
vendor/github.com/buger/jsonparser/parser.go (1)
  • MalformedStringEscapeError (20-20)
vendor/github.com/buger/jsonparser/parser.go (2)
vendor/github.com/buger/jsonparser/escape.go (1)
  • Unescape (130-173)
vendor/github.com/buger/jsonparser/bytes_safe.go (1)
  • StringToBytes (23-25)
vendor/github.com/wk8/go-ordered-map/v2/orderedmap.go (1)
vendor/github.com/bahlo/generic-list-go/list.go (3)
  • Element (15-28)
  • List (48-51)
  • New (62-62)
vendor/github.com/mark3labs/mcp-go/mcp/utils.go (4)
vendor/github.com/mark3labs/mcp-go/mcp/types.go (32)
  • InitializeResult (417-431)
  • ListResourcesResult (553-556)
  • ReadResourceResult (590-593)
  • TextContent (868-873)
  • TextContent (875-875)
  • ImageContent (879-886)
  • ImageContent (888-888)
  • AudioContent (892-899)
  • AudioContent (901-901)
  • EmbeddedResource (923-927)
  • EmbeddedResource (929-929)
  • TextResourceContents (699-707)
  • TextResourceContents (709-709)
  • BlobResourceContents (711-718)
  • BlobResourceContents (720-720)
  • RequestId (241-243)
  • Result (233-237)
  • JSONRPCResponse (326-330)
  • JSONRPCError (333-346)
  • ProgressToken (113-113)
  • Notification (166-169)
  • Params (164-164)
  • LoggingLevel (761-761)
  • Content (862-864)
  • ResourceLink (904-915)
  • ResourceLink (917-917)
  • ResourceContents (695-697)
  • Resource (645-660)
  • Cursor (116-116)
  • PaginatedResult (534-540)
  • ServerCapabilities (457-480)
  • Implementation (483-486)
vendor/github.com/mark3labs/mcp-go/mcp/prompts.go (10)
  • GetPromptRequest (23-27)
  • ListPromptsRequest (9-12)
  • PromptListChangedNotification (98-100)
  • GetPromptResult (38-43)
  • ListPromptsResult (16-19)
  • Role (79-79)
  • PromptMessage (90-93)
  • Prompt (49-57)
  • RoleAssistant (83-83)
  • RoleUser (82-82)
vendor/github.com/mark3labs/mcp-go/mcp/tools.go (6)
  • CallToolRequest (54-58)
  • ToolListChangedNotification (542-544)
  • CallToolResult (40-51)
  • ListToolsResult (25-28)
  • Description (798-802)
  • Tool (547-560)
vendor/github.com/spf13/cast/zz_generated.go (14)
  • ToBool (8-11)
  • ToInt64 (62-65)
  • ToInt32 (56-59)
  • ToInt16 (50-53)
  • ToInt8 (44-47)
  • ToInt (38-41)
  • ToUint (68-71)
  • ToUint64 (92-95)
  • ToUint32 (86-89)
  • ToUint16 (80-83)
  • ToUint8 (74-77)
  • ToFloat32 (98-101)
  • ToFloat64 (104-107)
  • ToStringMap (140-143)
vendor/github.com/yosida95/uritemplate/v3/expression.go (1)
vendor/github.com/yosida95/uritemplate/v3/value.go (1)
  • Values (15-15)
🪛 markdownlint-cli2 (0.17.2)
README.md

56-56: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)

docs/mcp.md

4-4: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


12-12: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


18-18: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


22-22: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


26-26: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


31-31: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


35-35: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


36-36: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


37-37: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


38-38: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


39-39: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


41-41: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


45-45: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


50-50: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


58-58: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


63-63: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)

vendor/github.com/invopop/jsonschema/README.md

125-125: Bare URL used

(MD034, no-bare-urls)


142-142: Hard tabs
Column: 1

(MD010, no-hard-tabs)


146-146: Hard tabs
Column: 1

(MD010, no-hard-tabs)


147-147: Hard tabs
Column: 1

(MD010, no-hard-tabs)


148-148: Hard tabs
Column: 1

(MD010, no-hard-tabs)


149-149: Hard tabs
Column: 1

(MD010, no-hard-tabs)


150-150: Hard tabs
Column: 1

(MD010, no-hard-tabs)


151-151: Hard tabs
Column: 1

(MD010, no-hard-tabs)


152-152: Hard tabs
Column: 1

(MD010, no-hard-tabs)


153-153: Hard tabs
Column: 1

(MD010, no-hard-tabs)


154-154: Hard tabs
Column: 1

(MD010, no-hard-tabs)


155-155: Hard tabs
Column: 1

(MD010, no-hard-tabs)


204-204: Hard tabs
Column: 1

(MD010, no-hard-tabs)


205-205: Hard tabs
Column: 1

(MD010, no-hard-tabs)


206-206: Hard tabs
Column: 1

(MD010, no-hard-tabs)


207-207: Hard tabs
Column: 1

(MD010, no-hard-tabs)


321-321: Hard tabs
Column: 1

(MD010, no-hard-tabs)


322-322: Hard tabs
Column: 1

(MD010, no-hard-tabs)


350-350: Hard tabs
Column: 1

(MD010, no-hard-tabs)


351-351: Hard tabs
Column: 1

(MD010, no-hard-tabs)


352-352: Hard tabs
Column: 1

(MD010, no-hard-tabs)


353-353: Hard tabs
Column: 1

(MD010, no-hard-tabs)


354-354: Hard tabs
Column: 1

(MD010, no-hard-tabs)


355-355: Hard tabs
Column: 1

(MD010, no-hard-tabs)

vendor/github.com/wk8/go-ordered-map/v2/CHANGELOG.md

3-3: Link and image reference definitions should be needed
Unused link or image reference definition: "comment"

(MD053, link-image-reference-definitions)

vendor/github.com/wk8/go-ordered-map/v2/README.md

60-60: Hard tabs
Column: 1

(MD010, no-hard-tabs)


69-69: Hard tabs
Column: 1

(MD010, no-hard-tabs)


95-95: Bare URL used

(MD034, no-bare-urls)


112-112: Hard tabs
Column: 16

(MD010, no-hard-tabs)

🪛 LanguageTool
docs/mcp.md

[style] ~54-~54: Consider a more concise word here.
Context: ... configuration on a unique ConfigMap, in order to have a single RHADS installation per cl...

(IN_ORDER_TO_PREMIUM)

vendor/github.com/buger/jsonparser/README.md

[style] ~8-~8: To elevate your writing, try using a synonym here.
Context: ...ce{}` instead, it will be very slow and hard to manage. I investigated what's on the...

(HARD_TO)


[style] ~99-~99: As an alternative to the over-used intensifier ‘really’, consider replacing this phrase.
Context: ...mail.com. ## Reference Library API is really simple. You just need the Get method to perf...

(EN_WEAK_ADJECTIVE)


[style] ~262-~262: To elevate your writing, try using a synonym here.
Context: ...(require some code generation). It's hard to fully comparejsonparserandeasy...

(HARD_TO)


[style] ~264-~264: Consider using a more formal and expressive alternative to ‘amazing’.
Context: ...nwhile keeping structs,easyjson` is an amazing choice. If you want to process dynamic ...

(AWESOME)


[style] ~319-~319: Possibly, ‘actually’ is redundant. Consider using “only”.
Context: ...ing/json and map[string]interface{} and actually only helpers for unstructured JSON, their pe...

(ADVERB_ONLY)


[style] ~340-~340: For a more polite and respectful tone, consider rephrasing with ‘please’.
Context: ...** | jsonparser now is a winner, but do not forget that it is way more lightweight parser ...

(DONT_FORGET)

vendor/github.com/invopop/jsonschema/README.md

[style] ~14-~14: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...gth, maxLength, pattern, format, etc. - Supports simple string and numeric enums. - Supp...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~15-~15: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...orts simple string and numeric enums. - Supports custom property fields via the `jsonsch...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~20-~20: Consider a more concise word here.
Context: ...cally from the current Go package's URL in order to be unique, and can be disabled with the...

(IN_ORDER_TO_PREMIUM)


[style] ~125-~125: As an alternative to the over-used intensifier ‘very’, consider replacing this phrase.
Context: ... tags has now been removed. If you feel very strongly about this, we've opened a discussion t...

(EN_WEAK_ADJECTIVE)


[uncategorized] ~136-~136: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ndedStruct If set to true, makes the top level struct not to reference itself in the d...

(EN_COMPOUND_ADJECTIVE_INTERNAL)

🪛 Hadolint (2.12.0)
vendor/github.com/buger/jsonparser/Dockerfile

[error] 12-12: Use COPY instead of ADD for files and folders

(DL3020)

🪛 checkmake (0.2.2)
vendor/github.com/buger/jsonparser/Makefile

[warning] 1-1: Missing required phony target "all"

(minphony)


[warning] 1-1: Missing required phony target "clean"

(minphony)


[warning] 1-1: Missing required phony target "test"

(minphony)

vendor/github.com/wk8/go-ordered-map/v2/Makefile

[warning] 30-30: Missing required phony target "clean"

(minphony)

🪛 YAMLlint (1.37.1)
vendor/github.com/wk8/go-ordered-map/v2/.golangci.yml

[error] 4-4: trailing spaces

(trailing-spaces)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Red Hat Konflux / rhtap-cli-on-pull-request
🔇 Additional comments (13)
vendor/github.com/buger/jsonparser/Dockerfile (1)

1-1: Go 1.6 image is long EOL – please verify need for such an old base

golang:1.6 stopped receiving security fixes years ago. If this Dockerfile is actually built in CI/CD (and not just carried verbatim from upstream), upgrading to a supported LTS tag (e.g. golang:1.22-alpine) will avoid pulling dozens of known-vulnerable layers.

vendor/github.com/wk8/go-ordered-map/v2/README.md (1)

1-155: LGTM! Standard vendor documentation.

This is well-structured documentation for the ordered map library. The markdown linting issues flagged by static analysis (hard tabs, bare URLs) are present but acceptable for vendor documentation.

vendor/github.com/wk8/go-ordered-map/v2/CHANGELOG.md (1)

1-39: LGTM! Well-maintained library changelog.

The changelog shows good version progression with regular updates, bug fixes, and feature additions. The library appears mature and actively maintained.

vendor/github.com/wk8/go-ordered-map/v2/yaml.go (3)

9-12: Good interface compliance verification.

The compile-time interface checks ensure the OrderedMap correctly implements the yaml.Marshaler and yaml.Unmarshaler interfaces.


15-44: Solid YAML marshaling implementation.

The marshaling logic correctly preserves insertion order by iterating through pairs using om.Oldest() and properly handles the nil case. The approach of encoding keys/values to get correct YAML tags is a reasonable implementation strategy.


47-71: Robust YAML unmarshaling with proper validation.

The unmarshaling implementation correctly validates the node type, initializes the map if needed, and processes key-value pairs in order. Error handling is appropriate throughout.

vendor/github.com/buger/jsonparser/escape.go (1)

130-173: Well-structured unescape function with good buffer management.

The main unescape function properly handles buffer allocation, reuse, and manages the unescaping process efficiently. The logic for copying unescaped segments and processing escape sequences is sound.

vendor/github.com/yosida95/uritemplate/v3/expression.go (1)

1-174: Vendor file review complete - no critical issues found

This is a third-party vendor file that appears to be well-implemented with proper error handling and clear structure.

vendor/github.com/buger/jsonparser/README.md (1)

1-366: Vendor documentation review complete

This is third-party library documentation. The content is comprehensive and provides good examples and benchmarks.

pkg/mcptools/configtools.go (1)

182-204: LGTM!

The constructor properly initializes the ConfigTools with good error handling and intentionally hides dependencies from the default configuration shown to users.

vendor/github.com/buger/jsonparser/parser.go (1)

1-1284: Vendor parser implementation review complete

This third-party JSON parser appears well-implemented with proper error handling, bounds checking, and performance optimizations. No critical issues identified.

vendor/github.com/mark3labs/mcp-go/server/session.go (1)

337-354: Well-designed concurrent-safe tool management

The copy-on-write pattern used here ensures thread-safe updates to session tools without requiring locks in this method. Good implementation!

vendor/github.com/invopop/jsonschema/reflect.go (1)

1-1149: Vendored dependency - no review needed

This is a vendored third-party dependency. Unless there are specific integration concerns or security issues, vendored files typically don't require detailed review.

otaviof added 8 commits July 31, 2025 12:46
Using Cobra to mark persistent flags, allowing a pragmatic approach to
identify the required flags per subcommand.
Quick fix to expose the error returned in the function, previosuly
ignored.
Analogous to `tssc config` subcommand.
MCP tools to support the features of `tssc integration` subcommand.
Covering the features of `tssc deploy` subcommand.
Creating the subcommand `tssc mcp-server` to start the MCP interface.
@otaviof otaviof force-pushed the RHTAP-5269-bootstrap branch from e2525fe to 8ab173a Compare July 31, 2025 15:47
Copy link

@openshift-ci-robot
Copy link
Collaborator

openshift-ci-robot commented Jul 31, 2025

@otaviof: This pull request references RHTAP-5269 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the epic to target the "4.20.0" version, but no target version was set.

In response to this:

This PR is bringing the MCP server scaffold to the project, it exposes a number of MCP tools to have a "vibe platform engineering" powered by tssc.

The MCP server is a subcommand of tssc, following the example of many other projects out there. To start the MCP server run:

tssc mcp-server --image="ghcr.io/otaviof/tssc:latest"

Summary by CodeRabbit

  • New Features

  • Introduced a Model Context Protocol (MCP) server, enabling TSSC features to be accessed via a standardized protocol.

  • Added a new CLI subcommand to start the MCP server for installer operations.

  • Provided tools for cluster configuration, integration management, and deployment through the MCP server.

  • Integrated comprehensive documentation for MCP server usage and protocol.

  • Enhancements

  • Improved flag handling and validation for integration commands, ensuring required parameters are enforced.

  • Added support for Kubernetes batch job management to facilitate asynchronous installer deployments.

  • Documentation

  • Expanded README and added detailed guides for MCP server functionality and usage.

  • Chores

  • Updated dependencies and vendored libraries to support new MCP protocol features and utilities.

  • Updated .gitignore to exclude new development artifacts.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

♻️ Duplicate comments (17)
vendor/github.com/buger/jsonparser/Dockerfile (1)

1-12: Vendor files should not be modified directly.

This file is part of the vendored dependencies. Vendor files should remain unmodified to ensure reproducible builds and proper dependency management. Any changes would be lost when running go mod vendor or updating dependencies.

vendor/github.com/buger/jsonparser/Makefile (1)

1-36: Vendor files should not be modified directly.

This file is part of the vendored dependencies. Vendor files should remain unmodified to ensure reproducible builds and proper dependency management. Any changes would be lost when running go mod vendor or updating dependencies.

vendor/github.com/bahlo/generic-list-go/list.go (1)

1-236: Vendor files should not be modified directly.

This file is part of the vendored dependencies. Vendor files should remain unmodified to ensure reproducible builds and proper dependency management. Any changes would be lost when running go mod vendor or updating dependencies.

vendor/github.com/wk8/go-ordered-map/v2/.golangci.yml (1)

1-81: Vendor files should not be modified directly.

This file is part of the vendored dependencies. Vendor files should remain unmodified to ensure reproducible builds and proper dependency management. Any changes would be lost when running go mod vendor or updating dependencies.

vendor/github.com/yosida95/uritemplate/v3/prog.go (1)

38-62: Fix mismatch between opcodes and opcodeNames array.

The opcodeNames array is missing entries for opNoop and the array size doesn't match the number of opcodes. This could cause the String() method to return empty strings for valid opcodes.

Note: Since this is vendor code, this issue should be reported upstream rather than fixed locally in the vendor directory.

pkg/mcptools/configtools.go (2)

60-69: Bug: Using wrong config variable for marshaling

The code creates a new default config with NewConfigDefault() but then marshals c.defaultCfg instead of the newly created cfg.

-	payload, err := c.defaultCfg.MarshalYAML()
+	payload, err := cfg.MarshalYAML()

93-100: Fix type assertion for Settings argument

The type assertion ctr.GetArguments()[SettingsArg].(config.Settings) will never succeed because MCP arguments are primitive types or map[string]any, not struct types. Settings need to be parsed from the input.

-	if settings, ok := ctr.GetArguments()[SettingsArg].(config.Settings); ok {
-		cfg.Installer.Settings = settings
-	}
+	// Parse settings from map or JSON string
+	if rawSettings, ok := ctr.GetArguments()[SettingsArg]; ok && rawSettings != nil {
+		var settings config.Settings
+		switch v := rawSettings.(type) {
+		case string:
+			if err := json.Unmarshal([]byte(v), &settings); err != nil {
+				return nil, fmt.Errorf("invalid settings JSON: %w", err)
+			}
+		case map[string]any:
+			// Convert map to Settings struct
+			data, err := json.Marshal(v)
+			if err != nil {
+				return nil, fmt.Errorf("failed to marshal settings map: %w", err)
+			}
+			if err := json.Unmarshal(data, &settings); err != nil {
+				return nil, fmt.Errorf("failed to unmarshal settings: %w", err)
+			}
+		default:
+			return nil, fmt.Errorf("settings must be a JSON string or object, got %T", v)
+		}
+		cfg.Installer.Settings = settings
+	}

Don't forget to add the required imports:

import (
    "encoding/json"
)
vendor/github.com/mark3labs/mcp-go/server/inprocess_session.go (1)

104-107: Session ID collision risk already identified

A previous review has already flagged the potential for duplicate session IDs when using time.Now().UnixNano(). This remains a valid concern for awareness in this vendor dependency.

vendor/github.com/mark3labs/mcp-go/server/hooks.go (1)

94-532: Thread safety and panic recovery concerns already identified

A previous review has already flagged:

  1. Thread safety issues with concurrent access to hook slices
  2. Missing panic recovery in hook invocations

These remain valid concerns for awareness in this vendor dependency.

vendor/github.com/mark3labs/mcp-go/server/streamable_http.go (2)

221-225: Request body size limit concern already identified

A previous review has already flagged the memory exhaustion risk from using io.ReadAll without a size limit. This remains a valid security concern for awareness in this vendor dependency.


391-406: Channel blocking concern already identified

A previous review has already flagged the potential for indefinite blocking when writeChan is full. The suggested solution of adding a default case to drop messages or log warnings remains relevant for this vendor dependency.

vendor/github.com/wk8/go-ordered-map/v2/orderedmap.go (1)

55-84: Panic on invalid options already identified

A previous review has already suggested returning an error instead of panicking for invalid options. While this would be a better practice for production code, this design choice belongs to the vendor library maintainers.

vendor/github.com/mark3labs/mcp-go/mcp/tools.go (1)

297-310: Get*Slice methods silently ignore non-convertible values

Similar to GetStringSlice, the GetIntSlice, GetFloatSlice, and GetBoolSlice methods also silently ignore values that cannot be converted to their respective types. This could lead to unexpected data loss.

Also applies to: 357-370, 417-431

vendor/github.com/mark3labs/mcp-go/server/sse.go (2)

356-356: CORS header is too permissive

The Access-Control-Allow-Origin header is set to "*" which allows any origin. This is a security concern for production use.


541-549: Message loss when event queue is full

When the event queue is full, messages are silently dropped which could lead to data loss.

vendor/github.com/mark3labs/mcp-go/server/server.go (1)

507-512: Potential race condition in SetTools method

The lock is released before calling AddTools, which could lead to concurrent modification of the tools map if another goroutine accesses it between these operations.

vendor/github.com/mark3labs/mcp-go/mcp/utils.go (1)

311-326: Fix parameter name in NewToolResultAudio

The function has a parameter named imageData which should be audioData for clarity and consistency with the audio content type being created.

🧹 Nitpick comments (3)
README.md (1)

56-56: Consider using setext heading style for consistency.

The static analysis tool suggests using setext heading style instead of atx. While not critical, it would improve consistency with the project's markdown style preferences.

-## Model Context Protocol Server (MCP)
+Model Context Protocol Server (MCP)
+-------------------------------------
docs/mcp.md (2)

1-67: Comprehensive MCP documentation with minor formatting improvements needed.

The documentation effectively explains the MCP server functionality, usage, and available tools. However, there are some markdown formatting inconsistencies that should be addressed for better readability.

Apply these formatting improvements:

-# Usage
+Usage
+-----

-# Instructions  
+Instructions
+------------

-# Tools
+Tools
+-----

-## Configuration
+Configuration
+~~~~~~~~~~~~~

-## Integration
+Integration
+-----------

-## Deploy
+Deploy
+------

Also fix the list indentation:

-- **namespace** (string):
-    - **Description**: The main namespace for TSSC (`.tssc.namespace`), where Red Hat Developer Hub (DH) and other fundamental services will be deployed.
-    - **Default**: "tssc".
-- **setting** (object):
-    - **Description**: The global settings object for TSSC (`.tssc.settings{}`). When empty the default settings will be used.
+  - **namespace** (string):
+    - **Description**: The main namespace for TSSC (`.tssc.namespace`), where Red Hat Developer Hub (DH) and other fundamental services will be deployed.
+    - **Default**: "tssc".
+  - **setting** (object):
+    - **Description**: The global settings object for TSSC (`.tssc.settings{}`). When empty the default settings will be used.

54-54: Consider more concise phrasing.

The phrase "in order to" can be simplified for better readability.

-The `tssc` design maintains a single deployment per cluster, by centralising the installer configuration on a unique `ConfigMap`, in order to have a single RHADS installation per cluster.
+The `tssc` design maintains a single deployment per cluster, by centralising the installer configuration on a unique `ConfigMap`, to have a single RHADS installation per cluster.
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e2525fe and 8ab173a.

⛔ Files ignored due to path filters (1)
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (107)
  • .gitignore (1 hunks)
  • README.md (2 hunks)
  • docs/mcp.md (1 hunks)
  • go.mod (4 hunks)
  • pkg/cmd/root.go (1 hunks)
  • pkg/config/config.go (2 hunks)
  • pkg/config/manager.go (1 hunks)
  • pkg/githubapp/githubapp.go (3 hunks)
  • pkg/installer/job.go (1 hunks)
  • pkg/integrations/acs.go (2 hunks)
  • pkg/integrations/artifactory.go (4 hunks)
  • pkg/integrations/azure.go (4 hunks)
  • pkg/integrations/bitbucket.go (3 hunks)
  • pkg/integrations/github.go (3 hunks)
  • pkg/integrations/gitlab.go (4 hunks)
  • pkg/integrations/jenkins.go (4 hunks)
  • pkg/integrations/nexus.go (3 hunks)
  • pkg/integrations/quay.go (5 hunks)
  • pkg/integrations/trustification.go (3 hunks)
  • pkg/k8s/kube.go (2 hunks)
  • pkg/mcpserver/instructions.md (1 hunks)
  • pkg/mcpserver/mcpserver.go (1 hunks)
  • pkg/mcptools/configtools.go (1 hunks)
  • pkg/mcptools/deploytools.go (1 hunks)
  • pkg/mcptools/integrationtools.go (1 hunks)
  • pkg/mcptools/interface.go (1 hunks)
  • pkg/subcmd/integration.go (1 hunks)
  • pkg/subcmd/integration_acs.go (1 hunks)
  • pkg/subcmd/integration_artifactory.go (1 hunks)
  • pkg/subcmd/integration_azure.go (1 hunks)
  • pkg/subcmd/integration_bitbucket.go (1 hunks)
  • pkg/subcmd/integration_githubapp.go (1 hunks)
  • pkg/subcmd/integration_gitlab.go (1 hunks)
  • pkg/subcmd/integration_jenkins.go (1 hunks)
  • pkg/subcmd/integration_nexus.go (1 hunks)
  • pkg/subcmd/integration_quay.go (1 hunks)
  • pkg/subcmd/integration_trustification.go (1 hunks)
  • pkg/subcmd/mcpserver.go (1 hunks)
  • vendor/github.com/bahlo/generic-list-go/LICENSE (1 hunks)
  • vendor/github.com/bahlo/generic-list-go/README.md (1 hunks)
  • vendor/github.com/bahlo/generic-list-go/list.go (1 hunks)
  • vendor/github.com/buger/jsonparser/.gitignore (1 hunks)
  • vendor/github.com/buger/jsonparser/.travis.yml (1 hunks)
  • vendor/github.com/buger/jsonparser/Dockerfile (1 hunks)
  • vendor/github.com/buger/jsonparser/LICENSE (1 hunks)
  • vendor/github.com/buger/jsonparser/Makefile (1 hunks)
  • vendor/github.com/buger/jsonparser/README.md (1 hunks)
  • vendor/github.com/buger/jsonparser/bytes.go (1 hunks)
  • vendor/github.com/buger/jsonparser/bytes_safe.go (1 hunks)
  • vendor/github.com/buger/jsonparser/bytes_unsafe.go (1 hunks)
  • vendor/github.com/buger/jsonparser/escape.go (1 hunks)
  • vendor/github.com/buger/jsonparser/fuzz.go (1 hunks)
  • vendor/github.com/buger/jsonparser/oss-fuzz-build.sh (1 hunks)
  • vendor/github.com/buger/jsonparser/parser.go (1 hunks)
  • vendor/github.com/invopop/jsonschema/.gitignore (1 hunks)
  • vendor/github.com/invopop/jsonschema/.golangci.yml (1 hunks)
  • vendor/github.com/invopop/jsonschema/COPYING (1 hunks)
  • vendor/github.com/invopop/jsonschema/README.md (1 hunks)
  • vendor/github.com/invopop/jsonschema/id.go (1 hunks)
  • vendor/github.com/invopop/jsonschema/reflect.go (1 hunks)
  • vendor/github.com/invopop/jsonschema/reflect_comments.go (1 hunks)
  • vendor/github.com/invopop/jsonschema/schema.go (1 hunks)
  • vendor/github.com/invopop/jsonschema/utils.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/LICENSE (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/errors.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/prompts.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/resources.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/tools.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/typed_tools.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/types.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/mcp/utils.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/constants.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/ctx.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/errors.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/hooks.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/http_transport_options.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/inprocess_session.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/request_handler.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/sampling.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/server.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/session.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/sse.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/stdio.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/server/streamable_http.go (1 hunks)
  • vendor/github.com/mark3labs/mcp-go/util/logger.go (1 hunks)
  • vendor/github.com/wk8/go-ordered-map/v2/.gitignore (1 hunks)
  • vendor/github.com/wk8/go-ordered-map/v2/.golangci.yml (1 hunks)
  • vendor/github.com/wk8/go-ordered-map/v2/CHANGELOG.md (1 hunks)
  • vendor/github.com/wk8/go-ordered-map/v2/LICENSE (1 hunks)
  • vendor/github.com/wk8/go-ordered-map/v2/Makefile (1 hunks)
  • vendor/github.com/wk8/go-ordered-map/v2/README.md (1 hunks)
  • vendor/github.com/wk8/go-ordered-map/v2/json.go (1 hunks)
  • vendor/github.com/wk8/go-ordered-map/v2/orderedmap.go (1 hunks)
  • vendor/github.com/wk8/go-ordered-map/v2/yaml.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/LICENSE (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/README.rst (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/compile.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/equals.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/error.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/escape.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/expression.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/machine.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/match.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/parse.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/prog.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/uritemplate.go (1 hunks)
  • vendor/github.com/yosida95/uritemplate/v3/value.go (1 hunks)
⛔ Files not processed due to max files limit (1)
  • vendor/modules.txt
✅ Files skipped from review due to trivial changes (12)
  • pkg/subcmd/integration_gitlab.go
  • vendor/github.com/yosida95/uritemplate/v3/error.go
  • vendor/github.com/wk8/go-ordered-map/v2/LICENSE
  • pkg/mcptools/interface.go
  • vendor/github.com/wk8/go-ordered-map/v2/README.md
  • pkg/subcmd/integration_bitbucket.go
  • vendor/github.com/buger/jsonparser/bytes_safe.go
  • pkg/mcpserver/mcpserver.go
  • vendor/github.com/buger/jsonparser/oss-fuzz-build.sh
  • vendor/github.com/yosida95/uritemplate/v3/machine.go
  • vendor/github.com/yosida95/uritemplate/v3/expression.go
  • vendor/github.com/mark3labs/mcp-go/mcp/types.go
🚧 Files skipped from review as they are similar to previous changes (69)
  • pkg/subcmd/integration.go
  • vendor/github.com/invopop/jsonschema/.gitignore
  • pkg/subcmd/integration_jenkins.go
  • vendor/github.com/invopop/jsonschema/COPYING
  • .gitignore
  • pkg/config/manager.go
  • vendor/github.com/yosida95/uritemplate/v3/LICENSE
  • pkg/subcmd/integration_acs.go
  • go.mod
  • pkg/subcmd/integration_githubapp.go
  • vendor/github.com/wk8/go-ordered-map/v2/.gitignore
  • pkg/subcmd/integration_nexus.go
  • vendor/github.com/mark3labs/mcp-go/LICENSE
  • vendor/github.com/buger/jsonparser/.gitignore
  • pkg/subcmd/integration_azure.go
  • vendor/github.com/buger/jsonparser/.travis.yml
  • vendor/github.com/bahlo/generic-list-go/README.md
  • vendor/github.com/mark3labs/mcp-go/server/ctx.go
  • vendor/github.com/buger/jsonparser/bytes.go
  • pkg/subcmd/integration_artifactory.go
  • vendor/github.com/mark3labs/mcp-go/util/logger.go
  • vendor/github.com/bahlo/generic-list-go/LICENSE
  • vendor/github.com/mark3labs/mcp-go/server/http_transport_options.go
  • pkg/subcmd/integration_trustification.go
  • pkg/integrations/artifactory.go
  • pkg/integrations/azure.go
  • vendor/github.com/mark3labs/mcp-go/server/constants.go
  • pkg/cmd/root.go
  • pkg/integrations/gitlab.go
  • pkg/k8s/kube.go
  • vendor/github.com/invopop/jsonschema/utils.go
  • pkg/mcpserver/instructions.md
  • vendor/github.com/invopop/jsonschema/schema.go
  • vendor/github.com/buger/jsonparser/LICENSE
  • vendor/github.com/mark3labs/mcp-go/server/errors.go
  • pkg/subcmd/integration_quay.go
  • pkg/integrations/trustification.go
  • pkg/config/config.go
  • vendor/github.com/buger/jsonparser/bytes_unsafe.go
  • vendor/github.com/yosida95/uritemplate/v3/escape.go
  • vendor/github.com/wk8/go-ordered-map/v2/yaml.go
  • vendor/github.com/mark3labs/mcp-go/mcp/resources.go
  • vendor/github.com/mark3labs/mcp-go/mcp/errors.go
  • pkg/mcptools/integrationtools.go
  • vendor/github.com/mark3labs/mcp-go/mcp/typed_tools.go
  • vendor/github.com/yosida95/uritemplate/v3/README.rst
  • vendor/github.com/yosida95/uritemplate/v3/equals.go
  • pkg/integrations/jenkins.go
  • pkg/integrations/bitbucket.go
  • pkg/githubapp/githubapp.go
  • vendor/github.com/wk8/go-ordered-map/v2/json.go
  • vendor/github.com/yosida95/uritemplate/v3/uritemplate.go
  • pkg/integrations/github.go
  • pkg/integrations/quay.go
  • vendor/github.com/mark3labs/mcp-go/mcp/prompts.go
  • pkg/subcmd/mcpserver.go
  • vendor/github.com/invopop/jsonschema/id.go
  • pkg/integrations/acs.go
  • vendor/github.com/mark3labs/mcp-go/server/request_handler.go
  • vendor/github.com/invopop/jsonschema/.golangci.yml
  • pkg/integrations/nexus.go
  • vendor/github.com/mark3labs/mcp-go/server/sampling.go
  • vendor/github.com/yosida95/uritemplate/v3/match.go
  • vendor/github.com/yosida95/uritemplate/v3/parse.go
  • vendor/github.com/buger/jsonparser/escape.go
  • pkg/mcptools/deploytools.go
  • pkg/installer/job.go
  • vendor/github.com/buger/jsonparser/fuzz.go
  • vendor/github.com/mark3labs/mcp-go/server/session.go
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: vendor files in go projects should never be modified directly. the vendor directory contains third-p...
Learnt from: dperaza4dustbit
PR: redhat-appstudio/rhtap-cli#599
File: vendor/github.com/hashicorp/go-retryablehttp/cert_error_go120.go:11-13
Timestamp: 2025-07-30T19:30:03.684Z
Learning: Vendor files in Go projects should never be modified directly. The vendor directory contains third-party dependencies that should remain unmodified to ensure reproducible builds and proper dependency management. Any changes would be lost during dependency updates.

Applied to files:

  • vendor/github.com/buger/jsonparser/Dockerfile
  • vendor/github.com/buger/jsonparser/Makefile
  • vendor/github.com/wk8/go-ordered-map/v2/.golangci.yml
  • vendor/github.com/wk8/go-ordered-map/v2/Makefile
📚 Learning: the user prefers not to modify vendor files directly, following best practices for dependency manage...
Learnt from: dperaza4dustbit
PR: redhat-appstudio/rhtap-cli#599
File: vendor/gitlab.com/gitlab-org/api/client-go/error_tracking.go:128-128
Timestamp: 2025-07-30T19:30:19.476Z
Learning: The user prefers not to modify vendor files directly, following best practices for dependency management. Issues in vendor dependencies should be reported upstream rather than fixed locally.

Applied to files:

  • vendor/github.com/buger/jsonparser/Makefile
🧬 Code Graph Analysis (8)
vendor/github.com/invopop/jsonschema/reflect_comments.go (1)
vendor/github.com/invopop/jsonschema/reflect.go (1)
  • Reflector (73-171)
vendor/github.com/yosida95/uritemplate/v3/compile.go (1)
vendor/github.com/yosida95/uritemplate/v3/uritemplate.go (1)
  • Template (29-38)
vendor/github.com/mark3labs/mcp-go/server/inprocess_session.go (3)
vendor/github.com/mark3labs/mcp-go/mcp/types.go (7)
  • CreateMessageRequest (805-808)
  • CreateMessageResult (825-832)
  • JSONRPCNotification (320-323)
  • LoggingLevelError (768-768)
  • Implementation (483-486)
  • ClientCapabilities (442-452)
  • LoggingLevel (761-761)
vendor/github.com/mark3labs/mcp-go/server/session.go (3)
  • ClientSession (11-20)
  • SessionWithLogging (23-29)
  • SessionWithClientInfo (43-53)
vendor/github.com/mark3labs/mcp-go/server/sampling.go (1)
  • SessionWithSampling (39-42)
vendor/github.com/wk8/go-ordered-map/v2/orderedmap.go (1)
vendor/github.com/bahlo/generic-list-go/list.go (3)
  • Element (15-28)
  • List (48-51)
  • New (62-62)
vendor/github.com/mark3labs/mcp-go/server/hooks.go (2)
vendor/github.com/mark3labs/mcp-go/server/session.go (1)
  • ClientSession (11-20)
vendor/github.com/mark3labs/mcp-go/mcp/types.go (22)
  • MCPMethod (15-15)
  • InitializeRequest (401-405)
  • InitializeResult (417-431)
  • PingRequest (493-496)
  • EmptyResult (365-365)
  • SetLevelRequest (726-730)
  • ListResourcesRequest (546-549)
  • ListResourcesResult (553-556)
  • ListResourceTemplatesRequest (560-563)
  • ListResourceTemplatesResult (567-570)
  • ReadResourceRequest (574-578)
  • ReadResourceResult (590-593)
  • MethodInitialize (20-20)
  • MethodPing (24-24)
  • MethodSetLogLevel (56-56)
  • MethodResourcesList (28-28)
  • MethodResourcesTemplatesList (32-32)
  • MethodResourcesRead (36-36)
  • MethodPromptsList (40-40)
  • MethodPromptsGet (44-44)
  • MethodToolsList (48-48)
  • MethodToolsCall (52-52)
vendor/github.com/buger/jsonparser/parser.go (2)
vendor/github.com/buger/jsonparser/escape.go (1)
  • Unescape (130-173)
vendor/github.com/buger/jsonparser/bytes_safe.go (1)
  • StringToBytes (23-25)
vendor/github.com/mark3labs/mcp-go/server/stdio.go (5)
vendor/github.com/mark3labs/mcp-go/server/server.go (1)
  • MCPServer (144-169)
vendor/github.com/mark3labs/mcp-go/util/logger.go (1)
  • Logger (8-11)
vendor/github.com/mark3labs/mcp-go/mcp/types.go (13)
  • JSONRPCNotification (320-323)
  • CreateMessageResult (825-832)
  • LoggingLevelError (768-768)
  • Implementation (483-486)
  • ClientCapabilities (442-452)
  • LoggingLevel (761-761)
  • CreateMessageRequest (805-808)
  • Params (164-164)
  • CreateMessageParams (810-819)
  • JSONRPC_VERSION (110-110)
  • MethodSamplingCreateMessage (798-798)
  • PARSE_ERROR (350-350)
  • Result (233-237)
vendor/github.com/mark3labs/mcp-go/server/session.go (3)
  • ClientSession (11-20)
  • SessionWithLogging (23-29)
  • SessionWithClientInfo (43-53)
vendor/github.com/mark3labs/mcp-go/server/sampling.go (1)
  • SessionWithSampling (39-42)
vendor/github.com/mark3labs/mcp-go/mcp/utils.go (2)
vendor/github.com/mark3labs/mcp-go/mcp/types.go (26)
  • ReadResourceResult (590-593)
  • TextContent (868-873)
  • TextContent (875-875)
  • ImageContent (879-886)
  • ImageContent (888-888)
  • AudioContent (892-899)
  • AudioContent (901-901)
  • EmbeddedResource (923-927)
  • EmbeddedResource (929-929)
  • TextResourceContents (699-707)
  • TextResourceContents (709-709)
  • BlobResourceContents (711-718)
  • BlobResourceContents (720-720)
  • RequestId (241-243)
  • Result (233-237)
  • JSONRPCResponse (326-330)
  • JSONRPCError (333-346)
  • Notification (166-169)
  • Params (164-164)
  • LoggingLevel (761-761)
  • Content (862-864)
  • ResourceContents (695-697)
  • Resource (645-660)
  • Cursor (116-116)
  • PaginatedResult (534-540)
  • ResourceTemplate (669-686)
vendor/github.com/spf13/cast/zz_generated.go (14)
  • ToBool (8-11)
  • ToInt64 (62-65)
  • ToInt32 (56-59)
  • ToInt16 (50-53)
  • ToInt8 (44-47)
  • ToInt (38-41)
  • ToUint (68-71)
  • ToUint64 (92-95)
  • ToUint32 (86-89)
  • ToUint16 (80-83)
  • ToUint8 (74-77)
  • ToFloat32 (98-101)
  • ToFloat64 (104-107)
  • ToStringMap (140-143)
🪛 markdownlint-cli2 (0.17.2)
README.md

58-58: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)

docs/mcp.md

4-4: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


12-12: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


18-18: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


22-22: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


26-26: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


31-31: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


35-35: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


36-36: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


37-37: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


38-38: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


39-39: Unordered list indentation
Expected: 4; Actual: 8

(MD007, ul-indent)


41-41: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


45-45: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


50-50: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


58-58: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)


63-63: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)

vendor/github.com/buger/jsonparser/README.md

39-39: Hard tabs
Column: 1

(MD010, no-hard-tabs)


41-41: Hard tabs
Column: 1

(MD010, no-hard-tabs)


45-45: Hard tabs
Column: 1

(MD010, no-hard-tabs)


47-47: Hard tabs
Column: 1

(MD010, no-hard-tabs)


48-48: Hard tabs
Column: 1

(MD010, no-hard-tabs)


49-49: Hard tabs
Column: 1

(MD010, no-hard-tabs)


51-51: Hard tabs
Column: 1

(MD010, no-hard-tabs)


52-52: Hard tabs
Column: 1

(MD010, no-hard-tabs)


54-54: Hard tabs
Column: 1

(MD010, no-hard-tabs)


55-55: Hard tabs
Column: 1

(MD010, no-hard-tabs)


56-56: Hard tabs
Column: 1

(MD010, no-hard-tabs)


57-57: Hard tabs
Column: 1

(MD010, no-hard-tabs)


58-58: Hard tabs
Column: 1

(MD010, no-hard-tabs)


59-59: Hard tabs
Column: 1

(MD010, no-hard-tabs)


60-60: Hard tabs
Column: 1

(MD010, no-hard-tabs)


62-62: Hard tabs
Column: 1

(MD010, no-hard-tabs)


63-63: Hard tabs
Column: 1

(MD010, no-hard-tabs)


64-64: Hard tabs
Column: 1

(MD010, no-hard-tabs)


65-65: Hard tabs
Column: 1

(MD010, no-hard-tabs)


66-66: Hard tabs
Column: 1

(MD010, no-hard-tabs)


67-67: Hard tabs
Column: 1

(MD010, no-hard-tabs)


68-68: Hard tabs
Column: 1

(MD010, no-hard-tabs)


69-69: Hard tabs
Column: 1

(MD010, no-hard-tabs)


70-70: Hard tabs
Column: 1

(MD010, no-hard-tabs)


71-71: Hard tabs
Column: 1

(MD010, no-hard-tabs)


72-72: Hard tabs
Column: 1

(MD010, no-hard-tabs)


80-80: Hard tabs
Column: 1

(MD010, no-hard-tabs)


84-84: Hard tabs
Column: 1

(MD010, no-hard-tabs)


86-86: Hard tabs
Column: 1

(MD010, no-hard-tabs)


87-87: Hard tabs
Column: 1

(MD010, no-hard-tabs)


89-89: Hard tabs
Column: 1

(MD010, no-hard-tabs)


90-90: Hard tabs
Column: 1

(MD010, no-hard-tabs)


91-91: Hard tabs
Column: 1

(MD010, no-hard-tabs)


92-92: Hard tabs
Column: 1

(MD010, no-hard-tabs)


93-93: Hard tabs
Column: 1

(MD010, no-hard-tabs)


95-95: Hard tabs
Column: 1

(MD010, no-hard-tabs)


96-96: Hard tabs
Column: 1

(MD010, no-hard-tabs)


97-97: Hard tabs
Column: 1

(MD010, no-hard-tabs)


98-98: Hard tabs
Column: 1

(MD010, no-hard-tabs)


99-99: Hard tabs
Column: 1

(MD010, no-hard-tabs)


111-111: Hard tabs
Column: 1

(MD010, no-hard-tabs)


112-112: Hard tabs
Column: 1

(MD010, no-hard-tabs)


113-113: Hard tabs
Column: 1

(MD010, no-hard-tabs)


114-114: Hard tabs
Column: 1

(MD010, no-hard-tabs)


115-115: Hard tabs
Column: 1

(MD010, no-hard-tabs)


116-116: Hard tabs
Column: 1

(MD010, no-hard-tabs)


117-117: Hard tabs
Column: 1

(MD010, no-hard-tabs)


118-118: Hard tabs
Column: 1

(MD010, no-hard-tabs)

vendor/github.com/invopop/jsonschema/README.md

125-125: Bare URL used

(MD034, no-bare-urls)


142-142: Hard tabs
Column: 1

(MD010, no-hard-tabs)


146-146: Hard tabs
Column: 1

(MD010, no-hard-tabs)


147-147: Hard tabs
Column: 1

(MD010, no-hard-tabs)


148-148: Hard tabs
Column: 1

(MD010, no-hard-tabs)


149-149: Hard tabs
Column: 1

(MD010, no-hard-tabs)


150-150: Hard tabs
Column: 1

(MD010, no-hard-tabs)


151-151: Hard tabs
Column: 1

(MD010, no-hard-tabs)


152-152: Hard tabs
Column: 1

(MD010, no-hard-tabs)


153-153: Hard tabs
Column: 1

(MD010, no-hard-tabs)


154-154: Hard tabs
Column: 1

(MD010, no-hard-tabs)


155-155: Hard tabs
Column: 1

(MD010, no-hard-tabs)


204-204: Hard tabs
Column: 1

(MD010, no-hard-tabs)


205-205: Hard tabs
Column: 1

(MD010, no-hard-tabs)


206-206: Hard tabs
Column: 1

(MD010, no-hard-tabs)


207-207: Hard tabs
Column: 1

(MD010, no-hard-tabs)


321-321: Hard tabs
Column: 1

(MD010, no-hard-tabs)


322-322: Hard tabs
Column: 1

(MD010, no-hard-tabs)


350-350: Hard tabs
Column: 1

(MD010, no-hard-tabs)


351-351: Hard tabs
Column: 1

(MD010, no-hard-tabs)


352-352: Hard tabs
Column: 1

(MD010, no-hard-tabs)


353-353: Hard tabs
Column: 1

(MD010, no-hard-tabs)


354-354: Hard tabs
Column: 1

(MD010, no-hard-tabs)


355-355: Hard tabs
Column: 1

(MD010, no-hard-tabs)

vendor/github.com/wk8/go-ordered-map/v2/CHANGELOG.md

3-3: Link and image reference definitions should be needed
Unused link or image reference definition: "comment"

(MD053, link-image-reference-definitions)

🪛 LanguageTool
docs/mcp.md

[style] ~54-~54: Consider a more concise word here.
Context: ... configuration on a unique ConfigMap, in order to have a single RHADS installation per cl...

(IN_ORDER_TO_PREMIUM)

vendor/github.com/buger/jsonparser/README.md

[style] ~8-~8: To elevate your writing, try using a synonym here.
Context: ...ce{}` instead, it will be very slow and hard to manage. I investigated what's on the...

(HARD_TO)


[style] ~99-~99: As an alternative to the over-used intensifier ‘really’, consider replacing this phrase.
Context: ...mail.com. ## Reference Library API is really simple. You just need the Get method to perf...

(EN_WEAK_ADJECTIVE)


[style] ~262-~262: To elevate your writing, try using a synonym here.
Context: ...(require some code generation). It's hard to fully comparejsonparserandeasy...

(HARD_TO)


[style] ~264-~264: Consider using a more formal and expressive alternative to ‘amazing’.
Context: ...nwhile keeping structs,easyjson` is an amazing choice. If you want to process dynamic ...

(AWESOME)


[style] ~319-~319: Possibly, ‘actually’ is redundant. Consider using “only”.
Context: ...ing/json and map[string]interface{} and actually only helpers for unstructured JSON, their pe...

(ADVERB_ONLY)


[style] ~340-~340: For a more polite and respectful tone, consider rephrasing with ‘please’.
Context: ...** | jsonparser now is a winner, but do not forget that it is way more lightweight parser ...

(DONT_FORGET)

vendor/github.com/invopop/jsonschema/README.md

[style] ~14-~14: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...gth, maxLength, pattern, format, etc. - Supports simple string and numeric enums. - Supp...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~15-~15: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...orts simple string and numeric enums. - Supports custom property fields via the `jsonsch...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)


[style] ~20-~20: Consider a more concise word here.
Context: ...cally from the current Go package's URL in order to be unique, and can be disabled with the...

(IN_ORDER_TO_PREMIUM)


[style] ~125-~125: As an alternative to the over-used intensifier ‘very’, consider replacing this phrase.
Context: ... tags has now been removed. If you feel very strongly about this, we've opened a discussion t...

(EN_WEAK_ADJECTIVE)


[uncategorized] ~136-~136: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ndedStruct If set to true, makes the top level struct not to reference itself in the d...

(EN_COMPOUND_ADJECTIVE_INTERNAL)

🪛 Hadolint (2.12.0)
vendor/github.com/buger/jsonparser/Dockerfile

[error] 12-12: Use COPY instead of ADD for files and folders

(DL3020)

🪛 checkmake (0.2.2)
vendor/github.com/buger/jsonparser/Makefile

[warning] 1-1: Missing required phony target "all"

(minphony)


[warning] 1-1: Missing required phony target "clean"

(minphony)


[warning] 1-1: Missing required phony target "test"

(minphony)

vendor/github.com/wk8/go-ordered-map/v2/Makefile

[warning] 30-30: Missing required phony target "clean"

(minphony)

🪛 YAMLlint (1.37.1)
vendor/github.com/wk8/go-ordered-map/v2/.golangci.yml

[error] 4-4: trailing spaces

(trailing-spaces)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Red Hat Konflux / rhtap-cli-on-pull-request
🔇 Additional comments (13)
README.md (2)

56-59: LGTM! Good documentation of new MCP functionality.

The new MCP section effectively documents the Model Context Protocol server feature and directs users to appropriate documentation.


175-175: LGTM! Markdown link syntax fix.

The correction to the markdown link formatting improves document structure.

vendor/github.com/wk8/go-ordered-map/v2/Makefile (1)

1-33: Vendor file - no review required.

This is a vendor dependency file that should not be modified. The Makefile appears to be the standard build configuration for the go-ordered-map library.

vendor/github.com/wk8/go-ordered-map/v2/CHANGELOG.md (1)

1-39: Vendor file - no review required.

This is a vendor dependency changelog that should not be modified. It provides version history for the go-ordered-map library at version 2.1.8.

vendor/github.com/yosida95/uritemplate/v3/compile.go (1)

1-225: Vendor file - no review required.

This is a vendor dependency file implementing URI template compilation functionality that should not be modified. The code appears to be well-structured and professionally implemented.

vendor/github.com/invopop/jsonschema/README.md (1)

1-375: Vendor file - no review required.

This is a vendor dependency README file that should not be modified. The documentation comprehensively covers the invopop/jsonschema library functionality and usage.

vendor/github.com/invopop/jsonschema/reflect.go (1)

350-352: Vendored invopop/jsonschema panics on unsupported types

The default branch in vendor/github.com/invopop/jsonschema/reflect.go:351 calls

panic("unsupported type " + t.String())

on any type the reflector doesn’t explicitly handle. In our codebase, the only invocation is in

  • vendor/github.com/mark3labs/mcp-go/mcp/tools.go when building a schema for a known struct (schema := reflector.Reflect(zero)), so there’s no immediate crash risk.

If you ever reflect other types (maps of functions, channels, etc.), this will still panic. To mitigate:

  • Wrap the reflector call in a recover() block or validate your input type before calling .Reflect().
  • For a long-term solution, consider filing an upstream PR against invopop/jsonschema to return an error instead of panicking.
vendor/github.com/mark3labs/mcp-go/mcp/tools.go (1)

84-86: Potential panic in nil check

The condition target == nil || reflect.ValueOf(target).Kind() != reflect.Ptr could panic if target is nil, as reflect.ValueOf(nil).Kind() will panic.

-	if target == nil || reflect.ValueOf(target).Kind() != reflect.Ptr {
+	if target == nil {
+		return fmt.Errorf("target must be a non-nil pointer")
+	}
+	if reflect.ValueOf(target).Kind() != reflect.Ptr {
 		return fmt.Errorf("target must be a non-nil pointer")
 	}

Likely an incorrect or invalid review comment.

vendor/github.com/mark3labs/mcp-go/server/sse.go (1)

419-419: Ping method is compliant with MCP specification
The “ping” method is defined in the official MCP spec for keep-alive checks, so no changes are needed to the existing implementation.

vendor/github.com/mark3labs/mcp-go/server/server.go (1)

814-817: Ensure existing request arguments aren’t discarded on template match

When a URI matches a template, the code unconditionally reinitializes request.Params.Arguments, dropping any arguments the caller originally provided. If the API is meant to support both URI‐derived variables and additional request arguments, we should merge the two sets rather than overwrite.

– Location: vendor/github.com/mark3labs/mcp-go/server/server.go lines 814–817
– Current snippet:

 request.Params.Arguments = make(map[string]any, len(matchedVars))
 for name, value := range matchedVars {
   request.Params.Arguments[name] = value.V
 }

– Suggested change (if merge is desired):

- request.Params.Arguments = make(map[string]any, len(matchedVars))
- for name, value := range matchedVars {
-   request.Params.Arguments[name] = value.V
- }
+ // Merge URI template variables into any existing arguments
+ for name, value := range matchedVars {
+   request.Params.Arguments[name] = value.V
+ }

Please verify whether dropping the original Arguments is intentional or if we should adopt the merge approach.

vendor/github.com/buger/jsonparser/README.md (1)

1-366: Vendor documentation looks good

This is third-party vendor documentation for the jsonparser library. The README provides comprehensive information about the library's features, usage examples, benchmarks, and API documentation.

vendor/github.com/yosida95/uritemplate/v3/value.go (1)

1-217: Vendor implementation for URI templates looks correct

This vendored file implements URI template value handling according to RFC 6570. The implementation correctly handles string, list, and key-value pair types with appropriate expansion logic.

vendor/github.com/buger/jsonparser/parser.go (1)

1-1284: Vendor JSON parser implementation looks comprehensive

This vendored file provides the core JSON parsing functionality with a focus on performance and zero allocations. The implementation includes all necessary APIs for JSON manipulation (Get, Set, Delete) and iteration (ArrayEach, ObjectEach), with proper error handling and escape sequence support.

@otaviof
Copy link
Collaborator Author

otaviof commented Jul 31, 2025

/retest

1 similar comment
@otaviof
Copy link
Collaborator Author

otaviof commented Jul 31, 2025

/retest

@konflux-ci-qe-bot
Copy link

@otaviof: The following test has Failed, say /retest to rerun failed tests.

PipelineRun Name Status Rerun command Build Log Test Log
e2e-4.17-zz59x Failed /retest View Pipeline Log View Test Logs

Inspecting Test Artifacts

To inspect your test artifacts, follow these steps:

  1. Install ORAS (see the ORAS installation guide).
  2. Download artifacts with the following commands:
mkdir -p oras-artifacts
cd oras-artifacts
oras pull quay.io/konflux-test-storage/rhtap-team/rhtap-cli:e2e-4.17-zz59x

Test results analysis

<not enabled>

@lcarva
Copy link
Member

lcarva commented Aug 1, 2025

/lgtm

(Re-applying on Romain's behalf since he's out today. The diff since he approved is minimal. I reviewed that 😅 )

@openshift-ci openshift-ci bot added the lgtm label Aug 1, 2025
@openshift-merge-bot openshift-merge-bot bot merged commit 99574c4 into redhat-appstudio:main Aug 1, 2025
12 checks passed
@otaviof otaviof deleted the RHTAP-5269-bootstrap branch August 1, 2025 13:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants