Update to SonarQube
Snapshot Oct 28, 2026 · 12:32 UTC · version 2.7.0
Collection source: downloaded plugin package. These snapshots do not have a confirmed matching collection source. Differences in file lists alone do not establish changes to the package.
Instructions updated for sonar-dependency-risks
Skill instructions — Now says: --- name: sonar-dependency-risks description: Search for software composition analysis (SCA) dependency risks in a SonarQube project (project key optional...
Observed in instructions or declared skills. Runtime behavior has not been tested.
Up to 3 plugins free · no card required.
All fields and original values.
Skill instructions
Sep 30, 2026 · 23:13 UTC
--- name: sonar-dependency-risks description: Search for software composition analysis (SCA) dependency risks in a SonarQube project (project key optional when MCP integration already defines the default project) argument-hint: "[project...
Oct 28, 2026 · 12:32 UTC
--- name: sonar-dependency-risks description: Search for software composition analysis (SCA) dependency risks in a SonarQube project (project key optional when MCP integration already defines the default project) argument-hint: "[proj...
Compare saved observations
Download comparison JSONSKILL.md text changes
− removed · + added
--- before +++ after @@ -1,135 +1,133 @@ ---- -name: sonar-dependency-risks -description: Search for software composition analysis (SCA) dependency risks in a SonarQube project (project key optional when MCP integration already defines the default project) -argument-hint: "[project-key?] [--branch name] [--pr id]" -allowed-tools: Read, Grep, Bash(docker ps:*), Bash(podman ps:*), Bash(nerdctl ps:*), Bash(sonar:*) ---- - -# SonarQube — Dependency Risks - -Search for dependency risks (software composition analysis issues) in a SonarQube project, paired with the releases that appear in the analysed project, application, or portfolio. - -## Usage - -``` -sonar-dependency-risks # risks in the current project -sonar-dependency-risks my-project # risks in a specific project -sonar-dependency-risks my-project --branch feature/auth -sonar-dependency-risks my-project --pr 42 -``` - -## Prerequisites - -This skill requires SonarQube Advanced Security (available on SonarQube Cloud Enterprise plan, or SonarQube Server 2025.4 Enterprise edition or higher), the SonarQube MCP Server to be configured, and the tool `mcp__sonarqube__search_dependency_risks` to be available in your session. - -**Before proceeding**, verify the tool is accessible. If it is not, try the CLI fallback in Step 3 before giving up — don't invent other CLI commands (e.g. `sonar mcp call` or `sonar dependency-risks` do not exist). - -**If the CLI fallback also fails or doesn't apply, narrow down the cause** — check whether the `sonarqube` MCP server is enabled in this agent's configuration. (This only explains missing tools, not the Advanced Security entitlement — see the first cause below.) - -- **Not enabled / not registered** → recommend running the sonar-integrate skill. -- **Enabled but its tools are still unavailable** → configuration is correct but the server failed to start. The most common cause is that the container runtime is not running — the MCP server launches inside Docker/Podman/Nerdctl via `sonar run mcp`, so a correctly configured server still produces no tools if the daemon is stopped. Run `docker ps` yourself (falling back to `podman ps` / `nerdctl ps`) to confirm which cause applies: if it errors, the runtime is down; after the user starts it, confirm the same command succeeds before asking them to restart the agent session. - -Either way, show the user: - -> Unable to fetch dependency risks. -> -> **Possible causes:** -> - This feature requires SonarQube Advanced Security — available on SonarQube Cloud Enterprise edition, or SonarQube Server 2025.4 Enterprise or higher -> - MCP server not registered — invoke the sonar-integrate skill to configure the SonarQube MCP Server, then restart the agent session -> - Container runtime not running — the SonarQube MCP Server runs inside a container (Docker, Podman, or Nerdctl); start your container runtime, then restart the agent session -> - Credentials not configured — invoke the sonar-integrate skill -> - Project key is wrong or no default project in MCP config — pass an explicit key, or verify `sonar-project.properties` / re-run the sonar-integrate skill for this project - -Then ask the user (yes/no) whether to run the sonar-integrate skill now. Briefly explain what it does: it checks the SonarQube setup on their machine — installing or updating `sonarqube-cli` and verifying authentication — and re-configures the integration for this agent, including the SonarQube MCP server and secrets-scanning hooks. If they confirm, invoke the sonar-integrate skill yourself and follow it end-to-end in this session, then ask the user to ensure a container runtime (Docker, Podman, or Nerdctl) is running and to restart the agent session so the new MCP tools become available; if they decline, stop. - -## Instructions - -### Step 1: Resolve the project key (only when needed) - -MCP tools sometimes **do not require** `projectKey` after the sonar-integrate skill has stored the default project for this workspace. Resolve a key only when you must pass it (tool schema requires it, or the user targets another project): - -- If the user provided a project key, use it. -- Otherwise look for `sonar.projectKey` in `sonar-project.properties` at the repo root. -- If still not found, **omit `projectKey`** in MCP calls and rely on the integration default. - -### Step 2: Parse optional flags from the user-provided arguments - -| Flag | Maps to parameter | -| ----------------- | ----------------- | -| `--branch <name>` | `branchKey` | -| `--pr <id>` | `pullRequestKey` | - -### Step 3: Call `mcp__sonarqube__search_dependency_risks` - -Include **`projectKey` only if** you resolved one in Step 1 **and** the tool requires it; otherwise omit it. - -```json -{ - "projectKey": "<only-if-required>", - "branchKey": "<name>", // if --branch was given - "pullRequestKey": "<id>" // if --pr was given -} -``` - -Omit `projectKey` from the payload when the integration default applies. Omit unused optional fields. - -**If `mcp__sonarqube__search_dependency_risks` is unavailable, fall back to the CLI.** This needs an explicit project key — if none was resolved in Step 1, ask the user or invoke sonar-list-projects, then stop. - -Run `sonar auth status` to check the connected server. On a self-hosted **SonarQube Server**: - -```bash -sonar api get "/api/v2/sca/issues-releases?projectKey=<project-key>[&branchKey=<name>][&pullRequestKey=<id>]" -``` - -On **SonarQube Cloud**, `sonar api` can't reach this endpoint yet (lives on a separate subdomain; may change in a future CLI release) — run a fresh scan instead: - -```bash -sonar analyze dependency-risks -p <project-key> --format table -``` - -This re-scans manifests rather than querying prior results, so it may surface issues not yet on the server dashboard — expected, not an error. Map its output into the same table as Step 4. - -If this also fails, show the standard message above — don't guess further commands. - -### Step 4: Format the results - -**If risks are found**, group by severity and present as a table: - -```markdown -## Dependency Risks — `my-project` (branch: `main`) - -Found **5 dependency risk(s)**: - -### Critical -| Dependency | Version | Risk | CVE | -| ---------- | ------- | --------------------- | -------------- | -| log4j-core | 2.14.1 | Remote code execution | CVE-2021-44228 | - -### High -| Dependency | Version | Risk | CVE | -| ---------------- | ------- | ----------------------------- | -------------- | -| jackson-databind | 2.12.3 | Deserialization vulnerability | CVE-2021-46877 | -| commons-text | 1.9 | Remote code execution | CVE-2022-42889 | - -### Medium -| Dependency | Version | Risk | CVE | -| ------------- | ------- | ----------------- | -------------- | -| spring-web | 5.3.18 | DoS vulnerability | CVE-2022-22965 | -| netty-handler | 4.1.68 | SSL/TLS issue | CVE-2021-43797 | -``` - -Omit columns that are not present in the response. Omit severity sections that have no risks. - -**If no risks are found**: - -```markdown -## Dependency Risks — `my-project` - -✅ No dependency risks found. -``` - -### Step 5: Next steps - -- To fix a vulnerable dependency: *"Ask me to update `<dependency>` to a safe version."* -- To check the quality gate: *"Invoke the sonar-quality-gate skill (add a project key only if you are not using the integration default)."* -- To check code-level security issues: *"Invoke the sonar-list-issues skill with the project key (or use `sonar.projectKey` in the repo) with filters as needed — `sonar list issues` always requires `-p`."* +--- +name: sonar-dependency-risks +description: Search for software composition analysis (SCA) dependency risks in a SonarQube project (project key optional when MCP integration already defines the default project) +argument-hint: "[project-key?] [--branch name] [--pr id]" +allowed-tools: Read, Grep, Bash(docker ps:*), Bash(podman ps:*), Bash(nerdctl ps:*), Bash(sonar:*) +--- + +# SonarQube — Dependency Risks + +Search for dependency risks (software composition analysis issues) in a SonarQube project, paired with the releases that appear in the analysed project, application, or portfolio. + +## Usage + +``` +sonar-dependency-risks # risks in the current project +sonar-dependency-risks my-project # risks in a specific project +sonar-dependency-risks my-project --branch feature/auth +sonar-dependency-risks my-project --pr 42 +``` + +## Prerequisites + +This skill requires SonarQube Advanced Security (available on SonarQube Cloud Enterprise plan, or SonarQube Server 2025.4 Enterprise edition or higher), the SonarQube MCP Server to be configured, and the tool `mcp__sonarqube__search_dependency_risks` to be available in your session. + +**Before proceeding**, verify the tool is accessible. If it is not, try the CLI fallback in Step 3 before giving up — don't invent other CLI commands (e.g. `sonar mcp call` or `sonar dependency-risks` do not exist). + +**If the CLI fallback also fails or doesn't apply, narrow down the cause** — check whether the `sonarqube` MCP server is enabled in this agent's configuration. (This only explains missing tools, not the Advanced Security entitlement — see the first cause below.) + +- **Not enabled / not registered** → recommend running the sonar-integrate skill. +- **Enabled but its tools are still unavailable** → configuration is correct but the server failed to start. The most common cause is that the container runtime is not running — the MCP server launches inside Docker/Podman/Nerdctl via `sonar run mcp`, so a correctly configured server still produces no tools if the daemon is stopped. Run `docker ps` yourself (falling back to `podman ps` / `nerdctl ps`) to confirm which cause applies: if it errors, the runtime is down; after the user starts it, confirm the same command succeeds before asking them to restart the agent session. + +Either way, show the user: + +> Unable to fetch dependency risks. +> +> **Possible causes:** +> - This feature requires SonarQube Advanced Security — available on SonarQube Cloud Enterprise edition, or SonarQube Server 2025.4 Enterprise or higher +> - MCP server not registered — invoke the sonar-integrate skill to configure the SonarQube MCP Server, then restart the agent session +> - Container runtime not running — the SonarQube MCP Server runs inside a container (Docker, Podman, or Nerdctl); start your container runtime, then restart the agent session +> - Credentials not configured — invoke the sonar-integrate skill +> - Project key is wrong or no default project in MCP config — pass an explicit key, or verify `sonar-project.properties` / re-run the sonar-integrate skill for this project + +Then ask the user (yes/no) whether to run the sonar-integrate skill now. Briefly explain what it does: it checks the SonarQube setup on their machine — installing or updating `sonarqube-cli` and verifying authentication — and re-configures the integration for this agent, including the SonarQube MCP server and secrets-scanning hooks. If they confirm, invoke the sonar-integrate skill yourself and follow it end-to-end in this session, then ask the user to ensure a container runtime (Docker, Podman, or Nerdctl) is running and to restart the agent session so the new MCP tools become available; if they decline, stop. + +## Instructions + +### Step 1: Resolve the project key (only when needed) + +MCP tools sometimes **do not require** `projectKey` after the sonar-integrate skill has stored the default project for this workspace. Resolve a key only when you must pass it (tool schema requires it, or the user targets another project): + +- If the user provided a project key, use it. +- Otherwise look for `sonar.projectKey` in `sonar-project.properties` at the repo root. +- If still not found, **omit `projectKey`** in MCP calls and rely on the integration default. + +### Step 2: Parse optional flags from the user-provided arguments + +| Flag | Maps to parameter | +| ----------------- | ----------------- | +| `--branch <name>` | `branchKey` | +| `--pr <id>` | `pullRequestKey` | + +### Step 3: Call `mcp__sonarqube__search_dependency_risks` + +Include **`projectKey` only if** you resolved one in Step 1 **and** the tool requires it; otherwise omit it. + +```json +{ + "projectKey": "<only-if-required>", + "branchKey": "<name>", // if --branch was given + "pullRequestKey": "<id>", // if --pr was given + "pageIndex": 1, + "pageSize": 50 +} +``` + +Omit `projectKey` from the payload when the integration default applies. Omit unused optional fields. + +If a page returns 50 results, request the next page with `pageIndex` incremented. Stop when a page contains fewer than 50 results, and combine all pages in the order they were returned. + +**If `mcp__sonarqube__search_dependency_risks` is unavailable, fall back to the CLI.** This needs an explicit project key — if none was resolved in Step 1, ask the user or invoke sonar-list-projects, then stop. + +The same command works on SonarQube Server and SonarQube Cloud — `sonar api` routes the V2 path to the right host: + +```bash +sonar api get "/api/v2/sca/issues-releases?projectKey=<project-key>[&branchKey=<name>][&pullRequestKey=<id>]&pageIndex=1&pageSize=50" +``` + +Paginate the same way as the MCP call, using `page.total` from the response to know when you have every result. Each entry in `issuesReleases` carries the risk `key`, `status`, `severity`, `vulnerabilityId`, and the package under `release`. + +If this also fails, show the standard message above — don't guess further commands. + +### Step 4: Format the results + +**If risks are found**, group by severity and present as a table: + +```markdown +## Dependency Risks — `my-project` (branch: `main`) + +Found **5 dependency risk(s)**: + +### Critical +| Dependency | Version | Risk | CVE | +| ---------- | ------- | --------------------- | -------------- | +| log4j-core | 2.14.1 | Remote code execution | CVE-2021-44228 | + +### High +| Dependency | Version | Risk | CVE | +| ---------------- | ------- | ----------------------------- | -------------- | +| jackson-databind | 2.12.3 | Deserialization vulnerability | CVE-2021-46877 | +| commons-text | 1.9 | Remote code execution | CVE-2022-42889 | + +### Medium +| Dependency | Version | Risk | CVE | +| ------------- | ------- | ----------------- | -------------- | +| spring-web | 5.3.18 | DoS vulnerability | CVE-2022-22965 | +| netty-handler | 4.1.68 | SSL/TLS issue | CVE-2021-43797 | +``` + +Omit columns that are not present in the response. Omit severity sections that have no risks. + +**If no risks are found**: + +```markdown +## Dependency Risks — `my-project` + +✅ No dependency risks found. +``` + +### Step 5: Next steps + +- To fix a vulnerable dependency: *"Ask me to update `<dependency>` to a safe version."* +- To check the quality gate: *"Invoke the sonar-quality-gate skill (add a project key only if you are not using the integration default)."* +- To check code-level security issues: *"Invoke the sonar-list-issues skill with the project key (or use `sonar.projectKey` in the repo) with filters as needed — `sonar list issues` always requires `-p`."*
Full technical diff · 1 changed fields
changed /skill_md_contents
"---\nname: sonar-dependency-risks\ndescription: Search for software composition analysis (SCA) dependency risks in a SonarQube project (project key optional when MCP integration already defines the default project)\nargument-hint: \"[project-key?] [--branch name] [--pr id]\"\nallowed-tools: Read, Grep, Bash(docker ps:*), Bash(podman ps:*), Bash(nerdctl ps:*), Bash(sonar:*)\n---\n\n# SonarQube — Dependency Risks\n\nSearch for dependency risks (software composition analysis issues) in a SonarQube project, paired with the releases that appear in the analysed project, application, or portfolio.\n\n## Usage\n\n```\nsonar-dependency-risks # risks in the current project\nsonar-dependency-risks my-project # risks in a specific project\nsonar-dependency-risks my-project --branch feature/auth\nsonar-dependency-risks my-project --pr 42\n```\n\n## Prerequisites\n\nThis skill requires SonarQube Advanced Security (available on SonarQube Cloud Enterprise plan, or SonarQube Server 2025.4 Enterprise edition or higher), the SonarQube MCP Server to be configured, and the tool `mcp__sonarqube__search_dependency_risks` to be available in your session.\n\n**Before proceeding**, verify the tool is accessible. If it is not, try the CLI fallback in Step 3 before giving up — don't invent other CLI commands (e.g. `sonar mcp call` or `sonar dependency-risks` do not exist).\n\n**If the CLI fallback also fails or doesn't apply, narrow down the cause** — check whether the `sonarqube` MCP server is enabled in this agent's configuration. (This only explains missing tools, not the Advanced Security entitlement — see the first cause below.)\n\n- **Not enabled / not registered** → recommend running the sonar-integrate skill.\n- **Enabled but its tools are still unavailable** → configuration is correct but the server failed to start. The most common cause is that the container runtime is not running — the MCP server launches inside Docker/Podman/Nerdctl via `sonar run mcp`, so a correctly configured server still produces no tools if the daemon is stopped. Run `docker ps` yourself (falling back to `podman ps` / `nerdctl ps`) to confirm which cause applies: if it errors, the runtime is down; after the user starts it, confirm the same command succeeds before asking them to restart the agent session.\n\nEither way, show the user:\n\n> Unable to fetch dependency risks.\n>\n> **Possible causes:**\n> - This feature requires SonarQube Advanced Security — available on SonarQube Cloud Enterprise edition, or SonarQube Server 2025.4 Enterprise or higher\n> - MCP server not registered — invoke the sonar-integrate skill to configure the SonarQube MCP Server, then restart the agent session\n> - Container runtime not running — the SonarQube MCP Server runs inside a container (Docker, Podman, or Nerdctl); start your container runtime, then restart the agent session\n> - Credentials not configured — invoke the sonar-integrate skill\n> - Project key is wrong or no default project in MCP config — pass an explicit key, or verify `sonar-project.properties` / re-run the sonar-integrate skill for this project\n\nThen ask the user (yes/no) whether to run the sonar-integrate skill now. Briefly explain what it does: it checks the SonarQube setup on their machine — installing or updating `sonarqube-cli` and verifying authentication — and re-configures the integration for this agent, including the SonarQube MCP server and secrets-scanning hooks. If they confirm, invoke the sonar-integrate skill yourself and follow it end-to-end in this session, then ask the user to ensure a container runtime (Docker, Podman, or Nerdctl) is running and to restart the agent session so the new MCP tools become available; if they decline, stop.\n\n## Instructions\n\n### Step 1: Resolve the project key (only when needed)\n\nMCP tools sometimes **do not require** `projectKey` after the sonar-integrate skill has stored the default project for this workspace. Resolve a key only when you must pass it (tool schema requires it, or the user targets another project):\n\n- If the user provided a project key, use it.\n- Otherwise look for `sonar.projectKey` in `sonar-project.properties` at the repo root.\n- If still not found, **omit `projectKey`** in MCP calls and rely on the integration default.\n\n### Step 2: Parse optional flags from the user-provided arguments\n\n| Flag | Maps to parameter |\n| ----------------- | ----------------- |\n| `--branch <name>` | `branchKey` |\n| `--pr <id>` | `pullRequestKey` |\n\n### Step 3: Call `mcp__sonarqube__search_dependency_risks`\n\nInclude **`projectKey` only if** you resolved one in Step 1 **and** the tool requires it; otherwise omit it.\n\n```json\n{\n \"projectKey\": \"<only-if-required>\",\n \"branchKey\": \"<name>\", // if --branch was given\n \"pullRequestKey\": \"<id>\" // if --pr was given\n}\n```\n\nOmit `projectKey` from the payload when the integration default applies. Omit unused optional fields.\n\n**If `mcp__sonarqube__search_dependency_risks` is unavailable, fall back to the CLI.** This needs an explicit project key — if none was resolved in Step 1, ask the user or invoke sonar-list-projects, then stop.\n\nRun `sonar auth status` to check the connected server. On a self-hosted **SonarQube Server**:\n\n```bash\nsonar api get \"/api/v2/sca/issues-releases?projectKey=<project-key>[&branchKey=<name>][&pullRequestKey=<id>]\"\n```\n\nOn **SonarQube Cloud**, `sonar api` can't reach this endpoint yet (lives on a separate subdomain; may change in a future CLI release) — run a fresh scan instead:\n\n```bash\nsonar analyze dependency-risks -p <project-key> --format table\n```\n\nThis re-scans manifests rather than querying prior results, so it may surface issues not yet on the server dashboard — expected, not an error. Map its output into the same table as Step 4.\n\nIf this also fails, show the standard message above — don't guess further commands.\n\n### Step 4: Format the results\n\n**If risks are found**, group by severity and present as a table:\n\n```markdown\n## Dependency Risks — `my-project` (branch: `main`)\n\nFound **5 dependency risk(s)**:\n\n### Critical\n| Dependency | Version | Risk | CVE |\n| ---------- | ------- | --------------------- | -------------- |\n| log4j-core | 2.14.1 | Remote code execution | CVE-2021-44228 |\n\n### High\n| Dependency | Version | Risk | CVE |\n| ---------------- | ------- | ----------------------------- | -------------- |\n| jackson-databind | 2.12.3 | Deserialization vulnerability | CVE-2021-46877 |\n| commons-text | 1.9 | Remote code execution | CVE-2022-42889 |\n\n### Medium\n| Dependency | Version | Risk | CVE |\n| ------------- | ------- | ----------------- | -------------- |\n| spring-web | 5.3.18 | DoS vulnerability | CVE-2022-22965 |\n| netty-handler | 4.1.68 | SSL/TLS issue | CVE-2021-43797 |\n```\n\nOmit columns that are not present in the response. Omit severity sections that have no risks.\n\n**If no risks are found**:\n\n```markdown\n## Dependency Risks — `my-project`\n\n✅ No dependency risks found.\n```\n\n### Step 5: Next steps\n\n- To fix a vulnerable dependency: *\"Ask me to update `<dependency>` to a safe version.\"*\n- To check the quality gate: *\"Invoke the sonar-quality-gate skill (add a project key only if you are not using the integration default).\"*\n- To check code-level security issues: *\"Invoke the sonar-list-issues skill with the project key (or use `sonar.projectKey` in the repo) with filters as needed — `sonar list issues` always requires `-p`.\"*\n""---\r\nname: sonar-dependency-risks\r\ndescription: Search for software composition analysis (SCA) dependency risks in a SonarQube project (project key optional when MCP integration already defines the default project)\r\nargument-hint: \"[project-key?] [--branch name] [--pr id]\"\r\nallowed-tools: Read, Grep, Bash(docker ps:*), Bash(podman ps:*), Bash(nerdctl ps:*), Bash(sonar:*)\r\n---\r\n\r\n# SonarQube — Dependency Risks\r\n\r\nSearch for dependency risks (software composition analysis issues) in a SonarQube project, paired with the releases that appear in the analysed project, application, or portfolio.\r\n\r\n## Usage\r\n\r\n```\r\nsonar-dependency-risks # risks in the current project\r\nsonar-dependency-risks my-project # risks in a specific project\r\nsonar-dependency-risks my-project --branch feature/auth\r\nsonar-dependency-risks my-project --pr 42\r\n```\r\n\r\n## Prerequisites\r\n\r\nThis skill requires SonarQube Advanced Security (available on SonarQube Cloud Enterprise plan, or SonarQube Server 2025.4 Enterprise edition or higher), the SonarQube MCP Server to be configured, and the tool `mcp__sonarqube__search_dependency_risks` to be available in your session.\r\n\r\n**Before proceeding**, verify the tool is accessible. If it is not, try the CLI fallback in Step 3 before giving up — don't invent other CLI commands (e.g. `sonar mcp call` or `sonar dependency-risks` do not exist).\r\n\r\n**If the CLI fallback also fails or doesn't apply, narrow down the cause** — check whether the `sonarqube` MCP server is enabled in this agent's configuration. (This only explains missing tools, not the Advanced Security entitlement — see the first cause below.)\r\n\r\n- **Not enabled / not registered** → recommend running the sonar-integrate skill.\r\n- **Enabled but its tools are still unavailable** → configuration is correct but the server failed to start. The most common cause is that the container runtime is not running — the MCP server launches inside Docker/Podman/Nerdctl via `sonar run mcp`, so a correctly configured server still produces no tools if the daemon is stopped. Run `docker ps` yourself (falling back to `podman ps` / `nerdctl ps`) to confirm which cause applies: if it errors, the runtime is down; after the user starts it, confirm the same command succeeds before asking them to restart the agent session.\r\n\r\nEither way, show the user:\r\n\r\n> Unable to fetch dependency risks.\r\n>\r\n> **Possible causes:**\r\n> - This feature requires SonarQube Advanced Security — available on SonarQube Cloud Enterprise edition, or SonarQube Server 2025.4 Enterprise or higher\r\n> - MCP server not registered — invoke the sonar-integrate skill to configure the SonarQube MCP Server, then restart the agent session\r\n> - Container runtime not running — the SonarQube MCP Server runs inside a container (Docker, Podman, or Nerdctl); start your container runtime, then restart the agent session\r\n> - Credentials not configured — invoke the sonar-integrate skill\r\n> - Project key is wrong or no default project in MCP config — pass an explicit key, or verify `sonar-project.properties` / re-run the sonar-integrate skill for this project\r\n\r\nThen ask the user (yes/no) whether to run the sonar-integrate skill now. Briefly explain what it does: it checks the SonarQube setup on their machine — installing or updating `sonarqube-cli` and verifying authentication — and re-configures the integration for this agent, including the SonarQube MCP server and secrets-scanning hooks. If they confirm, invoke the sonar-integrate skill yourself and follow it end-to-end in this session, then ask the user to ensure a container runtime (Docker, Podman, or Nerdctl) is running and to restart the agent session so the new MCP tools become available; if they decline, stop.\r\n\r\n## Instructions\r\n\r\n### Step 1: Resolve the project key (only when needed)\r\n\r\nMCP tools sometimes **do not require** `projectKey` after the sonar-integrate skill has stored the default project for this workspace. Resolve a key only when you must pass it (tool schema requires it, or the user targets another project):\r\n\r\n- If the user provided a project key, use it.\r\n- Otherwise look for `sonar.projectKey` in `sonar-project.properties` at the repo root.\r\n- If still not found, **omit `projectKey`** in MCP calls and rely on the integration default.\r\n\r\n### Step 2: Parse optional flags from the user-provided arguments\r\n\r\n| Flag | Maps to parameter |\r\n| ----------------- | ----------------- |\r\n| `--branch <name>` | `branchKey` |\r\n| `--pr <id>` | `pullRequestKey` |\r\n\r\n### Step 3: Call `mcp__sonarqube__search_dependency_risks`\r\n\r\nInclude **`projectKey` only if** you resolved one in Step 1 **and** the tool requires it; otherwise omit it.\r\n\r\n```json\r\n{\r\n \"projectKey\": \"<only-if-required>\",\r\n \"branchKey\": \"<name>\", // if --branch was given\r\n \"pullRequestKey\": \"<id>\", // if --pr was given\r\n \"pageIndex\": 1,\r\n \"pageSize\": 50\r\n}\r\n```\r\n\r\nOmit `projectKey` from the payload when the integration default applies. Omit unused optional fields.\r\n\r\nIf a page returns 50 results, request the next page with `pageIndex` incremented. Stop when a page contains fewer than 50 results, and combine all pages in the order they were returned.\r\n\r\n**If `mcp__sonarqube__search_dependency_risks` is unavailable, fall back to the CLI.** This needs an explicit project key — if none was resolved in Step 1, ask the user or invoke sonar-list-projects, then stop.\r\n\r\nThe same command works on SonarQube Server and SonarQube Cloud — `sonar api` routes the V2 path to the right host:\r\n\r\n```bash\r\nsonar api get \"/api/v2/sca/issues-releases?projectKey=<project-key>[&branchKey=<name>][&pullRequestKey=<id>]&pageIndex=1&pageSize=50\"\r\n```\r\n\r\nPaginate the same way as the MCP call, using `page.total` from the response to know when you have every result. Each entry in `issuesReleases` carries the risk `key`, `status`, `severity`, `vulnerabilityId`, and the package under `release`.\r\n\r\nIf this also fails, show the standard message above — don't guess further commands.\r\n\r\n### Step 4: Format the results\r\n\r\n**If risks are found**, group by severity and present as a table:\r\n\r\n```markdown\r\n## Dependency Risks — `my-project` (branch: `main`)\r\n\r\nFound **5 dependency risk(s)**:\r\n\r\n### Critical\r\n| Dependency | Version | Risk | CVE |\r\n| ---------- | ------- | --------------------- | -------------- |\r\n| log4j-core | 2.14.1 | Remote code execution | CVE-2021-44228 |\r\n\r\n### High\r\n| Dependency | Version | Risk | CVE |\r\n| ---------------- | ------- | ----------------------------- | -------------- |\r\n| jackson-databind | 2.12.3 | Deserialization vulnerability | CVE-2021-46877 |\r\n| commons-text | 1.9 | Remote code execution | CVE-2022-42889 |\r\n\r\n### Medium\r\n| Dependency | Version | Risk | CVE |\r\n| ------------- | ------- | ----------------- | -------------- |\r\n| spring-web | 5.3.18 | DoS vulnerability | CVE-2022-22965 |\r\n| netty-handler | 4.1.68 | SSL/TLS issue | CVE-2021-43797 |\r\n```\r\n\r\nOmit columns that are not present in the response. Omit severity sections that have no risks.\r\n\r\n**If no risks are found**:\r\n\r\n```markdown\r\n## Dependency Risks — `my-project`\r\n\r\n✅ No dependency risks found.\r\n```\r\n\r\n### Step 5: Next steps\r\n\r\n- To fix a vulnerable dependency: *\"Ask me to update `<dependency>` to a safe version.\"*\r\n- To check the quality gate: *\"Invoke the sonar-quality-gate skill (add a project key only if you are not using the integration default).\"*\r\n- To check code-level security issues: *\"Invoke the sonar-list-issues skill with the project key (or use `sonar.projectKey` in the repo) with filters as needed — `sonar list issues` always requires `-p`.\"*\r\n"Full snapshot data
{
"description": "Search for software composition analysis (SCA) dependency risks in a SonarQube project (project key optional when MCP integration already defines the default project)",
"included_files": [],
"name": "sonar-dependency-risks",
"skill_md_contents": "---\r\nname: sonar-dependency-risks\r\ndescription: Search for software composition analysis (SCA) dependency risks in a SonarQube project (project key optional when MCP integration already defines the default project)\r\nargument-hint: \"[project-key?] [--branch name] [--pr id]\"\r\nallowed-tools: Read, Grep, Bash(docker ps:*), Bash(podman ps:*), Bash(nerdctl ps:*), Bash(sonar:*)\r\n---\r\n\r\n# SonarQube — Dependency Risks\r\n\r\nSearch for dependency risks (software composition analysis issues) in a SonarQube project, paired with the releases that appear in the analysed project, application, or portfolio.\r\n\r\n## Usage\r\n\r\n```\r\nsonar-dependency-risks # risks in the current project\r\nsonar-dependency-risks my-project # risks in a specific project\r\nsonar-dependency-risks my-project --branch feature/auth\r\nsonar-dependency-risks my-project --pr 42\r\n```\r\n\r\n## Prerequisites\r\n\r\nThis skill requires SonarQube Advanced Security (available on SonarQube Cloud Enterprise plan, or SonarQube Server 2025.4 Enterprise edition or higher), the SonarQube MCP Server to be configured, and the tool `mcp__sonarqube__search_dependency_risks` to be available in your session.\r\n\r\n**Before proceeding**, verify the tool is accessible. If it is not, try the CLI fallback in Step 3 before giving up — don't invent other CLI commands (e.g. `sonar mcp call` or `sonar dependency-risks` do not exist).\r\n\r\n**If the CLI fallback also fails or doesn't apply, narrow down the cause** — check whether the `sonarqube` MCP server is enabled in this agent's configuration. (This only explains missing tools, not the Advanced Security entitlement — see the first cause below.)\r\n\r\n- **Not enabled / not registered** → recommend running the sonar-integrate skill.\r\n- **Enabled but its tools are still unavailable** → configuration is correct but the server failed to start. The most common cause is that the container runtime is not running — the MCP server launches inside Docker/Podman/Nerdctl via `sonar run mcp`, so a correctly configured server still produces no tools if the daemon is stopped. Run `docker ps` yourself (falling back to `podman ps` / `nerdctl ps`) to confirm which cause applies: if it errors, the runtime is down; after the user starts it, confirm the same command succeeds before asking them to restart the agent session.\r\n\r\nEither way, show the user:\r\n\r\n> Unable to fetch dependency risks.\r\n>\r\n> **Possible causes:**\r\n> - This feature requires SonarQube Advanced Security — available on SonarQube Cloud Enterprise edition, or SonarQube Server 2025.4 Enterprise or higher\r\n> - MCP server not registered — invoke the sonar-integrate skill to configure the SonarQube MCP Server, then restart the agent session\r\n> - Container runtime not running — the SonarQube MCP Server runs inside a container (Docker, Podman, or Nerdctl); start your container runtime, then restart the agent session\r\n> - Credentials not configured — invoke the sonar-integrate skill\r\n> - Project key is wrong or no default project in MCP config — pass an explicit key, or verify `sonar-project.properties` / re-run the sonar-integrate skill for this project\r\n\r\nThen ask the user (yes/no) whether to run the sonar-integrate skill now. Briefly explain what it does: it checks the SonarQube setup on their machine — installing or updating `sonarqube-cli` and verifying authentication — and re-configures the integration for this agent, including the SonarQube MCP server and secrets-scanning hooks. If they confirm, invoke the sonar-integrate skill yourself and follow it end-to-end in this session, then ask the user to ensure a container runtime (Docker, Podman, or Nerdctl) is running and to restart the agent session so the new MCP tools become available; if they decline, stop.\r\n\r\n## Instructions\r\n\r\n### Step 1: Resolve the project key (only when needed)\r\n\r\nMCP tools sometimes **do not require** `projectKey` after the sonar-integrate skill has stored the default project for this workspace. Resolve a key only when you must pass it (tool schema requires it, or the user targets another project):\r\n\r\n- If the user provided a project key, use it.\r\n- Otherwise look for `sonar.projectKey` in `sonar-project.properties` at the repo root.\r\n- If still not found, **omit `projectKey`** in MCP calls and rely on the integration default.\r\n\r\n### Step 2: Parse optional flags from the user-provided arguments\r\n\r\n| Flag | Maps to parameter |\r\n| ----------------- | ----------------- |\r\n| `--branch <name>` | `branchKey` |\r\n| `--pr <id>` | `pullRequestKey` |\r\n\r\n### Step 3: Call `mcp__sonarqube__search_dependency_risks`\r\n\r\nInclude **`projectKey` only if** you resolved one in Step 1 **and** the tool requires it; otherwise omit it.\r\n\r\n```json\r\n{\r\n \"projectKey\": \"<only-if-required>\",\r\n \"branchKey\": \"<name>\", // if --branch was given\r\n \"pullRequestKey\": \"<id>\", // if --pr was given\r\n \"pageIndex\": 1,\r\n \"pageSize\": 50\r\n}\r\n```\r\n\r\nOmit `projectKey` from the payload when the integration default applies. Omit unused optional fields.\r\n\r\nIf a page returns 50 results, request the next page with `pageIndex` incremented. Stop when a page contains fewer than 50 results, and combine all pages in the order they were returned.\r\n\r\n**If `mcp__sonarqube__search_dependency_risks` is unavailable, fall back to the CLI.** This needs an explicit project key — if none was resolved in Step 1, ask the user or invoke sonar-list-projects, then stop.\r\n\r\nThe same command works on SonarQube Server and SonarQube Cloud — `sonar api` routes the V2 path to the right host:\r\n\r\n```bash\r\nsonar api get \"/api/v2/sca/issues-releases?projectKey=<project-key>[&branchKey=<name>][&pullRequestKey=<id>]&pageIndex=1&pageSize=50\"\r\n```\r\n\r\nPaginate the same way as the MCP call, using `page.total` from the response to know when you have every result. Each entry in `issuesReleases` carries the risk `key`, `status`, `severity`, `vulnerabilityId`, and the package under `release`.\r\n\r\nIf this also fails, show the standard message above — don't guess further commands.\r\n\r\n### Step 4: Format the results\r\n\r\n**If risks are found**, group by severity and present as a table:\r\n\r\n```markdown\r\n## Dependency Risks — `my-project` (branch: `main`)\r\n\r\nFound **5 dependency risk(s)**:\r\n\r\n### Critical\r\n| Dependency | Version | Risk | CVE |\r\n| ---------- | ------- | --------------------- | -------------- |\r\n| log4j-core | 2.14.1 | Remote code execution | CVE-2021-44228 |\r\n\r\n### High\r\n| Dependency | Version | Risk | CVE |\r\n| ---------------- | ------- | ----------------------------- | -------------- |\r\n| jackson-databind | 2.12.3 | Deserialization vulnerability | CVE-2021-46877 |\r\n| commons-text | 1.9 | Remote code execution | CVE-2022-42889 |\r\n\r\n### Medium\r\n| Dependency | Version | Risk | CVE |\r\n| ------------- | ------- | ----------------- | -------------- |\r\n| spring-web | 5.3.18 | DoS vulnerability | CVE-2022-22965 |\r\n| netty-handler | 4.1.68 | SSL/TLS issue | CVE-2021-43797 |\r\n```\r\n\r\nOmit columns that are not present in the response. Omit severity sections that have no risks.\r\n\r\n**If no risks are found**:\r\n\r\n```markdown\r\n## Dependency Risks — `my-project`\r\n\r\n✅ No dependency risks found.\r\n```\r\n\r\n### Step 5: Next steps\r\n\r\n- To fix a vulnerable dependency: *\"Ask me to update `<dependency>` to a safe version.\"*\r\n- To check the quality gate: *\"Invoke the sonar-quality-gate skill (add a project key only if you are not using the integration default).\"*\r\n- To check code-level security issues: *\"Invoke the sonar-list-issues skill with the project key (or use `sonar.projectKey` in the repo) with filters as needed — `sonar list issues` always requires `-p`.\"*\r\n"
}SHA-256 of public snapshot: 3491cff02e1a4e5e06f7f55d200f180347b3e9b75888ab601beaf8ff273ea0ab