kube-noob
PYPI · KUBE-NOOB
Kubernetes, OpenShift, ROSA HCP, Helm and RHACS audit, debugging and cited docs. No AI inside.
Available components
Last scanned (53 minutes ago)
Scores higher than 59% of PyPI servers
Category Cloud Infrastructure
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security50
- Malware scan not yet available for this package.Unverified
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
- 1 of 32 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency74
- Repository check failed: the declared repository URL redirects; it must resolve directly. See how to fix → View diagnostics → Fail
- Cryptographically verified build provenance (signed, bound to aashishmahajan/kube-noob). View diagnostics → Pass
- Clear OSI-approved license (Apache-2.0).Pass
- Actively maintained (last published 5 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability62
- 67% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Partial
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 6785 tokens (~138/item across 49 items; 47 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management30
- Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage91
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 68% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 47 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 49 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 −15
- Malware scan: pass → unverified ▼ security
- 4 Nov 26 −5
- Source repository: pass → fail ▼ security
- 3 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.
- 1 Nov 26 +1
- Security disclosure: unverified → pass ▲ functional
- 31 Oct 26 +15
- Malware scan: unverified → pass ▲ security
- Security disclosure: pass → unverified ▼ functional
- Package version: 0.7.0 → 0.7.1 functional
- 30 Oct 26 0
- Schema quality: 6105 → 6722 ▼ functional
- Package version: 0.6.0 → 0.7.0 functional
- 29 Oct 26 +1
- Schema quality: pass → fail ▼ functional
- Tool coverage: 57% → 67% ▲ functional
- Package version: 0.4.0 → 0.6.0 functional
- 28 Oct 26 +1
- Schema quality: 74 → 85 ▼ functional
- Stability: unverified → 0.03 ▲ functional
- Schema quality: fair → good functional
- Package version: 0.3.0 → 0.4.0 functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Analysed pypi/kube-noob@0.7.1
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | pypi |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | aashishmahajan/kube-noob |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/aashishmahajan/kube-noob/.github/workflows/release.yml@refs/tags/v0.7.1 |
| Rekor log index | 3610442285 |
| Predicate type | PyPI publish attestation https://docs.pypi.org/attestations/publish/v1 |
| Subject digest | sha256:8c427ad6d79eeb0356a52e515a1af05d0f6375ac1c0bd69c923bc9c48ecb3929 |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Dependencies 32 packages
| Packages resolved | 32 |
|---|---|
| No linked repository | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
kubenoob_analyze_must_gather Analyse a must-gather ~224
Open an OpenShift must-gather (or oc adm inspect output) safely and say what is wrong, most severe first: the cluster version and update, cluster operators, nodes, machine config pools, OLM operators, pods, warning events and etcd log hints. Each finding has its evidence file, its signals, read-only commands to confirm it, and the known OpenShift bugs and team memory entries that match it for the version the cluster runs. Nothing is extracted or run and Secrets are never read. Local: reads the path you give on this machine.
| Name | Type | Req | Description |
|---|---|---|---|
| case_draft | boolean | – | Also return caseDraft: a support case draft with placeholders for what only you know. |
| path | string | yes | Absolute path of a must-gather directory or .tar, .tar.gz or .tgz archive on the machine the server runs on (under mustGather.allowedDir when it is set). Nothing is extracted or run; Secrets are neve… |
| top | integer | – | How many findings to return, most severe first. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_api_history API removal history and version map ~49
Removed/deprecated Kubernetes APIs relevant to a target version, and the OpenShift->Kubernetes version map.
| Name | Type | Req | Description |
|---|---|---|---|
| kind | – | – | – |
| platform | string | – | – |
| version | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_audit_manifests Audit manifests ~186
Full deterministic audit: security, network exposure, storage access modes, reliability and red-team scenarios. Findings carry rule ids, line numbers, fixes, citations and matching RHACS policy names.
| Name | Type | Req | Description |
|---|---|---|---|
| exceptions | – | – | An exception list (YAML, apiVersion kube-noob.io/v1, kind ExceptionList): each entry names a rule, a scope, an owner, a reason and an expiry date. Active entries hide the findings they cover; expired… |
| manifests | string | yes | One or more YAML documents (Kubernetes/OpenShift objects). |
| min_severity | string | – | Hide findings below this severity. |
| platform | string | – | Target platform. |
| stages | array | – | – |
| version | – | – | Platform version, e.g. '4.22' (OCP) or '1.35'. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_build_diagnose Diagnose a failed build log ~172
Read a failed GitHub Actions, Jenkins, Tekton or OpenShift build log: the failing step (and why it is that step), the error line and its template, the cause class (dependency fetch, compile, test, image push, registry auth, quota, timeout, out of memory, permissions) with its evidence, reported issues, team memory and the fix for that CI system. Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| log | string | yes | A failed build or pipeline log: GitHub Actions, Jenkins, Tekton (tkn ... logs) or an OpenShift build (oc logs build/<name>). The end of the log matters most: when cutting, keep the end. |
| platform | – | – | – |
| version | – | – | The cluster's OpenShift version, for reported issues that may apply. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_check_network_policy Would this traffic be allowed? ~236
Evaluate NetworkPolicies offline: can the source reach the destination on this port? Checks egress from the source and ingress to the destination, names the policy and rule that decide each, says why the other rules did not match, and proposes the smallest NetworkPolicy that would allow it.
| Name | Type | Req | Description |
|---|---|---|---|
| default_namespace | string | – | For objects without one. |
| destination | string | yes | Where it goes: namespace/name of a workload (namespace/kind/name when names clash), namespace:key=value,... for a set of pod labels, or an IP address / CIDR outside the cluster. |
| manifests | string | yes | The NetworkPolicies and the workloads they apply to (Deployments, Pods ...); add Namespace objects when policies select namespaces by label. |
| platform | – | – | – |
| port | – | yes | Destination port number (1-65535) or a named container port. |
| protocol | string | – | – |
| source | string | yes | Where the connection starts: namespace/name of a workload (namespace/kind/name when names clash), namespace:key=value,... for a set of pod labels, or an IP address / CIDR outside the cluster. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_clarify_requirements Clarify requirements ~45
Check a (partial) generator blueprint and return blocking questions and stated assumptions.
| Name | Type | Req | Description |
|---|---|---|---|
| blueprint | object | yes | Partial blueprint; missing/invalid fields become questions. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_code_report Assess SAST findings: where the code ships and who runs it ~367
Read the SARIF that Semgrep, Bandit, SpotBugs/FindSecBugs, ESLint or CodeQL wrote (kube-noob has no analysis engine of its own): one finding per file, line and CWE across tools, suppressed and fixed results excluded with the reason, lint kept apart. With Containerfiles, each file is followed into the images that ship it (copied or built; tests and tools are not shipped); with manifests, findings rank by exposure and privileges with the attack path. With scanner reports and dependency files, each language-package vulnerability points at the file and line to change. Local only.
| Name | Type | Req | Description |
|---|---|---|---|
| containerfiles | array | – | Containerfiles, to know which images ship each file. |
| dependency_files | object | – | Dependency files by repository path (requirements.txt, package.json, package-lock.json, pom.xml, go.mod, ...), to find the line that declares a vulnerable package. |
| include_quality | boolean | – | Also list lint and quality results (never ranked). |
| manifests | – | – | YAML that runs the images: ranks by exposure and privileges. |
| reports | array | – | Trivy or Grype JSON or a CycloneDX report of an image: each language-package vulnerability points at the dependency file and line that declares it. |
| sarif | array | – | SARIF 2.1.0 as JSON text from Semgrep, Bandit, SpotBugs/FindSecBugs, ESLint or CodeQL (any SARIF producer works). The same file, line and CWE from several tools become one finding. |
| source_roots | array | – | Absolute directories the scanners ran in (the CI checkout), so absolute paths map to the repository. |
| top | integer | – | How many ranked findings to return. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_config_status Show configuration ~27
Effective configuration (webEnabled, cluster access, model), version and knowledge stats.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_containerfile_audit Audit a Containerfile ~141
Static checks of a Containerfile or Dockerfile: base images pinned by digest, a non-root USER, no credentials in ENV, ARG, LABEL, RUN or copied files, no download piped into a shell, package caches cleaned, a health check or probes, a multi-stage build. Each finding names its fix and source. The CLI (kube-noob build audit) also reads the build context and the built image's layers.
| Name | Type | Req | Description |
|---|---|---|---|
| containerfile | string | yes | The Containerfile or Dockerfile text. |
| manifests | – | – | Optional: the workload YAML that runs the image; its readiness or liveness probes satisfy the health check. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_diagnose Diagnose symptoms offline ~194
Match pasted events / describe output / logs / CLI errors or an Alertmanager webhook payload against troubleshooting playbooks, ranked by matching patterns and by the signals the text carries (alert names, reasons); returns the signals, ranked root causes, read-only checks with names filled in, fixes, reported issues for the version and policy denials.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| platform | – | – | – |
| text | string | yes | Events, `describe` output, logs, CLI errors, status JSON, Ceph health output (`ceph health detail`, `ceph status`, their JSON or a CephCluster) or an Alertmanager webhook payload (its alerts are read… |
| version | – | – | The cluster's OpenShift version (4.20 or 4.20.8): leaves out reported issues already fixed there. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_explain_denial Why was this denied? ~131
Explain an admission denial policy by policy: Kyverno, OPA Gatekeeper, ValidatingAdmissionPolicy, Pod Security Admission, OpenShift SCC, RHACS, ResourceQuota, LimitRange or RBAC. Returns the policy and rule, the failing field, read-only commands with names filled in, the fix (with a patch for Pod Security and RBAC) and the audit rules that catch it before deploy.
| Name | Type | Req | Description |
|---|---|---|---|
| platform | – | – | – |
| text | string | yes | The denial as printed: `kubectl apply` or `oc apply` output, a FailedCreate event or a Warning. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_explain_rule Explain an audit rule ~37
Rationale, remediation, citations for a rule id.
| Name | Type | Req | Description |
|---|---|---|---|
| rule_id | string | yes | e.g. KN-S001 |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_extract_signals Extract signals ~119
Read the canonical names in an error: Alertmanager alert names (webhook payload or text), event and ClusterOperator condition reasons, container reasons, admission rules, components and normalised error templates, plus the alerts its words imply. Returns each signal with where it was found, the catalogue entry (components, playbooks, upstream source) and the playbooks it points at. Read-only and offline.
| Name | Type | Req | Description |
|---|---|---|---|
| text | string | yes | An Alertmanager payload, events, a ClusterOperator, pod status, logs or an error in words. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_fix_manifests Apply safe mechanical fixes ~138
Migrates removed APIs, fixes wrong API groups, hardens securityContext, adds Route TLS, unblocks PDBs, reorders EgressFirewall rules, swaps RWO-only classes for RWX claims. Returns the diff log and manual follow-ups. Does not touch any cluster.
| Name | Type | Req | Description |
|---|---|---|---|
| harden | boolean | – | Apply securityContext hardening (restricted profile). |
| manifests | string | yes | One or more YAML documents (Kubernetes/OpenShift objects). |
| platform | string | – | Target platform. |
| version | – | – | Platform version, e.g. '4.22' (OCP) or '1.35'. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_generate_helm_chart Generate a Helm chart ~49
Same as generate_manifests but packaged as a Helm chart (Chart.yaml v2, values.yaml, values.schema.json, templates). Returns file contents.
| Name | Type | Req | Description |
|---|---|---|---|
| blueprint | – | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_generate_manifests Generate production manifests ~62
Deterministic, audited manifests for kubernetes / openshift / rosa-classic / rosa-hcp from a blueprint (name, namespace, image, replicas, port, probes, storage, exposure, egress).
| Name | Type | Req | Description |
|---|---|---|---|
| blueprint | – | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_get_knowledge Read a knowledge chunk or document ~57
Fetch the full text of a chunk id (kn:<doc>#<n>) or every chunk of a document id.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Chunk id 'kn:<doc>#<n>' or a document id. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_grade_answer Grade a model answer (enforcer + credit system) ~107
Deterministic reward for a completion against a benchmark task: task correctness (audit engine or QA rules), source-attribution credit for valid [kn:...] citations, format, penalties.
| Name | Type | Req | Description |
|---|---|---|---|
| completion | string | yes | – |
| task | – | – | Inline task. Its mustMention / mustNotMention / matches entries are matched as literal text, not regular expressions (only built-in benchmark tasks use regular expressions). |
| task_id | – | – | Benchmark task id; or pass `task` inline. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_incident One incident in full ~72
An incident with its evidence (redacted), diagnosis, policy denials, reported issues, rollout change, every occurrence, the fixes a person confirmed, and confirmed fixes for the same problem elsewhere.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Incident id, e.g. inc-3fa94c0e12. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_incident_confirm Remember the fix for an incident ~124
AFTER the user confirms it worked: store the cause and fix on the incident (and as a learning note), so the next occurrence comes with it. Summaries only; never leaves the machine.
| Name | Type | Req | Description |
|---|---|---|---|
| cause | string | yes | The confirmed root cause, in words. |
| confirmed_by_user | boolean | yes | True only after the user explicitly confirmed this cause and fix worked. |
| fix | string | yes | What fixed it, in words (no manifests). |
| id | string | yes | Incident id, e.g. inc-3fa94c0e12. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_incidents Incidents the watch has seen ~74
Open (or resolved) incidents from the local incident ledger: workload, signal, how often it came back, the diagnosis and what changed before it started. Read this first when asked what is wrong.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| namespace | – | – | – |
| status | string | – | Which incidents to list. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_insight What is this, and what does it say? ~213
Start here for anything the user pastes. Names what the input is (events, pod status, logs, an Alertmanager payload, a policy denial, a ticket, manifests, a Helm template, a build log, a Containerfile, an SBOM or scanner report, a packet trace, must-gather paths, a question; several at once) and runs every analyser that applies: diagnosis with reported issues and team memory, the denial explainer, the audit, the documentation. Returns every finding with its source, read-only next steps and what was not analysed and why. Read-only, local.
| Name | Type | Req | Description |
|---|---|---|---|
| platform | – | – | – |
| text | string | yes | Anything pasted: events, describe output, logs, an Alertmanager payload, Ceph health output (ceph health detail or ceph status, text or JSON), a policy denial, a ticket, manifests or a Helm template,… |
| version | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_known_issues Is this a reported issue? ~175
Match an error or symptom against the issues listed in the OpenShift release notes (known issues and issues fixed in each update) and, when this install keeps a local copy of Red Hat's public Jira, against those tickets too. Returns the issue id and link, what became of it (fixed and in which version, still open, closed as not a bug, won't fix or a duplicate), the workaround and Red Hat's remarks from the comments; with `version`, only issues that can affect that version.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| platform | – | – | – |
| text | string | yes | An error message, events, logs or a symptom in words. |
| version | – | – | The cluster's OpenShift version (4.20 or 4.20.8): keeps only issues that can affect it. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_learn_exercise Get an exercise ~31
Exercise prompt, starter YAML, hints and points.
| Name | Type | Req | Description |
|---|---|---|---|
| exercise_id | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_learn_lesson Open a lesson ~59
Lesson content with objectives, key points and citations. A shared HTTP server records no progress, so the learner id only selects whose tally to show when one is kept.
| Name | Type | Req | Description |
|---|---|---|---|
| learner | – | – | – |
| lesson_id | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_learn_progress Learner progress ~25
Credits earned and completed items.
| Name | Type | Req | Description |
|---|---|---|---|
| learner | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_learn_quiz Quiz ~80
Fetch a quiz question (no choice) or answer it (choice index). A shared HTTP server marks the answer the same way but records nothing, and says so in the result.
| Name | Type | Req | Description |
|---|---|---|---|
| choice | – | – | Omit to fetch the question; set to answer it. |
| learner | string | – | – |
| question_id | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_learn_submit Submit an exercise answer ~67
Grade YAML offline with the audit engine; awards credits and returns feedback. A shared HTTP server grades the same way but records nothing, and says so in the result.
| Name | Type | Req | Description |
|---|---|---|---|
| answer | string | yes | – |
| exercise_id | string | yes | – |
| learner | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_learn_tracks List learning tracks ~30
Tracks, lessons, exercises and the learner's progress.
| Name | Type | Req | Description |
|---|---|---|---|
| learner | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_learning_note_add Remember a confirmed fix ~127
Save a short symptom -> cause -> fix note to the local learning file AFTER the user confirms it worked. Summaries only: credentials, manifests and raw logs are rejected. Never leaves the machine.
| Name | Type | Req | Description |
|---|---|---|---|
| cause | string | yes | The confirmed root cause. |
| confirmed_by_user | boolean | yes | True only after the user explicitly confirmed this cause and fix worked. |
| fix | string | yes | What fixed it, in words (no manifests). |
| platform | – | – | – |
| symptom | string | yes | What was observed, in one or two sentences. |
| tags | array | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_learning_profile_set Remember the user's environment ~83
Save platform, versions and team conventions the user stated, so later answers fit their setup.
| Name | Type | Req | Description |
|---|---|---|---|
| conventions | – | – | Team conventions, e.g. 'namespaces are <team>-<env>'. |
| platform | – | – | – |
| versions | object | – | Keys kubernetes|openshift|helm|rhacs|rosa, values like '4.22'. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_learning_summary Show what kube-noob has learned locally ~51
The user's environment profile (platform, versions, conventions), confirmed troubleshooting notes (cite as [kn:local-N#0]) and the most frequent playbooks/rules. Read this before tailoring advice.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_list_rules List audit rules ~22
All rule ids with stage, category and default severity.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_policy_generate Turn audit rules into admission policies ~274
Generate ValidatingAdmissionPolicy (with binding) and/or Kyverno ValidatingPolicy YAML from kube-noob's audit rules, in audit (warn and record) or enforce mode, for a platform. One policy per rule decidable from one object; each names its rule, fix and source. Rules that need other objects or that the API server already enforces are listed with the reason. Nothing is applied.
| Name | Type | Req | Description |
|---|---|---|---|
| engines | array | – | vap: ValidatingAdmissionPolicy + binding (built into Kubernetes 1.30+); kyverno: Kyverno ValidatingPolicy (policies.kyverno.io/v1, Kyverno 1.18+). |
| exceptions | – | – | An exception list (YAML, kube-noob.io/v1 ExceptionList): active entries become exemptions in their rule's policy (with the ReplicaSets and pods their workloads make); expired or refused ones are list… |
| exclude_namespaces | array | – | Namespaces the policies skip, besides kube-system, kube-public and kube-node-lease. |
| mode | string | – | audit warns and records; enforce refuses |
| platform | string | – | – |
| rules | array | – | Rule ids such as KN-S001 (default: every rule). |
| version | – | – | OpenShift (4.20) or Kubernetes (1.33) |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_policy_migrate_check Check legacy Kyverno policies for their CEL form ~234
Kyverno 1.20 removes the kyverno.io ClusterPolicy, Policy, CleanupPolicy and legacy PolicyException. Lint them rule by rule against the policies.kyverno.io types: direct, inverted (a deny or a negated pattern: the CEL validation must state what is allowed), manual (JMESPath, API calls, anchors, strategic merge patches) or blocked (no documented CEL equivalent), each with the field path, the target kind, the reason and the Kyverno documentation section (pinned commit). Rules that map directly get a draft CEL policy and a kyverno test fixture skeleton to prove it. Nothing is applied or rewritten.
| Name | Type | Req | Description |
|---|---|---|---|
| drafts | boolean | – | Include a draft CEL policy for each rule whose fields all map directly, and a kyverno test fixture skeleton per policy (good and bad resources run against the legacy rule and the draft). |
| policies | string | yes | One or more legacy Kyverno policies (YAML): kyverno.io ClusterPolicy, Policy, ClusterCleanupPolicy, CleanupPolicy or PolicyException. Other documents are listed and skipped; Secrets are not read. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_posture_report Latest drift and policy report ~59
The newest daily report in this install's data folder: objects added, removed and changed since the previous snapshot (with the fields that changed), findings new and fixed, and open findings by namespace, owner and rule. Local data only.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_posture_scan Attack paths in manifests ~142
Rank the paths from an exposure (Route, Ingress, LoadBalancer or NodePort Service) to what a compromised pod could do: node access (privileged, hostPath, host namespaces) or Kubernetes API rights through its ServiceAccount token (read Secrets, exec, create workloads, escalate). Score = exposure x blast radius; every step names the field that proves it, with a fix. Secret objects are dropped unread.
| Name | Type | Req | Description |
|---|---|---|---|
| manifests | string | yes | Routes, Ingresses, Services, workloads, ServiceAccounts and RBAC objects (YAML). Secret objects are dropped unread. |
| top | integer | – | How many ranked paths to return. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_red_team Red-team manifests ~99
Hostile-auditor scenarios: node crash, zone outage, RWX split-brain, exposure, privilege escalation, upgrade blocking, secret leaks, resource starvation, supply chain.
| Name | Type | Req | Description |
|---|---|---|---|
| manifests | string | yes | One or more YAML documents (Kubernetes/OpenShift objects). |
| platform | string | – | Target platform. |
| version | – | – | Platform version, e.g. '4.22' (OCP) or '1.35'. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_rhacs_compare Compare RHACS policies with kube-noob's rules ~180
Map every policy in an RHACS (StackRox) export to kube-noob rules by name and criteria: overlap (same setting, with severity and scope differences), related (the same risk seen through image, runtime or API-event data), gap (a deploy-time setting kube-noob has no rule for), outside (image contents, runtime behaviour, API events, label conventions) or unexplained (criteria kube-noob does not know). Lists disagreements and the rules no policy covers. Local only.
| Name | Type | Req | Description |
|---|---|---|---|
| outcomes | array | – | Only return policies with these outcomes (default: all). |
| policies | string | yes | An RHACS policy export as JSON: {"policies": [...]} from the RHACS portal (Export policy to JSON) or POST /v1/policies/export, a list of policies, or one policy. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_run_protocol Run the 7-step engineering protocol ~122
Clarify -> Validate -> Research -> Audit -> Calibrate -> Generate -> Red Team for a request with existing manifests or a generator blueprint. Returns the Audit & Validation Brief, the production manifest, and Red Team findings with safeguards. Use this first for any design/review request.
| Name | Type | Req | Description |
|---|---|---|---|
| apply_fixes | boolean | – | – |
| blueprint | – | – | Generator blueprint (see generate_manifests). |
| manifests | – | – | Existing manifests to review. |
| platform | – | – | – |
| request | string | yes | What the user wants, in their words. |
| version | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_search_knowledge Search local knowledge ~111
BM25 search over the built-in curated knowledge and the ingested corpus (Kubernetes/OpenShift/ROSA/Helm/StackRox docs, Terraform modules, public RHACS Jira insights). Results include chunk ids to cite as [kn:...] plus source URL and license.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| query | string | yes | – |
| source | – | – | Source id prefix filter, e.g. 'builtin:', 'jira:ROX', 'k8s-docs'. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_threat_model STRIDE threat model of an application ~129
From manifests: entry points, trust boundaries, data stores and identities, and per element the STRIDE threats with status (open, mitigated, not assessed), the evidence, the kube-noob rules, generated admission policies and RHACS policies that mitigate each, and MITRE ATT&CK for Containers technique ids. Deterministic; Secrets are dropped unread.
| Name | Type | Req | Description |
|---|---|---|---|
| manifests | string | yes | The application's YAML. |
| platform | – | – | – |
| reports | array | – | Optional scanner reports of its images, to assess public-facing exploits (threat TM-E01). |
| version | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_ticket Look up a Red Hat Jira ticket ~127
One ticket from this install's local copy of Red Hat's public Jira (OCPBUGS, ROX, HOSTEDCP...): its status, what became of it, fix versions and whether `version` already has the fix, the workaround and remarks from the comments, and linked tickets. Local data only; nothing is fetched.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | A Red Hat Jira key, e.g. OCPBUGS-12345 or ROX-30000. |
| version | – | – | The cluster's OpenShift version: says whether the fix is already in it. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_ticket_changes What changed in Red Hat Jira ~129
Reconcile the local copy of Red Hat's public Jira: tickets fixed (with fix versions), closed as not a bug, won't fix or duplicate, reopened, given a fix version or opened since a date, with links, and the open tickets per project and verdict. Read-only and local; each sync records the changes.
| Name | Type | Req | Description |
|---|---|---|---|
| kinds | array | – | – |
| limit | integer | – | – |
| project | – | – | – |
| since | string | – | How far back: 2d, 36h, 90m or a date such as 2026-10-25. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_upgrade_risks Known risks for an OpenShift update ~219
Before updating OpenShift from one x.y.z version to another: the risks Red Hat declares for that update in the public update graph (conditional updates, as an OpenShift Update Service serves them), from a bundled snapshot, offline. Each risk has its name, message, link, the version that fixes it and a verdict: applies (declared for every cluster), check (one fact decides it, with the read-only command or must-gather file that shows it) or cannot evaluate offline (its PromQL, as written). Whether the update is in your channel is not checked.
| Name | Type | Req | Description |
|---|---|---|---|
| arch | – | – | The release architecture (multi for a multi-architecture payload). Without it, every architecture is checked and a risk declared for some of them only says which. |
| current | string | yes | The OpenShift version the cluster runs, x.y.z, e.g. 4.20.3. |
| target | string | yes | The version to update to, x.y.z, e.g. 4.21.4. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_validate_manifests Validate manifests ~113
Strict schema validation (Kubernetes 1.35 + OpenShift/OVN-K/StackRox/Gateway API CRDs), apiVersion vs kind, OpenShift-only APIs on vanilla Kubernetes, removed/deprecated APIs, selector wiring.
| Name | Type | Req | Description |
|---|---|---|---|
| manifests | string | yes | One or more YAML documents (Kubernetes/OpenShift objects). |
| platform | string | – | Target platform. |
| version | – | – | Platform version, e.g. '4.22' (OCP) or '1.35'. |
Structured output declared, but exposes no named fields.
No examples provided.
kubenoob_vuln_report Assess scanner output: VEX, exploitation, reachability ~394
Read Trivy or Grype JSON, CycloneDX or SPDX SBOMs, or an RHACS image scan into one finding per package, version and CVE (with the fix version); apply Red Hat VEX (a not-affected or already-fixed finding drops out, citing the statement); mark CISA KEV entries; and, with the manifests, rank by exposure, privileges and RBAC reach with each finding's attack path. SBOM packages are matched against Red Hat VEX. Local only.
| Name | Type | Req | Description |
|---|---|---|---|
| image | – | – | Treat every report as this image (registry/repo:tag or @sha256:...). |
| kev | – | – | Optional: the CISA KEV catalog JSON (known_exploited_vulnerabilities.json, CC0). |
| manifests | – | – | Optional: the YAML that runs the images; findings are then ranked by exposure and privileges and shown with their attack path. |
| products | array | – | Red Hat product CPE prefixes the images belong to (default: from the RHEL release in the report, e.g. cpe:/o:redhat:enterprise_linux:9). |
| reports | array | yes | Scanner output as JSON text: Trivy (trivy image -f json [--list-all-pkgs]), Grype (grype -o json), a CycloneDX or SPDX 2 JSON SBOM, or an RHACS image (GET /v1/images/{id}). Reports of the same image… |
| top | integer | – | How many ranked findings to return. |
| trust_report_vex | boolean | – | Honour a CycloneDX report's own analysis (not_affected, resolved, false_positive). Off by default: the findings it marks are kept, with a note. |
| vex | array | – | Optional Red Hat CSAF VEX documents (JSON) to apply on top of the local redhat-vex corpus. |
Structured output declared, but exposes no named fields.
No examples provided.
How do I install the kube-noob MCP server?
kube-noob runs locally as a PyPI package, launched with uvx kube-noob. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · kube-noob
claude mcp add aashishmahajan-kube-noob -- uvx kube-noob
What is the kube-noob MCP server?
kube-noob is an MCP server listed in the public MCP registry as io.github.aashishmahajan/kube-noob. Kubernetes, OpenShift, ROSA HCP, Helm and RHACS audit, debugging and cited docs. No AI inside. This page covers its PyPI package (kube-noob).
Is the kube-noob MCP server safe to use?
kube-noob scores 62 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the kube-noob MCP server expose?
kube-noob exposes 47 tools: kubenoob_run_protocol, kubenoob_validate_manifests, kubenoob_audit_manifests, kubenoob_red_team, kubenoob_fix_manifests, and 42 more. Their descriptions and schemas cost roughly 5,906 tokens of context every time the server is loaded.
Is the kube-noob MCP server still maintained?
kube-noob is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the kube-noob MCP server under?
kube-noob declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.