Skip to content

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

Open
saswatamcode wants to merge 9 commits intoopenshift:mainfrom
saswatamcode:obs-mcp
Open

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

Conversation

@saswatamcode
Copy link
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

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

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

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
defaultConfig := StaticConfig{
ListOutput: "table",
Toolsets: []string{"core", "config", "helm", "observability"},
Toolsets: []string{"core", "config", "helm", "obs-mcp"},
Copy link
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
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

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
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
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
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
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

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
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.

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>
Signed-off-by: Saswata Mukherjee <saswataminsta@yahoo.com>
Signed-off-by: Saswata Mukherjee <saswataminsta@yahoo.com>
@openshift-merge-robot openshift-merge-robot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Mar 13, 2026
@coderabbitai
Copy link

coderabbitai bot commented Mar 13, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d5cfdee9-5354-4641-8350-4f05eaffb2a5

📥 Commits

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

⛔ Files ignored due to path filters (1)
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (1)
  • go.mod

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
📝 Coding Plan
  • Generate coding plan for human review comments

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

CodeRabbit can use TruffleHog to scan for secrets in your code with verification capabilities.

Add a TruffleHog config file (e.g. trufflehog-config.yml, trufflehog.yml) to your project to customize detectors and scanning behavior. The tool runs only when a config file is present.

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

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 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

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 on lines +456 to 587
<summary>obs-mcp</summary>

- **list_metrics** - MANDATORY FIRST STEP: List all available metric names in Prometheus.

YOU MUST CALL THIS TOOL BEFORE ANY OTHER QUERY TOOL

This tool MUST be called first for EVERY observability question to:
1. Discover what metrics actually exist in this environment
2. Find the EXACT metric name to use in queries
3. Avoid querying non-existent metrics
4. The 'name_regex' parameter should always be provided, and be a best guess of what the metric would be named like.
5. Do not use a blanket regex like .* or .+ in the 'name_regex' parameter. Use specific ones like kube.*, node.*, etc.

NEVER skip this step. NEVER guess metric names. Metric names vary between environments.

After calling this tool:
1. Search the returned list for relevant metrics
2. Use the EXACT metric name found in subsequent queries
3. If no relevant metric exists, inform the user
- `name_regex` (`string`) **(required)** - Regex pattern to filter metric names (e.g., 'http_.*', 'node_.*', 'kube.*'). This parameter is required. Don't pass in blanket regex.

- **execute_instant_query** - Execute a PromQL instant query to get current/point-in-time values.

PREREQUISITE: You MUST call list_metrics first to verify the metric exists

WHEN TO USE:
- Current state questions: "What is the current error rate?"
- Point-in-time snapshots: "How many pods are running?"
- Latest values: "Which pods are in Pending state?"

The 'query' parameter MUST use metric names that were returned by list_metrics.
- `query` (`string`) **(required)** - PromQL query string using metric names verified via list_metrics
- `time` (`string`) - Evaluation time as RFC3339 or Unix timestamp. Omit or use 'NOW' for current time.

- **execute_range_query** - Execute a PromQL range query to get time-series data over a period.

PREREQUISITE: You MUST call list_metrics first to verify the metric exists

WHEN TO USE:
- Trends over time: "What was CPU usage over the last hour?"
- Rate calculations: "How many requests per second?"
- Historical analysis: "Were there any restarts in the last 5 minutes?"

TIME PARAMETERS:
- 'duration': Look back from now (e.g., "5m", "1h", "24h")
- 'step': Data point resolution (e.g., "1m" for 1-hour duration, "5m" for 24-hour duration)

The 'query' parameter MUST use metric names that were returned by list_metrics.
- `duration` (`string`) - Duration to look back from now (e.g., '1h', '30m', '1d', '2w') (optional)
- `end` (`string`) - End time as RFC3339 or Unix timestamp (optional). Use `NOW` for current time.
- `query` (`string`) **(required)** - PromQL query string using metric names verified via list_metrics
- `start` (`string`) - Start time as RFC3339 or Unix timestamp (optional)
- `step` (`string`) **(required)** - Query resolution step width (e.g., '15s', '1m', '1h'). Choose based on time range: shorter ranges use smaller steps.

- **get_label_names** - Get all label names (dimensions) available for filtering a metric.

WHEN TO USE (after calling list_metrics):
- To discover how to filter metrics (by namespace, pod, service, etc.)
- Before constructing label matchers in PromQL queries

The 'metric' parameter should use a metric name from list_metrics output.
- `end` (`string`) - End time for label discovery as RFC3339 or Unix timestamp (optional, defaults to now)
- `metric` (`string`) - Metric name (from list_metrics) to get label names for. Leave empty for all metrics.
- `start` (`string`) - Start time for label discovery as RFC3339 or Unix timestamp (optional, defaults to 1 hour ago)

- **get_label_values** - Get all unique values for a specific label.

WHEN TO USE (after calling list_metrics and get_label_names):
- To find exact label values for filtering (namespace names, pod names, etc.)
- To see what values exist before constructing queries

The 'metric' parameter should use a metric name from list_metrics output.
- `end` (`string`) - End time for label value discovery as RFC3339 or Unix timestamp (optional, defaults to now)
- `label` (`string`) **(required)** - Label name (from get_label_names) to get values for
- `metric` (`string`) - Metric name (from list_metrics) to scope the label values to. Leave empty for all metrics.
- `start` (`string`) - Start time for label value discovery as RFC3339 or Unix timestamp (optional, defaults to 1 hour ago)

- **get_series** - Get time series matching selectors and preview cardinality.

WHEN TO USE (optional, after calling list_metrics):
- To verify label filters match expected series before querying
- To check cardinality and avoid slow queries

CARDINALITY GUIDANCE:
- <100 series: Safe
- 100-1000: Usually fine
- >1000: Add more label filters

The selector should use metric names from list_metrics output.
- `end` (`string`) - End time for series discovery as RFC3339 or Unix timestamp (optional, defaults to now)
- `matches` (`string`) **(required)** - PromQL series selector using metric names from list_metrics
- `start` (`string`) - Start time for series discovery as RFC3339 or Unix timestamp (optional, defaults to 1 hour ago)

- **get_alerts** - Get alerts from Alertmanager.

WHEN TO USE:
- START HERE when investigating issues: if the user asks about things breaking, errors, failures, outages, services being down, or anything going wrong in the cluster
- When the user mentions a specific alert name - use this tool to get the alert's full labels (namespace, pod, service, etc.) which are essential for further investigation with other tools
- To see currently firing alerts in the cluster
- To check which alerts are active, silenced, or inhibited
- To understand what's happening before diving into metrics or logs

INVESTIGATION TIP: Alert labels often contain the exact identifiers (pod names, namespaces, job names) needed for targeted queries with prometheus tools.

FILTERING:
- Use 'active' to filter for only active alerts (not resolved)
- Use 'silenced' to filter for silenced alerts
- Use 'inhibited' to filter for inhibited alerts
- Use 'filter' to apply label matchers (e.g., "alertname=HighCPU")
- Use 'receiver' to filter alerts by receiver name

All filter parameters are optional. Without filters, all alerts are returned.
- `active` (`boolean`) - Filter for active alerts only (true/false, optional)
- `filter` (`string`) - Label matchers to filter alerts (e.g., 'alertname=HighCPU', optional)
- `inhibited` (`boolean`) - Filter for inhibited alerts only (true/false, optional)
- `receiver` (`string`) - Receiver name to filter alerts (optional)
- `silenced` (`boolean`) - Filter for silenced alerts only (true/false, optional)
- `unprocessed` (`boolean`) - Filter for unprocessed alerts only (true/false, optional)

- **get_silences** - Get silences from Alertmanager.

WHEN TO USE:
- To see which alerts are currently silenced
- To check active, pending, or expired silences
- To investigate why certain alerts are not firing notifications

FILTERING:
- Use 'filter' to apply label matchers to find specific silences

Silences are used to temporarily mute alerts based on label matchers. This tool helps you understand what is currently silenced in your environment.
- `filter` (`string`) - Label matchers to filter silences (e.g., 'alertname=HighCPU', optional)

Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix markdownlint warnings in the obs-mcp section.

Static analysis flags this block for MD005 (list indentation) and MD049 (emphasis style). Please normalize list indentation and emphasis style here to keep docs lint clean.

🧰 Tools
🪛 markdownlint-cli2 (0.21.0)

[warning] 467-467: Emphasis style
Expected: underscore; Actual: asterisk

(MD049, emphasis-style)


[warning] 467-467: Emphasis style
Expected: underscore; Actual: asterisk

(MD049, emphasis-style)


[warning] 475-475: Emphasis style
Expected: underscore; Actual: asterisk

(MD049, emphasis-style)


[warning] 475-475: Emphasis style
Expected: underscore; Actual: asterisk

(MD049, emphasis-style)


[warning] 477-477: Inconsistent indentation for list items at the same level
Expected: 2; Actual: 0

(MD005, list-indent)


[warning] 490-490: Inconsistent indentation for list items at the same level
Expected: 2; Actual: 0

(MD005, list-indent)


[warning] 510-510: Inconsistent indentation for list items at the same level
Expected: 2; Actual: 0

(MD005, list-indent)


[warning] 521-521: Inconsistent indentation for list items at the same level
Expected: 2; Actual: 0

(MD005, list-indent)


[warning] 533-533: Inconsistent indentation for list items at the same level
Expected: 2; Actual: 0

(MD005, list-indent)


[warning] 549-549: Inconsistent indentation for list items at the same level
Expected: 2; Actual: 0

(MD005, list-indent)


[warning] 575-575: Inconsistent indentation for list items at the same level
Expected: 2; Actual: 0

(MD005, list-indent)

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

In `@README.md` around lines 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.

Signed-off-by: Saswata Mukherjee <saswataminsta@yahoo.com>
@openshift-ci
Copy link

openshift-ci bot commented Mar 17, 2026

@saswatamcode: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/test dbba4b8 link true /test test

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.

// 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

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

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants