MCP Server (Experimental)
|
This feature is experimental and may change or be removed in future releases. |
The MCP server lets AI assistants interact with SUSE Security Vulnerability Scanner, enabling them to query vulnerability data and manage scanning resources conversationally. Any client that supports the MCP protocol can connect.
This guide covers:
-
Enabling and configuring the MCP server
-
Connecting from different AI clients
-
Available tools for reading and writing SUSE Security Vulnerability Scanner resources
-
Example prompts for common workflows
-
Read-only mode, rate limiting, and TLS configuration
Prerequisites
-
A Kubernetes cluster with SUSE Security Vulnerability Scanner installed, or a fresh cluster where SUSE Security Vulnerability Scanner will be installed alongside the MCP server
-
cert-manager installed (for TLS, unless disabled with
mcp.disableTLS=true) -
An MCP-compatible client
1. Authentication
The MCP server currently supports Basic Auth. OAuth and Rancher authentication are planned for future releases.
Basic Auth credentials are stored in a Kubernetes Secret with username and password keys. The server expects an Authorization: Basic <base64(username:password)> header on every request. TLS is enabled by default to protect credentials in transit.
2. Enable the MCP Server
Create a credentials Secret
Create a Secret with username and password keys:
apiVersion: v1
kind: Secret
metadata:
name: sbomscanner-mcp-auth
namespace: sbomscanner
type: Opaque
stringData:
username: mcp-user
password: changeme
Apply it:
kubectl apply -f mcp-auth-secret.yaml
3. Configuration
All MCP-related Helm values are under the mcp key:
| Value | Default | Description |
|---|---|---|
|
|
Enable the MCP server deployment |
|
|
Restrict to read-only tools (no create/update/delete) |
|
|
Disable TLS (serve plain HTTP) |
|
|
Log level ( |
|
|
Number of MCP server replicas |
|
|
Name of the Secret containing |
|
|
CPU limit |
|
|
Memory limit |
|
|
CPU request |
|
|
Memory request |
Example values.yaml snippet:
mcp:
enabled: true
readOnly: false
disableTLS: false
logLevel: "info"
replicas: 1
auth:
secretName: sbomscanner-mcp-auth
4. Connecting a Client
The MCP server uses Streamable HTTP transport with Basic Auth. Any MCP-compatible client can connect. Below are instructions for common clients.
Port-forwarding
To reach the MCP server from your local machine, forward the in-cluster Service:
kubectl port-forward -n sbomscanner svc/sbomscanner-mcp 8222:8222
The MCP endpoint is then available at https://localhost:8222/mcp (or http://localhost:8222/mcp if TLS is disabled).
|
For production use, expose the MCP server through an Ingress or LoadBalancer instead of port-forwarding. |
Claude Code
Create a .mcp.json file in your project root (or ~/.claude/.mcp.json for global configuration):
{
"mcpServers": {
"sbomscanner": {
"type": "http",
"url": "http://localhost:8222/mcp",
"headers": {
"Authorization": "Basic BASE64_CREDENTIALS"
}
}
}
}
|
Generate the base64 credentials with:
|
Claude Desktop
Open Settings > Developer > Edit Config and add to claude_desktop_config.json:
{
"mcpServers": {
"sbomscanner": {
"type": "http",
"url": "http://localhost:8222/mcp",
"headers": {
"Authorization": "Basic BASE64_CREDENTIALS"
}
}
}
}
GitHub Copilot (VS Code)
Add to .vscode/mcp.json in your project or to your VS Code user settings:
{
"servers": {
"sbomscanner": {
"type": "http",
"url": "http://localhost:8222/mcp",
"headers": {
"Authorization": "Basic BASE64_CREDENTIALS"
}
}
}
}
Liz (Rancher AI Agent)
Liz is the AI assistant built into Rancher Prime. It connects to the MCP server in-cluster, so no port-forwarding is needed.
|
Liz does not currently support TLS for external MCP connections. The MCP server must be deployed with |
-
Deploy the MCP server with TLS disabled:
helm upgrade --install sbomscanner sbomscanner/sbomscanner \ --namespace sbomscanner \ --set mcp.enabled=true \ --set mcp.disableTLS=true \ --set mcp.auth.secretName=sbomscanner-mcp-auth -
Create the auth Secret in the Liz namespace:
Liz needs a copy of the MCP credentials in its own namespace:
apiVersion: v1 kind: Secret metadata: name: sbomscanner-mcp-auth namespace: cattle-ai-agent-system type: Opaque stringData: username: mcp-user password: changeme -
Apply the AIAgentConfig resource:
Replace
<namespace>with the namespace where SUSE Security Vulnerability Scanner is installed:apiVersion: ai.cattle.io/v1alpha1 kind: AIAgentConfig metadata: name: sbomscanner namespace: cattle-ai-agent-system spec: authenticationType: BASIC authenticationSecret: sbomscanner-mcp-auth builtIn: false displayName: SBOMscanner enabled: true mcpURL: http://sbomscanner-mcp.<namespace>.svc.cluster.local:8222 description: | SBOMscanner security agent for container image vulnerability management. Example prompts: - "List all registries being scanned" - "Show me the latest vulnerability reports" - "What CVEs affect image library/nginx:1.27.1?" - "Create a scan job for registry X" - "Show vulnerability summary for my images" systemPrompt: | You are the SBOMscanner security agent. You help users manage container image security by interacting with SBOMscanner resources in the cluster. You can: - List and inspect container image registries - Trigger and monitor scan jobs - Query vulnerability reports for container images - View workload scan reports - Manage VEX hubs for vulnerability enrichment Key concepts: - A Registry defines which container images to scan, with optional CEL-based tag filters - A ScanJob triggers scanning of images in a registry (Scheduled -> InProgress -> Complete/Failed) - A VulnerabilityReport lists known CVEs affecting an image - A WorkloadScanReport aggregates vulnerability data at the workload (Deployment, StatefulSet, etc.) level - A VEXHub is a repository of VEX documents used to enrich vulnerability data IMPORTANT - Tool selection rules: - ALWAYS use get_image_vulnerability_summary when a user asks to list, show, or view vulnerabilities for an image. - ALWAYS use get_workload_vulnerability_summary when a user asks to list, show, or view vulnerabilities for a workload. - NEVER use get_image_vulnerabilities or get_workload_vulnerabilities for listing vulnerabilities. Their responses are too large and will fail to render. Only use them if the user explicitly asks for raw or full CVE data. - When in doubt, default to the summary tools. Security posture and overview questions: - list_images and list_workloads both return vulnerability severity counts and a total for each item. - When a user asks about security posture, call list_workloads or list_images and present results sorted by total vulnerability count in a markdown table. Workflow: - Use list_images to browse scanned images with vulnerability counts - Use get_image_vulnerability_summary with name and namespace from list_images - Use list_workloads to browse scanned workloads with vulnerability counts - Use get_workload_vulnerability_summary with name and namespace from list_workloads
5. Available Tools
The MCP server exposes tools that let AI assistants interact with SUSE Security Vulnerability Scanner resources.
Read tools
| Tool | Description |
|---|---|
|
List Registry resources with their URI, catalog type, and repository filters |
|
Get a specific Registry by name and namespace |
|
List ScanJob resources with status conditions and progress counters |
|
Get a specific ScanJob by name and namespace |
|
Get the cluster-scoped WorkloadScanConfiguration |
|
List VEXHub resources (cluster-scoped) |
|
Get a specific VEXHub by name |
|
List scanned images with vulnerability severity counts |
|
Get severity counts and top 10 CVEs for an image |
|
Get the complete CVE list for an image (large response) |
|
List scanned workloads with vulnerability severity counts |
|
Get per-container severity counts and top 10 CVEs for a workload |
|
Get the complete CVE list for all containers in a workload (large response) |
|
Prefer the |
Write tools
| Tool | Description |
|---|---|
|
Create a new Registry with URI, catalog type, and optional repository filters |
|
Update an existing Registry (partial updates supported) |
|
Delete a Registry (scan results are preserved) |
|
Create a ScanJob to trigger scanning of images in a Registry |
|
Delete a ScanJob (scan results are preserved) |
|
Create a new VEXHub for vulnerability enrichment |
|
Update an existing VEXHub |
|
Delete a VEXHub (existing VEX annotations are preserved) |
For details on the resources these tools manage, see Scanning Registries, Scanning Workloads, and VEX.
6. Example Prompts
Once connected, you can interact with SUSE Security Vulnerability Scanner using natural language. Below are example prompts organized by workflow.
Registry scanning workflow
-
"Create a registry for
ghcr.iothat scans themy-org/my-apprepository. Use NoCatalog since it does not expose the catalog endpoint." -
"Update the registry to scan only NGINX images with tags greater than 1.25.0."
-
"Trigger a scan for registry my-registry."
-
"How is the scan going?"
-
"List the vulnerable images in the default namespace."
-
"Show the vulnerabilities found in the NGINX image tagged 1.27.1."
Workload security posture
-
"Display the configuration of the workload scan feature."
-
"Is workload scanning enabled in the test namespace?"
-
"Provide an overview of the cluster’s security posture."
-
"List the vulnerable workloads."
-
"Show the vulnerabilities found in the containers of the nginx deployment in the test namespace."
7. Read-Only Mode
Read-only mode restricts the MCP server to read tools only. All write tools (create_*, update_*, delete_*) are disabled, and the server’s RBAC permissions are scoped down accordingly.
Enable it with:
helm upgrade sbomscanner sbomscanner/sbomscanner \
--namespace sbomscanner \
--set mcp.readOnly=true
Use read-only mode when you want AI assistants to query vulnerability data without being able to modify SUSE Security Vulnerability Scanner resources.
8. Rate Limiting
The MCP server enforces a rate limit of 10 requests per second with a burst allowance of 50 requests. Normal conversational usage will not hit this limit.
9. TLS Configuration
By default, the MCP server serves over TLS using a self-signed certificate issued by cert-manager. This ensures credentials are encrypted in transit.
To disable TLS (for development, or when TLS is terminated externally by an Ingress controller or service mesh):
helm upgrade sbomscanner sbomscanner/sbomscanner \
--namespace sbomscanner \
--set mcp.disableTLS=true
|
Disabling TLS means Basic Auth credentials are sent in plaintext. Only disable TLS in trusted network environments or when TLS termination is handled externally. |