Skip to content

Use rhobs/obs-mcp toolset for Prometheus/Alertmanager (replaces observability mcp)#124

Closed
saswatamcode wants to merge 6 commits intoopenshift:mainfrom
saswatamcode:obs-mcp
Closed

Use rhobs/obs-mcp toolset for Prometheus/Alertmanager (replaces observability mcp)#124
saswatamcode wants to merge 6 commits intoopenshift:mainfrom
saswatamcode:obs-mcp

Conversation

@saswatamcode
Copy link
Copy Markdown
Member

@saswatamcode saswatamcode commented Jan 29, 2026

./kubernetes-mcp-server --help

Kubernetes Model Context Protocol (MCP) server

Usage:
  kubernetes-mcp-server [command] [options] [flags]

Examples:
  # show this help
  kubernetes-mcp-server -h
  
  # shows version information
  kubernetes-mcp-server --version
  
  # start STDIO server
  kubernetes-mcp-server
  
  # start a SSE server on port 8080
  kubernetes-mcp-server --port 8080
  
  # start a SSE server on port 8443 with a public HTTPS host of example.com
  kubernetes-mcp-server --port 8443 --sse-base-url https://example.com:8443
  
  # start a SSE server on port 8080 with multi-cluster tools disabled
  kubernetes-mcp-server --port 8080 --disable-multi-cluster
  
  # start with explicit cluster provider strategy (kubeconfig, in-cluster, kcp, or disabled)
  kubernetes-mcp-server --cluster-provider kubeconfig
  
  # start with kcp cluster provider for multi-workspace support
  kubernetes-mcp-server --cluster-provider kcp

Flags:
      --cluster-provider string   Cluster provider strategy to use (one of: kubeconfig, in-cluster, kcp, disabled). If not set, the server will auto-detect based on the environment.
      --config string             Path of the config file.
      --config-dir string         Path to drop-in configuration directory (files loaded in lexical order). Defaults to conf.d relative to the config file if --config is set.
      --disable-destructive       If true, tools annotated with destructiveHint=true are disabled
      --disable-multi-cluster     Disable multi cluster tools. Optional. If true, all tools will be run against the default cluster/context.
  -h, --help                      help for kubernetes-mcp-server
      --kubeconfig string         Path to the kubeconfig file to use for authentication
      --list-output string        Output format for resource list operations (one of: yaml, table). Defaults to table.
      --log-level int             Set the log level (from 0 to 9)
      --port string               Start a streamable HTTP and SSE HTTP server on the specified port (e.g. 8080)
      --read-only                 If true, only tools annotated with readOnlyHint=true are exposed
      --sse-base-url string       SSE public base URL to use when sending the endpoint message (e.g. https://example.com)
      --stateless                 If true, run the MCP server in stateless mode (disables tool/prompt change notifications). Useful for container deployments and load balancing. Default is false (stateful mode)
      --toolsets strings          Comma-separated list of MCP toolsets to use (available toolsets: config, core, helm, kcp, kubevirt, obs-mcp, ossm). Defaults to core, config, helm, observability.
      --version                   Print version information and quit

/kubernetes-mcp-server --toolsets obs-mcp --port 8080
Screenshot 2026-01-29 at 16 05 11

@openshift-ci openshift-ci bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jan 29, 2026
@openshift-ci
Copy link
Copy Markdown

openshift-ci bot commented Jan 29, 2026

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@openshift-ci
Copy link
Copy Markdown

openshift-ci bot commented Jan 29, 2026

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: saswatamcode
Once this PR has been reviewed and has the lgtm label, please assign matzew for approval. For more information see the Code Review Process.

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

Details 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

@iNecas
Copy link
Copy Markdown

iNecas commented Jan 30, 2026

For anyone looking at this, here's the counterpart on obs-mcp rhobs/obs-mcp#20

@openshift-merge-robot openshift-merge-robot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jan 30, 2026
@openshift-merge-robot openshift-merge-robot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Feb 4, 2026
@saswatamcode saswatamcode changed the title experiment: Import obs-mcp toolset directly Use rhobs/obs-mcp toolset for Prometheus/Alertmanager (replaces observability mcp) Feb 19, 2026
@saswatamcode saswatamcode marked this pull request as ready for review February 19, 2026 08:15
@openshift-ci openshift-ci bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Feb 19, 2026
@openshift-ci openshift-ci bot requested review from manusa and matzew February 19, 2026 08:15
Comment thread pkg/config/config_default.go Outdated
defaultConfig := StaticConfig{
ListOutput: "table",
Toolsets: []string{"core", "config", "helm", "observability"},
Toolsets: []string{"core", "config", "helm", "obs-mcp"},
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think for now we should just stick to the defaults. from upstream.

added a comment to the original PR 😅
(see https://github.com/openshift/openshift-mcp-server/pull/117/changes#r2848280038)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Ok removed it from here, so it is no longer enabled by default

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Is there some idea/plan how OpenShift LightSpeed user can enable/configure toolsets?

_ "github.com/containers/kubernetes-mcp-server/pkg/toolsets/kiali"
_ "github.com/containers/kubernetes-mcp-server/pkg/toolsets/kubevirt"
_ "github.com/containers/kubernetes-mcp-server/pkg/toolsets/observability"
_ "github.com/rhobs/obs-mcp/pkg/toolset"
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

it would be nice to also run evals / mcp checker on that repo. Something we discussed with @Cali0707 and @manusa

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

rhobs/obs-mcp#34 we have a draft to add mcpchecker evals on obs-mcp, some guidance on this would be helpful :)


// GetAlerts retrieves alerts from Alertmanager.
func (c *Client) GetAlerts(ctx context.Context, active, silenced, inhibited bool, filter string) ([]Alert, error) {
body, err := c.executeRequest(ctx, "/api/v2/alerts", buildAlertsParams(active, silenced, inhibited, filter))
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The "old" (or built-in) observability toolset was using the client from pkg/prometheus/client.go - but the obs-mcp module is not. See also my comment here: rhobs/obs-mcp#20 (review)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

rhobs/obs-mcp#35 tries to address this

@tremes
Copy link
Copy Markdown

tremes commented Mar 10, 2026

Few questions please.

@openshift-merge-robot openshift-merge-robot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Mar 10, 2026
@saswatamcode
Copy link
Copy Markdown
Member Author

do we need to update https://github.com/openshift/openshift-mcp-server/blob/main/docs/OBSERVABILITY.md please?

Yup we do, will update once we've finalized a set of prompts.

this one is related to #124 (comment), we are keeping the pkg/prometheus/client.go here right?

So no not quite. There is a client here but that is used for another toolset. We plan to keep prometheus client impl in rhobs/obs-mcp as that is where we can implement finer params, guardrails, summary implementations (and also roll our own http client instead of using the k8s one)
In any case, I believe both will be based on upstream prom client.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 13, 2026

Important

Review skipped

Too many files!

This PR contains 239 files, which is 89 over the limit of 150.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 98a0e386-e07d-496d-a0d9-d1f790643208

📥 Commits

Reviewing files that changed from the base of the PR and between dbba4b8 and 797c0a7.

⛔ Files ignored due to path filters (3)
  • go.sum is excluded by !**/*.sum
  • vendor/github.com/go-openapi/runtime/go.work is excluded by !**/*.work
  • vendor/github.com/go-openapi/runtime/go.work.sum is excluded by !**/*.sum
📒 Files selected for processing (239)
  • README.md
  • docs/configuration.md
  • go.mod
  • internal/tools/update-readme/main.go
  • pkg/mcp/modules.go
  • pkg/prometheus/alertmanager.go
  • pkg/prometheus/client_test.go
  • pkg/prometheus/time.go
  • pkg/prometheus/types.go
  • pkg/toolsets/observability/alertmanager.go
  • pkg/toolsets/observability/config.go
  • pkg/toolsets/observability/helpers.go
  • pkg/toolsets/observability/helpers_test.go
  • pkg/toolsets/observability/prometheus.go
  • pkg/toolsets/observability/toolset_test.go
  • vendor/dario.cat/mergo/FUNDING.json
  • vendor/dario.cat/mergo/README.md
  • vendor/dario.cat/mergo/SECURITY.md
  • vendor/github.com/bahlo/generic-list-go/LICENSE
  • vendor/github.com/bahlo/generic-list-go/README.md
  • vendor/github.com/bahlo/generic-list-go/list.go
  • vendor/github.com/buger/jsonparser/.gitignore
  • vendor/github.com/buger/jsonparser/.travis.yml
  • vendor/github.com/buger/jsonparser/Dockerfile
  • vendor/github.com/buger/jsonparser/LICENSE
  • vendor/github.com/buger/jsonparser/Makefile
  • vendor/github.com/buger/jsonparser/README.md
  • vendor/github.com/buger/jsonparser/bytes.go
  • vendor/github.com/buger/jsonparser/bytes_safe.go
  • vendor/github.com/buger/jsonparser/bytes_unsafe.go
  • vendor/github.com/buger/jsonparser/escape.go
  • vendor/github.com/buger/jsonparser/fuzz.go
  • vendor/github.com/buger/jsonparser/oss-fuzz-build.sh
  • vendor/github.com/buger/jsonparser/parser.go
  • vendor/github.com/chai2010/gettext-go/README.md
  • vendor/github.com/chai2010/gettext-go/plural/formula.go
  • vendor/github.com/chai2010/gettext-go/po/util.go
  • vendor/github.com/dennwc/varint/.gitignore
  • vendor/github.com/dennwc/varint/.travis.yml
  • vendor/github.com/dennwc/varint/LICENSE
  • vendor/github.com/dennwc/varint/README.md
  • vendor/github.com/dennwc/varint/proto.go
  • vendor/github.com/dennwc/varint/varint.go
  • vendor/github.com/fatih/color/README.md
  • vendor/github.com/fatih/color/color.go
  • vendor/github.com/go-openapi/analysis/.codecov.yml
  • vendor/github.com/go-openapi/analysis/.gitattributes
  • vendor/github.com/go-openapi/analysis/.gitignore
  • vendor/github.com/go-openapi/analysis/.golangci.yml
  • vendor/github.com/go-openapi/analysis/CODE_OF_CONDUCT.md
  • vendor/github.com/go-openapi/analysis/LICENSE
  • vendor/github.com/go-openapi/analysis/README.md
  • vendor/github.com/go-openapi/analysis/analyzer.go
  • vendor/github.com/go-openapi/analysis/debug.go
  • vendor/github.com/go-openapi/analysis/doc.go
  • vendor/github.com/go-openapi/analysis/errors.go
  • vendor/github.com/go-openapi/analysis/fixer.go
  • vendor/github.com/go-openapi/analysis/flatten.go
  • vendor/github.com/go-openapi/analysis/flatten_name.go
  • vendor/github.com/go-openapi/analysis/flatten_options.go
  • vendor/github.com/go-openapi/analysis/internal/debug/debug.go
  • vendor/github.com/go-openapi/analysis/internal/flatten/normalize/normalize.go
  • vendor/github.com/go-openapi/analysis/internal/flatten/operations/operations.go
  • vendor/github.com/go-openapi/analysis/internal/flatten/replace/errors.go
  • vendor/github.com/go-openapi/analysis/internal/flatten/replace/replace.go
  • vendor/github.com/go-openapi/analysis/internal/flatten/schutils/flatten_schema.go
  • vendor/github.com/go-openapi/analysis/internal/flatten/sortref/keys.go
  • vendor/github.com/go-openapi/analysis/internal/flatten/sortref/sort_ref.go
  • vendor/github.com/go-openapi/analysis/mixin.go
  • vendor/github.com/go-openapi/analysis/schema.go
  • vendor/github.com/go-openapi/errors/.gitattributes
  • vendor/github.com/go-openapi/errors/.gitignore
  • vendor/github.com/go-openapi/errors/.golangci.yml
  • vendor/github.com/go-openapi/errors/CODE_OF_CONDUCT.md
  • vendor/github.com/go-openapi/errors/LICENSE
  • vendor/github.com/go-openapi/errors/README.md
  • vendor/github.com/go-openapi/errors/api.go
  • vendor/github.com/go-openapi/errors/auth.go
  • vendor/github.com/go-openapi/errors/doc.go
  • vendor/github.com/go-openapi/errors/headers.go
  • vendor/github.com/go-openapi/errors/middleware.go
  • vendor/github.com/go-openapi/errors/parsing.go
  • vendor/github.com/go-openapi/errors/schema.go
  • vendor/github.com/go-openapi/jsonpointer/.golangci.yml
  • vendor/github.com/go-openapi/jsonpointer/README.md
  • vendor/github.com/go-openapi/jsonpointer/pointer.go
  • vendor/github.com/go-openapi/jsonreference/.golangci.yml
  • vendor/github.com/go-openapi/jsonreference/NOTICE
  • vendor/github.com/go-openapi/jsonreference/README.md
  • vendor/github.com/go-openapi/jsonreference/internal/normalize_url.go
  • vendor/github.com/go-openapi/jsonreference/reference.go
  • vendor/github.com/go-openapi/loads/.editorconfig
  • vendor/github.com/go-openapi/loads/.gitignore
  • vendor/github.com/go-openapi/loads/.golangci.yml
  • vendor/github.com/go-openapi/loads/.travis.yml
  • vendor/github.com/go-openapi/loads/CODE_OF_CONDUCT.md
  • vendor/github.com/go-openapi/loads/LICENSE
  • vendor/github.com/go-openapi/loads/README.md
  • vendor/github.com/go-openapi/loads/doc.go
  • vendor/github.com/go-openapi/loads/errors.go
  • vendor/github.com/go-openapi/loads/loaders.go
  • vendor/github.com/go-openapi/loads/options.go
  • vendor/github.com/go-openapi/loads/spec.go
  • vendor/github.com/go-openapi/runtime/.editorconfig
  • vendor/github.com/go-openapi/runtime/.gitattributes
  • vendor/github.com/go-openapi/runtime/.gitignore
  • vendor/github.com/go-openapi/runtime/.golangci.yml
  • vendor/github.com/go-openapi/runtime/CODE_OF_CONDUCT.md
  • vendor/github.com/go-openapi/runtime/LICENSE
  • vendor/github.com/go-openapi/runtime/README.md
  • vendor/github.com/go-openapi/runtime/bytestream.go
  • vendor/github.com/go-openapi/runtime/client/auth_info.go
  • vendor/github.com/go-openapi/runtime/client/keepalive.go
  • vendor/github.com/go-openapi/runtime/client/opentelemetry.go
  • vendor/github.com/go-openapi/runtime/client/request.go
  • vendor/github.com/go-openapi/runtime/client/response.go
  • vendor/github.com/go-openapi/runtime/client/runtime.go
  • vendor/github.com/go-openapi/runtime/client_auth_info.go
  • vendor/github.com/go-openapi/runtime/client_operation.go
  • vendor/github.com/go-openapi/runtime/client_request.go
  • vendor/github.com/go-openapi/runtime/client_response.go
  • vendor/github.com/go-openapi/runtime/constants.go
  • vendor/github.com/go-openapi/runtime/csv.go
  • vendor/github.com/go-openapi/runtime/csv_options.go
  • vendor/github.com/go-openapi/runtime/discard.go
  • vendor/github.com/go-openapi/runtime/file.go
  • vendor/github.com/go-openapi/runtime/headers.go
  • vendor/github.com/go-openapi/runtime/interfaces.go
  • vendor/github.com/go-openapi/runtime/json.go
  • vendor/github.com/go-openapi/runtime/logger/logger.go
  • vendor/github.com/go-openapi/runtime/logger/standard.go
  • vendor/github.com/go-openapi/runtime/middleware/context.go
  • vendor/github.com/go-openapi/runtime/middleware/denco/LICENSE
  • vendor/github.com/go-openapi/runtime/middleware/denco/README.md
  • vendor/github.com/go-openapi/runtime/middleware/denco/router.go
  • vendor/github.com/go-openapi/runtime/middleware/denco/server.go
  • vendor/github.com/go-openapi/runtime/middleware/denco/util.go
  • vendor/github.com/go-openapi/runtime/middleware/doc.go
  • vendor/github.com/go-openapi/runtime/middleware/header/header.go
  • vendor/github.com/go-openapi/runtime/middleware/negotiate.go
  • vendor/github.com/go-openapi/runtime/middleware/not_implemented.go
  • vendor/github.com/go-openapi/runtime/middleware/operation.go
  • vendor/github.com/go-openapi/runtime/middleware/parameter.go
  • vendor/github.com/go-openapi/runtime/middleware/rapidoc.go
  • vendor/github.com/go-openapi/runtime/middleware/redoc.go
  • vendor/github.com/go-openapi/runtime/middleware/request.go
  • vendor/github.com/go-openapi/runtime/middleware/router.go
  • vendor/github.com/go-openapi/runtime/middleware/security.go
  • vendor/github.com/go-openapi/runtime/middleware/spec.go
  • vendor/github.com/go-openapi/runtime/middleware/swaggerui.go
  • vendor/github.com/go-openapi/runtime/middleware/swaggerui_oauth2.go
  • vendor/github.com/go-openapi/runtime/middleware/ui_options.go
  • vendor/github.com/go-openapi/runtime/middleware/untyped/api.go
  • vendor/github.com/go-openapi/runtime/middleware/validation.go
  • vendor/github.com/go-openapi/runtime/request.go
  • vendor/github.com/go-openapi/runtime/security/authenticator.go
  • vendor/github.com/go-openapi/runtime/security/authorizer.go
  • vendor/github.com/go-openapi/runtime/statuses.go
  • vendor/github.com/go-openapi/runtime/text.go
  • vendor/github.com/go-openapi/runtime/values.go
  • vendor/github.com/go-openapi/runtime/xml.go
  • vendor/github.com/go-openapi/runtime/yamlpc/yaml.go
  • vendor/github.com/go-openapi/spec/.editorconfig
  • vendor/github.com/go-openapi/spec/.gitignore
  • vendor/github.com/go-openapi/spec/.golangci.yml
  • vendor/github.com/go-openapi/spec/CODE_OF_CONDUCT.md
  • vendor/github.com/go-openapi/spec/LICENSE
  • vendor/github.com/go-openapi/spec/README.md
  • vendor/github.com/go-openapi/spec/cache.go
  • vendor/github.com/go-openapi/spec/contact_info.go
  • vendor/github.com/go-openapi/spec/debug.go
  • vendor/github.com/go-openapi/spec/embed.go
  • vendor/github.com/go-openapi/spec/errors.go
  • vendor/github.com/go-openapi/spec/expander.go
  • vendor/github.com/go-openapi/spec/external_docs.go
  • vendor/github.com/go-openapi/spec/header.go
  • vendor/github.com/go-openapi/spec/info.go
  • vendor/github.com/go-openapi/spec/items.go
  • vendor/github.com/go-openapi/spec/license.go
  • vendor/github.com/go-openapi/spec/normalizer.go
  • vendor/github.com/go-openapi/spec/normalizer_nonwindows.go
  • vendor/github.com/go-openapi/spec/normalizer_windows.go
  • vendor/github.com/go-openapi/spec/operation.go
  • vendor/github.com/go-openapi/spec/parameter.go
  • vendor/github.com/go-openapi/spec/path_item.go
  • vendor/github.com/go-openapi/spec/paths.go
  • vendor/github.com/go-openapi/spec/properties.go
  • vendor/github.com/go-openapi/spec/ref.go
  • vendor/github.com/go-openapi/spec/resolver.go
  • vendor/github.com/go-openapi/spec/response.go
  • vendor/github.com/go-openapi/spec/responses.go
  • vendor/github.com/go-openapi/spec/schema.go
  • vendor/github.com/go-openapi/spec/schema_loader.go
  • vendor/github.com/go-openapi/spec/schemas/jsonschema-draft-04.json
  • vendor/github.com/go-openapi/spec/schemas/v2/schema.json
  • vendor/github.com/go-openapi/spec/security_scheme.go
  • vendor/github.com/go-openapi/spec/spec.go
  • vendor/github.com/go-openapi/spec/swagger.go
  • vendor/github.com/go-openapi/spec/tag.go
  • vendor/github.com/go-openapi/spec/url_go19.go
  • vendor/github.com/go-openapi/spec/validations.go
  • vendor/github.com/go-openapi/spec/xml_object.go
  • vendor/github.com/go-openapi/strfmt/.editorconfig
  • vendor/github.com/go-openapi/strfmt/.gitattributes
  • vendor/github.com/go-openapi/strfmt/.gitignore
  • vendor/github.com/go-openapi/strfmt/.golangci.yml
  • vendor/github.com/go-openapi/strfmt/CODE_OF_CONDUCT.md
  • vendor/github.com/go-openapi/strfmt/LICENSE
  • vendor/github.com/go-openapi/strfmt/README.md
  • vendor/github.com/go-openapi/strfmt/bson.go
  • vendor/github.com/go-openapi/strfmt/date.go
  • vendor/github.com/go-openapi/strfmt/default.go
  • vendor/github.com/go-openapi/strfmt/doc.go
  • vendor/github.com/go-openapi/strfmt/duration.go
  • vendor/github.com/go-openapi/strfmt/errors.go
  • vendor/github.com/go-openapi/strfmt/format.go
  • vendor/github.com/go-openapi/strfmt/ifaces.go
  • vendor/github.com/go-openapi/strfmt/mongo.go
  • vendor/github.com/go-openapi/strfmt/time.go
  • vendor/github.com/go-openapi/strfmt/ulid.go
  • vendor/github.com/go-openapi/swag/.codecov.yml
  • vendor/github.com/go-openapi/swag/.golangci.yml
  • vendor/github.com/go-openapi/swag/.mockery.yml
  • vendor/github.com/go-openapi/swag/README.md
  • vendor/github.com/go-openapi/swag/SECURITY.md
  • vendor/github.com/go-openapi/swag/cmdutils/LICENSE
  • vendor/github.com/go-openapi/swag/cmdutils/cmd_utils.go
  • vendor/github.com/go-openapi/swag/cmdutils/doc.go
  • vendor/github.com/go-openapi/swag/cmdutils_iface.go
  • vendor/github.com/go-openapi/swag/conv/LICENSE
  • vendor/github.com/go-openapi/swag/conv/convert.go
  • vendor/github.com/go-openapi/swag/conv/convert_types.go
  • vendor/github.com/go-openapi/swag/conv/doc.go
  • vendor/github.com/go-openapi/swag/conv/format.go
  • vendor/github.com/go-openapi/swag/conv/sizeof.go
  • vendor/github.com/go-openapi/swag/conv/type_constraints.go
  • vendor/github.com/go-openapi/swag/conv_iface.go
  • vendor/github.com/go-openapi/swag/convert.go
  • vendor/github.com/go-openapi/swag/convert_types.go

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Replaces the internal observability toolset with the external rhobs/obs-mcp package, removes internal observability code (toolset, helpers, Prometheus alertmanager and time utilities, tests), and updates docs and go.mod to reference the new toolset and adjusted documentation layout.

Changes

Cohort / File(s) Summary
Documentation
README.md, docs/configuration.md
Reworked AVAILABLE-TOOLSETS layout and README table header; renamed observability toolset to obs-mcp; replaced detailed observability docs with an obs-mcp workflow and reorganized Configuration Reference with new subsections and examples.
Dependency manifest
go.mod
Added direct dependency on github.com/rhobs/obs-mcp and applied broad indirect dependency updates (OpenAPI, Prometheus-related modules, MongoDB driver, time/crypto modules, and other transitive changes).
Toolset integration
internal/tools/update-readme/main.go, pkg/mcp/modules.go
Switched imports to use github.com/rhobs/obs-mcp/pkg/toolset, changing which toolset implementation is registered and used by README generation and module initialization.
Observability removal
pkg/toolsets/observability/*
Deleted the internal observability toolset directory: configuration parser, helpers (route resolution, client creation, endpoint validation, prettyJSON), Prometheus handlers (instant/range queries), Alertmanager tool, and associated test suites.
Prometheus client surface
pkg/prometheus/alertmanager.go, pkg/prometheus/time.go, pkg/prometheus/types.go
Removed Alertmanager methods (GetAlerts, GetAlertsRaw), relative-time conversion utilities (ConvertRelativeTime and helpers), and alert-related types (Alert, Receiver, AlertStatus).
Tests & config expectations
pkg/config/config_test.go, pkg/prometheus/client_test.go
Updated tests to expect obs-mcp in default toolsets; removed tests tied to removed alert/time utilities (TestGetAlerts, TestConvertRelativeTime, TestParseIntFromString).

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: replacing the internal observability toolset with the external rhobs/obs-mcp toolset for Prometheus and Alertmanager functionality.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Stable And Deterministic Test Names ✅ Passed Repository uses standard Go testing package, not Ginkgo BDD framework. Test names are static and deterministic with no dynamic values.
Test Structure And Quality ✅ Passed The custom check assesses Ginkgo test code quality, but this repository uses testify/suite framework instead. Ginkgo patterns are not found in the codebase, making the check inapplicable.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

Comment @coderabbitai help to get the list of available commands and usage tips.

Tip

You can validate your CodeRabbit configuration file in your editor.

If your editor has YAML language server, you can enable auto-completion and validation by adding # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json at the top of your CodeRabbit configuration file.

Copy link
Copy Markdown

@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: 3

🧹 Nitpick comments (1)
pkg/config/config_test.go (1)

1051-1052: Avoid duplicating default assertions with a hard-coded list.

Line 1051 already validates against s.defaults.Toolsets; Line 1052 hard-codes the same expectation and makes this test brittle to future default-override changes.

♻️ Suggested adjustment
 		s.Equal(s.defaults.Toolsets, config.Toolsets, "toolsets should be default")
-		s.Equal([]string{"core", "config", "helm", "obs-mcp"}, config.Toolsets, "toolsets should be default")
+		s.Contains(config.Toolsets, "obs-mcp", "obs-mcp should be included in defaults")
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/config/config_test.go` around lines 1051 - 1052, Remove the redundant
hard-coded assertion that duplicates the default check: keep the existing
comparison using s.Equal(s.defaults.Toolsets, config.Toolsets) and delete the
second line that asserts s.Equal([]string{"core", "config", "helm", "obs-mcp"},
config.Toolsets); this ensures the test relies on the canonical
s.defaults.Toolsets (referencing s.defaults.Toolsets and config.Toolsets in
pkg/config/config_test.go) and won't break if defaults change.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/configuration.md`:
- Around line 272-280: The docs table under Toolset must match the test
defaults: mark obs-mcp (and helm per test expectations) as default-enabled in
the Default column so the documentation aligns with pkg/config/config_test.go
which includes obs-mcp in the default set; update the two rows for "helm" and
"obs-mcp" in the table to show the Default check (✓) and ensure wording remains
unchanged for their Description and tool names.

In `@README.md`:
- Around line 263-271: The README tools table's "Default" column is incorrect
for two entries; update the table row for "helm" and the row for "obs-mcp" to
mark them as defaults (add the ✓ in the Default column) so the documented
defaults match the test expectations referencing defaults; locate the table
block in README.md and change the Default cell for the "helm" and "obs-mcp" rows
to "✓".
- Around line 456-587: The obs-mcp Markdown block has MD005 (inconsistent list
indentation) and MD049 (mixed emphasis markers); fix by normalizing all list
indentation to a consistent style (use 2-space indentation for nested list items
throughout the obs-mcp section) and make emphasis consistent (use a single
marker style, e.g., **bold** and *italic* with asterisks) for all headings and
tool names such as list_metrics, execute_instant_query, execute_range_query,
get_label_names, get_label_values, get_series, get_alerts, and get_silences;
ensure bullet alignment and indentation are uniform and replace any
underscore-based or mixed emphasis with the chosen asterisk style.

---

Nitpick comments:
In `@pkg/config/config_test.go`:
- Around line 1051-1052: Remove the redundant hard-coded assertion that
duplicates the default check: keep the existing comparison using
s.Equal(s.defaults.Toolsets, config.Toolsets) and delete the second line that
asserts s.Equal([]string{"core", "config", "helm", "obs-mcp"}, config.Toolsets);
this ensures the test relies on the canonical s.defaults.Toolsets (referencing
s.defaults.Toolsets and config.Toolsets in pkg/config/config_test.go) and won't
break if defaults change.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 512af034-fdc6-4c0b-8e95-339e0dcf20c8

📥 Commits

Reviewing files that changed from the base of the PR and between 00939e8 and 91fd9a1.

⛔ Files ignored due to path filters (284)
  • go.sum is excluded by !**/*.sum
  • vendor/dario.cat/mergo/FUNDING.json is excluded by !**/vendor/**, !vendor/**
  • vendor/dario.cat/mergo/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/dario.cat/mergo/SECURITY.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/bahlo/generic-list-go/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/bahlo/generic-list-go/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/bahlo/generic-list-go/list.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/buger/jsonparser/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/buger/jsonparser/.travis.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/buger/jsonparser/Dockerfile is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/buger/jsonparser/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/buger/jsonparser/Makefile is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/buger/jsonparser/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/buger/jsonparser/bytes.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/buger/jsonparser/bytes_safe.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/buger/jsonparser/bytes_unsafe.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/buger/jsonparser/escape.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/buger/jsonparser/fuzz.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/buger/jsonparser/oss-fuzz-build.sh is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/buger/jsonparser/parser.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/chai2010/gettext-go/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/chai2010/gettext-go/plural/formula.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/chai2010/gettext-go/po/util.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/dennwc/varint/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/dennwc/varint/.travis.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/dennwc/varint/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/dennwc/varint/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/dennwc/varint/proto.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/dennwc/varint/varint.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/fatih/color/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/fatih/color/color.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/.codecov.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/.gitattributes is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/CODE_OF_CONDUCT.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/analyzer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/debug.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/errors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/fixer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/flatten.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/flatten_name.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/flatten_options.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/internal/debug/debug.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/internal/flatten/normalize/normalize.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/internal/flatten/operations/operations.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/internal/flatten/replace/errors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/internal/flatten/replace/replace.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/internal/flatten/schutils/flatten_schema.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/internal/flatten/sortref/keys.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/internal/flatten/sortref/sort_ref.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/mixin.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/analysis/schema.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/errors/.gitattributes is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/errors/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/errors/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/errors/CODE_OF_CONDUCT.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/errors/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/errors/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/errors/api.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/errors/auth.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/errors/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/errors/headers.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/errors/middleware.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/errors/parsing.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/errors/schema.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/jsonpointer/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/jsonpointer/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/jsonpointer/pointer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/jsonreference/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/jsonreference/NOTICE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/jsonreference/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/jsonreference/internal/normalize_url.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/jsonreference/reference.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/loads/.editorconfig is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/loads/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/loads/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/loads/.travis.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/loads/CODE_OF_CONDUCT.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/loads/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/loads/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/loads/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/loads/errors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/loads/loaders.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/loads/options.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/loads/spec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/.editorconfig is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/.gitattributes is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/CODE_OF_CONDUCT.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/bytestream.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/client/auth_info.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/client/keepalive.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/client/opentelemetry.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/client/request.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/client/response.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/client/runtime.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/client_auth_info.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/client_operation.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/client_request.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/client_response.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/constants.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/csv.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/csv_options.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/discard.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/file.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/go.work is excluded by !**/*.work, !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/go.work.sum is excluded by !**/*.sum, !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/headers.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/interfaces.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/json.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/logger/logger.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/logger/standard.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/context.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/denco/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/denco/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/denco/router.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/denco/server.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/denco/util.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/header/header.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/negotiate.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/not_implemented.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/operation.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/parameter.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/rapidoc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/redoc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/request.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/router.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/security.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/spec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/swaggerui.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/swaggerui_oauth2.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/ui_options.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/untyped/api.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/middleware/validation.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/request.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/security/authenticator.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/security/authorizer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/statuses.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/text.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/values.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/xml.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/runtime/yamlpc/yaml.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/.editorconfig is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/CODE_OF_CONDUCT.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/cache.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/contact_info.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/debug.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/embed.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/errors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/expander.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/external_docs.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/header.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/info.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/items.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/license.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/normalizer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/normalizer_nonwindows.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/normalizer_windows.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/operation.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/parameter.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/path_item.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/paths.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/properties.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/ref.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/resolver.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/response.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/responses.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/schema.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/schema_loader.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/schemas/jsonschema-draft-04.json is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/schemas/v2/schema.json is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/security_scheme.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/spec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/swagger.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/tag.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/url_go19.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/validations.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/spec/xml_object.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/strfmt/.editorconfig is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/strfmt/.gitattributes is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/strfmt/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/strfmt/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/strfmt/CODE_OF_CONDUCT.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/strfmt/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/strfmt/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/strfmt/bson.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/strfmt/date.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/strfmt/default.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/strfmt/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/strfmt/duration.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/strfmt/errors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/strfmt/format.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/strfmt/ifaces.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/strfmt/mongo.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/strfmt/time.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/strfmt/ulid.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/.codecov.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/.mockery.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/SECURITY.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/cmdutils/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/cmdutils/cmd_utils.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/cmdutils/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/cmdutils_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/convert.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/convert_types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/format.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/sizeof.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv/type_constraints.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/conv_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/convert.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/convert_types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/errors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/fileutils/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/fileutils/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/fileutils/file.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/fileutils/path.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/fileutils_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/go.work is excluded by !**/*.work, !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/go.work.sum is excluded by !**/*.sum, !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/initialism_index.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/json.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonname/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonname/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonname/name_provider.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonname_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/ifaces/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/ifaces/ifaces.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/ifaces/registry_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/registry.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/adapter.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/lexer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/ordered_map.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/pool.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/register.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/writer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/concat.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/json.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils/ordered_map.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/jsonutils_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/errors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/json.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/loading.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/options.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading/yaml.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/loading_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/BENCHMARK.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/initialism_index.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/name_lexem.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/name_mangler.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/options.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/pools.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/split.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/string_bytes.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling/util.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/mangling_iface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/name_lexem.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/net.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/go-openapi/swag/netutils/LICENSE is excluded by !**/vendor/**, !vendor/**
📒 Files selected for processing (16)
  • README.md
  • docs/configuration.md
  • go.mod
  • internal/tools/update-readme/main.go
  • pkg/config/config_test.go
  • pkg/mcp/modules.go
  • pkg/prometheus/alertmanager.go
  • pkg/prometheus/client_test.go
  • pkg/prometheus/time.go
  • pkg/prometheus/types.go
  • pkg/toolsets/observability/alertmanager.go
  • pkg/toolsets/observability/config.go
  • pkg/toolsets/observability/helpers.go
  • pkg/toolsets/observability/helpers_test.go
  • pkg/toolsets/observability/prometheus.go
  • pkg/toolsets/observability/toolset_test.go
💤 Files with no reviewable changes (10)
  • pkg/prometheus/types.go
  • pkg/prometheus/client_test.go
  • pkg/prometheus/time.go
  • pkg/toolsets/observability/alertmanager.go
  • pkg/toolsets/observability/helpers_test.go
  • pkg/toolsets/observability/config.go
  • pkg/toolsets/observability/prometheus.go
  • pkg/toolsets/observability/toolset_test.go
  • pkg/prometheus/alertmanager.go
  • pkg/toolsets/observability/helpers.go

Comment thread docs/configuration.md
Comment on lines +272 to +280
| Toolset | Description | Default |
|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|
| config | View and manage the current local Kubernetes configuration (kubeconfig) | ✓ |
| core | Most common tools for Kubernetes management (Pods, Generic Resources, Events, etc.) | ✓ |
| helm | Tools for managing Helm charts and releases | |
| kcp | Manage kcp workspaces and multi-tenancy features | |
| kubevirt | KubeVirt virtual machine management tools, check the [KubeVirt documentation](https://github.com/containers/kubernetes-mcp-server/blob/main/docs/kubevirt.md) for more details. | |
| obs-mcp | Toolset for querying Prometheus and Alertmanager endpoints in efficient ways. | |
| ossm | Most common tools for managing OSSM, check the [OSSM documentation](https://github.com/openshift/openshift-mcp-server/blob/main/docs/OSSM.md) for more details. | |
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Default column appears inconsistent with tested defaults.

In this table, obs-mcp (and helm) are shown as non-default. That conflicts with the test expectation in pkg/config/config_test.go (Line 1052), which includes obs-mcp in defaults.

📝 Suggested table fix
-| helm     | Tools for managing Helm charts and releases                                                                                                                                     |         |
+| helm     | Tools for managing Helm charts and releases                                                                                                                                     | ✓       |
 ...
-| obs-mcp  | Toolset for querying Prometheus and Alertmanager endpoints in efficient ways.                                                                                                   |         |
+| obs-mcp  | Toolset for querying Prometheus and Alertmanager endpoints in efficient ways.                                                                                                   | ✓       |
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
| Toolset | Description | Default |
|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|
| config | View and manage the current local Kubernetes configuration (kubeconfig) ||
| core | Most common tools for Kubernetes management (Pods, Generic Resources, Events, etc.) ||
| helm | Tools for managing Helm charts and releases | |
| kcp | Manage kcp workspaces and multi-tenancy features | |
| kubevirt | KubeVirt virtual machine management tools, check the [KubeVirt documentation](https://github.com/containers/kubernetes-mcp-server/blob/main/docs/kubevirt.md) for more details. | |
| obs-mcp | Toolset for querying Prometheus and Alertmanager endpoints in efficient ways. | |
| ossm | Most common tools for managing OSSM, check the [OSSM documentation](https://github.com/openshift/openshift-mcp-server/blob/main/docs/OSSM.md) for more details. | |
| Toolset | Description | Default |
|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|
| config | View and manage the current local Kubernetes configuration (kubeconfig) ||
| core | Most common tools for Kubernetes management (Pods, Generic Resources, Events, etc.) ||
| helm | Tools for managing Helm charts and releases | |
| kcp | Manage kcp workspaces and multi-tenancy features | |
| kubevirt | KubeVirt virtual machine management tools, check the [KubeVirt documentation](https://github.com/containers/kubernetes-mcp-server/blob/main/docs/kubevirt.md) for more details. | |
| obs-mcp | Toolset for querying Prometheus and Alertmanager endpoints in efficient ways. | |
| ossm | Most common tools for managing OSSM, check the [OSSM documentation](https://github.com/openshift/openshift-mcp-server/blob/main/docs/OSSM.md) for more details. | |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/configuration.md` around lines 272 - 280, The docs table under Toolset
must match the test defaults: mark obs-mcp (and helm per test expectations) as
default-enabled in the Default column so the documentation aligns with
pkg/config/config_test.go which includes obs-mcp in the default set; update the
two rows for "helm" and "obs-mcp" in the table to show the Default check (✓) and
ensure wording remains unchanged for their Description and tool names.

Comment thread README.md
Comment on lines +263 to +271
| Toolset | Description | Default |
|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|
| config | View and manage the current local Kubernetes configuration (kubeconfig) | ✓ |
| core | Most common tools for Kubernetes management (Pods, Generic Resources, Events, etc.) | ✓ |
| helm | Tools for managing Helm charts and releases | |
| kcp | Manage kcp workspaces and multi-tenancy features | |
| kubevirt | KubeVirt virtual machine management tools, check the [KubeVirt documentation](https://github.com/containers/kubernetes-mcp-server/blob/main/docs/kubevirt.md) for more details. | |
| obs-mcp | Toolset for querying Prometheus and Alertmanager endpoints in efficient ways. | |
| ossm | Most common tools for managing OSSM, check the [OSSM documentation](https://github.com/openshift/openshift-mcp-server/blob/main/docs/OSSM.md) for more details. | |
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Update default indicators to match actual defaults.

This table currently leaves helm and obs-mcp unmarked as defaults, which conflicts with pkg/config/config_test.go expectations (Line 1052 includes obs-mcp in defaults).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` around lines 263 - 271, The README tools table's "Default" column
is incorrect for two entries; update the table row for "helm" and the row for
"obs-mcp" to mark them as defaults (add the ✓ in the Default column) so the
documented defaults match the test expectations referencing defaults; locate the
table block in README.md and change the Default cell for the "helm" and
"obs-mcp" rows to "✓".

Comment thread README.md
Comment thread pkg/config/config_test.go Outdated
// Defaults should still be applied for unset values
s.Equal(s.defaults.ListOutput, config.ListOutput, "list_output should be default")
s.Equal(s.defaults.Toolsets, config.Toolsets, "toolsets should be default")
s.Equal([]string{"core", "config", "helm", "obs-mcp"}, config.Toolsets, "toolsets should be default")
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@saswatamcode I guess we can remove this line. This is the cause of the current test failure. It's also related to the https://github.com/openshift/openshift-mcp-server/pull/124/changes#r2930689867

@openshift-ci openshift-ci bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Mar 20, 2026
Signed-off-by: Saswata Mukherjee <saswataminsta@yahoo.com>
Signed-off-by: Saswata Mukherjee <saswataminsta@yahoo.com>
Signed-off-by: Saswata Mukherjee <saswataminsta@yahoo.com>
Signed-off-by: Saswata Mukherjee <saswataminsta@yahoo.com>
Signed-off-by: Saswata Mukherjee <saswataminsta@yahoo.com>
Signed-off-by: Saswata Mukherjee <saswataminsta@yahoo.com>
@openshift-ci openshift-ci bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Mar 21, 2026
@openshift-ci
Copy link
Copy Markdown

openshift-ci bot commented Mar 21, 2026

@saswatamcode: all tests passed!

Full PR test history. Your PR dashboard.

Details

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 kubernetes-sigs/prow repository. I understand the commands that are listed here.

Comment thread go.mod
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect
github.com/mailru/easyjson v0.9.0 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mark3labs/mcp-go v0.43.2 // indirect
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

this is a no-go

let's stay out of that

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

PR to migrate rhobs/obs-mcp#53

Comment thread go.mod
github.com/miekg/dns v1.1.68
github.com/modelcontextprotocol/go-sdk v1.4.1
github.com/prometheus/client_golang v1.23.2
github.com/rhobs/obs-mcp v0.0.0-20260319081430-c5a3491bc18f
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Is it possible to get some real release?

Comment thread go.mod

require (
dario.cat/mergo v1.0.2 // indirect
dario.cat/mergo v1.0.1 // indirect
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

why downgraded?

Comment thread go.mod
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/chai2010/gettext-go v1.0.3 // indirect
github.com/chai2010/gettext-go v1.0.2 // indirect
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

downgrade?

Comment thread go.mod
github.com/evanphx/json-patch/v5 v5.9.11 // indirect
github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect
github.com/fatih/color v1.18.0 // indirect
github.com/fatih/color v1.16.0 // indirect
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

downgrade

Comment thread go.mod
Comment on lines +130 to +132
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.16 // indirect
github.com/mattn/go-runewidth v0.0.9 // indirect
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

also downgrades

Comment thread go.mod
github.com/miekg/dns v1.1.68
github.com/modelcontextprotocol/go-sdk v1.4.1
github.com/prometheus/client_golang v1.23.2
github.com/rhobs/obs-mcp v0.0.0-20260319081430-c5a3491bc18f
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

the rhobs/obs-mcp module pulls in a very large transitive dependency graph 😅

Comment on lines -46 to -62
// allowedPrometheusEndpoints is a whitelist of allowed Prometheus API endpoints
var allowedPrometheusEndpoints = map[string]bool{
"/api/v1/query": true,
"/api/v1/query_range": true,
"/api/v1/series": true,
"/api/v1/labels": true,
}

// allowedPrometheusLabelPattern matches /api/v1/label/<label>/values endpoints
var allowedPrometheusLabelPattern = regexp.MustCompile(`^/api/v1/label/[^/]+/values$`)

// allowedAlertmanagerEndpoints is a whitelist of allowed Alertmanager API endpoints
var allowedAlertmanagerEndpoints = map[string]bool{
"/api/v2/alerts": true,
"/api/v2/silences": true,
"/api/v1/alerts": true,
}
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

those prevented SSRF by only allowing known-safe API paths.

Does the module have that too?

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

We don't have anything like that at the moment. I am wondering if it's worth adding when the toolset is opt-in and user needs to pass the config (as mentioned in #124 (comment)) with URLs anyway.

@matzew
Copy link
Copy Markdown
Member

matzew commented Mar 23, 2026

The obs-mcp client only supports "bearer token", not client certificate auth?

Asking, because I had to oc login to get a token-based session instead of using the cert-based kubeconfig.

(tested the list metrics tool)

I geuss that is than documented - somewhere?

@matzew
Copy link
Copy Markdown
Member

matzew commented Mar 23, 2026

The existing docs/OBSERVABILITY.md still documents the old tools (prometheus_query, prometheus_query_range, alertmanager_alerts), the old route auto-discovery mechanism, and the old [toolset_configs.observability] config section.

IMO it would be good to be updated for reflecting the obs-mcp toolset module (e.g. new tool names, required
prometheus_url/alertmanager_url config, etc.)

I had a config like:

[toolset_configs.obs-mcp]
prometheus_url = "https://thanos-querier-openshift-monitoring..."
alertmanager_url = "https://alertmanager-main-openshift-monitoring..."
insecure = true

executed like:

KUBECONFIG=/tmp/obs-mcp-test-kubeconfig \
    ./kubernetes-mcp-server --port 8080 --log-level 5 --toolsets obs-mcp --config obs-mcp-test.toml

@iNecas
Copy link
Copy Markdown

iNecas commented Mar 23, 2026

The obs-mcp client only supports "bearer token", not client certificate auth?

Asking, because I had to oc login to get a token-based session instead of using the cert-based kubeconfig.

(tested the list metrics tool)

I geuss that is than documented - somewhere?

yes, that's a limitation on the way auth against prometheus/thanos is done on openshift side AFAIK.

@matzew
Copy link
Copy Markdown
Member

matzew commented Apr 13, 2026

@tremes @iNecas any updates on this?

@openshift-ci openshift-ci bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Apr 13, 2026
@openshift-ci
Copy link
Copy Markdown

openshift-ci bot commented Apr 13, 2026

PR needs rebase.

Details

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 kubernetes-sigs/prow repository.

@saswatamcode
Copy link
Copy Markdown
Member Author

Hey so this PR has been quite cumbersome to do a rebase on especially with all the mod changes, so I raised a fresh version of this on latest main.

Superseded by #226

cc: @iNecas @tremes @matzew

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants