From 932ef7baea1036da636bbf04a6f283f1aeb9211a Mon Sep 17 00:00:00 2001 From: Tomer Figenblat Date: Fri, 26 Jun 2026 13:40:20 -0400 Subject: [PATCH 1/5] feat: add dashboard-aware presentation tools to cve-impact and fleet-inventory skills Signed-off-by: Tomer Figenblat --- rh-sre/skills/cve-impact/SKILL.md | 8 +++++++- .../cve-impact/references/flows/01-account-cves.md | 9 +++++---- rh-sre/skills/fleet-inventory/SKILL.md | 10 +++++++++- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/rh-sre/skills/cve-impact/SKILL.md b/rh-sre/skills/cve-impact/SKILL.md index 33f896c9..52712699 100644 --- a/rh-sre/skills/cve-impact/SKILL.md +++ b/rh-sre/skills/cve-impact/SKILL.md @@ -11,7 +11,7 @@ description: | model: inherit color: blue license: Apache-2.0 -allowed-tools: vulnerability__get_cves vulnerability__get_cve vulnerability__get_cve_systems vulnerability__get_system_cves inventory__find_host_by_name inventory__get_host_details +allowed-tools: vulnerability__get_cves vulnerability__get_cve vulnerability__get_cve_systems vulnerability__get_system_cves vulnerability__load_cve_dashboard inventory__find_host_by_name inventory__get_host_details --- # CVE Impact Analysis Skill @@ -35,6 +35,7 @@ When invoked by another skill (e.g. remediation), use the Skill tool—do NOT us - `get_cve` (from lightspeed-mcp) - Get specific CVE details - `get_cve_systems` (from lightspeed-mcp) - Find systems affected by CVEs - `get_system_cves` (from lightspeed-mcp) - List CVEs affecting a specific system (uses `system_uuid` only) +- `load_cve_dashboard` (from lightspeed-mcp) - Render CVE data in an interactive dashboard. Call with collected CVE data after analysis. Falls back to text if unavailable. **Required Environment Variables**: - `LIGHTSPEED_CLIENT_ID` - Red Hat Lightspeed service account client ID @@ -375,6 +376,11 @@ Save each MCP tool result to a file, then run the parser with one or more paths. - Does NOT support: impact, limit, severity filters - filter results client-side - Returns: List of CVEs affecting the system +- `load_cve_dashboard` (from lightspeed-mcp) - Render CVE data in an interactive dashboard + - Parameters: CVE data array (collected from get_cves or get_system_cves) + - Returns: Interactive dashboard with CVE browsing, filtering, and drill-down + - Falls back to text if unavailable or client does not support UI + ### Related Skills - `mcp-lightspeed-validator` - **PREREQUISITE** - Validates Lightspeed MCP server before operations - Use before: ALL cve-impact operations (Step 0 in workflow) diff --git a/rh-sre/skills/cve-impact/references/flows/01-account-cves.md b/rh-sre/skills/cve-impact/references/flows/01-account-cves.md index d981a9e9..c2a976c0 100644 --- a/rh-sre/skills/cve-impact/references/flows/01-account-cves.md +++ b/rh-sre/skills/cve-impact/references/flows/01-account-cves.md @@ -74,11 +74,12 @@ vulnerability__get_cves( ) ``` -## Step 4: After Listing +## Step 4: Present Results + +**Immediately after receiving the `get_cves` response**, call `vulnerability__load_cve_dashboard(cves=response["data"])`. Do this BEFORE parsing, sorting, or printing anything. Pass the raw `data` array exactly as returned by `get_cves` — do NOT extract, filter, or restructure the CVE objects. + +## Step 5: Follow-up -- **Parse response** (if needed): Use [references/01-cve-response-parser.py](../references/01-cve-response-parser.py). Do NOT use jq or inline Python. See [02-cve-parsing-guide.md](../references/02-cve-parsing-guide.md). -- Sort by CVSS score (highest first) or by affected system count -- Provide summary table: CVE ID, severity, affected systems count, remediation availability - Offer to analyze a specific CVE (see [SKILL.md](../SKILL.md) — Step 2: CVE Information Retrieval) - Offer to create remediation plan (invoke `/remediation` skill) diff --git a/rh-sre/skills/fleet-inventory/SKILL.md b/rh-sre/skills/fleet-inventory/SKILL.md index e58334c3..d02e4956 100644 --- a/rh-sre/skills/fleet-inventory/SKILL.md +++ b/rh-sre/skills/fleet-inventory/SKILL.md @@ -19,7 +19,7 @@ description: | model: inherit color: blue license: Apache-2.0 -allowed-tools: inventory__list_hosts inventory__find_host_by_name inventory__get_host_details inventory__get_host_system_profile vulnerability__get_cve_systems +allowed-tools: inventory__list_hosts inventory__find_host_by_name inventory__get_host_details inventory__get_host_system_profile inventory__load_inventory_dashboard vulnerability__get_cve_systems --- # Fleet Inventory Skill @@ -36,6 +36,7 @@ This skill queries Red Hat Lightspeed to retrieve and display information about - `inventory__get_host_details` (from lightspeed-mcp) - Retrieve inventory metadata for known host UUIDs - `inventory__get_host_system_profile` (from lightspeed-mcp) - Retrieve OS version and system profile when needed - `vulnerability__get_cve_systems` (from lightspeed-mcp) - Find CVE-affected systems +- `inventory__load_inventory_dashboard` (from lightspeed-mcp) - Render host data in an interactive dashboard. Call with collected host data after listing. Falls back to text if unavailable. **Required Environment Variables**: - `LIGHTSPEED_CLIENT_ID` - Red Hat Lightspeed service account client ID @@ -112,6 +113,8 @@ Proceeding with fleet inventory query... **Parameters**: `per_page=10` on first call, then `page` for pagination. Optional filters: `display_name`, `tags`, `staleness`, `hostname_or_id`. See [references/01-parameter-reference.md](references/01-parameter-reference.md). +**Immediately after receiving the `list_hosts` response**, call `inventory__load_inventory_dashboard(hosts=response["results"])`. Do this BEFORE printing anything. Pass the raw `results` array exactly as returned by `list_hosts` — do NOT extract, filter, or restructure the host objects. + **Optional enrichment**: After host UUIDs are known: - `inventory__get_host_details(host_ids="uuid-1,uuid-2")` — inventory metadata (similar fields to `list_hosts`) - `inventory__get_host_system_profile(host_ids="uuid-1")` — OS version and system profile when RHEL version is required (one or two UUIDs at a time; large response) @@ -224,6 +227,11 @@ Examples: - Parameters: `cve` (string, format: CVE-YYYY-NNNNN), `limit`, `offset` - Returns: Paginated list of affected systems with vulnerability and remediation status +- `inventory__load_inventory_dashboard` (from lightspeed-mcp) - Render host data in an interactive dashboard + - Parameters: `hosts` (list of host objects from list_hosts response) + - Returns: Interactive dashboard with host browsing, staleness filters, and system profiles + - Falls back to text if unavailable or client does not support UI + ### Related Skills - `mcp-lightspeed-validator` - **PREREQUISITE** - Validates Lightspeed MCP server configuration and connectivity - Use before: ALL fleet-inventory operations (Step 0 in workflow) From 8c3519a3109337b34ee3e746f2dc8525157d2bb6 Mon Sep 17 00:00:00 2001 From: Tomer Figenblat Date: Fri, 17 Jul 2026 16:56:27 -0400 Subject: [PATCH 2/5] feat: update skills for client-side dashboard data fetching and add dashboard support to flows 02 and 03 Signed-off-by: Tomer Figenblat --- rh-sre/skills/cve-impact/SKILL.md | 6 ++-- .../references/flows/01-account-cves.md | 36 ++++++++++++++++--- .../references/flows/02-system-all-cves.md | 25 +++++++++---- .../flows/03-system-remediatable-cves.md | 25 +++++++++---- rh-sre/skills/fleet-inventory/SKILL.md | 17 ++++----- 5 files changed, 82 insertions(+), 27 deletions(-) diff --git a/rh-sre/skills/cve-impact/SKILL.md b/rh-sre/skills/cve-impact/SKILL.md index 52712699..d6f249af 100644 --- a/rh-sre/skills/cve-impact/SKILL.md +++ b/rh-sre/skills/cve-impact/SKILL.md @@ -35,7 +35,7 @@ When invoked by another skill (e.g. remediation), use the Skill tool—do NOT us - `get_cve` (from lightspeed-mcp) - Get specific CVE details - `get_cve_systems` (from lightspeed-mcp) - Find systems affected by CVEs - `get_system_cves` (from lightspeed-mcp) - List CVEs affecting a specific system (uses `system_uuid` only) -- `load_cve_dashboard` (from lightspeed-mcp) - Render CVE data in an interactive dashboard. Call with collected CVE data after analysis. Falls back to text if unavailable. +- `load_cve_dashboard` (from lightspeed-mcp) - Open the interactive CVE dashboard with query parameters. If the client does not support UI, the tool instructs the model to present the data as text. **Required Environment Variables**: - `LIGHTSPEED_CLIENT_ID` - Red Hat Lightspeed service account client ID @@ -376,8 +376,8 @@ Save each MCP tool result to a file, then run the parser with one or more paths. - Does NOT support: impact, limit, severity filters - filter results client-side - Returns: List of CVEs affecting the system -- `load_cve_dashboard` (from lightspeed-mcp) - Render CVE data in an interactive dashboard - - Parameters: CVE data array (collected from get_cves or get_system_cves) +- `load_cve_dashboard` (from lightspeed-mcp) - Open the interactive CVE dashboard + - Parameters: Query parameters matching the data tool call (system_uuid, limit, sort, impact, advisory_available, etc.) - Returns: Interactive dashboard with CVE browsing, filtering, and drill-down - Falls back to text if unavailable or client does not support UI diff --git a/rh-sre/skills/cve-impact/references/flows/01-account-cves.md b/rh-sre/skills/cve-impact/references/flows/01-account-cves.md index c2a976c0..874f8701 100644 --- a/rh-sre/skills/cve-impact/references/flows/01-account-cves.md +++ b/rh-sre/skills/cve-impact/references/flows/01-account-cves.md @@ -2,7 +2,7 @@ **Scope**: devices=all (account-wide) | severities=all, most critical, or selected | remediation=available or does not matter -**Tool**: `vulnerability__get_cves` (single request; no offset pagination in API) +**Tools**: `vulnerability__get_cves` fetcing the data for analysis and `vulnerability__load_cve_dashboard` displaying an interactive dashboard ## When to Use @@ -36,9 +36,9 @@ Proceed with limit=20? (yes/no) Or specify a different limit. - **User specifies N** → use `limit=N` - **no** → Stop execution -## Step 3: MCP Tool Invocation +## Step 3: MCP Tools Invocation -**Tool**: `vulnerability__get_cves` (from lightspeed-mcp) +**Tools**: `vulnerability__load_cve_dashboard` and `vulnerability__get_cves` (from lightspeed-mcp) **Parameters**: @@ -54,6 +54,30 @@ Proceed with limit=20? (yes/no) Or specify a different limit. - `sort`: `"-cvss_score"` (descending by CVSS) - `limit`: From HITL (default 20) + +**Before** continuing further, invoke the dashbaord tool to initaite the dashbaord, and examin the instruction returning from the tool. + +**Example** (most critical, remediatable): +``` +vulnerability__load_cve_dashboard( + impact="7,6", + sort="-cvss_score", + limit=20, + advisory_available="true" +) +``` + +**Example** (all severities, remediation doesn't matter): +``` +vulnerability__load_cve_dashbaord( + impact="7,6,5,4", + sort="-cvss_score", + limit=20, + advisory_available="true,false" +) +``` + +**After** the dashbaord is loaded, get the raw data for further analysis. **Example** (most critical, remediatable): ``` vulnerability__get_cves( @@ -76,7 +100,11 @@ vulnerability__get_cves( ## Step 4: Present Results -**Immediately after receiving the `get_cves` response**, call `vulnerability__load_cve_dashboard(cves=response["data"])`. Do this BEFORE parsing, sorting, or printing anything. Pass the raw `data` array exactly as returned by `get_cves` — do NOT extract, filter, or restructure the CVE objects. +**If the dashbaord was succesful**, DO NOT PRINT the CVE table, as it's covered in the dashboard. SKIP to the follow-ups. +**ONLY If the dashbaord was NOT succesful**: +- **Parse response** (if needed): Use [references/01-cve-response-parser.py](../references/01-cve-response-parser.py). Do NOT use jq or inline Python. See [02-cve-parsing-guide.md](../references/02-cve-parsing-guide.md). +- Sort by CVSS score (highest first) or by affected system count +- Provide summary table: CVE ID, severity, affected systems count, remediation availability ## Step 5: Follow-up diff --git a/rh-sre/skills/cve-impact/references/flows/02-system-all-cves.md b/rh-sre/skills/cve-impact/references/flows/02-system-all-cves.md index 6a819454..c1743572 100644 --- a/rh-sre/skills/cve-impact/references/flows/02-system-all-cves.md +++ b/rh-sre/skills/cve-impact/references/flows/02-system-all-cves.md @@ -2,7 +2,7 @@ **Scope**: devices=selected | severities=all, most critical, or selected | remediation=does not matter -**Tool**: `vulnerability__get_system_cves` (paginated via `limit` + `offset`) +**Tools**: `vulnerability__get_system_cves` fetcing the data for analysis and `vulnerability__load_cve_dashboard` displaying an interactive dashboard **BLOCKING**: HITL (Step -1 in SKILL.md) MUST be your first action. Reply to the user with the pagination prompt before ANY tool call. Do NOT proceed to this flow until the user has responded to the HITL prompt. @@ -15,10 +15,10 @@ ## Step 1: HITL — Pagination Strategy (Done in SKILL.md Step -1) -**If you have not yet replied to the user with the pagination prompt**: Stop. Go to [SKILL.md](../SKILL.md) Step -1. Your first reply to the user must be the prompt below. Do NOT call `inventory__find_host_by_name` or `vulnerability__get_system_cves` until the user responds. +**If you have not yet replied to the user with the pagination prompt**: Stop. Go to [SKILL.md](../SKILL.md) Step -1. Your first reply to the user must be the prompt below. Do NOT call `inventory__find_host_by_name`, `vulnerability__load_cve_dashboard`, or `vulnerability__get_system_cves` until the user responds. ``` -This system may have many CVEs. I will paginate through vulnerability__get_system_cves (limit=100 per page). +This system may have many CVEs. I will paginate through them (limit=100 per page). Options: - **First page only**: Fetch 100 CVEs, then stop (quick overview) @@ -48,13 +48,19 @@ How would you like to proceed? (first page / all pages / N pages) ## Step 4: MCP Tool Invocation -**Tool**: `vulnerability__get_system_cves` (from lightspeed-mcp) +**Tools**: `vulnerability__load_cve_dashboard` and `vulnerability__get_system_cves` (from lightspeed-mcp) **Parameters**: - `system_uuid`: Required (from Step 2) - `limit`: `100` (fewer pages) - `offset`: `0`, `100`, `200`, ... per pagination strategy +**Before** continuing further, invoke the dashbaord tool to initaite the dashbaord, and examin the instruction returning from the tool: +``` +vulnerability__load_cve_dashboard(system_uuid="", limit=100) +``` + +**After** the dashbaord is loaded, get the raw data for further analysis. **First call** (to get total estimate if available): ``` vulnerability__get_system_cves(system_uuid="", limit=100, offset=0) @@ -82,8 +88,15 @@ while (strategy allows): | most critical | Keep items where severity in (Critical, High) | | selected | Keep items matching user-specified severity | -## Step 6: After Retrieval +## Step 6: Present Results +**If the dashbaord was succesful**, DO NOT PRINT the CVE table, as it's covered in the dashboard. SKIP to the follow-ups. +**ONLY If the dashbaord was NOT succesful**: - **Parse response**: Use [references/01-cve-response-parser.py](../references/01-cve-response-parser.py). Do NOT use jq or inline Python. See [02-cve-parsing-guide.md](../references/02-cve-parsing-guide.md). - Sort by CVSS score (highest first) -- Provide summary table; offer to analyze specific CVEs or create remediation plan (`/remediation` skill) +- Provide summary table + +## Step 7: Follow-up + +- Offer to analyze a specific CVE (see [SKILL.md](../SKILL.md) — Step 2: CVE Information Retrieval) +- Offer to create remediation plan (invoke `/remediation` skill) diff --git a/rh-sre/skills/cve-impact/references/flows/03-system-remediatable-cves.md b/rh-sre/skills/cve-impact/references/flows/03-system-remediatable-cves.md index a1351e79..52accc8f 100644 --- a/rh-sre/skills/cve-impact/references/flows/03-system-remediatable-cves.md +++ b/rh-sre/skills/cve-impact/references/flows/03-system-remediatable-cves.md @@ -2,7 +2,7 @@ **Scope**: devices=selected | severities=all, most critical, or selected | remediation=available -**Tool**: `vulnerability__get_system_cves` (paginated; filter client-side for `advisory_available === true`) +**Tool**: `vulnerability__get_system_cves` fetcing the data for analysis and `vulnerability__load_cve_dashboard` displaying an interactive dashboard **BLOCKING**: HITL (Step -1 in SKILL.md) MUST be your first action. Reply to the user with the pagination prompt before ANY tool call. Do NOT proceed to this flow until the user has responded to the HITL prompt. @@ -12,11 +12,11 @@ - "CVEs with available remediation on device Y" - "Which CVEs can I fix on hostname Z?" -**CRITICAL**: `get_system_cves` does NOT support `advisory_available` as a request parameter. We must paginate through ALL CVEs and filter client-side for `attributes.advisory_available === true`. Do NOT use `get_cves` + `get_cve_systems` per CVE—does not scale. +**CRITICAL**: `get_system_cves` does NOT support `advisory_available` as a request parameter. We must paginate through ALL CVEs and filter client-side for `attributes.advisory_available === true`. `load_cve_dashbaord` takes a string `advisory_available`. Do NOT use `get_cves` + `get_cve_systems` per CVE—does not scale. ## Step 1: HITL — Pagination Strategy (Done in SKILL.md Step -1) -**If you have not yet replied to the user with the pagination prompt**: Stop. Go to [SKILL.md](../SKILL.md) Step -1. Your first reply to the user must be the prompt below. Do NOT call `inventory__find_host_by_name` or `vulnerability__get_system_cves` until the user responds. +**If you have not yet replied to the user with the pagination prompt**: Stop. Go to [SKILL.md](../SKILL.md) Step -1. Your first reply to the user must be the prompt below. Do NOT call `inventory__find_host_by_name`, `vulnerability__load_cve_dashboard`, or `vulnerability__get_system_cves` until the user responds. ``` To fetch remediatable CVEs on this system, I will: @@ -54,13 +54,20 @@ How would you like to proceed? (first page / all pages / N pages) ## Step 4: MCP Tool Invocation -**Tool**: `vulnerability__get_system_cves` (from lightspeed-mcp) +**Tools**: `vulnerability__load_cve_dashboard` and `vulnerability__get_system_cves` (from lightspeed-mcp) **Parameters**: - `system_uuid`: Required (from Step 2) - `limit`: `100` - `offset`: `0`, `100`, `200`, ... per pagination strategy +- `advisory_available`: `"true"` - Only exist in `load_cve_dashboard` +**Before** continuing further, invoke the dashbaord tool to initaite the dashbaord, and examin the instruction returning from the tool: +``` +vulnerability__load_cve_dashboard(system_uuid="", limit=100, advisory_available="true") +``` + +**After** the dashbaord is loaded, get the raw data for further analysis. **First call** (to get total estimate if available): ``` vulnerability__get_system_cves(system_uuid="", limit=100, offset=0) @@ -89,8 +96,14 @@ After filtering for remediatable, optionally filter by severity: | most critical | Keep items where severity in (Critical, High) | | selected | Keep items matching user-specified severity | -## Step 6: After Retrieval +## Step 6: Present Results +**If the dashbaord was succesful**, DO NOT PRINT the CVE table, as it's covered in the dashboard. SKIP to the follow-ups. +**ONLY If the dashbaord was NOT succesful**: - **Parse response**: Use [references/01-cve-response-parser.py](../references/01-cve-response-parser.py) with `FILTER_REMEDIATABLE=1`. Do NOT use jq or inline Python. See [02-cve-parsing-guide.md](../references/02-cve-parsing-guide.md). - Sort by CVSS score (highest first) -- Provide summary table; offer to analyze specific CVEs or create remediation plan (`/remediation` skill) + +## Step 7: Follow-up + +- Offer to analyze a specific CVE (see [SKILL.md](../SKILL.md) — Step 2: CVE Information Retrieval) +- Offer to create remediation plan (invoke `/remediation` skill) diff --git a/rh-sre/skills/fleet-inventory/SKILL.md b/rh-sre/skills/fleet-inventory/SKILL.md index d02e4956..2dac7552 100644 --- a/rh-sre/skills/fleet-inventory/SKILL.md +++ b/rh-sre/skills/fleet-inventory/SKILL.md @@ -36,7 +36,7 @@ This skill queries Red Hat Lightspeed to retrieve and display information about - `inventory__get_host_details` (from lightspeed-mcp) - Retrieve inventory metadata for known host UUIDs - `inventory__get_host_system_profile` (from lightspeed-mcp) - Retrieve OS version and system profile when needed - `vulnerability__get_cve_systems` (from lightspeed-mcp) - Find CVE-affected systems -- `inventory__load_inventory_dashboard` (from lightspeed-mcp) - Render host data in an interactive dashboard. Call with collected host data after listing. Falls back to text if unavailable. +- `inventory__load_inventory_dashboard` (from lightspeed-mcp) - Open the interactive inventory dashboard with query parameters. If the client does not support UI, the tool instructs the model to present the data as text. **Required Environment Variables**: - `LIGHTSPEED_CLIENT_ID` - Red Hat Lightspeed service account client ID @@ -107,13 +107,13 @@ Proceeding with fleet inventory query... 1. **Action**: Read [insights-api.md](docs/insights/insights-api.md) using the Read tool to understand `inventory__list_hosts` response format and pagination handling 2. **Output to user**: "I consulted [insights-api.md](docs/insights/insights-api.md) to understand the `inventory__list_hosts` response format and pagination handling." -**MCP Tool**: `inventory__list_hosts` (from lightspeed-mcp) +**MCP Tools**: `inventory__load_inventory_dashboard` and `inventory__list_hosts` (from lightspeed-mcp) **Purpose**: Query Lightspeed for registered hosts. Use for fleet discovery, tag filters, and environment scoping. **Parameters**: `per_page=10` on first call, then `page` for pagination. Optional filters: `display_name`, `tags`, `staleness`, `hostname_or_id`. See [references/01-parameter-reference.md](references/01-parameter-reference.md). -**Immediately after receiving the `list_hosts` response**, call `inventory__load_inventory_dashboard(hosts=response["results"])`. Do this BEFORE printing anything. Pass the raw `results` array exactly as returned by `list_hosts` — do NOT extract, filter, or restructure the host objects. +**Before** continuing further, call `inventory__load_inventory_dashboard(...)` with the same query parameters used in the `list_hosts` call, and examin the instruction returning from the tool. **Optional enrichment**: After host UUIDs are known: - `inventory__get_host_details(host_ids="uuid-1,uuid-2")` — inventory metadata (similar fields to `list_hosts`) @@ -176,11 +176,12 @@ Status: "Not Affected" → Action: Exclude from affected count ``` -### Step 4: Generate Fleet Summary +### Step 4: Present Results -Create organized output. **Read [references/03-output-templates.md](references/03-output-templates.md)** for report format (Overview, RHEL/Environment breakdown, System Details, Stale Systems). +**If the dashbaord was succesful**, DO NOT PRINT the inventory table, as it's covered in the dashboard. SKIP to the follow-ups. +**ONLY If the dashbaord was NOT succesful**: Create organized output. **Read [references/03-output-templates.md](references/03-output-templates.md)** for report format (Overview, RHEL/Environment breakdown, System Details, Stale Systems). -### Step 5: Offer Remediation Transition +### Step 5: Follow-up When appropriate, suggest transitioning to the `/remediation` skill: @@ -227,8 +228,8 @@ Examples: - Parameters: `cve` (string, format: CVE-YYYY-NNNNN), `limit`, `offset` - Returns: Paginated list of affected systems with vulnerability and remediation status -- `inventory__load_inventory_dashboard` (from lightspeed-mcp) - Render host data in an interactive dashboard - - Parameters: `hosts` (list of host objects from list_hosts response) +- `inventory__load_inventory_dashboard` (from lightspeed-mcp) - Open the interactive inventory dashboard + - Parameters: Query parameters matching the `list_hosts` call (hostname_or_id, display_name, per_page, etc.) - Returns: Interactive dashboard with host browsing, staleness filters, and system profiles - Falls back to text if unavailable or client does not support UI From 04bbce557dcaa1bbc78befccfc411ec2118f142f Mon Sep 17 00:00:00 2001 From: Tomer Figenblat Date: Mon, 20 Jul 2026 13:34:17 -0400 Subject: [PATCH 3/5] fix(rh-sre): correct typos in flow files and fleet-inventory skill MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix spelling errors in dashboard-related flow files and fleet-inventory SKILL.md: dashbaord→dashboard, fetcing→fetching, initaite→initiate, examin→examine, succesful→successful, and load_cve_dashbaord tool name. Signed-off-by: Tomer Figenblat --- .../cve-impact/references/flows/01-account-cves.md | 12 ++++++------ .../references/flows/02-system-all-cves.md | 10 +++++----- .../references/flows/03-system-remediatable-cves.md | 12 ++++++------ rh-sre/skills/fleet-inventory/SKILL.md | 4 ++-- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/rh-sre/skills/cve-impact/references/flows/01-account-cves.md b/rh-sre/skills/cve-impact/references/flows/01-account-cves.md index 874f8701..658b3e2b 100644 --- a/rh-sre/skills/cve-impact/references/flows/01-account-cves.md +++ b/rh-sre/skills/cve-impact/references/flows/01-account-cves.md @@ -2,7 +2,7 @@ **Scope**: devices=all (account-wide) | severities=all, most critical, or selected | remediation=available or does not matter -**Tools**: `vulnerability__get_cves` fetcing the data for analysis and `vulnerability__load_cve_dashboard` displaying an interactive dashboard +**Tools**: `vulnerability__get_cves` fetching the data for analysis and `vulnerability__load_cve_dashboard` displaying an interactive dashboard ## When to Use @@ -55,7 +55,7 @@ Proceed with limit=20? (yes/no) Or specify a different limit. - `limit`: From HITL (default 20) -**Before** continuing further, invoke the dashbaord tool to initaite the dashbaord, and examin the instruction returning from the tool. +**Before** continuing further, invoke the dashboard tool to initiate the dashboard, and examine the instruction returning from the tool. **Example** (most critical, remediatable): ``` @@ -69,7 +69,7 @@ vulnerability__load_cve_dashboard( **Example** (all severities, remediation doesn't matter): ``` -vulnerability__load_cve_dashbaord( +vulnerability__load_cve_dashboard( impact="7,6,5,4", sort="-cvss_score", limit=20, @@ -77,7 +77,7 @@ vulnerability__load_cve_dashbaord( ) ``` -**After** the dashbaord is loaded, get the raw data for further analysis. +**After** the dashboard is loaded, get the raw data for further analysis. **Example** (most critical, remediatable): ``` vulnerability__get_cves( @@ -100,8 +100,8 @@ vulnerability__get_cves( ## Step 4: Present Results -**If the dashbaord was succesful**, DO NOT PRINT the CVE table, as it's covered in the dashboard. SKIP to the follow-ups. -**ONLY If the dashbaord was NOT succesful**: +**If the dashboard was successful**, DO NOT PRINT the CVE table, as it's covered in the dashboard. SKIP to the follow-ups. +**ONLY If the dashboard was NOT successful**: - **Parse response** (if needed): Use [references/01-cve-response-parser.py](../references/01-cve-response-parser.py). Do NOT use jq or inline Python. See [02-cve-parsing-guide.md](../references/02-cve-parsing-guide.md). - Sort by CVSS score (highest first) or by affected system count - Provide summary table: CVE ID, severity, affected systems count, remediation availability diff --git a/rh-sre/skills/cve-impact/references/flows/02-system-all-cves.md b/rh-sre/skills/cve-impact/references/flows/02-system-all-cves.md index c1743572..f5708e46 100644 --- a/rh-sre/skills/cve-impact/references/flows/02-system-all-cves.md +++ b/rh-sre/skills/cve-impact/references/flows/02-system-all-cves.md @@ -2,7 +2,7 @@ **Scope**: devices=selected | severities=all, most critical, or selected | remediation=does not matter -**Tools**: `vulnerability__get_system_cves` fetcing the data for analysis and `vulnerability__load_cve_dashboard` displaying an interactive dashboard +**Tools**: `vulnerability__get_system_cves` fetching the data for analysis and `vulnerability__load_cve_dashboard` displaying an interactive dashboard **BLOCKING**: HITL (Step -1 in SKILL.md) MUST be your first action. Reply to the user with the pagination prompt before ANY tool call. Do NOT proceed to this flow until the user has responded to the HITL prompt. @@ -55,12 +55,12 @@ How would you like to proceed? (first page / all pages / N pages) - `limit`: `100` (fewer pages) - `offset`: `0`, `100`, `200`, ... per pagination strategy -**Before** continuing further, invoke the dashbaord tool to initaite the dashbaord, and examin the instruction returning from the tool: +**Before** continuing further, invoke the dashboard tool to initiate the dashboard, and examine the instruction returning from the tool: ``` vulnerability__load_cve_dashboard(system_uuid="", limit=100) ``` -**After** the dashbaord is loaded, get the raw data for further analysis. +**After** the dashboard is loaded, get the raw data for further analysis. **First call** (to get total estimate if available): ``` vulnerability__get_system_cves(system_uuid="", limit=100, offset=0) @@ -90,8 +90,8 @@ while (strategy allows): ## Step 6: Present Results -**If the dashbaord was succesful**, DO NOT PRINT the CVE table, as it's covered in the dashboard. SKIP to the follow-ups. -**ONLY If the dashbaord was NOT succesful**: +**If the dashboard was successful**, DO NOT PRINT the CVE table, as it's covered in the dashboard. SKIP to the follow-ups. +**ONLY If the dashboard was NOT successful**: - **Parse response**: Use [references/01-cve-response-parser.py](../references/01-cve-response-parser.py). Do NOT use jq or inline Python. See [02-cve-parsing-guide.md](../references/02-cve-parsing-guide.md). - Sort by CVSS score (highest first) - Provide summary table diff --git a/rh-sre/skills/cve-impact/references/flows/03-system-remediatable-cves.md b/rh-sre/skills/cve-impact/references/flows/03-system-remediatable-cves.md index 52accc8f..ce12651f 100644 --- a/rh-sre/skills/cve-impact/references/flows/03-system-remediatable-cves.md +++ b/rh-sre/skills/cve-impact/references/flows/03-system-remediatable-cves.md @@ -2,7 +2,7 @@ **Scope**: devices=selected | severities=all, most critical, or selected | remediation=available -**Tool**: `vulnerability__get_system_cves` fetcing the data for analysis and `vulnerability__load_cve_dashboard` displaying an interactive dashboard +**Tool**: `vulnerability__get_system_cves` fetching the data for analysis and `vulnerability__load_cve_dashboard` displaying an interactive dashboard **BLOCKING**: HITL (Step -1 in SKILL.md) MUST be your first action. Reply to the user with the pagination prompt before ANY tool call. Do NOT proceed to this flow until the user has responded to the HITL prompt. @@ -12,7 +12,7 @@ - "CVEs with available remediation on device Y" - "Which CVEs can I fix on hostname Z?" -**CRITICAL**: `get_system_cves` does NOT support `advisory_available` as a request parameter. We must paginate through ALL CVEs and filter client-side for `attributes.advisory_available === true`. `load_cve_dashbaord` takes a string `advisory_available`. Do NOT use `get_cves` + `get_cve_systems` per CVE—does not scale. +**CRITICAL**: `get_system_cves` does NOT support `advisory_available` as a request parameter. We must paginate through ALL CVEs and filter client-side for `attributes.advisory_available === true`. `load_cve_dashboard` takes a string `advisory_available`. Do NOT use `get_cves` + `get_cve_systems` per CVE—does not scale. ## Step 1: HITL — Pagination Strategy (Done in SKILL.md Step -1) @@ -62,12 +62,12 @@ How would you like to proceed? (first page / all pages / N pages) - `offset`: `0`, `100`, `200`, ... per pagination strategy - `advisory_available`: `"true"` - Only exist in `load_cve_dashboard` -**Before** continuing further, invoke the dashbaord tool to initaite the dashbaord, and examin the instruction returning from the tool: +**Before** continuing further, invoke the dashboard tool to initiate the dashboard, and examine the instruction returning from the tool: ``` vulnerability__load_cve_dashboard(system_uuid="", limit=100, advisory_available="true") ``` -**After** the dashbaord is loaded, get the raw data for further analysis. +**After** the dashboard is loaded, get the raw data for further analysis. **First call** (to get total estimate if available): ``` vulnerability__get_system_cves(system_uuid="", limit=100, offset=0) @@ -98,8 +98,8 @@ After filtering for remediatable, optionally filter by severity: ## Step 6: Present Results -**If the dashbaord was succesful**, DO NOT PRINT the CVE table, as it's covered in the dashboard. SKIP to the follow-ups. -**ONLY If the dashbaord was NOT succesful**: +**If the dashboard was successful**, DO NOT PRINT the CVE table, as it's covered in the dashboard. SKIP to the follow-ups. +**ONLY If the dashboard was NOT successful**: - **Parse response**: Use [references/01-cve-response-parser.py](../references/01-cve-response-parser.py) with `FILTER_REMEDIATABLE=1`. Do NOT use jq or inline Python. See [02-cve-parsing-guide.md](../references/02-cve-parsing-guide.md). - Sort by CVSS score (highest first) diff --git a/rh-sre/skills/fleet-inventory/SKILL.md b/rh-sre/skills/fleet-inventory/SKILL.md index 2dac7552..7e137921 100644 --- a/rh-sre/skills/fleet-inventory/SKILL.md +++ b/rh-sre/skills/fleet-inventory/SKILL.md @@ -178,8 +178,8 @@ Status: "Not Affected" ### Step 4: Present Results -**If the dashbaord was succesful**, DO NOT PRINT the inventory table, as it's covered in the dashboard. SKIP to the follow-ups. -**ONLY If the dashbaord was NOT succesful**: Create organized output. **Read [references/03-output-templates.md](references/03-output-templates.md)** for report format (Overview, RHEL/Environment breakdown, System Details, Stale Systems). +**If the dashboard was successful**, DO NOT PRINT the inventory table, as it's covered in the dashboard. SKIP to the follow-ups. +**ONLY If the dashboard was NOT successful**: Create organized output. **Read [references/03-output-templates.md](references/03-output-templates.md)** for report format (Overview, RHEL/Environment breakdown, System Details, Stale Systems). ### Step 5: Follow-up From 7991dcb09a8b89a3b032d52e61d0528afee21f24 Mon Sep 17 00:00:00 2001 From: Tomer Figenblat Date: Tue, 21 Jul 2026 09:47:57 -0400 Subject: [PATCH 4/5] fix(rh-sre): fix additional typos found in PR review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix examin→examine in fleet-inventory SKILL.md, Only exist→Only exists and Tool→Tools in flow 03. Signed-off-by: Tomer Figenblat --- .../references/flows/03-system-remediatable-cves.md | 4 ++-- rh-sre/skills/fleet-inventory/SKILL.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rh-sre/skills/cve-impact/references/flows/03-system-remediatable-cves.md b/rh-sre/skills/cve-impact/references/flows/03-system-remediatable-cves.md index ce12651f..1ca7d4f8 100644 --- a/rh-sre/skills/cve-impact/references/flows/03-system-remediatable-cves.md +++ b/rh-sre/skills/cve-impact/references/flows/03-system-remediatable-cves.md @@ -2,7 +2,7 @@ **Scope**: devices=selected | severities=all, most critical, or selected | remediation=available -**Tool**: `vulnerability__get_system_cves` fetching the data for analysis and `vulnerability__load_cve_dashboard` displaying an interactive dashboard +**Tools**: `vulnerability__get_system_cves` fetching the data for analysis and `vulnerability__load_cve_dashboard` displaying an interactive dashboard **BLOCKING**: HITL (Step -1 in SKILL.md) MUST be your first action. Reply to the user with the pagination prompt before ANY tool call. Do NOT proceed to this flow until the user has responded to the HITL prompt. @@ -60,7 +60,7 @@ How would you like to proceed? (first page / all pages / N pages) - `system_uuid`: Required (from Step 2) - `limit`: `100` - `offset`: `0`, `100`, `200`, ... per pagination strategy -- `advisory_available`: `"true"` - Only exist in `load_cve_dashboard` +- `advisory_available`: `"true"` - Only exists in `load_cve_dashboard` **Before** continuing further, invoke the dashboard tool to initiate the dashboard, and examine the instruction returning from the tool: ``` diff --git a/rh-sre/skills/fleet-inventory/SKILL.md b/rh-sre/skills/fleet-inventory/SKILL.md index 7e137921..e8257873 100644 --- a/rh-sre/skills/fleet-inventory/SKILL.md +++ b/rh-sre/skills/fleet-inventory/SKILL.md @@ -113,7 +113,7 @@ Proceeding with fleet inventory query... **Parameters**: `per_page=10` on first call, then `page` for pagination. Optional filters: `display_name`, `tags`, `staleness`, `hostname_or_id`. See [references/01-parameter-reference.md](references/01-parameter-reference.md). -**Before** continuing further, call `inventory__load_inventory_dashboard(...)` with the same query parameters used in the `list_hosts` call, and examin the instruction returning from the tool. +**Before** continuing further, call `inventory__load_inventory_dashboard(...)` with the same query parameters used in the `list_hosts` call, and examine the instruction returning from the tool. **Optional enrichment**: After host UUIDs are known: - `inventory__get_host_details(host_ids="uuid-1,uuid-2")` — inventory metadata (similar fields to `list_hosts`) From 4557b6d851ba62457ac03bd1ff4057efc160d88e Mon Sep 17 00:00:00 2001 From: Tomer Figenblat Date: Wed, 22 Jul 2026 11:02:25 -0400 Subject: [PATCH 5/5] chore(rh-sre): update lightspeed-mcp image digest to include dashboard tools Update the pinned image digest to the latest downstream build which includes load_cve_dashboard and load_inventory_dashboard tools from insights-mcp PR #389. Signed-off-by: Tomer Figenblat --- rh-sre/mcps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rh-sre/mcps.json b/rh-sre/mcps.json index f06aad45..628d4090 100644 --- a/rh-sre/mcps.json +++ b/rh-sre/mcps.json @@ -10,7 +10,7 @@ "LIGHTSPEED_CLIENT_ID", "--env", "LIGHTSPEED_CLIENT_SECRET", - "quay.io/redhat-services-prod/insights-management-tenant/insights-mcp/red-hat-lightspeed-mcp@sha256:98ee33fa7cb690d02d33f57900ab95ad831b8e7985710e0ccb87f53ce1b09865" + "quay.io/redhat-services-prod/insights-management-tenant/insights-mcp/red-hat-lightspeed-mcp@sha256:90473f1e97a1e637465c01c2f2ab8858525c187a2d0be20e62e4f6d30c27773c" ], "env": { "LIGHTSPEED_CLIENT_ID": "${LIGHTSPEED_CLIENT_ID}",