Use rhobs/obs-mcp toolset for Prometheus/Alertmanager (replaces observability mcp)#124
Use rhobs/obs-mcp toolset for Prometheus/Alertmanager (replaces observability mcp)#124saswatamcode wants to merge 9 commits intoopenshift:mainfrom
Conversation
|
Skipping CI for Draft Pull Request. |
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: saswatamcode The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
|
For anyone looking at this, here's the counterpart on obs-mcp rhobs/obs-mcp#20 |
bbdc604 to
e64d417
Compare
pkg/config/config_default.go
Outdated
| defaultConfig := StaticConfig{ | ||
| ListOutput: "table", | ||
| Toolsets: []string{"core", "config", "helm", "observability"}, | ||
| Toolsets: []string{"core", "config", "helm", "obs-mcp"}, |
There was a problem hiding this comment.
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)
There was a problem hiding this comment.
Ok removed it from here, so it is no longer enabled by default
There was a problem hiding this comment.
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" |
There was a problem hiding this comment.
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)) |
There was a problem hiding this comment.
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)
7e7befd to
66dbd96
Compare
|
Few questions please.
|
Yup we do, will update once we've finalized a set of prompts.
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) |
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>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (1)
WalkthroughReplaces the internal observability toolset with the external Changes
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
📝 Coding Plan
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. Comment 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. |
There was a problem hiding this comment.
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
⛔ Files ignored due to path filters (284)
go.sumis excluded by!**/*.sumvendor/dario.cat/mergo/FUNDING.jsonis excluded by!**/vendor/**,!vendor/**vendor/dario.cat/mergo/README.mdis excluded by!**/vendor/**,!vendor/**vendor/dario.cat/mergo/SECURITY.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/bahlo/generic-list-go/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/bahlo/generic-list-go/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/bahlo/generic-list-go/list.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/buger/jsonparser/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/buger/jsonparser/.travis.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/buger/jsonparser/Dockerfileis excluded by!**/vendor/**,!vendor/**vendor/github.com/buger/jsonparser/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/buger/jsonparser/Makefileis excluded by!**/vendor/**,!vendor/**vendor/github.com/buger/jsonparser/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/buger/jsonparser/bytes.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/buger/jsonparser/bytes_safe.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/buger/jsonparser/bytes_unsafe.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/buger/jsonparser/escape.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/buger/jsonparser/fuzz.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/buger/jsonparser/oss-fuzz-build.shis excluded by!**/vendor/**,!vendor/**vendor/github.com/buger/jsonparser/parser.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/chai2010/gettext-go/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/chai2010/gettext-go/plural/formula.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/chai2010/gettext-go/po/util.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/dennwc/varint/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/dennwc/varint/.travis.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/dennwc/varint/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/dennwc/varint/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/dennwc/varint/proto.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/dennwc/varint/varint.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/fatih/color/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/fatih/color/color.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/.codecov.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/.gitattributesis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/.golangci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/CODE_OF_CONDUCT.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/analyzer.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/debug.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/errors.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/fixer.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/flatten.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/flatten_name.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/flatten_options.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/internal/debug/debug.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/internal/flatten/normalize/normalize.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/internal/flatten/operations/operations.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/internal/flatten/replace/errors.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/internal/flatten/replace/replace.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/internal/flatten/schutils/flatten_schema.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/internal/flatten/sortref/keys.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/internal/flatten/sortref/sort_ref.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/mixin.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/analysis/schema.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/errors/.gitattributesis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/errors/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/errors/.golangci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/errors/CODE_OF_CONDUCT.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/errors/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/errors/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/errors/api.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/errors/auth.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/errors/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/errors/headers.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/errors/middleware.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/errors/parsing.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/errors/schema.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/jsonpointer/.golangci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/jsonpointer/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/jsonpointer/pointer.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/jsonreference/.golangci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/jsonreference/NOTICEis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/jsonreference/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/jsonreference/internal/normalize_url.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/jsonreference/reference.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/loads/.editorconfigis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/loads/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/loads/.golangci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/loads/.travis.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/loads/CODE_OF_CONDUCT.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/loads/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/loads/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/loads/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/loads/errors.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/loads/loaders.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/loads/options.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/loads/spec.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/.editorconfigis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/.gitattributesis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/.golangci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/CODE_OF_CONDUCT.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/bytestream.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/client/auth_info.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/client/keepalive.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/client/opentelemetry.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/client/request.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/client/response.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/client/runtime.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/client_auth_info.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/client_operation.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/client_request.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/client_response.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/constants.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/csv.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/csv_options.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/discard.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/file.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/go.workis excluded by!**/*.work,!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/go.work.sumis excluded by!**/*.sum,!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/headers.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/interfaces.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/json.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/logger/logger.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/logger/standard.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/context.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/denco/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/denco/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/denco/router.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/denco/server.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/denco/util.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/header/header.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/negotiate.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/not_implemented.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/operation.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/parameter.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/rapidoc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/redoc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/request.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/router.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/security.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/spec.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/swaggerui.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/swaggerui_oauth2.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/ui_options.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/untyped/api.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/middleware/validation.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/request.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/security/authenticator.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/security/authorizer.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/statuses.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/text.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/values.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/xml.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/runtime/yamlpc/yaml.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/.editorconfigis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/.golangci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/CODE_OF_CONDUCT.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/cache.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/contact_info.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/debug.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/embed.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/errors.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/expander.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/external_docs.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/header.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/info.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/items.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/license.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/normalizer.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/normalizer_nonwindows.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/normalizer_windows.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/operation.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/parameter.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/path_item.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/paths.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/properties.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/ref.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/resolver.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/response.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/responses.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/schema.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/schema_loader.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/schemas/jsonschema-draft-04.jsonis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/schemas/v2/schema.jsonis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/security_scheme.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/spec.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/swagger.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/tag.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/url_go19.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/validations.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/spec/xml_object.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/strfmt/.editorconfigis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/strfmt/.gitattributesis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/strfmt/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/strfmt/.golangci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/strfmt/CODE_OF_CONDUCT.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/strfmt/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/strfmt/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/strfmt/bson.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/strfmt/date.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/strfmt/default.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/strfmt/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/strfmt/duration.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/strfmt/errors.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/strfmt/format.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/strfmt/ifaces.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/strfmt/mongo.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/strfmt/time.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/strfmt/ulid.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/.codecov.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/.golangci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/.mockery.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/SECURITY.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/cmdutils/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/cmdutils/cmd_utils.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/cmdutils/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/cmdutils_iface.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/conv/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/conv/convert.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/conv/convert_types.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/conv/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/conv/format.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/conv/sizeof.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/conv/type_constraints.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/conv_iface.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/convert.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/convert_types.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/errors.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/fileutils/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/fileutils/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/fileutils/file.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/fileutils/path.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/fileutils_iface.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/go.workis excluded by!**/*.work,!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/go.work.sumis excluded by!**/*.sum,!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/initialism_index.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/json.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonname/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonname/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonname/name_provider.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonname_iface.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonutils/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonutils/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonutils/adapters/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonutils/adapters/ifaces/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonutils/adapters/ifaces/ifaces.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonutils/adapters/ifaces/registry_iface.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonutils/adapters/registry.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/adapter.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/lexer.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/ordered_map.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/pool.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/register.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonutils/adapters/stdlib/json/writer.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonutils/concat.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonutils/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonutils/json.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonutils/ordered_map.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/jsonutils_iface.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/loading/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/loading/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/loading/errors.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/loading/json.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/loading/loading.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/loading/options.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/loading/yaml.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/loading_iface.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/mangling/BENCHMARK.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/mangling/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/mangling/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/mangling/initialism_index.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/mangling/name_lexem.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/mangling/name_mangler.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/mangling/options.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/mangling/pools.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/mangling/split.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/mangling/string_bytes.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/mangling/util.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/mangling_iface.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/name_lexem.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/net.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-openapi/swag/netutils/LICENSEis excluded by!**/vendor/**,!vendor/**
📒 Files selected for processing (16)
README.mddocs/configuration.mdgo.modinternal/tools/update-readme/main.gopkg/config/config_test.gopkg/mcp/modules.gopkg/prometheus/alertmanager.gopkg/prometheus/client_test.gopkg/prometheus/time.gopkg/prometheus/types.gopkg/toolsets/observability/alertmanager.gopkg/toolsets/observability/config.gopkg/toolsets/observability/helpers.gopkg/toolsets/observability/helpers_test.gopkg/toolsets/observability/prometheus.gopkg/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
| | 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. | | |
There was a problem hiding this comment.
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.
| | 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.
| | 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. | | |
There was a problem hiding this comment.
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 "✓".
| <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) | ||
|
|
There was a problem hiding this comment.
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>
|
@saswatamcode: The following test failed, say
Full PR test history. Your PR dashboard. DetailsInstructions 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") |
There was a problem hiding this comment.
@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
./kubernetes-mcp-server --help
/kubernetes-mcp-server --toolsets obs-mcp --port 8080
